Mercurial > audlegacy-plugins
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 } |