1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser 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.
21 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
27 #ifndef __GTK_STYLE_H__
28 #define __GTK_STYLE_H__
32 #include <gtk/gtkenums.h>
33 #include <pango/pango.h>
37 #endif /* __cplusplus */
39 #define GTK_TYPE_STYLE (gtk_style_get_type ())
40 #define GTK_STYLE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_STYLE, GtkStyle))
41 #define GTK_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_STYLE, GtkStyleClass))
42 #define GTK_IS_STYLE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GTK_TYPE_STYLE))
43 #define GTK_IS_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_STYLE))
44 #define GTK_STYLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_STYLE, GtkStyleClass))
46 /* Some forward declarations needed to rationalize the header
49 typedef struct _GtkStyle GtkStyle;
50 typedef struct _GtkStyleClass GtkStyleClass;
51 typedef struct _GtkThemeEngine GtkThemeEngine;
52 typedef struct _GtkRcStyle GtkRcStyle;
53 typedef struct _GtkIconSet GtkIconSet;
54 typedef struct _GtkIconSource GtkIconSource;
55 typedef struct _GtkRcProperty GtkRcProperty;
56 typedef gboolean (*GtkRcPropertyParser) (const GParamSpec *pspec,
57 const GString *rc_string,
58 GValue *property_value);
60 /* We make this forward declaration here, since we pass
61 * GtkWidgt's to the draw functions.
63 typedef struct _GtkWidget GtkWidget;
65 /* This is used for having dynamic style changing stuff
66 * fg, bg, light, dark, mid, text, base
68 #define GTK_STYLE_NUM_STYLECOLORS() (7 * 5)
70 #define GTK_STYLE_ATTACHED(style) (GTK_STYLE (style)->attach_count > 0)
74 GObject parent_instance;
89 PangoFontDescription *font_desc;
104 GdkPixmap *bg_pixmap[5];
111 GdkColormap *colormap;
113 /* the RcStyle from which this style was created */
114 GtkRcStyle *rc_style;
116 GSList *styles; /* of type GtkStyle* */
117 GBSearchArray *property_cache;
118 GSList *icon_factories; /* of type GtkIconFactory* */
121 struct _GtkStyleClass
123 GObjectClass parent_class;
125 /* Initialize for a particular colormap/depth
126 * combination. style->colormap/style->depth will have
127 * been set at this point. Will typically chain to parent.
129 void (*realize) (GtkStyle *style);
131 /* Clean up for a particular colormap/depth combination. Will
132 * typically chain to parent.
134 void (*unrealize) (GtkStyle *style);
136 /* Make style an exact duplicate of src.
138 void (*copy) (GtkStyle *style,
141 /* Create an empty style of the same type as this style.
142 * The default implementation, which does
143 * g_object_new (G_OBJECT_TYPE (style), NULL);
144 * should work in most cases.
146 GtkStyle *(*clone) (GtkStyle *style);
148 /* Initialize the GtkStyle with the values in the GtkRcStyle.
149 * should chain to the parent implementation.
151 void (*init_from_rc) (GtkStyle *style,
152 GtkRcStyle *rc_style);
154 void (*set_background) (GtkStyle *style,
156 GtkStateType state_type);
159 GdkPixbuf * (* render_icon) (GtkStyle *style,
160 const GtkIconSource *source,
161 GtkTextDirection direction,
165 const gchar *detail);
170 void (*draw_hline) (GtkStyle *style,
172 GtkStateType state_type,
179 void (*draw_vline) (GtkStyle *style,
181 GtkStateType state_type,
188 void (*draw_shadow) (GtkStyle *style,
190 GtkStateType state_type,
191 GtkShadowType shadow_type,
199 void (*draw_polygon) (GtkStyle *style,
201 GtkStateType state_type,
202 GtkShadowType shadow_type,
209 void (*draw_arrow) (GtkStyle *style,
211 GtkStateType state_type,
212 GtkShadowType shadow_type,
216 GtkArrowType arrow_type,
222 void (*draw_diamond) (GtkStyle *style,
224 GtkStateType state_type,
225 GtkShadowType shadow_type,
233 void (*draw_string) (GtkStyle *style,
235 GtkStateType state_type,
241 const gchar *string);
242 void (*draw_box) (GtkStyle *style,
244 GtkStateType state_type,
245 GtkShadowType shadow_type,
253 void (*draw_flat_box) (GtkStyle *style,
255 GtkStateType state_type,
256 GtkShadowType shadow_type,
264 void (*draw_check) (GtkStyle *style,
266 GtkStateType state_type,
267 GtkShadowType shadow_type,
275 void (*draw_option) (GtkStyle *style,
277 GtkStateType state_type,
278 GtkShadowType shadow_type,
286 void (*draw_tab) (GtkStyle *style,
288 GtkStateType state_type,
289 GtkShadowType shadow_type,
297 void (*draw_shadow_gap) (GtkStyle *style,
299 GtkStateType state_type,
300 GtkShadowType shadow_type,
308 GtkPositionType gap_side,
311 void (*draw_box_gap) (GtkStyle *style,
313 GtkStateType state_type,
314 GtkShadowType shadow_type,
322 GtkPositionType gap_side,
325 void (*draw_extension) (GtkStyle *style,
327 GtkStateType state_type,
328 GtkShadowType shadow_type,
336 GtkPositionType gap_side);
337 void (*draw_focus) (GtkStyle *style,
346 void (*draw_slider) (GtkStyle *style,
348 GtkStateType state_type,
349 GtkShadowType shadow_type,
357 GtkOrientation orientation);
358 void (*draw_handle) (GtkStyle *style,
360 GtkStateType state_type,
361 GtkShadowType shadow_type,
369 GtkOrientation orientation);
371 void (*draw_expander) (GtkStyle *style,
373 GtkStateType state_type,
380 void (*draw_layout) (GtkStyle *style,
382 GtkStateType state_type,
388 PangoLayout *layout);
389 void (*draw_resize_grip) (GtkStyle *style,
391 GtkStateType state_type,
403 GType gtk_style_get_type (void) G_GNUC_CONST;
404 GtkStyle* gtk_style_new (void);
405 GtkStyle* gtk_style_copy (GtkStyle *style);
406 GtkStyle* gtk_style_attach (GtkStyle *style,
408 void gtk_style_detach (GtkStyle *style);
409 GtkStyle* gtk_style_ref (GtkStyle *style);
410 void gtk_style_unref (GtkStyle *style);
411 void gtk_style_set_background (GtkStyle *style,
413 GtkStateType state_type);
414 void gtk_style_apply_default_background (GtkStyle *style,
417 GtkStateType state_type,
424 GtkIconSet* gtk_style_lookup_icon_set (GtkStyle *style,
425 const gchar *stock_id);
426 GdkPixbuf* gtk_style_render_icon (GtkStyle *style,
427 const GtkIconSource *source,
428 GtkTextDirection direction,
432 const gchar *detail);
433 void gtk_draw_hline (GtkStyle *style,
435 GtkStateType state_type,
439 void gtk_draw_vline (GtkStyle *style,
441 GtkStateType state_type,
445 void gtk_draw_shadow (GtkStyle *style,
447 GtkStateType state_type,
448 GtkShadowType shadow_type,
453 void gtk_draw_polygon (GtkStyle *style,
455 GtkStateType state_type,
456 GtkShadowType shadow_type,
460 void gtk_draw_arrow (GtkStyle *style,
462 GtkStateType state_type,
463 GtkShadowType shadow_type,
464 GtkArrowType arrow_type,
470 void gtk_draw_diamond (GtkStyle *style,
472 GtkStateType state_type,
473 GtkShadowType shadow_type,
478 void gtk_draw_box (GtkStyle *style,
480 GtkStateType state_type,
481 GtkShadowType shadow_type,
486 void gtk_draw_flat_box (GtkStyle *style,
488 GtkStateType state_type,
489 GtkShadowType shadow_type,
494 void gtk_draw_check (GtkStyle *style,
496 GtkStateType state_type,
497 GtkShadowType shadow_type,
502 void gtk_draw_option (GtkStyle *style,
504 GtkStateType state_type,
505 GtkShadowType shadow_type,
510 void gtk_draw_tab (GtkStyle *style,
512 GtkStateType state_type,
513 GtkShadowType shadow_type,
518 void gtk_draw_shadow_gap (GtkStyle *style,
520 GtkStateType state_type,
521 GtkShadowType shadow_type,
526 GtkPositionType gap_side,
529 void gtk_draw_box_gap (GtkStyle *style,
531 GtkStateType state_type,
532 GtkShadowType shadow_type,
537 GtkPositionType gap_side,
540 void gtk_draw_extension (GtkStyle *style,
542 GtkStateType state_type,
543 GtkShadowType shadow_type,
548 GtkPositionType gap_side);
549 void gtk_draw_focus (GtkStyle *style,
555 void gtk_draw_slider (GtkStyle *style,
557 GtkStateType state_type,
558 GtkShadowType shadow_type,
563 GtkOrientation orientation);
564 void gtk_draw_handle (GtkStyle *style,
566 GtkStateType state_type,
567 GtkShadowType shadow_type,
572 GtkOrientation orientation);
573 void gtk_draw_expander (GtkStyle *style,
575 GtkStateType state_type,
579 void gtk_draw_layout (GtkStyle *style,
581 GtkStateType state_type,
584 PangoLayout *layout);
586 void gtk_draw_resize_grip (GtkStyle *style,
588 GtkStateType state_type,
595 void gtk_paint_hline (GtkStyle *style,
597 GtkStateType state_type,
604 void gtk_paint_vline (GtkStyle *style,
606 GtkStateType state_type,
613 void gtk_paint_shadow (GtkStyle *style,
615 GtkStateType state_type,
616 GtkShadowType shadow_type,
624 void gtk_paint_polygon (GtkStyle *style,
626 GtkStateType state_type,
627 GtkShadowType shadow_type,
634 void gtk_paint_arrow (GtkStyle *style,
636 GtkStateType state_type,
637 GtkShadowType shadow_type,
641 GtkArrowType arrow_type,
647 void gtk_paint_diamond (GtkStyle *style,
649 GtkStateType state_type,
650 GtkShadowType shadow_type,
658 void gtk_paint_box (GtkStyle *style,
660 GtkStateType state_type,
661 GtkShadowType shadow_type,
669 void gtk_paint_flat_box (GtkStyle *style,
671 GtkStateType state_type,
672 GtkShadowType shadow_type,
680 void gtk_paint_check (GtkStyle *style,
682 GtkStateType state_type,
683 GtkShadowType shadow_type,
691 void gtk_paint_option (GtkStyle *style,
693 GtkStateType state_type,
694 GtkShadowType shadow_type,
702 void gtk_paint_tab (GtkStyle *style,
704 GtkStateType state_type,
705 GtkShadowType shadow_type,
713 void gtk_paint_shadow_gap (GtkStyle *style,
715 GtkStateType state_type,
716 GtkShadowType shadow_type,
724 GtkPositionType gap_side,
727 void gtk_paint_box_gap (GtkStyle *style,
729 GtkStateType state_type,
730 GtkShadowType shadow_type,
738 GtkPositionType gap_side,
741 void gtk_paint_extension (GtkStyle *style,
743 GtkStateType state_type,
744 GtkShadowType shadow_type,
752 GtkPositionType gap_side);
753 void gtk_paint_focus (GtkStyle *style,
762 void gtk_paint_slider (GtkStyle *style,
764 GtkStateType state_type,
765 GtkShadowType shadow_type,
773 GtkOrientation orientation);
774 void gtk_paint_handle (GtkStyle *style,
776 GtkStateType state_type,
777 GtkShadowType shadow_type,
785 GtkOrientation orientation);
786 void gtk_paint_expander (GtkStyle *style,
788 GtkStateType state_type,
795 void gtk_paint_layout (GtkStyle *style,
797 GtkStateType state_type,
803 PangoLayout *layout);
805 void gtk_paint_resize_grip (GtkStyle *style,
807 GtkStateType state_type,
818 /* --- private API --- */
819 const GValue* _gtk_style_peek_property_value (GtkStyle *style,
822 GtkRcPropertyParser parser);
826 #ifndef GTK_DISABLE_DEPRECATED
827 void gtk_draw_string (GtkStyle *style,
829 GtkStateType state_type,
832 const gchar *string);
833 void gtk_paint_string (GtkStyle *style,
835 GtkStateType state_type,
841 const gchar *string);
842 #endif /* GTK_DISABLE_DEPRECATED */
846 #endif /* __cplusplus */
849 #endif /* __GTK_STYLE_H__ */