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