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 _GtkBorder GtkBorder;
50 typedef struct _GtkStyle GtkStyle;
51 typedef struct _GtkStyleClass GtkStyleClass;
52 typedef struct _GtkThemeEngine GtkThemeEngine;
53 typedef struct _GtkRcStyle GtkRcStyle;
54 typedef struct _GtkIconSet GtkIconSet;
55 typedef struct _GtkIconSource GtkIconSource;
56 typedef struct _GtkRcProperty GtkRcProperty;
57 typedef gboolean (*GtkRcPropertyParser) (const GParamSpec *pspec,
58 const GString *rc_string,
59 GValue *property_value);
61 /* We make this forward declaration here, since we pass
62 * GtkWidget's to the draw functions.
64 typedef struct _GtkWidget GtkWidget;
66 #define GTK_STYLE_ATTACHED(style) (GTK_STYLE (style)->attach_count > 0)
70 GObject parent_instance;
81 GdkColor text_aa[5]; /* Halfway between text/base */
85 PangoFontDescription *font_desc;
101 GdkPixmap *bg_pixmap[5];
108 GdkColormap *colormap;
109 GdkFont *private_font;
110 PangoFontDescription *private_font_desc; /* Font description for style->private_font or %NULL */
112 /* the RcStyle from which this style was created */
113 GtkRcStyle *rc_style;
115 GSList *styles; /* of type GtkStyle* */
116 GArray *property_cache;
117 GSList *icon_factories; /* of type GtkIconFactory* */
120 struct _GtkStyleClass
122 GObjectClass parent_class;
124 /* Initialize for a particular colormap/depth
125 * combination. style->colormap/style->depth will have
126 * been set at this point. Will typically chain to parent.
128 void (*realize) (GtkStyle *style);
130 /* Clean up for a particular colormap/depth combination. Will
131 * typically chain to parent.
133 void (*unrealize) (GtkStyle *style);
135 /* Make style an exact duplicate of src.
137 void (*copy) (GtkStyle *style,
140 /* Create an empty style of the same type as this style.
141 * The default implementation, which does
142 * g_object_new (G_OBJECT_TYPE (style), NULL);
143 * should work in most cases.
145 GtkStyle *(*clone) (GtkStyle *style);
147 /* Initialize the GtkStyle with the values in the GtkRcStyle.
148 * should chain to the parent implementation.
150 void (*init_from_rc) (GtkStyle *style,
151 GtkRcStyle *rc_style);
153 void (*set_background) (GtkStyle *style,
155 GtkStateType state_type);
158 GdkPixbuf * (* render_icon) (GtkStyle *style,
159 const GtkIconSource *source,
160 GtkTextDirection direction,
164 const gchar *detail);
169 void (*draw_hline) (GtkStyle *style,
171 GtkStateType state_type,
178 void (*draw_vline) (GtkStyle *style,
180 GtkStateType state_type,
187 void (*draw_shadow) (GtkStyle *style,
189 GtkStateType state_type,
190 GtkShadowType shadow_type,
198 void (*draw_polygon) (GtkStyle *style,
200 GtkStateType state_type,
201 GtkShadowType shadow_type,
208 void (*draw_arrow) (GtkStyle *style,
210 GtkStateType state_type,
211 GtkShadowType shadow_type,
215 GtkArrowType arrow_type,
221 void (*draw_diamond) (GtkStyle *style,
223 GtkStateType state_type,
224 GtkShadowType shadow_type,
232 void (*draw_string) (GtkStyle *style,
234 GtkStateType state_type,
240 const gchar *string);
241 void (*draw_box) (GtkStyle *style,
243 GtkStateType state_type,
244 GtkShadowType shadow_type,
252 void (*draw_flat_box) (GtkStyle *style,
254 GtkStateType state_type,
255 GtkShadowType shadow_type,
263 void (*draw_check) (GtkStyle *style,
265 GtkStateType state_type,
266 GtkShadowType shadow_type,
274 void (*draw_option) (GtkStyle *style,
276 GtkStateType state_type,
277 GtkShadowType shadow_type,
285 void (*draw_tab) (GtkStyle *style,
287 GtkStateType state_type,
288 GtkShadowType shadow_type,
296 void (*draw_shadow_gap) (GtkStyle *style,
298 GtkStateType state_type,
299 GtkShadowType shadow_type,
307 GtkPositionType gap_side,
310 void (*draw_box_gap) (GtkStyle *style,
312 GtkStateType state_type,
313 GtkShadowType shadow_type,
321 GtkPositionType gap_side,
324 void (*draw_extension) (GtkStyle *style,
326 GtkStateType state_type,
327 GtkShadowType shadow_type,
335 GtkPositionType gap_side);
336 void (*draw_focus) (GtkStyle *style,
338 GtkStateType state_type,
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,
379 GtkExpanderStyle expander_style);
380 void (*draw_layout) (GtkStyle *style,
382 GtkStateType state_type,
389 PangoLayout *layout);
390 void (*draw_resize_grip) (GtkStyle *style,
392 GtkStateType state_type,
402 /* Padding for future expansion */
403 void (*_gtk_reserved1) (void);
404 void (*_gtk_reserved2) (void);
405 void (*_gtk_reserved3) (void);
406 void (*_gtk_reserved4) (void);
407 void (*_gtk_reserved5) (void);
408 void (*_gtk_reserved6) (void);
409 void (*_gtk_reserved7) (void);
410 void (*_gtk_reserved8) (void);
411 void (*_gtk_reserved9) (void);
412 void (*_gtk_reserved10) (void);
413 void (*_gtk_reserved11) (void);
414 void (*_gtk_reserved12) (void);
425 GType gtk_style_get_type (void) G_GNUC_CONST;
426 GtkStyle* gtk_style_new (void);
427 GtkStyle* gtk_style_copy (GtkStyle *style);
428 GtkStyle* gtk_style_attach (GtkStyle *style,
430 void gtk_style_detach (GtkStyle *style);
432 #ifndef GTK_DISABLE_DEPRECATED
433 GtkStyle* gtk_style_ref (GtkStyle *style);
434 void gtk_style_unref (GtkStyle *style);
436 GdkFont * gtk_style_get_font (GtkStyle *style);
437 void gtk_style_set_font (GtkStyle *style,
439 #endif /* GTK_DISABLE_DEPRECATED */
441 void gtk_style_set_background (GtkStyle *style,
443 GtkStateType state_type);
444 void gtk_style_apply_default_background (GtkStyle *style,
447 GtkStateType state_type,
454 GtkIconSet* gtk_style_lookup_icon_set (GtkStyle *style,
455 const gchar *stock_id);
456 GdkPixbuf* gtk_style_render_icon (GtkStyle *style,
457 const GtkIconSource *source,
458 GtkTextDirection direction,
462 const gchar *detail);
463 #ifndef GTK_DISABLE_DEPRECATED
464 void gtk_draw_hline (GtkStyle *style,
466 GtkStateType state_type,
470 void gtk_draw_vline (GtkStyle *style,
472 GtkStateType state_type,
476 void gtk_draw_shadow (GtkStyle *style,
478 GtkStateType state_type,
479 GtkShadowType shadow_type,
484 void gtk_draw_polygon (GtkStyle *style,
486 GtkStateType state_type,
487 GtkShadowType shadow_type,
491 void gtk_draw_arrow (GtkStyle *style,
493 GtkStateType state_type,
494 GtkShadowType shadow_type,
495 GtkArrowType arrow_type,
501 void gtk_draw_diamond (GtkStyle *style,
503 GtkStateType state_type,
504 GtkShadowType shadow_type,
509 void gtk_draw_box (GtkStyle *style,
511 GtkStateType state_type,
512 GtkShadowType shadow_type,
517 void gtk_draw_flat_box (GtkStyle *style,
519 GtkStateType state_type,
520 GtkShadowType shadow_type,
525 void gtk_draw_check (GtkStyle *style,
527 GtkStateType state_type,
528 GtkShadowType shadow_type,
533 void gtk_draw_option (GtkStyle *style,
535 GtkStateType state_type,
536 GtkShadowType shadow_type,
541 void gtk_draw_tab (GtkStyle *style,
543 GtkStateType state_type,
544 GtkShadowType shadow_type,
549 void gtk_draw_shadow_gap (GtkStyle *style,
551 GtkStateType state_type,
552 GtkShadowType shadow_type,
557 GtkPositionType gap_side,
560 void gtk_draw_box_gap (GtkStyle *style,
562 GtkStateType state_type,
563 GtkShadowType shadow_type,
568 GtkPositionType gap_side,
571 void gtk_draw_extension (GtkStyle *style,
573 GtkStateType state_type,
574 GtkShadowType shadow_type,
579 GtkPositionType gap_side);
580 void gtk_draw_focus (GtkStyle *style,
586 void gtk_draw_slider (GtkStyle *style,
588 GtkStateType state_type,
589 GtkShadowType shadow_type,
594 GtkOrientation orientation);
595 void gtk_draw_handle (GtkStyle *style,
597 GtkStateType state_type,
598 GtkShadowType shadow_type,
603 GtkOrientation orientation);
604 void gtk_draw_expander (GtkStyle *style,
606 GtkStateType state_type,
609 GtkExpanderStyle expander_style);
610 void gtk_draw_layout (GtkStyle *style,
612 GtkStateType state_type,
616 PangoLayout *layout);
617 void gtk_draw_resize_grip (GtkStyle *style,
619 GtkStateType state_type,
625 #endif /* GTK_DISABLE_DEPRECATED */
627 void gtk_paint_hline (GtkStyle *style,
629 GtkStateType state_type,
636 void gtk_paint_vline (GtkStyle *style,
638 GtkStateType state_type,
645 void gtk_paint_shadow (GtkStyle *style,
647 GtkStateType state_type,
648 GtkShadowType shadow_type,
656 void gtk_paint_polygon (GtkStyle *style,
658 GtkStateType state_type,
659 GtkShadowType shadow_type,
666 void gtk_paint_arrow (GtkStyle *style,
668 GtkStateType state_type,
669 GtkShadowType shadow_type,
673 GtkArrowType arrow_type,
679 void gtk_paint_diamond (GtkStyle *style,
681 GtkStateType state_type,
682 GtkShadowType shadow_type,
690 void gtk_paint_box (GtkStyle *style,
692 GtkStateType state_type,
693 GtkShadowType shadow_type,
701 void gtk_paint_flat_box (GtkStyle *style,
703 GtkStateType state_type,
704 GtkShadowType shadow_type,
712 void gtk_paint_check (GtkStyle *style,
714 GtkStateType state_type,
715 GtkShadowType shadow_type,
723 void gtk_paint_option (GtkStyle *style,
725 GtkStateType state_type,
726 GtkShadowType shadow_type,
734 void gtk_paint_tab (GtkStyle *style,
736 GtkStateType state_type,
737 GtkShadowType shadow_type,
745 void gtk_paint_shadow_gap (GtkStyle *style,
747 GtkStateType state_type,
748 GtkShadowType shadow_type,
756 GtkPositionType gap_side,
759 void gtk_paint_box_gap (GtkStyle *style,
761 GtkStateType state_type,
762 GtkShadowType shadow_type,
770 GtkPositionType gap_side,
773 void gtk_paint_extension (GtkStyle *style,
775 GtkStateType state_type,
776 GtkShadowType shadow_type,
784 GtkPositionType gap_side);
785 void gtk_paint_focus (GtkStyle *style,
787 GtkStateType state_type,
795 void gtk_paint_slider (GtkStyle *style,
797 GtkStateType state_type,
798 GtkShadowType shadow_type,
806 GtkOrientation orientation);
807 void gtk_paint_handle (GtkStyle *style,
809 GtkStateType state_type,
810 GtkShadowType shadow_type,
818 GtkOrientation orientation);
819 void gtk_paint_expander (GtkStyle *style,
821 GtkStateType state_type,
827 GtkExpanderStyle expander_style);
828 void gtk_paint_layout (GtkStyle *style,
830 GtkStateType state_type,
837 PangoLayout *layout);
839 void gtk_paint_resize_grip (GtkStyle *style,
841 GtkStateType state_type,
852 GtkBorder *gtk_border_copy (const GtkBorder *border);
853 void gtk_border_free (GtkBorder *border);
855 /* --- private API --- */
856 const GValue* _gtk_style_peek_property_value (GtkStyle *style,
859 GtkRcPropertyParser parser);
863 #ifndef GTK_DISABLE_DEPRECATED
864 #define gtk_style_apply_default_pixmap(s,gw,st,a,x,y,w,h) gtk_style_apply_default_background (s,gw,1,st,a,x,y,w,h)
865 void gtk_draw_string (GtkStyle *style,
867 GtkStateType state_type,
870 const gchar *string);
871 void gtk_paint_string (GtkStyle *style,
873 GtkStateType state_type,
879 const gchar *string);
880 #endif /* GTK_DISABLE_DEPRECATED */
882 void _gtk_draw_insertion_cursor (GtkWidget *widget,
883 GdkDrawable *drawable,
885 GdkRectangle *location,
886 GtkTextDirection direction,
887 gboolean draw_arrow);
891 #endif /* __cplusplus */
894 #endif /* __GTK_STYLE_H__ */