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 }