comparison src/skins/ui_skinned_menurow.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 3134a0987162
comparison
equal deleted inserted replaced
2887:3fce72e687dd 2888:7c7471554d88
37 37
38 static void ui_skinned_menurow_class_init (UiSkinnedMenurowClass *klass); 38 static void ui_skinned_menurow_class_init (UiSkinnedMenurowClass *klass);
39 static void ui_skinned_menurow_init (UiSkinnedMenurow *menurow); 39 static void ui_skinned_menurow_init (UiSkinnedMenurow *menurow);
40 static void ui_skinned_menurow_destroy (GtkObject *object); 40 static void ui_skinned_menurow_destroy (GtkObject *object);
41 static void ui_skinned_menurow_realize (GtkWidget *widget); 41 static void ui_skinned_menurow_realize (GtkWidget *widget);
42 static void ui_skinned_menurow_unrealize (GtkWidget *widget);
43 static void ui_skinned_menurow_map (GtkWidget *widget);
44 static void ui_skinned_menurow_unmap (GtkWidget *widget);
42 static void ui_skinned_menurow_size_request (GtkWidget *widget, GtkRequisition *requisition); 45 static void ui_skinned_menurow_size_request (GtkWidget *widget, GtkRequisition *requisition);
43 static void ui_skinned_menurow_size_allocate (GtkWidget *widget, GtkAllocation *allocation); 46 static void ui_skinned_menurow_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
44 static gboolean ui_skinned_menurow_expose (GtkWidget *widget, GdkEventExpose *event); 47 static gboolean ui_skinned_menurow_expose (GtkWidget *widget, GdkEventExpose *event);
45 static MenuRowItem menurow_find_selected (UiSkinnedMenurow * mr, gint x, gint y); 48 static MenuRowItem menurow_find_selected (UiSkinnedMenurow * mr, gint x, gint y);
46 static gboolean ui_skinned_menurow_button_press (GtkWidget *widget, GdkEventButton *event); 49 static gboolean ui_skinned_menurow_button_press (GtkWidget *widget, GdkEventButton *event);
82 parent_class = gtk_type_class (gtk_widget_get_type ()); 85 parent_class = gtk_type_class (gtk_widget_get_type ());
83 86
84 object_class->destroy = ui_skinned_menurow_destroy; 87 object_class->destroy = ui_skinned_menurow_destroy;
85 88
86 widget_class->realize = ui_skinned_menurow_realize; 89 widget_class->realize = ui_skinned_menurow_realize;
90 widget_class->unrealize = ui_skinned_menurow_unrealize;
91 widget_class->map = ui_skinned_menurow_map;
92 widget_class->unmap = ui_skinned_menurow_unmap;
87 widget_class->expose_event = ui_skinned_menurow_expose; 93 widget_class->expose_event = ui_skinned_menurow_expose;
88 widget_class->size_request = ui_skinned_menurow_size_request; 94 widget_class->size_request = ui_skinned_menurow_size_request;
89 widget_class->size_allocate = ui_skinned_menurow_size_allocate; 95 widget_class->size_allocate = ui_skinned_menurow_size_allocate;
90 widget_class->button_press_event = ui_skinned_menurow_button_press; 96 widget_class->button_press_event = ui_skinned_menurow_button_press;
91 widget_class->button_release_event = ui_skinned_menurow_button_release; 97 widget_class->button_release_event = ui_skinned_menurow_button_release;
114 } 120 }
115 121
116 static void ui_skinned_menurow_init(UiSkinnedMenurow *menurow) { 122 static void ui_skinned_menurow_init(UiSkinnedMenurow *menurow) {
117 menurow->scale_selected = config.scaled; 123 menurow->scale_selected = config.scaled;
118 menurow->always_selected = config.always_on_top; 124 menurow->always_selected = config.always_on_top;
125
126 menurow->event_window = NULL;
127 GTK_WIDGET_SET_FLAGS(menurow, GTK_NO_WINDOW);
119 } 128 }
120 129
121 GtkWidget* ui_skinned_menurow_new(GtkWidget *fixed, gint x, gint y, gint nx, gint ny, gint sx, gint sy, SkinPixmapId si) { 130 GtkWidget* ui_skinned_menurow_new(GtkWidget *fixed, gint x, gint y, gint nx, gint ny, gint sx, gint sy, SkinPixmapId si) {
122 UiSkinnedMenurow *menurow = g_object_new (ui_skinned_menurow_get_type (), NULL); 131 UiSkinnedMenurow *menurow = g_object_new (ui_skinned_menurow_get_type (), NULL);
123 132
158 gint attributes_mask; 167 gint attributes_mask;
159 168
160 g_return_if_fail (widget != NULL); 169 g_return_if_fail (widget != NULL);
161 g_return_if_fail (UI_SKINNED_IS_MENUROW(widget)); 170 g_return_if_fail (UI_SKINNED_IS_MENUROW(widget));
162 171
163 GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED); 172 if (GTK_WIDGET_CLASS (parent_class)->realize)
173 (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
164 menurow = UI_SKINNED_MENUROW(widget); 174 menurow = UI_SKINNED_MENUROW(widget);
165 175
166 attributes.x = widget->allocation.x; 176 attributes.x = widget->allocation.x;
167 attributes.y = widget->allocation.y; 177 attributes.y = widget->allocation.y;
168 attributes.width = widget->allocation.width; 178 attributes.width = widget->allocation.width;
169 attributes.height = widget->allocation.height; 179 attributes.height = widget->allocation.height;
170 attributes.wclass = GDK_INPUT_OUTPUT; 180 attributes.wclass = GDK_INPUT_ONLY;
171 attributes.window_type = GDK_WINDOW_CHILD; 181 attributes.window_type = GDK_WINDOW_CHILD;
172 attributes.event_mask = gtk_widget_get_events(widget); 182 attributes.event_mask = gtk_widget_get_events(widget);
173 attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | 183 attributes.event_mask |= GDK_BUTTON_PRESS_MASK |
174 GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK; 184 GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK;
175 attributes.visual = gtk_widget_get_visual(widget); 185
176 attributes.colormap = gtk_widget_get_colormap(widget); 186 attributes_mask = GDK_WA_X | GDK_WA_Y;
177 187 menurow->event_window = gdk_window_new(widget->window, &attributes, attributes_mask);
178 attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; 188
179 widget->window = gdk_window_new(widget->parent->window, &attributes, attributes_mask); 189 gdk_window_set_user_data(menurow->event_window, widget);
180 190 }
181 widget->style = gtk_style_attach(widget->style, widget->window); 191
182 192 static void ui_skinned_menurow_unrealize(GtkWidget *widget) {
183 gdk_window_set_user_data(widget->window, widget); 193 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
194
195 if ( menurow->event_window != NULL )
196 {
197 gdk_window_set_user_data( menurow->event_window , NULL );
198 gdk_window_destroy( menurow->event_window );
199 menurow->event_window = NULL;
200 }
201
202 if (GTK_WIDGET_CLASS (parent_class)->unrealize)
203 (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
204 }
205
206 static void ui_skinned_menurow_map (GtkWidget *widget)
207 {
208 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
209
210 if (menurow->event_window != NULL)
211 gdk_window_show (menurow->event_window);
212
213 if (GTK_WIDGET_CLASS (parent_class)->map)
214 (* GTK_WIDGET_CLASS (parent_class)->map) (widget);
215 }
216
217 static void ui_skinned_menurow_unmap (GtkWidget *widget)
218 {
219 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
220
221 if (menurow->event_window != NULL)
222 gdk_window_hide (menurow->event_window);
223
224 if (GTK_WIDGET_CLASS (parent_class)->unmap)
225 (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
184 } 226 }
185 227
186 static void ui_skinned_menurow_size_request(GtkWidget *widget, GtkRequisition *requisition) { 228 static void ui_skinned_menurow_size_request(GtkWidget *widget, GtkRequisition *requisition) {
187 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget); 229 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
188 230
195 237
196 widget->allocation = *allocation; 238 widget->allocation = *allocation;
197 widget->allocation.x *= (menurow->scaled ? config.scale_factor : 1); 239 widget->allocation.x *= (menurow->scaled ? config.scale_factor : 1);
198 widget->allocation.y *= (menurow->scaled ? config.scale_factor : 1); 240 widget->allocation.y *= (menurow->scaled ? config.scale_factor : 1);
199 if (GTK_WIDGET_REALIZED (widget)) 241 if (GTK_WIDGET_REALIZED (widget))
200 gdk_window_move_resize(widget->window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height); 242 if (menurow->event_window)
243 gdk_window_move_resize(menurow->event_window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
201 244
202 menurow->x = widget->allocation.x/(menurow->scaled ? config.scale_factor : 1); 245 menurow->x = widget->allocation.x/(menurow->scaled ? config.scale_factor : 1);
203 menurow->y = widget->allocation.y/(menurow->scaled ? config.scale_factor : 1); 246 menurow->y = widget->allocation.y/(menurow->scaled ? config.scale_factor : 1);
204 } 247 }
205 248
234 if (menurow->scale_selected) 277 if (menurow->scale_selected)
235 skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index, 278 skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index,
236 menurow->sx + 24, menurow->sy + 26, 0, 26, 8, 8); 279 menurow->sx + 24, menurow->sy + 26, 0, 26, 8, 8);
237 } 280 }
238 281
239 ui_skinned_widget_draw(widget, obj, menurow->width, menurow->height, menurow->scaled); 282 ui_skinned_widget_draw_with_coordinates(widget, obj, menurow->width, menurow->height,
283 widget->allocation.x,
284 widget->allocation.y,
285 menurow->scaled);
240 286
241 g_object_unref(obj); 287 g_object_unref(obj);
242 288
243 return FALSE; 289 return FALSE;
244 } 290 }