Mercurial > audlegacy-plugins
comparison src/skins/ui_skinned_horizontal_slider.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 |
---|---|
50 | 50 |
51 static void ui_skinned_horizontal_slider_class_init (UiSkinnedHorizontalSliderClass *klass); | 51 static void ui_skinned_horizontal_slider_class_init (UiSkinnedHorizontalSliderClass *klass); |
52 static void ui_skinned_horizontal_slider_init (UiSkinnedHorizontalSlider *horizontal_slider); | 52 static void ui_skinned_horizontal_slider_init (UiSkinnedHorizontalSlider *horizontal_slider); |
53 static void ui_skinned_horizontal_slider_destroy (GtkObject *object); | 53 static void ui_skinned_horizontal_slider_destroy (GtkObject *object); |
54 static void ui_skinned_horizontal_slider_realize (GtkWidget *widget); | 54 static void ui_skinned_horizontal_slider_realize (GtkWidget *widget); |
55 static void ui_skinned_horizontal_slider_unrealize (GtkWidget *widget); | |
56 static void ui_skinned_horizontal_slider_map (GtkWidget *widget); | |
57 static void ui_skinned_horizontal_slider_unmap (GtkWidget *widget); | |
55 static void ui_skinned_horizontal_slider_size_request (GtkWidget *widget, GtkRequisition *requisition); | 58 static void ui_skinned_horizontal_slider_size_request (GtkWidget *widget, GtkRequisition *requisition); |
56 static void ui_skinned_horizontal_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation); | 59 static void ui_skinned_horizontal_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation); |
57 static gboolean ui_skinned_horizontal_slider_expose (GtkWidget *widget, GdkEventExpose *event); | 60 static gboolean ui_skinned_horizontal_slider_expose (GtkWidget *widget, GdkEventExpose *event); |
58 static gboolean ui_skinned_horizontal_slider_button_press (GtkWidget *widget, GdkEventButton *event); | 61 static gboolean ui_skinned_horizontal_slider_button_press (GtkWidget *widget, GdkEventButton *event); |
59 static gboolean ui_skinned_horizontal_slider_button_release (GtkWidget *widget, GdkEventButton *event); | 62 static gboolean ui_skinned_horizontal_slider_button_release (GtkWidget *widget, GdkEventButton *event); |
94 parent_class = gtk_type_class (gtk_widget_get_type ()); | 97 parent_class = gtk_type_class (gtk_widget_get_type ()); |
95 | 98 |
96 object_class->destroy = ui_skinned_horizontal_slider_destroy; | 99 object_class->destroy = ui_skinned_horizontal_slider_destroy; |
97 | 100 |
98 widget_class->realize = ui_skinned_horizontal_slider_realize; | 101 widget_class->realize = ui_skinned_horizontal_slider_realize; |
102 widget_class->unrealize = ui_skinned_horizontal_slider_unrealize; | |
103 widget_class->map = ui_skinned_horizontal_slider_map; | |
104 widget_class->unmap = ui_skinned_horizontal_slider_unmap; | |
99 widget_class->expose_event = ui_skinned_horizontal_slider_expose; | 105 widget_class->expose_event = ui_skinned_horizontal_slider_expose; |
100 widget_class->size_request = ui_skinned_horizontal_slider_size_request; | 106 widget_class->size_request = ui_skinned_horizontal_slider_size_request; |
101 widget_class->size_allocate = ui_skinned_horizontal_slider_size_allocate; | 107 widget_class->size_allocate = ui_skinned_horizontal_slider_size_allocate; |
102 widget_class->button_press_event = ui_skinned_horizontal_slider_button_press; | 108 widget_class->button_press_event = ui_skinned_horizontal_slider_button_press; |
103 widget_class->button_release_event = ui_skinned_horizontal_slider_button_release; | 109 widget_class->button_release_event = ui_skinned_horizontal_slider_button_release; |
125 g_type_class_add_private (gobject_class, sizeof (UiSkinnedHorizontalSliderPrivate)); | 131 g_type_class_add_private (gobject_class, sizeof (UiSkinnedHorizontalSliderPrivate)); |
126 } | 132 } |
127 | 133 |
128 static void ui_skinned_horizontal_slider_init(UiSkinnedHorizontalSlider *horizontal_slider) { | 134 static void ui_skinned_horizontal_slider_init(UiSkinnedHorizontalSlider *horizontal_slider) { |
129 horizontal_slider->pressed = FALSE; | 135 horizontal_slider->pressed = FALSE; |
136 | |
137 horizontal_slider->event_window = NULL; | |
138 GTK_WIDGET_SET_FLAGS(horizontal_slider, GTK_NO_WINDOW); | |
130 } | 139 } |
131 | 140 |
132 GtkWidget* ui_skinned_horizontal_slider_new(GtkWidget *fixed, gint x, gint y, gint w, gint h, gint knx, gint kny, | 141 GtkWidget* ui_skinned_horizontal_slider_new(GtkWidget *fixed, gint x, gint y, gint w, gint h, gint knx, gint kny, |
133 gint kpx, gint kpy, gint kw, gint kh, gint fh, | 142 gint kpx, gint kpy, gint kw, gint kh, gint fh, |
134 gint fo, gint min, gint max, gint(*fcb) (gint), SkinPixmapId si) { | 143 gint fo, gint min, gint max, gint(*fcb) (gint), SkinPixmapId si) { |
179 gint attributes_mask; | 188 gint attributes_mask; |
180 | 189 |
181 g_return_if_fail (widget != NULL); | 190 g_return_if_fail (widget != NULL); |
182 g_return_if_fail (UI_SKINNED_IS_HORIZONTAL_SLIDER(widget)); | 191 g_return_if_fail (UI_SKINNED_IS_HORIZONTAL_SLIDER(widget)); |
183 | 192 |
184 GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED); | 193 if (GTK_WIDGET_CLASS (parent_class)->realize) |
194 (* GTK_WIDGET_CLASS (parent_class)->realize) (widget); | |
185 horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER(widget); | 195 horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER(widget); |
186 | 196 |
187 attributes.x = widget->allocation.x; | 197 attributes.x = widget->allocation.x; |
188 attributes.y = widget->allocation.y; | 198 attributes.y = widget->allocation.y; |
189 attributes.width = widget->allocation.width; | 199 attributes.width = widget->allocation.width; |
190 attributes.height = widget->allocation.height; | 200 attributes.height = widget->allocation.height; |
191 attributes.wclass = GDK_INPUT_OUTPUT; | 201 attributes.wclass = GDK_INPUT_ONLY; |
192 attributes.window_type = GDK_WINDOW_CHILD; | 202 attributes.window_type = GDK_WINDOW_CHILD; |
193 attributes.event_mask = gtk_widget_get_events(widget); | 203 attributes.event_mask = gtk_widget_get_events(widget); |
194 attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | | 204 attributes.event_mask |= GDK_BUTTON_PRESS_MASK | |
195 GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK; | 205 GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK; |
196 attributes.visual = gtk_widget_get_visual(widget); | 206 |
197 attributes.colormap = gtk_widget_get_colormap(widget); | 207 attributes_mask = GDK_WA_X | GDK_WA_Y; |
198 | 208 horizontal_slider->event_window = gdk_window_new(widget->window, &attributes, attributes_mask); |
199 attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; | 209 |
200 widget->window = gdk_window_new(widget->parent->window, &attributes, attributes_mask); | 210 gdk_window_set_user_data(horizontal_slider->event_window, widget); |
201 | 211 } |
202 widget->style = gtk_style_attach(widget->style, widget->window); | 212 |
203 gdk_window_set_user_data(widget->window, widget); | 213 static void ui_skinned_horizontal_slider_unrealize(GtkWidget *widget) { |
214 UiSkinnedHorizontalSlider *horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER(widget); | |
215 | |
216 if ( horizontal_slider->event_window != NULL ) | |
217 { | |
218 gdk_window_set_user_data( horizontal_slider->event_window , NULL ); | |
219 gdk_window_destroy( horizontal_slider->event_window ); | |
220 horizontal_slider->event_window = NULL; | |
221 } | |
222 | |
223 if (GTK_WIDGET_CLASS (parent_class)->unrealize) | |
224 (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); | |
225 } | |
226 | |
227 static void ui_skinned_horizontal_slider_map (GtkWidget *widget) | |
228 { | |
229 UiSkinnedHorizontalSlider *horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER(widget); | |
230 | |
231 if (horizontal_slider->event_window != NULL) | |
232 gdk_window_show (horizontal_slider->event_window); | |
233 | |
234 if (GTK_WIDGET_CLASS (parent_class)->map) | |
235 (* GTK_WIDGET_CLASS (parent_class)->map) (widget); | |
236 } | |
237 | |
238 static void ui_skinned_horizontal_slider_unmap (GtkWidget *widget) | |
239 { | |
240 UiSkinnedHorizontalSlider *horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER(widget); | |
241 | |
242 if (horizontal_slider->event_window != NULL) | |
243 gdk_window_hide (horizontal_slider->event_window); | |
244 | |
245 if (GTK_WIDGET_CLASS (parent_class)->unmap) | |
246 (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget); | |
204 } | 247 } |
205 | 248 |
206 static void ui_skinned_horizontal_slider_size_request(GtkWidget *widget, GtkRequisition *requisition) { | 249 static void ui_skinned_horizontal_slider_size_request(GtkWidget *widget, GtkRequisition *requisition) { |
207 UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(widget); | 250 UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(widget); |
208 | 251 |
222 priv->knob_height = ceil(allocation->height/(priv->scaled ? config.scale_factor : 1)); | 265 priv->knob_height = ceil(allocation->height/(priv->scaled ? config.scale_factor : 1)); |
223 priv->width = ceil(allocation->width/(priv->scaled ? config.scale_factor : 1)); | 266 priv->width = ceil(allocation->width/(priv->scaled ? config.scale_factor : 1)); |
224 priv->height = ceil(allocation->height/(priv->scaled ? config.scale_factor : 1)); | 267 priv->height = ceil(allocation->height/(priv->scaled ? config.scale_factor : 1)); |
225 | 268 |
226 if (GTK_WIDGET_REALIZED (widget)) | 269 if (GTK_WIDGET_REALIZED (widget)) |
227 gdk_window_move_resize(widget->window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height); | 270 if (horizontal_slider->event_window) |
271 gdk_window_move_resize(horizontal_slider->event_window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height); | |
228 | 272 |
229 horizontal_slider->x = ceil(widget->allocation.x/(priv->scaled ? config.scale_factor : 1)); | 273 horizontal_slider->x = ceil(widget->allocation.x/(priv->scaled ? config.scale_factor : 1)); |
230 horizontal_slider->y = ceil(widget->allocation.y/(priv->scaled ? config.scale_factor : 1)); | 274 horizontal_slider->y = ceil(widget->allocation.y/(priv->scaled ? config.scale_factor : 1)); |
231 } | 275 } |
232 | 276 |
261 priv->skin_index, hs->knob_nx, | 305 priv->skin_index, hs->knob_nx, |
262 hs->knob_ny, priv->position, | 306 hs->knob_ny, priv->position, |
263 ((priv->height - priv->knob_height) / 2), | 307 ((priv->height - priv->knob_height) / 2), |
264 priv->knob_width, priv->knob_height); | 308 priv->knob_width, priv->knob_height); |
265 | 309 |
266 ui_skinned_widget_draw(widget, obj, priv->width, priv->height, priv->scaled); | 310 ui_skinned_widget_draw_with_coordinates(widget, obj, priv->width, priv->height, |
311 widget->allocation.x, | |
312 widget->allocation.y, | |
313 priv->scaled); | |
267 | 314 |
268 g_object_unref(obj); | 315 g_object_unref(obj); |
269 | 316 |
270 return FALSE; | 317 return FALSE; |
271 } | 318 } |