| 1 | /* GTK - The GIMP Toolkit |
| 2 | * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald |
| 3 | * |
| 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. |
| 8 | * |
| 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. |
| 13 | * |
| 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. |
| 18 | */ |
| 19 | |
| 20 | /* |
| 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/. |
| 25 | */ |
| 26 | |
| 27 | #ifndef __GTK_RC_H__ |
| 28 | #define __GTK_RC_H__ |
| 29 | |
| 30 | |
| 31 | #if defined(GTK_DISABLE_SINGLE_INCLUDES) && !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) |
| 32 | #error "Only <gtk/gtk.h> can be included directly." |
| 33 | #endif |
| 34 | |
| 35 | #include <gtk/gtkstyle.h> |
| 36 | |
| 37 | G_BEGIN_DECLS |
| 38 | |
| 39 | /* Forward declarations */ |
| 40 | typedef struct _GtkIconFactory GtkIconFactory; |
| 41 | typedef struct _GtkRcContext GtkRcContext; |
| 42 | |
| 43 | typedef struct _GtkRcStyleClass GtkRcStyleClass; |
| 44 | |
| 45 | #define GTK_TYPE_RC_STYLE (gtk_rc_style_get_type ()) |
| 46 | #define GTK_RC_STYLE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_RC_STYLE, GtkRcStyle)) |
| 47 | #define GTK_RC_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_RC_STYLE, GtkRcStyleClass)) |
| 48 | #define GTK_IS_RC_STYLE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GTK_TYPE_RC_STYLE)) |
| 49 | #define GTK_IS_RC_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_RC_STYLE)) |
| 50 | #define GTK_RC_STYLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_RC_STYLE, GtkRcStyleClass)) |
| 51 | |
| 52 | typedef enum |
| 53 | { |
| 54 | GTK_RC_FG = 1 << 0, |
| 55 | GTK_RC_BG = 1 << 1, |
| 56 | GTK_RC_TEXT = 1 << 2, |
| 57 | GTK_RC_BASE = 1 << 3 |
| 58 | } GtkRcFlags; |
| 59 | |
| 60 | struct _GtkRcStyle |
| 61 | { |
| 62 | GObject parent_instance; |
| 63 | |
| 64 | /*< public >*/ |
| 65 | |
| 66 | gchar *name; |
| 67 | gchar *bg_pixmap_name[5]; |
| 68 | PangoFontDescription *font_desc; |
| 69 | |
| 70 | GtkRcFlags color_flags[5]; |
| 71 | GdkColor fg[5]; |
| 72 | GdkColor bg[5]; |
| 73 | GdkColor text[5]; |
| 74 | GdkColor base[5]; |
| 75 | |
| 76 | gint xthickness; |
| 77 | gint ythickness; |
| 78 | |
| 79 | /*< private >*/ |
| 80 | GArray *rc_properties; |
| 81 | |
| 82 | /* list of RC style lists including this RC style */ |
| 83 | GSList *rc_style_lists; |
| 84 | |
| 85 | GSList *icon_factories; |
| 86 | |
| 87 | guint engine_specified : 1; /* The RC file specified the engine */ |
| 88 | }; |
| 89 | |
| 90 | struct _GtkRcStyleClass |
| 91 | { |
| 92 | GObjectClass parent_class; |
| 93 | |
| 94 | /* Create an empty RC style of the same type as this RC style. |
| 95 | * The default implementation, which does |
| 96 | * g_object_new (G_OBJECT_TYPE (style), NULL); |
| 97 | * should work in most cases. |
| 98 | */ |
| 99 | GtkRcStyle * (*create_rc_style) (GtkRcStyle *rc_style); |
| 100 | |
| 101 | /* Fill in engine specific parts of GtkRcStyle by parsing contents |
| 102 | * of brackets. Returns G_TOKEN_NONE if successful, otherwise returns |
| 103 | * the token it expected but didn't get. |
| 104 | */ |
| 105 | guint (*parse) (GtkRcStyle *rc_style, |
| 106 | GtkSettings *settings, |
| 107 | GScanner *scanner); |
| 108 | |
| 109 | /* Combine RC style data from src into dest. If overridden, this |
| 110 | * function should chain to the parent. |
| 111 | */ |
| 112 | void (*merge) (GtkRcStyle *dest, |
| 113 | GtkRcStyle *src); |
| 114 | |
| 115 | /* Create an empty style suitable to this RC style |
| 116 | */ |
| 117 | GtkStyle * (*create_style) (GtkRcStyle *rc_style); |
| 118 | |
| 119 | /* Padding for future expansion */ |
| 120 | void (*_gtk_reserved1) (void); |
| 121 | void (*_gtk_reserved2) (void); |
| 122 | void (*_gtk_reserved3) (void); |
| 123 | void (*_gtk_reserved4) (void); |
| 124 | }; |
| 125 | |
| 126 | #ifdef G_OS_WIN32 |
| 127 | /* Reserve old names for DLL ABI backward compatibility */ |
| 128 | #define gtk_rc_add_default_file gtk_rc_add_default_file_utf8 |
| 129 | #define gtk_rc_set_default_files gtk_rc_set_default_files_utf8 |
| 130 | #define gtk_rc_parse gtk_rc_parse_utf8 |
| 131 | #endif |
| 132 | |
| 133 | void _gtk_rc_init (void); |
| 134 | GSList* _gtk_rc_parse_widget_class_path (const gchar *pattern); |
| 135 | void _gtk_rc_free_widget_class_path (GSList *list); |
| 136 | gboolean _gtk_rc_match_widget_class (GSList *list, |
| 137 | gint length, |
| 138 | gchar *path, |
| 139 | gchar *path_reversed); |
| 140 | |
| 141 | void gtk_rc_add_default_file (const gchar *filename); |
| 142 | void gtk_rc_set_default_files (gchar **filenames); |
| 143 | gchar** gtk_rc_get_default_files (void); |
| 144 | GtkStyle* gtk_rc_get_style (GtkWidget *widget); |
| 145 | GtkStyle* gtk_rc_get_style_by_paths (GtkSettings *settings, |
| 146 | const char *widget_path, |
| 147 | const char *class_path, |
| 148 | GType type); |
| 149 | |
| 150 | gboolean gtk_rc_reparse_all_for_settings (GtkSettings *settings, |
| 151 | gboolean force_load); |
| 152 | void gtk_rc_reset_styles (GtkSettings *settings); |
| 153 | |
| 154 | gchar* gtk_rc_find_pixmap_in_path (GtkSettings *settings, |
| 155 | GScanner *scanner, |
| 156 | const gchar *pixmap_file); |
| 157 | |
| 158 | void gtk_rc_parse (const gchar *filename); |
| 159 | void gtk_rc_parse_string (const gchar *rc_string); |
| 160 | gboolean gtk_rc_reparse_all (void); |
| 161 | |
| 162 | #ifndef GTK_DISABLE_DEPRECATED |
| 163 | void gtk_rc_add_widget_name_style (GtkRcStyle *rc_style, |
| 164 | const gchar *pattern); |
| 165 | void gtk_rc_add_widget_class_style (GtkRcStyle *rc_style, |
| 166 | const gchar *pattern); |
| 167 | void gtk_rc_add_class_style (GtkRcStyle *rc_style, |
| 168 | const gchar *pattern); |
| 169 | #endif /* GTK_DISABLE_DEPRECATED */ |
| 170 | |
| 171 | |
| 172 | GType gtk_rc_style_get_type (void) G_GNUC_CONST; |
| 173 | GtkRcStyle* gtk_rc_style_new (void); |
| 174 | GtkRcStyle* gtk_rc_style_copy (GtkRcStyle *orig); |
| 175 | |
| 176 | #ifndef GTK_DISABLE_DEPRECATED |
| 177 | void gtk_rc_style_ref (GtkRcStyle *rc_style); |
| 178 | void gtk_rc_style_unref (GtkRcStyle *rc_style); |
| 179 | #endif |
| 180 | |
| 181 | gchar* gtk_rc_find_module_in_path (const gchar *module_file); |
| 182 | gchar* gtk_rc_get_theme_dir (void); |
| 183 | gchar* gtk_rc_get_module_dir (void); |
| 184 | gchar* gtk_rc_get_im_module_path (void); |
| 185 | gchar* gtk_rc_get_im_module_file (void); |
| 186 | |
| 187 | /* private functions/definitions */ |
| 188 | typedef enum { |
| 189 | GTK_RC_TOKEN_INVALID = G_TOKEN_LAST, |
| 190 | GTK_RC_TOKEN_INCLUDE, |
| 191 | GTK_RC_TOKEN_NORMAL, |
| 192 | GTK_RC_TOKEN_ACTIVE, |
| 193 | GTK_RC_TOKEN_PRELIGHT, |
| 194 | GTK_RC_TOKEN_SELECTED, |
| 195 | GTK_RC_TOKEN_INSENSITIVE, |
| 196 | GTK_RC_TOKEN_FG, |
| 197 | GTK_RC_TOKEN_BG, |
| 198 | GTK_RC_TOKEN_TEXT, |
| 199 | GTK_RC_TOKEN_BASE, |
| 200 | GTK_RC_TOKEN_XTHICKNESS, |
| 201 | GTK_RC_TOKEN_YTHICKNESS, |
| 202 | GTK_RC_TOKEN_FONT, |
| 203 | GTK_RC_TOKEN_FONTSET, |
| 204 | GTK_RC_TOKEN_FONT_NAME, |
| 205 | GTK_RC_TOKEN_BG_PIXMAP, |
| 206 | GTK_RC_TOKEN_PIXMAP_PATH, |
| 207 | GTK_RC_TOKEN_STYLE, |
| 208 | GTK_RC_TOKEN_BINDING, |
| 209 | GTK_RC_TOKEN_BIND, |
| 210 | GTK_RC_TOKEN_WIDGET, |
| 211 | GTK_RC_TOKEN_WIDGET_CLASS, |
| 212 | GTK_RC_TOKEN_CLASS, |
| 213 | GTK_RC_TOKEN_LOWEST, |
| 214 | GTK_RC_TOKEN_GTK, |
| 215 | GTK_RC_TOKEN_APPLICATION, |
| 216 | GTK_RC_TOKEN_THEME, |
| 217 | GTK_RC_TOKEN_RC, |
| 218 | GTK_RC_TOKEN_HIGHEST, |
| 219 | GTK_RC_TOKEN_ENGINE, |
| 220 | GTK_RC_TOKEN_MODULE_PATH, |
| 221 | GTK_RC_TOKEN_IM_MODULE_PATH, |
| 222 | GTK_RC_TOKEN_IM_MODULE_FILE, |
| 223 | GTK_RC_TOKEN_STOCK, |
| 224 | GTK_RC_TOKEN_LTR, |
| 225 | GTK_RC_TOKEN_RTL, |
| 226 | GTK_RC_TOKEN_COLOR, |
| 227 | GTK_RC_TOKEN_UNBIND, |
| 228 | GTK_RC_TOKEN_LAST |
| 229 | } GtkRcTokenType; |
| 230 | |
| 231 | GScanner* gtk_rc_scanner_new (void); |
| 232 | guint gtk_rc_parse_color (GScanner *scanner, |
| 233 | GdkColor *color); |
| 234 | guint gtk_rc_parse_color_full (GScanner *scanner, |
| 235 | GtkRcStyle *style, |
| 236 | GdkColor *color); |
| 237 | guint gtk_rc_parse_state (GScanner *scanner, |
| 238 | GtkStateType *state); |
| 239 | guint gtk_rc_parse_priority (GScanner *scanner, |
| 240 | GtkPathPriorityType *priority); |
| 241 | |
| 242 | /* rc properties |
| 243 | * (structure forward declared in gtkstyle.h) |
| 244 | */ |
| 245 | struct _GtkRcProperty |
| 246 | { |
| 247 | /* quark-ified property identifier like "GtkScrollbar::spacing" */ |
| 248 | GQuark type_name; |
| 249 | GQuark property_name; |
| 250 | |
| 251 | /* fields similar to GtkSettingsValue */ |
| 252 | gchar *origin; |
| 253 | GValue value; |
| 254 | }; |
| 255 | const GtkRcProperty* _gtk_rc_style_lookup_rc_property (GtkRcStyle *rc_style, |
| 256 | GQuark type_name, |
| 257 | GQuark property_name); |
| 258 | void _gtk_rc_style_set_rc_property (GtkRcStyle *rc_style, |
| 259 | GtkRcProperty *property); |
| 260 | void _gtk_rc_style_unset_rc_property (GtkRcStyle *rc_style, |
| 261 | GQuark type_name, |
| 262 | GQuark property_name); |
| 263 | |
| 264 | GSList * _gtk_rc_style_get_color_hashes (GtkRcStyle *rc_style); |
| 265 | |
| 266 | const gchar* _gtk_rc_context_get_default_font_name (GtkSettings *settings); |
| 267 | void _gtk_rc_context_destroy (GtkSettings *settings); |
| 268 | |
| 269 | G_END_DECLS |
| 270 | |
| 271 | #endif /* __GTK_RC_H__ */ |
| 272 | |