comparison src/skins/ui_skinned_number.c @ 2888:7c7471554d88

convert some widgets into windowless ones
author Tomasz Mon <desowin@gmail.com>
date Tue, 12 Aug 2008 15:50:01 +0200
parents 5ae914e1b78c
children 963796db51ea
comparison
equal deleted inserted replaced
2887:3fce72e687dd 2888:7c7471554d88
41 41
42 static void ui_skinned_number_class_init (UiSkinnedNumberClass *klass); 42 static void ui_skinned_number_class_init (UiSkinnedNumberClass *klass);
43 static void ui_skinned_number_init (UiSkinnedNumber *number); 43 static void ui_skinned_number_init (UiSkinnedNumber *number);
44 static void ui_skinned_number_destroy (GtkObject *object); 44 static void ui_skinned_number_destroy (GtkObject *object);
45 static void ui_skinned_number_realize (GtkWidget *widget); 45 static void ui_skinned_number_realize (GtkWidget *widget);
46 static void ui_skinned_number_unrealize (GtkWidget *widget);
47 static void ui_skinned_number_map (GtkWidget *widget);
48 static void ui_skinned_number_unmap (GtkWidget *widget);
46 static void ui_skinned_number_size_request (GtkWidget *widget, GtkRequisition *requisition); 49 static void ui_skinned_number_size_request (GtkWidget *widget, GtkRequisition *requisition);
47 static void ui_skinned_number_size_allocate (GtkWidget *widget, GtkAllocation *allocation); 50 static void ui_skinned_number_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
48 static gboolean ui_skinned_number_expose (GtkWidget *widget, GdkEventExpose *event); 51 static gboolean ui_skinned_number_expose (GtkWidget *widget, GdkEventExpose *event);
49 static void ui_skinned_number_toggle_scaled (UiSkinnedNumber *number); 52 static void ui_skinned_number_toggle_scaled (UiSkinnedNumber *number);
50 53
80 parent_class = gtk_type_class (gtk_widget_get_type ()); 83 parent_class = gtk_type_class (gtk_widget_get_type ());
81 84
82 object_class->destroy = ui_skinned_number_destroy; 85 object_class->destroy = ui_skinned_number_destroy;
83 86
84 widget_class->realize = ui_skinned_number_realize; 87 widget_class->realize = ui_skinned_number_realize;
88 widget_class->unrealize = ui_skinned_number_unrealize;
89 widget_class->map = ui_skinned_number_map;
90 widget_class->unmap = ui_skinned_number_unmap;
85 widget_class->expose_event = ui_skinned_number_expose; 91 widget_class->expose_event = ui_skinned_number_expose;
86 widget_class->size_request = ui_skinned_number_size_request; 92 widget_class->size_request = ui_skinned_number_size_request;
87 widget_class->size_allocate = ui_skinned_number_size_allocate; 93 widget_class->size_allocate = ui_skinned_number_size_allocate;
88 94
89 klass->scaled = ui_skinned_number_toggle_scaled; 95 klass->scaled = ui_skinned_number_toggle_scaled;
95 } 101 }
96 102
97 static void ui_skinned_number_init(UiSkinnedNumber *number) { 103 static void ui_skinned_number_init(UiSkinnedNumber *number) {
98 number->width = 9; 104 number->width = 9;
99 number->height = 13; 105 number->height = 13;
106
107 number->event_window = NULL;
108 GTK_WIDGET_SET_FLAGS(number, GTK_NO_WINDOW);
100 } 109 }
101 110
102 GtkWidget* ui_skinned_number_new(GtkWidget *fixed, gint x, gint y, SkinPixmapId si) { 111 GtkWidget* ui_skinned_number_new(GtkWidget *fixed, gint x, gint y, SkinPixmapId si) {
103 UiSkinnedNumber *number = g_object_new (ui_skinned_number_get_type (), NULL); 112 UiSkinnedNumber *number = g_object_new (ui_skinned_number_get_type (), NULL);
104 113
132 gint attributes_mask; 141 gint attributes_mask;
133 142
134 g_return_if_fail (widget != NULL); 143 g_return_if_fail (widget != NULL);
135 g_return_if_fail (UI_SKINNED_IS_NUMBER(widget)); 144 g_return_if_fail (UI_SKINNED_IS_NUMBER(widget));
136 145
137 GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED); 146 if (GTK_WIDGET_CLASS (parent_class)->realize)
147 (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
138 number = UI_SKINNED_NUMBER(widget); 148 number = UI_SKINNED_NUMBER(widget);
139 149
140 attributes.x = widget->allocation.x; 150 attributes.x = widget->allocation.x;
141 attributes.y = widget->allocation.y; 151 attributes.y = widget->allocation.y;
142 attributes.width = widget->allocation.width; 152 attributes.width = widget->allocation.width;
143 attributes.height = widget->allocation.height; 153 attributes.height = widget->allocation.height;
144 attributes.wclass = GDK_INPUT_OUTPUT; 154 attributes.wclass = GDK_INPUT_ONLY;
145 attributes.window_type = GDK_WINDOW_CHILD; 155 attributes.window_type = GDK_WINDOW_CHILD;
146 attributes.event_mask = gtk_widget_get_events(widget); 156 attributes.event_mask = gtk_widget_get_events(widget);
147 attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK; 157 attributes.event_mask |= GDK_BUTTON_PRESS_MASK;
148 attributes.visual = gtk_widget_get_visual(widget); 158
149 attributes.colormap = gtk_widget_get_colormap(widget); 159 attributes_mask = GDK_WA_X | GDK_WA_Y;
150 160 number->event_window = gdk_window_new (widget->window, &attributes, attributes_mask);
151 attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; 161
152 widget->window = gdk_window_new(widget->parent->window, &attributes, attributes_mask); 162 gdk_window_set_user_data(number->event_window, widget);
153 163 }
154 widget->style = gtk_style_attach(widget->style, widget->window); 164
155 165 static void ui_skinned_number_unrealize(GtkWidget *widget) {
156 gdk_window_set_user_data(widget->window, widget); 166 UiSkinnedNumber *number = UI_SKINNED_NUMBER(widget);
167
168 if ( number->event_window != NULL )
169 {
170 gdk_window_set_user_data( number->event_window , NULL );
171 gdk_window_destroy( number->event_window );
172 number->event_window = NULL;
173 }
174
175 if (GTK_WIDGET_CLASS (parent_class)->unrealize)
176 (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
177 }
178
179 static void ui_skinned_number_map (GtkWidget *widget)
180 {
181 UiSkinnedNumber *number = UI_SKINNED_NUMBER (widget);
182
183 if (number->event_window != NULL)
184 gdk_window_show (number->event_window);
185
186 if (GTK_WIDGET_CLASS (parent_class)->map)
187 (* GTK_WIDGET_CLASS (parent_class)->map) (widget);
188 }
189
190 static void ui_skinned_number_unmap (GtkWidget *widget)
191 {
192 UiSkinnedNumber *number = UI_SKINNED_NUMBER (widget);
193
194 if (number->event_window != NULL)
195 gdk_window_hide (number->event_window);
196
197 if (GTK_WIDGET_CLASS (parent_class)->unmap)
198 (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
157 } 199 }
158 200
159 static void ui_skinned_number_size_request(GtkWidget *widget, GtkRequisition *requisition) { 201 static void ui_skinned_number_size_request(GtkWidget *widget, GtkRequisition *requisition) {
160 UiSkinnedNumber *number = UI_SKINNED_NUMBER(widget); 202 UiSkinnedNumber *number = UI_SKINNED_NUMBER(widget);
161 203
168 210
169 widget->allocation = *allocation; 211 widget->allocation = *allocation;
170 widget->allocation.x *= (number->scaled ? config.scale_factor: 1 ); 212 widget->allocation.x *= (number->scaled ? config.scale_factor: 1 );
171 widget->allocation.y *= (number->scaled ? config.scale_factor: 1 ); 213 widget->allocation.y *= (number->scaled ? config.scale_factor: 1 );
172 if (GTK_WIDGET_REALIZED (widget)) 214 if (GTK_WIDGET_REALIZED (widget))
173 gdk_window_move_resize(widget->window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height); 215 if (number->event_window)
216 gdk_window_move_resize(number->event_window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
174 217
175 number->x = widget->allocation.x/(number->scaled ? config.scale_factor : 1); 218 number->x = widget->allocation.x/(number->scaled ? config.scale_factor : 1);
176 number->y = widget->allocation.y/(number->scaled ? config.scale_factor : 1); 219 number->y = widget->allocation.y/(number->scaled ? config.scale_factor : 1);
177 } 220 }
178 221
192 235
193 skin_draw_pixbuf(widget, aud_active_skin, obj, 236 skin_draw_pixbuf(widget, aud_active_skin, obj,
194 number->skin_index, number->num * 9, 0, 237 number->skin_index, number->num * 9, 0,
195 0, 0, number->width, number->height); 238 0, 0, number->width, number->height);
196 239
197 ui_skinned_widget_draw(widget, obj, number->width, number->height, number->scaled); 240 ui_skinned_widget_draw_with_coordinates(widget, obj, number->width, number->height,
241 widget->allocation.x,
242 widget->allocation.y,
243 number->scaled);
198 244
199 g_object_unref(obj); 245 g_object_unref(obj);
200 246
201 return FALSE; 247 return FALSE;
202 } 248 }