2 * Copyright (C) 1998-2000 Red Hat, Inc.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
19 * Written by Owen Taylor <otaylor@redhat.com>, based on code by
20 * Carsten Haitzler <raster@rasterman.com>
26 #undef GDK_DISABLE_DEPRECATED
29 #include "pixbuf-rc-style.h"
30 #include "pixbuf-style.h"
32 static void pixbuf_style_init (PixbufStyle *style);
33 static void pixbuf_style_class_init (PixbufStyleClass *klass);
35 static GtkStyleClass *parent_class = NULL;
38 match_theme_image (GtkStyle *style,
39 ThemeMatchData *match_data)
43 tmp_list = PIXBUF_RC_STYLE (style->rc_style)->img_list;
48 ThemeImage *image = tmp_list->data;
49 tmp_list = tmp_list->next;
51 if (match_data->function != image->match_data.function)
54 flags = match_data->flags & image->match_data.flags;
56 if (flags != image->match_data.flags) /* Required components not present */
59 if ((flags & THEME_MATCH_STATE) &&
60 match_data->state != image->match_data.state)
63 if ((flags & THEME_MATCH_SHADOW) &&
64 match_data->shadow != image->match_data.shadow)
67 if ((flags & THEME_MATCH_ARROW_DIRECTION) &&
68 match_data->arrow_direction != image->match_data.arrow_direction)
71 if ((flags & THEME_MATCH_ORIENTATION) &&
72 match_data->orientation != image->match_data.orientation)
75 if ((flags & THEME_MATCH_GAP_SIDE) &&
76 match_data->gap_side != image->match_data.gap_side)
79 if ((flags & THEME_MATCH_EXPANDER_STYLE) &&
80 match_data->expander_style != image->match_data.expander_style)
83 if ((flags & THEME_MATCH_WINDOW_EDGE) &&
84 match_data->window_edge != image->match_data.window_edge)
87 if (image->match_data.detail &&
88 (!match_data->detail ||
89 strcmp (match_data->detail, image->match_data.detail) != 0))
99 draw_simple_image(GtkStyle *style,
103 ThemeMatchData *match_data,
104 gboolean draw_center,
105 gboolean allow_setbg,
113 if ((width == -1) && (height == -1))
114 gdk_drawable_get_size(window, &width, &height);
115 else if (width == -1)
116 gdk_drawable_get_size(window, &width, NULL);
117 else if (height == -1)
118 gdk_drawable_get_size(window, NULL, &height);
120 if (!(match_data->flags & THEME_MATCH_ORIENTATION))
122 match_data->flags |= THEME_MATCH_ORIENTATION;
125 match_data->orientation = GTK_ORIENTATION_VERTICAL;
127 match_data->orientation = GTK_ORIENTATION_HORIZONTAL;
130 image = match_theme_image (style, match_data);
133 if (image->background)
135 theme_pixbuf_render (image->background,
137 draw_center ? COMPONENT_ALL : COMPONENT_ALL | COMPONENT_CENTER,
139 x, y, width, height);
142 if (image->overlay && draw_center)
143 theme_pixbuf_render (image->overlay,
144 window, NULL, area, COMPONENT_ALL,
146 x, y, width, height);
155 draw_gap_image(GtkStyle *style,
159 ThemeMatchData *match_data,
160 gboolean draw_center,
165 GtkPositionType gap_side,
171 if ((width == -1) && (height == -1))
172 gdk_drawable_get_size(window, &width, &height);
173 else if (width == -1)
174 gdk_drawable_get_size(window, &width, NULL);
175 else if (height == -1)
176 gdk_drawable_get_size(window, NULL, &height);
178 if (!(match_data->flags & THEME_MATCH_ORIENTATION))
180 match_data->flags |= THEME_MATCH_ORIENTATION;
183 match_data->orientation = GTK_ORIENTATION_VERTICAL;
185 match_data->orientation = GTK_ORIENTATION_HORIZONTAL;
188 match_data->flags |= THEME_MATCH_GAP_SIDE;
189 match_data->gap_side = gap_side;
191 image = match_theme_image (style, match_data);
195 GdkRectangle r1, r2, r3;
196 GdkPixbuf *pixbuf = NULL;
197 guint components = COMPONENT_ALL;
200 components |= COMPONENT_CENTER;
202 if (image->gap_start)
203 pixbuf = theme_pixbuf_get_pixbuf (image->gap_start);
209 thickness = gdk_pixbuf_get_height (pixbuf);
211 thickness = style->ythickness;
214 components |= COMPONENT_NORTH_WEST | COMPONENT_NORTH | COMPONENT_NORTH_EAST;
219 r1.height = thickness;
222 r2.width = gap_width;
223 r2.height = thickness;
224 r3.x = x + gap_x + gap_width;
226 r3.width = width - (gap_x + gap_width);
227 r3.height = thickness;
232 thickness = gdk_pixbuf_get_height (pixbuf);
234 thickness = style->ythickness;
237 components |= COMPONENT_SOUTH_WEST | COMPONENT_SOUTH | COMPONENT_SOUTH_EAST;
240 r1.y = y + height - thickness;
242 r1.height = thickness;
244 r2.y = y + height - thickness;
245 r2.width = gap_width;
246 r2.height = thickness;
247 r3.x = x + gap_x + gap_width;
248 r3.y = y + height - thickness;
249 r3.width = width - (gap_x + gap_width);
250 r3.height = thickness;
255 thickness = gdk_pixbuf_get_width (pixbuf);
257 thickness = style->xthickness;
260 components |= COMPONENT_NORTH_WEST | COMPONENT_WEST | COMPONENT_SOUTH_WEST;
264 r1.width = thickness;
268 r2.width = thickness;
269 r2.height = gap_width;
271 r3.y = y + gap_x + gap_width;
272 r3.width = thickness;
273 r3.height = height - (gap_x + gap_width);
278 thickness = gdk_pixbuf_get_width (pixbuf);
280 thickness = style->xthickness;
283 components |= COMPONENT_NORTH_EAST | COMPONENT_EAST | COMPONENT_SOUTH_EAST;
285 r1.x = x + width - thickness;
287 r1.width = thickness;
289 r2.x = x + width - thickness;
291 r2.width = thickness;
292 r2.height = gap_width;
293 r3.x = x + width - thickness;
294 r3.y = y + gap_x + gap_width;
295 r3.width = thickness;
296 r3.height = height - (gap_x + gap_width);
300 g_assert_not_reached ();
303 if (image->background)
304 theme_pixbuf_render (image->background,
305 window, NULL, area, components, FALSE,
306 x, y, width, height);
307 if (image->gap_start)
308 theme_pixbuf_render (image->gap_start,
309 window, NULL, area, COMPONENT_ALL, FALSE,
310 r1.x, r1.y, r1.width, r1.height);
312 theme_pixbuf_render (image->gap,
313 window, NULL, area, COMPONENT_ALL, FALSE,
314 r2.x, r2.y, r2.width, r2.height);
316 theme_pixbuf_render (image->gap_end,
317 window, NULL, area, COMPONENT_ALL, FALSE,
318 r3.x, r3.y, r3.width, r3.height);
327 draw_hline (GtkStyle *style,
338 ThemeMatchData match_data;
340 g_return_if_fail(style != NULL);
341 g_return_if_fail(window != NULL);
343 match_data.function = TOKEN_D_HLINE;
344 match_data.detail = (gchar *)detail;
345 match_data.flags = THEME_MATCH_ORIENTATION | THEME_MATCH_STATE;
346 match_data.state = state;
347 match_data.orientation = GTK_ORIENTATION_HORIZONTAL;
349 image = match_theme_image (style, &match_data);
352 if (image->background)
353 theme_pixbuf_render (image->background,
354 window, NULL, area, COMPONENT_ALL, FALSE,
355 x1, y, (x2 - x1) + 1, 2);
358 parent_class->draw_hline (style, window, state, area, widget, detail,
363 draw_vline (GtkStyle *style,
374 ThemeMatchData match_data;
376 g_return_if_fail (style != NULL);
377 g_return_if_fail (window != NULL);
379 match_data.function = TOKEN_D_VLINE;
380 match_data.detail = (gchar *)detail;
381 match_data.flags = THEME_MATCH_ORIENTATION | THEME_MATCH_STATE;
382 match_data.state = state;
383 match_data.orientation = GTK_ORIENTATION_VERTICAL;
385 image = match_theme_image (style, &match_data);
388 if (image->background)
389 theme_pixbuf_render (image->background,
390 window, NULL, area, COMPONENT_ALL, FALSE,
391 x, y1, 2, (y2 - y1) + 1);
394 parent_class->draw_vline (style, window, state, area, widget, detail,
399 draw_shadow(GtkStyle *style,
402 GtkShadowType shadow,
411 ThemeMatchData match_data;
413 g_return_if_fail(style != NULL);
414 g_return_if_fail(window != NULL);
416 match_data.function = TOKEN_D_SHADOW;
417 match_data.detail = (gchar *)detail;
418 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
419 match_data.shadow = shadow;
420 match_data.state = state;
422 if (!draw_simple_image (style, window, area, widget, &match_data, FALSE, FALSE,
423 x, y, width, height))
424 parent_class->draw_shadow (style, window, state, shadow, area, widget, detail,
425 x, y, width, height);
428 /* This function makes up for some brokeness in gtkrange.c
429 * where we never get the full arrow of the stepper button
430 * and the type of button in a single drawing function.
432 * It doesn't work correctly when the scrollbar is squished
433 * to the point we don't have room for full-sized steppers.
436 reverse_engineer_stepper_box (GtkWidget *range,
437 GtkArrowType arrow_type,
443 gint slider_width = 14, stepper_size = 14;
447 if (range && GTK_IS_RANGE (range))
449 gtk_widget_style_get (range,
450 "slider_width", &slider_width,
451 "stepper_size", &stepper_size,
455 if (arrow_type == GTK_ARROW_UP || arrow_type == GTK_ARROW_DOWN)
457 box_width = slider_width;
458 box_height = stepper_size;
462 box_width = stepper_size;
463 box_height = slider_width;
466 *x = *x - (box_width - *width) / 2;
467 *y = *y - (box_height - *height) / 2;
469 *height = box_height;
473 draw_arrow (GtkStyle *style,
476 GtkShadowType shadow,
480 GtkArrowType arrow_direction,
487 ThemeMatchData match_data;
489 g_return_if_fail(style != NULL);
490 g_return_if_fail(window != NULL);
493 (strcmp (detail, "hscrollbar") == 0 || strcmp (detail, "vscrollbar") == 0))
495 /* This is a hack to work around the fact that scrollbar steppers are drawn
496 * as a box + arrow, so we never have
498 * The full bounding box of the scrollbar
499 * The arrow direction
501 * At the same time. We simulate an extra paint function, "STEPPER", by doing
502 * nothing for the box, and then here, reverse engineering the box that
503 * was passed to draw box and using that
507 gint box_width = width;
508 gint box_height = height;
510 reverse_engineer_stepper_box (widget, arrow_direction,
511 &box_x, &box_y, &box_width, &box_height);
513 match_data.function = TOKEN_D_STEPPER;
514 match_data.detail = (gchar *)detail;
515 match_data.flags = (THEME_MATCH_SHADOW |
517 THEME_MATCH_ARROW_DIRECTION);
518 match_data.shadow = shadow;
519 match_data.state = state;
520 match_data.arrow_direction = arrow_direction;
522 if (draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
523 box_x, box_y, box_width, box_height))
525 /* The theme included stepper images, we're done */
529 /* Otherwise, draw the full box, and fall through to draw the arrow
531 match_data.function = TOKEN_D_BOX;
532 match_data.detail = (gchar *)detail;
533 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
534 match_data.shadow = shadow;
535 match_data.state = state;
537 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
538 box_x, box_y, box_width, box_height))
539 parent_class->draw_box (style, window, state, shadow, area, widget, detail,
540 box_x, box_y, box_width, box_height);
544 match_data.function = TOKEN_D_ARROW;
545 match_data.detail = (gchar *)detail;
546 match_data.flags = (THEME_MATCH_SHADOW |
548 THEME_MATCH_ARROW_DIRECTION);
549 match_data.shadow = shadow;
550 match_data.state = state;
551 match_data.arrow_direction = arrow_direction;
553 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
554 x, y, width, height))
555 parent_class->draw_arrow (style, window, state, shadow, area, widget, detail,
556 arrow_direction, fill, x, y, width, height);
560 draw_diamond (GtkStyle *style,
563 GtkShadowType shadow,
572 ThemeMatchData match_data;
574 g_return_if_fail(style != NULL);
575 g_return_if_fail(window != NULL);
577 match_data.function = TOKEN_D_DIAMOND;
578 match_data.detail = (gchar *)detail;
579 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
580 match_data.shadow = shadow;
581 match_data.state = state;
583 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
584 x, y, width, height))
585 parent_class->draw_diamond (style, window, state, shadow, area, widget, detail,
586 x, y, width, height);
590 draw_box (GtkStyle *style,
593 GtkShadowType shadow,
602 ThemeMatchData match_data;
604 g_return_if_fail(style != NULL);
605 g_return_if_fail(window != NULL);
608 (strcmp (detail, "hscrollbar") == 0 || strcmp (detail, "vscrollbar") == 0))
610 /* We handle this in draw_arrow */
614 match_data.function = TOKEN_D_BOX;
615 match_data.detail = (gchar *)detail;
616 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
617 match_data.shadow = shadow;
618 match_data.state = state;
620 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
621 x, y, width, height)) {
622 parent_class->draw_box (style, window, state, shadow, area, widget, detail,
623 x, y, width, height);
628 draw_flat_box (GtkStyle *style,
631 GtkShadowType shadow,
640 ThemeMatchData match_data;
642 g_return_if_fail(style != NULL);
643 g_return_if_fail(window != NULL);
645 match_data.function = TOKEN_D_FLAT_BOX;
646 match_data.detail = (gchar *)detail;
647 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
648 match_data.shadow = shadow;
649 match_data.state = state;
651 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
652 x, y, width, height))
653 parent_class->draw_flat_box (style, window, state, shadow, area, widget, detail,
654 x, y, width, height);
658 draw_check (GtkStyle *style,
661 GtkShadowType shadow,
670 ThemeMatchData match_data;
672 g_return_if_fail(style != NULL);
673 g_return_if_fail(window != NULL);
675 match_data.function = TOKEN_D_CHECK;
676 match_data.detail = (gchar *)detail;
677 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
678 match_data.shadow = shadow;
679 match_data.state = state;
681 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
682 x, y, width, height))
683 parent_class->draw_check (style, window, state, shadow, area, widget, detail,
684 x, y, width, height);
688 draw_option (GtkStyle *style,
691 GtkShadowType shadow,
700 ThemeMatchData match_data;
702 g_return_if_fail(style != NULL);
703 g_return_if_fail(window != NULL);
705 match_data.function = TOKEN_D_OPTION;
706 match_data.detail = (gchar *)detail;
707 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
708 match_data.shadow = shadow;
709 match_data.state = state;
711 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
712 x, y, width, height))
713 parent_class->draw_option (style, window, state, shadow, area, widget, detail,
714 x, y, width, height);
718 draw_tab (GtkStyle *style,
721 GtkShadowType shadow,
730 ThemeMatchData match_data;
732 g_return_if_fail(style != NULL);
733 g_return_if_fail(window != NULL);
735 match_data.function = TOKEN_D_TAB;
736 match_data.detail = (gchar *)detail;
737 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
738 match_data.shadow = shadow;
739 match_data.state = state;
741 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
742 x, y, width, height))
743 parent_class->draw_tab (style, window, state, shadow, area, widget, detail,
744 x, y, width, height);
748 draw_shadow_gap (GtkStyle *style,
751 GtkShadowType shadow,
759 GtkPositionType gap_side,
763 ThemeMatchData match_data;
765 match_data.function = TOKEN_D_SHADOW_GAP;
766 match_data.detail = (gchar *)detail;
767 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
768 match_data.flags = (THEME_MATCH_SHADOW |
770 THEME_MATCH_ORIENTATION);
771 match_data.shadow = shadow;
772 match_data.state = state;
774 if (!draw_gap_image (style, window, area, widget, &match_data, FALSE,
775 x, y, width, height, gap_side, gap_x, gap_width))
776 parent_class->draw_shadow_gap (style, window, state, shadow, area, widget, detail,
777 x, y, width, height, gap_side, gap_x, gap_width);
781 draw_box_gap (GtkStyle *style,
784 GtkShadowType shadow,
792 GtkPositionType gap_side,
796 ThemeMatchData match_data;
798 match_data.function = TOKEN_D_BOX_GAP;
799 match_data.detail = (gchar *)detail;
800 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE;
801 match_data.flags = (THEME_MATCH_SHADOW |
803 THEME_MATCH_ORIENTATION);
804 match_data.shadow = shadow;
805 match_data.state = state;
807 if (!draw_gap_image (style, window, area, widget, &match_data, TRUE,
808 x, y, width, height, gap_side, gap_x, gap_width))
809 parent_class->draw_box_gap (style, window, state, shadow, area, widget, detail,
810 x, y, width, height, gap_side, gap_x, gap_width);
814 draw_extension (GtkStyle *style,
817 GtkShadowType shadow,
825 GtkPositionType gap_side)
827 ThemeMatchData match_data;
829 g_return_if_fail (style != NULL);
830 g_return_if_fail (window != NULL);
832 match_data.function = TOKEN_D_EXTENSION;
833 match_data.detail = (gchar *)detail;
834 match_data.flags = THEME_MATCH_SHADOW | THEME_MATCH_STATE | THEME_MATCH_GAP_SIDE;
835 match_data.shadow = shadow;
836 match_data.state = state;
837 match_data.gap_side = gap_side;
839 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
840 x, y, width, height))
841 parent_class->draw_extension (style, window, state, shadow, area, widget, detail,
842 x, y, width, height, gap_side);
846 draw_focus (GtkStyle *style,
848 GtkStateType state_type,
857 ThemeMatchData match_data;
859 g_return_if_fail (style != NULL);
860 g_return_if_fail (window != NULL);
862 match_data.function = TOKEN_D_FOCUS;
863 match_data.detail = (gchar *)detail;
864 match_data.flags = 0;
866 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, FALSE,
867 x, y, width, height))
868 parent_class->draw_focus (style, window, state_type, area, widget, detail,
869 x, y, width, height);
873 draw_slider (GtkStyle *style,
876 GtkShadowType shadow,
884 GtkOrientation orientation)
886 ThemeMatchData match_data;
888 g_return_if_fail(style != NULL);
889 g_return_if_fail(window != NULL);
891 match_data.function = TOKEN_D_SLIDER;
892 match_data.detail = (gchar *)detail;
893 match_data.flags = (THEME_MATCH_SHADOW |
895 THEME_MATCH_ORIENTATION);
896 match_data.shadow = shadow;
897 match_data.state = state;
898 match_data.orientation = orientation;
900 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
901 x, y, width, height))
902 parent_class->draw_slider (style, window, state, shadow, area, widget, detail,
903 x, y, width, height, orientation);
908 draw_handle (GtkStyle *style,
911 GtkShadowType shadow,
919 GtkOrientation orientation)
921 ThemeMatchData match_data;
923 g_return_if_fail (style != NULL);
924 g_return_if_fail (window != NULL);
926 match_data.function = TOKEN_D_HANDLE;
927 match_data.detail = (gchar *)detail;
928 match_data.flags = (THEME_MATCH_SHADOW |
930 THEME_MATCH_ORIENTATION);
931 match_data.shadow = shadow;
932 match_data.state = state;
933 match_data.orientation = orientation;
935 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
936 x, y, width, height))
937 parent_class->draw_handle (style, window, state, shadow, area, widget, detail,
938 x, y, width, height, orientation);
942 draw_expander (GtkStyle *style,
950 GtkExpanderStyle expander_style)
952 #define DEFAULT_EXPANDER_SIZE 12
954 ThemeMatchData match_data;
958 g_return_if_fail (style != NULL);
959 g_return_if_fail (window != NULL);
962 gtk_widget_class_find_style_property (GTK_WIDGET_GET_CLASS (widget),
965 gtk_widget_style_get (widget,
966 "expander-size", &expander_size,
970 expander_size = DEFAULT_EXPANDER_SIZE;
972 radius = expander_size/2;
974 match_data.function = TOKEN_D_EXPANDER;
975 match_data.detail = (gchar *)detail;
976 match_data.flags = (THEME_MATCH_STATE |
977 THEME_MATCH_EXPANDER_STYLE);
978 match_data.state = state;
979 match_data.expander_style = expander_style;
981 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
982 x - radius, y - radius, expander_size, expander_size))
983 parent_class->draw_expander (style, window, state, area, widget, detail,
984 x, y, expander_style);
988 draw_resize_grip (GtkStyle *style,
1000 ThemeMatchData match_data;
1002 g_return_if_fail (style != NULL);
1003 g_return_if_fail (window != NULL);
1005 match_data.function = TOKEN_D_RESIZE_GRIP;
1006 match_data.detail = (gchar *)detail;
1007 match_data.flags = (THEME_MATCH_STATE |
1008 THEME_MATCH_WINDOW_EDGE);
1009 match_data.state = state;
1010 match_data.window_edge = edge;
1012 if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE,
1013 x, y, width, height))
1014 parent_class->draw_resize_grip (style, window, state, area, widget, detail,
1015 edge, x, y, width, height);
1018 GType pixbuf_type_style = 0;
1021 pixbuf_style_register_type (GTypeModule *module)
1023 const GTypeInfo object_info =
1025 sizeof (PixbufStyleClass),
1026 (GBaseInitFunc) NULL,
1027 (GBaseFinalizeFunc) NULL,
1028 (GClassInitFunc) pixbuf_style_class_init,
1029 NULL, /* class_finalize */
1030 NULL, /* class_data */
1031 sizeof (PixbufStyle),
1032 0, /* n_preallocs */
1033 (GInstanceInitFunc) pixbuf_style_init,
1036 pixbuf_type_style = g_type_module_register_type (module,
1043 pixbuf_style_init (PixbufStyle *style)
1048 pixbuf_style_class_init (PixbufStyleClass *klass)
1050 GtkStyleClass *style_class = GTK_STYLE_CLASS (klass);
1052 parent_class = g_type_class_peek_parent (klass);
1054 style_class->draw_hline = draw_hline;
1055 style_class->draw_vline = draw_vline;
1056 style_class->draw_shadow = draw_shadow;
1057 style_class->draw_arrow = draw_arrow;
1058 style_class->draw_diamond = draw_diamond;
1059 style_class->draw_box = draw_box;
1060 style_class->draw_flat_box = draw_flat_box;
1061 style_class->draw_check = draw_check;
1062 style_class->draw_option = draw_option;
1063 style_class->draw_tab = draw_tab;
1064 style_class->draw_shadow_gap = draw_shadow_gap;
1065 style_class->draw_box_gap = draw_box_gap;
1066 style_class->draw_extension = draw_extension;
1067 style_class->draw_focus = draw_focus;
1068 style_class->draw_slider = draw_slider;
1069 style_class->draw_handle = draw_handle;
1070 style_class->draw_expander = draw_expander;
1071 style_class->draw_resize_grip = draw_resize_grip;