From: Cody Russell Date: Fri, 1 Feb 2008 23:25:18 +0000 (+0000) Subject: modules/engines/ms-windows/xp_theme.[ch] X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;h=47663fd346b22446de634f31e03ae2d527ce82c9;p=~andy%2Fgtk modules/engines/ms-windows/xp_theme.[ch] 2008-02-01 Cody Russell * modules/engines/ms-windows/xp_theme.[ch] * modules/engines/ms-windows/xp_theme_defs.h * modules/engines/ms-windows/msw_rc_style.c * modules/engines/ms-windows/msw_theme_main.c * modules/engines/ms-windows/msw_style.c: Re-indented and generally attempted to stylize more like the rest of the gtk+ stack's code. svn path=/trunk/; revision=19455 --- diff --git a/ChangeLog b/ChangeLog index 51290fe7c..e7d1d0833 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-02-01 Cody Russell + + * modules/engines/ms-windows/xp_theme.[ch] + * modules/engines/ms-windows/xp_theme_defs.h + * modules/engines/ms-windows/msw_rc_style.c + * modules/engines/ms-windows/msw_theme_main.c + * modules/engines/ms-windows/msw_style.c: Re-indented and generally + attempted to stylize more like the rest of the gtk+ stack's code. + 2008-02-01 Michael Natterer * tests/testgtk.c: initialize GdkColor structs to fix warning diff --git a/modules/engines/ms-windows/msw_rc_style.c b/modules/engines/ms-windows/msw_rc_style.c index 6b9b68c38..b80f71332 100755 --- a/modules/engines/ms-windows/msw_rc_style.c +++ b/modules/engines/ms-windows/msw_rc_style.c @@ -32,45 +32,45 @@ static GtkRcStyleClass *parent_class; GType msw_type_rc_style = 0; void -msw_rc_style_register_type (GTypeModule * module) +msw_rc_style_register_type (GTypeModule *module) { - static const GTypeInfo object_info = { - sizeof (MswRcStyleClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) msw_rc_style_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (MswRcStyle), - 0, /* n_preallocs */ - (GInstanceInitFunc) msw_rc_style_init, - }; + static const GTypeInfo object_info = { + sizeof (MswRcStyleClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) msw_rc_style_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (MswRcStyle), + 0, /* n_preallocs */ + (GInstanceInitFunc) msw_rc_style_init, + }; - msw_type_rc_style = g_type_module_register_type (module, - GTK_TYPE_RC_STYLE, - "MswRcStyle", - &object_info, 0); + msw_type_rc_style = g_type_module_register_type (module, + GTK_TYPE_RC_STYLE, + "MswRcStyle", + &object_info, 0); } static void -msw_rc_style_init (MswRcStyle * style) +msw_rc_style_init (MswRcStyle *style) { } static void -msw_rc_style_class_init (MswRcStyleClass * klass) +msw_rc_style_class_init (MswRcStyleClass *klass) { - GtkRcStyleClass *rc_style_class = GTK_RC_STYLE_CLASS (klass); + GtkRcStyleClass *rc_style_class = GTK_RC_STYLE_CLASS (klass); - parent_class = g_type_class_peek_parent (klass); + parent_class = g_type_class_peek_parent (klass); - rc_style_class->create_style = msw_rc_style_create_style; + rc_style_class->create_style = msw_rc_style_create_style; } /* Create an empty style suitable to this RC style */ static GtkStyle * -msw_rc_style_create_style (GtkRcStyle * rc_style) +msw_rc_style_create_style (GtkRcStyle *rc_style) { - return g_object_new (MSW_TYPE_STYLE, NULL); + return g_object_new (MSW_TYPE_STYLE, NULL); } diff --git a/modules/engines/ms-windows/msw_style.c b/modules/engines/ms-windows/msw_style.c index eafc2c072..aabf8f8e7 100755 --- a/modules/engines/ms-windows/msw_style.c +++ b/modules/engines/ms-windows/msw_style.c @@ -44,8 +44,11 @@ #include "gdk/win32/gdkwin32.h" -static HDC get_window_dc(GtkStyle * style, GdkWindow * window, GtkStateType state_type, gint x, gint y, gint width, gint height, RECT *rect); -static void release_window_dc(GtkStyle * style, GdkWindow * window, GtkStateType state_type); +static HDC get_window_dc (GtkStyle *style, GdkWindow *window, + GtkStateType state_type, gint x, gint y, gint width, + gint height, RECT *rect); +static void release_window_dc (GtkStyle *style, GdkWindow *window, + GtkStateType state_type); /* Default values, not normally used @@ -61,147 +64,150 @@ static HPEN g_dark_pen = NULL; typedef enum { - CHECK_AA, - CHECK_BASE, - CHECK_BLACK, - CHECK_DARK, - CHECK_LIGHT, - CHECK_MID, - CHECK_TEXT, - CHECK_INCONSISTENT, - RADIO_BASE, - RADIO_BLACK, - RADIO_DARK, - RADIO_LIGHT, - RADIO_MID, - RADIO_TEXT + CHECK_AA, + CHECK_BASE, + CHECK_BLACK, + CHECK_DARK, + CHECK_LIGHT, + CHECK_MID, + CHECK_TEXT, + CHECK_INCONSISTENT, + RADIO_BASE, + RADIO_BLACK, + RADIO_DARK, + RADIO_LIGHT, + RADIO_MID, + RADIO_TEXT } Part; #define PART_SIZE 13 static const guint8 check_aa_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const guint8 check_base_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x07, 0xfc, 0x07, 0xfc, 0x07, - 0xfc, 0x07, 0xfc, - 0x07, 0xfc, 0x07, 0xfc, 0x07, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x07, 0xfc, 0x07, 0xfc, 0x07, + 0xfc, 0x07, 0xfc, + 0x07, 0xfc, 0x07, 0xfc, 0x07, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; static const guint8 check_black_bits[] = { - 0x00, 0x00, 0xfe, 0x0f, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x02, - 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00 + 0x00, 0x00, 0xfe, 0x0f, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, + 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00 }; static const guint8 check_dark_bits[] = { - 0xff, 0x1f, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x01, - 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00 + 0xff, 0x1f, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00 }; static const guint8 check_light_bits[] = { - 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, - 0x00, 0x10, 0x00, - 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0xfe, 0x1f + 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, + 0x00, 0x10, 0x00, + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0xfe, 0x1f }; static const guint8 check_mid_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, - 0x00, 0x08, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0xfc, 0x0f, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, + 0x00, 0x08, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0xfc, 0x0f, 0x00, 0x00 }; static const guint8 check_text_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x88, 0x03, - 0xd8, 0x01, 0xf8, - 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x88, 0x03, + 0xd8, 0x01, 0xf8, + 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const char check_inconsistent_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xf0, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x03, 0xf0, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const guint8 radio_base_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0xf8, 0x03, 0xfc, 0x07, 0xfc, 0x07, - 0xfc, 0x07, 0xfc, - 0x07, 0xfc, 0x07, 0xf8, 0x03, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0xf8, 0x03, 0xfc, 0x07, 0xfc, 0x07, + 0xfc, 0x07, 0xfc, + 0x07, 0xfc, 0x07, 0xf8, 0x03, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00 }; static const guint8 radio_black_bits[] = { - 0x00, 0x00, 0xf0, 0x01, 0x0c, 0x02, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x02, - 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + 0x00, 0x00, 0xf0, 0x01, 0x0c, 0x02, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, + 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const guint8 radio_dark_bits[] = { - 0xf0, 0x01, 0x0c, 0x06, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x01, - 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 + 0xf0, 0x01, 0x0c, 0x06, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, + 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const guint8 radio_light_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, - 0x00, 0x10, 0x00, - 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x0c, 0x06, 0xf0, 0x01 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, + 0x00, 0x10, 0x00, + 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x0c, 0x06, 0xf0, 0x01 }; static const guint8 radio_mid_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, - 0x00, 0x08, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x04, 0x0c, 0x06, 0xf0, 0x01, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, + 0x00, 0x08, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x04, 0x0c, 0x06, 0xf0, 0x01, 0x00, 0x00 }; static const guint8 radio_text_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xf0, 0x01, - 0xf0, 0x01, 0xf0, - 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xf0, 0x01, + 0xf0, 0x01, 0xf0, + 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static struct { - const guint8 *bits; - GdkBitmap *bmap; -} parts[] = -{ - {check_aa_bits, NULL}, - {check_base_bits, NULL}, - {check_black_bits, NULL}, - {check_dark_bits, NULL}, - {check_light_bits, NULL}, - {check_mid_bits, NULL}, - {check_text_bits, NULL}, - {check_inconsistent_bits, NULL}, - {radio_base_bits, NULL}, - {radio_black_bits, NULL}, - {radio_dark_bits, NULL}, - {radio_light_bits, NULL}, - {radio_mid_bits, NULL}, - {radio_text_bits, NULL} + const guint8 *bits; + GdkBitmap *bmap; +} parts[] = { + { check_aa_bits, NULL }, + { check_base_bits, NULL }, + { check_black_bits, NULL }, + { check_dark_bits, NULL }, + { check_light_bits, NULL }, + { check_mid_bits, NULL }, + { check_text_bits, NULL }, + { check_inconsistent_bits, NULL }, + { radio_base_bits, NULL }, + { radio_black_bits, NULL }, + { radio_dark_bits, NULL }, + { radio_light_bits, NULL }, + { radio_mid_bits, NULL }, + { radio_text_bits, NULL } }; static gboolean -get_system_font (XpThemeClass klazz, XpThemeFont type, LOGFONT * out_lf) +get_system_font (XpThemeClass klazz, XpThemeFont type, LOGFONT *out_lf) { #if 0 - /* TODO: this causes crashes later because the font name is in UCS2, and - the pango fns don't deal with that gracefully */ - if (xp_theme_get_system_font (klazz, type, out_lf)) - return TRUE; - else + /* TODO: this causes crashes later because the font name is in UCS2, and + the pango fns don't deal with that gracefully */ + if (xp_theme_get_system_font (klazz, type, out_lf)) + { + return TRUE; + } + else #endif - { - NONCLIENTMETRICS ncm; + { + NONCLIENTMETRICS ncm; - ncm.cbSize = sizeof (NONCLIENTMETRICS); + ncm.cbSize = sizeof (NONCLIENTMETRICS); - if (SystemParametersInfo (SPI_GETNONCLIENTMETRICS, - sizeof (NONCLIENTMETRICS), &ncm, 0)) - { - if (type == XP_THEME_FONT_CAPTION) - *out_lf = ncm.lfCaptionFont; - else if (type == XP_THEME_FONT_MENU) - *out_lf = ncm.lfMenuFont; - else if (type == XP_THEME_FONT_STATUS) - *out_lf = ncm.lfStatusFont; - else - *out_lf = ncm.lfMessageFont; - - return TRUE; - } + if (SystemParametersInfo (SPI_GETNONCLIENTMETRICS, + sizeof (NONCLIENTMETRICS), &ncm, 0)) + { + if (type == XP_THEME_FONT_CAPTION) + *out_lf = ncm.lfCaptionFont; + else if (type == XP_THEME_FONT_MENU) + *out_lf = ncm.lfMenuFont; + else if (type == XP_THEME_FONT_STATUS) + *out_lf = ncm.lfStatusFont; + else + *out_lf = ncm.lfMessageFont; + + return TRUE; } - return FALSE; + } + + return FALSE; } /***************************** BEGIN STOLEN FROM PANGO *****************************/ @@ -241,176 +247,198 @@ get_system_font (XpThemeClass klazz, XpThemeFont type, LOGFONT * out_lf) struct name_header { - guint16 format_selector; - guint16 num_records; - guint16 string_storage_offset; + guint16 format_selector; + guint16 num_records; + guint16 string_storage_offset; }; struct name_record { - guint16 platform_id; - guint16 encoding_id; - guint16 language_id; - guint16 name_id; - guint16 string_length; - guint16 string_offset; + guint16 platform_id; + guint16 encoding_id; + guint16 language_id; + guint16 name_id; + guint16 string_length; + guint16 string_offset; }; static gboolean pango_win32_get_name_header (HDC hdc, struct name_header *header) { - if (GetFontData (hdc, NAME, 0, header, sizeof (*header)) != - sizeof (*header)) - return FALSE; + if (GetFontData (hdc, NAME, 0, header, sizeof (*header)) != sizeof (*header)) + return FALSE; - header->num_records = GUINT16_FROM_BE (header->num_records); - header->string_storage_offset = - GUINT16_FROM_BE (header->string_storage_offset); + header->num_records = GUINT16_FROM_BE (header->num_records); + header->string_storage_offset = GUINT16_FROM_BE (header->string_storage_offset); - return TRUE; + return TRUE; } static gboolean pango_win32_get_name_record (HDC hdc, gint i, struct name_record *record) { - if (GetFontData (hdc, NAME, 6 + i * sizeof (*record), - record, sizeof (*record)) != sizeof (*record)) - return FALSE; + if (GetFontData (hdc, NAME, 6 + i * sizeof (*record), + record, sizeof (*record)) != sizeof (*record)) + { + return FALSE; + } - record->platform_id = GUINT16_FROM_BE (record->platform_id); - record->encoding_id = GUINT16_FROM_BE (record->encoding_id); - record->language_id = GUINT16_FROM_BE (record->language_id); - record->name_id = GUINT16_FROM_BE (record->name_id); - record->string_length = GUINT16_FROM_BE (record->string_length); - record->string_offset = GUINT16_FROM_BE (record->string_offset); + record->platform_id = GUINT16_FROM_BE (record->platform_id); + record->encoding_id = GUINT16_FROM_BE (record->encoding_id); + record->language_id = GUINT16_FROM_BE (record->language_id); + record->name_id = GUINT16_FROM_BE (record->name_id); + record->string_length = GUINT16_FROM_BE (record->string_length); + record->string_offset = GUINT16_FROM_BE (record->string_offset); - return TRUE; + return TRUE; } static gchar * -get_family_name (LOGFONT * lfp, HDC pango_win32_hdc) +get_family_name (LOGFONT *lfp, HDC pango_win32_hdc) { - HFONT hfont; - HFONT oldhfont; + HFONT hfont; + HFONT oldhfont; - struct name_header header; - struct name_record record; + struct name_header header; + struct name_record record; - gint unicode_ix = -1, mac_ix = -1, microsoft_ix = -1; - gint name_ix; - gchar *codeset; + gint unicode_ix = -1, mac_ix = -1, microsoft_ix = -1; + gint name_ix; + gchar *codeset; - gchar *string = NULL; - gchar *name; + gchar *string = NULL; + gchar *name; + + size_t i, l, nbytes; + + /* If lfFaceName is ASCII, assume it is the common (English) name for the + font. Is this valid? Do some TrueType fonts have different names in + French, German, etc, and does the system return these if the locale is + set to use French, German, etc? */ + l = strlen (lfp->lfFaceName); + for (i = 0; i < l; i++) + { + if (lfp->lfFaceName[i] < ' ' || lfp->lfFaceName[i] > '~') + { + break; + } + } - size_t i, l, nbytes; + if (i == l) + return g_strdup (lfp->lfFaceName); - /* If lfFaceName is ASCII, assume it is the common (English) name for the - font. Is this valid? Do some TrueType fonts have different names in - French, German, etc, and does the system return these if the locale is - set to use French, German, etc? */ - l = strlen (lfp->lfFaceName); - for (i = 0; i < l; i++) - if (lfp->lfFaceName[i] < ' ' || lfp->lfFaceName[i] > '~') - break; + if ((hfont = CreateFontIndirect (lfp)) == NULL) + goto fail0; - if (i == l) - return g_strdup (lfp->lfFaceName); + if ((oldhfont = (HFONT) SelectObject (pango_win32_hdc, hfont)) == NULL) + goto fail1; - if ((hfont = CreateFontIndirect (lfp)) == NULL) - goto fail0; + if (!pango_win32_get_name_header (pango_win32_hdc, &header)) + goto fail2; - if ((oldhfont = (HFONT) SelectObject (pango_win32_hdc, hfont)) == NULL) - goto fail1; + PING (("%d name records", header.num_records)); - if (!pango_win32_get_name_header (pango_win32_hdc, &header)) + for (i = 0; i < header.num_records; i++) + { + if (!pango_win32_get_name_record (pango_win32_hdc, i, &record)) goto fail2; - PING (("%d name records", header.num_records)); + if ((record.name_id != 1 && record.name_id != 16) || record.string_length <= 0) + continue; + + PING (("platform:%d encoding:%d language:%04x name_id:%d", + record.platform_id, record.encoding_id, record.language_id, + record.name_id)); - for (i = 0; i < header.num_records; i++) + if (record.platform_id == APPLE_UNICODE_PLATFORM_ID || + record.platform_id == ISO_PLATFORM_ID) + { + unicode_ix = i; + } + else if (record.platform_id == MACINTOSH_PLATFORM_ID && record.encoding_id == 0 && /* Roman + */ + record.language_id == 0) /* English */ + { + mac_ix = i; + } + else if (record.platform_id == MICROSOFT_PLATFORM_ID) { - if (!pango_win32_get_name_record (pango_win32_hdc, i, &record)) - goto fail2; + if ((microsoft_ix == -1 || + PRIMARYLANGID (record.language_id) == LANG_ENGLISH) && + (record.encoding_id == SYMBOL_ENCODING_ID || + record.encoding_id == UNICODE_ENCODING_ID || + record.encoding_id == UCS4_ENCODING_ID)) + { + microsoft_ix = i; + } + } + } - if ((record.name_id != 1 && record.name_id != 16) - || record.string_length <= 0) - continue; + if (microsoft_ix >= 0) + name_ix = microsoft_ix; + else if (mac_ix >= 0) + name_ix = mac_ix; + else if (unicode_ix >= 0) + name_ix = unicode_ix; + else + goto fail2; - PING (("platform:%d encoding:%d language:%04x name_id:%d", - record.platform_id, record.encoding_id, record.language_id, - record.name_id)); + if (!pango_win32_get_name_record (pango_win32_hdc, name_ix, &record)) + goto fail2; - if (record.platform_id == APPLE_UNICODE_PLATFORM_ID || - record.platform_id == ISO_PLATFORM_ID) - unicode_ix = i; - else if (record.platform_id == MACINTOSH_PLATFORM_ID && record.encoding_id == 0 && /* Roman - */ - record.language_id == 0) /* English */ - mac_ix = i; - else if (record.platform_id == MICROSOFT_PLATFORM_ID) - if ((microsoft_ix == -1 || - PRIMARYLANGID (record.language_id) == LANG_ENGLISH) && - (record.encoding_id == SYMBOL_ENCODING_ID || - record.encoding_id == UNICODE_ENCODING_ID || - record.encoding_id == UCS4_ENCODING_ID)) - microsoft_ix = i; - } - - if (microsoft_ix >= 0) - name_ix = microsoft_ix; - else if (mac_ix >= 0) - name_ix = mac_ix; - else if (unicode_ix >= 0) - name_ix = unicode_ix; - else - goto fail2; + string = g_malloc (record.string_length + 1); + if (GetFontData (pango_win32_hdc, NAME, + header.string_storage_offset + record.string_offset, + string, record.string_length) != record.string_length) + goto fail2; - if (!pango_win32_get_name_record (pango_win32_hdc, name_ix, &record)) - goto fail2; + string[record.string_length] = '\0'; - string = g_malloc (record.string_length + 1); - if (GetFontData (pango_win32_hdc, NAME, - header.string_storage_offset + record.string_offset, - string, record.string_length) != record.string_length) - goto fail2; + if (name_ix == microsoft_ix) + { + if (record.encoding_id == SYMBOL_ENCODING_ID || + record.encoding_id == UNICODE_ENCODING_ID) + { + codeset = "UTF-16BE"; + } + else + { + codeset = "UCS-4BE"; + } + } + else if (name_ix == mac_ix) + { + codeset = "MacRoman"; + } + else /* name_ix == unicode_ix */ + { + codeset = "UCS-4BE"; + } - string[record.string_length] = '\0'; - - if (name_ix == microsoft_ix) - if (record.encoding_id == SYMBOL_ENCODING_ID || - record.encoding_id == UNICODE_ENCODING_ID) - codeset = "UTF-16BE"; - else - codeset = "UCS-4BE"; - else if (name_ix == mac_ix) - codeset = "MacRoman"; - else /* name_ix == unicode_ix */ - codeset = "UCS-4BE"; - - name = - g_convert (string, record.string_length, "UTF-8", codeset, NULL, - &nbytes, NULL); - if (name == NULL) - goto fail2; - g_free (string); - PING (("%s", name)); + name = g_convert (string, record.string_length, "UTF-8", codeset, NULL, + &nbytes, NULL); + if (name == NULL) + goto fail2; + + g_free (string); + + PING (("%s", name)); - SelectObject (pango_win32_hdc, oldhfont); - DeleteObject (hfont); + SelectObject (pango_win32_hdc, oldhfont); + DeleteObject (hfont); - return name; + return name; - fail2: - g_free (string); - SelectObject (pango_win32_hdc, oldhfont); +fail2: + g_free (string); + SelectObject (pango_win32_hdc, oldhfont); - fail1: - DeleteObject (hfont); +fail1: + DeleteObject (hfont); - fail0: - return g_locale_to_utf8 (lfp->lfFaceName, -1, NULL, NULL, NULL); +fail0: + return g_locale_to_utf8 (lfp->lfFaceName, -1, NULL, NULL, NULL); } /***************************** END STOLEN FROM PANGO *****************************/ @@ -419,78 +447,80 @@ static char * sys_font_to_pango_font (XpThemeClass klazz, XpThemeFont type, char *buf, size_t bufsiz) { - HDC hDC; - HWND hwnd; - LOGFONT lf; - int pt_size; - const char *weight; - const char *style; - char *font; + HDC hDC; + HWND hwnd; + LOGFONT lf; + int pt_size; + const char *weight; + const char *style; + char *font; - if (get_system_font (klazz, type, &lf)) + if (get_system_font (klazz, type, &lf)) + { + switch (lf.lfWeight) { - switch (lf.lfWeight) - { - case FW_THIN: - case FW_EXTRALIGHT: - weight = "Ultra-Light"; - break; - - case FW_LIGHT: - weight = "Light"; - break; - - case FW_BOLD: - weight = "Bold"; - break; - - case FW_SEMIBOLD: - weight = "Semi-Bold"; - break; - - case FW_ULTRABOLD: - weight = "Ultra-Bold"; - break; - - case FW_HEAVY: - weight = "Heavy"; - break; - - default: - weight = ""; - break; - } + case FW_THIN: + case FW_EXTRALIGHT: + weight = "Ultra-Light"; + break; - if (lf.lfItalic) - style = "Italic"; - else - style = ""; + case FW_LIGHT: + weight = "Light"; + break; - hwnd = GetDesktopWindow (); - hDC = GetDC (hwnd); - if (hDC) - { - pt_size = -MulDiv (lf.lfHeight, 72, - GetDeviceCaps (hDC, LOGPIXELSY)); - } - else - pt_size = 10; + case FW_BOLD: + weight = "Bold"; + break; + + case FW_SEMIBOLD: + weight = "Semi-Bold"; + break; - font = get_family_name (&lf, hDC); + case FW_ULTRABOLD: + weight = "Ultra-Bold"; + break; - if (hDC) - ReleaseDC (hwnd, hDC); + case FW_HEAVY: + weight = "Heavy"; + break; - if(!(font && *font)) - return NULL; + default: + weight = ""; + break; + } - g_snprintf (buf, bufsiz, "%s %s %s %d", font, style, weight, pt_size); - g_free (font); + if (lf.lfItalic) + style = "Italic"; + else + style = ""; - return buf; + hwnd = GetDesktopWindow (); + hDC = GetDC (hwnd); + if (hDC) + { + pt_size = -MulDiv (lf.lfHeight, 72, + GetDeviceCaps (hDC, LOGPIXELSY)); + } + else + { + pt_size = 10; } - return NULL; + font = get_family_name (&lf, hDC); + + if (hDC) + ReleaseDC (hwnd, hDC); + + if (!(font && *font)) + return NULL; + + g_snprintf (buf, bufsiz, "%s %s %s %d", font, style, weight, pt_size); + g_free (font); + + return buf; + } + + return NULL; } /* missing from ms's header files */ @@ -504,880 +534,878 @@ sys_font_to_pango_font (XpThemeClass klazz, XpThemeFont type, char *buf, #define XP_THEME_CLASS_TEXT XP_THEME_CLASS_BUTTON static void -setup_menu_settings (GtkSettings * settings) +setup_menu_settings (GtkSettings *settings) { - int menu_delay; - gboolean win95 = FALSE; - OSVERSIONINFOEX osvi; - GObjectClass *klazz = G_OBJECT_GET_CLASS (G_OBJECT (settings)); + int menu_delay; + gboolean win95 = FALSE; + OSVERSIONINFOEX osvi; + GObjectClass *klazz = G_OBJECT_GET_CLASS (G_OBJECT (settings)); - ZeroMemory (&osvi, sizeof (OSVERSIONINFOEX)); - osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX); + ZeroMemory (&osvi, sizeof (OSVERSIONINFOEX)); + osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX); - if (!GetVersionEx ((OSVERSIONINFO *) & osvi)) - win95 = TRUE; /* assume the worst */ + if (!GetVersionEx ((OSVERSIONINFO *) & osvi)) + win95 = TRUE; /* assume the worst */ - if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) - if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) - win95 = TRUE; + if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) + { + if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) + { + win95 = TRUE; + } + } - if (!win95) + if (!win95) + { + if (SystemParametersInfo (SPI_GETMENUSHOWDELAY, 0, &menu_delay, 0)) { - if (SystemParametersInfo - (SPI_GETMENUSHOWDELAY, 0, &menu_delay, 0)) + if (klazz) + { + if (g_object_class_find_property + (klazz, "gtk-menu-bar-popup-delay")) + { + g_object_set (settings, + "gtk-menu-bar-popup-delay", 0, NULL); + } + if (g_object_class_find_property + (klazz, "gtk-menu-popup-delay")) + { + g_object_set (settings, + "gtk-menu-popup-delay", menu_delay, NULL); + } + if (g_object_class_find_property + (klazz, "gtk-menu-popdown-delay")) { - if (klazz) - { - if (g_object_class_find_property - (klazz, "gtk-menu-bar-popup-delay")) - { - g_object_set (settings, - "gtk-menu-bar-popup-delay", - 0, NULL); - } - if (g_object_class_find_property - (klazz, "gtk-menu-popup-delay")) - { - g_object_set (settings, - "gtk-menu-popup-delay", - menu_delay, NULL); - } - if (g_object_class_find_property - (klazz, "gtk-menu-popdown-delay")) - { - g_object_set (settings, - "gtk-menu-popdown-delay", - menu_delay, NULL); - } - } + g_object_set (settings, + "gtk-menu-popdown-delay", menu_delay, NULL); } + } } + } } void msw_style_setup_system_settings (void) { - GtkSettings *settings; - int cursor_blink_time; + GtkSettings *settings; + int cursor_blink_time; - settings = gtk_settings_get_default (); - if (!settings) - return; + settings = gtk_settings_get_default (); + if (!settings) + return; - cursor_blink_time = GetCaretBlinkTime (); - g_object_set (settings, "gtk-cursor-blink", cursor_blink_time > 0, NULL); + cursor_blink_time = GetCaretBlinkTime (); + g_object_set (settings, "gtk-cursor-blink", cursor_blink_time > 0, NULL); - if (cursor_blink_time > 0) - g_object_set (settings, "gtk-cursor-blink-time", - 2 * cursor_blink_time, NULL); + if (cursor_blink_time > 0) + { + g_object_set (settings, "gtk-cursor-blink-time", + 2 * cursor_blink_time, NULL); + } - g_object_set (settings, "gtk-double-click-distance", - GetSystemMetrics (SM_CXDOUBLECLK), NULL); - g_object_set (settings, "gtk-double-click-time", GetDoubleClickTime (), - NULL); - g_object_set (settings, "gtk-dnd-drag-threshold", - GetSystemMetrics (SM_CXDRAG), NULL); + g_object_set (settings, "gtk-double-click-distance", + GetSystemMetrics (SM_CXDOUBLECLK), NULL); + g_object_set (settings, "gtk-double-click-time", GetDoubleClickTime (), + NULL); + g_object_set (settings, "gtk-dnd-drag-threshold", + GetSystemMetrics (SM_CXDRAG), NULL); - setup_menu_settings (settings); + setup_menu_settings (settings); - /* - http://developer.gnome.org/doc/API/2.0/gtk/GtkSettings.html - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/systemparametersinfo.asp - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getsystemmetrics.asp */ + /* + http://developer.gnome.org/doc/API/2.0/gtk/GtkSettings.html + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/systemparametersinfo.asp + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getsystemmetrics.asp */ } static void -setup_system_font (GtkStyle * style) +setup_system_font (GtkStyle *style) { - char buf[256], *font; /* It's okay, lfFaceName is smaller than 32 + char buf[256], *font; /* It's okay, lfFaceName is smaller than 32 chars */ - if ((font = sys_font_to_pango_font (XP_THEME_CLASS_TEXT, - XP_THEME_FONT_MESSAGE, - buf, sizeof (buf))) != NULL) + if ((font = sys_font_to_pango_font (XP_THEME_CLASS_TEXT, + XP_THEME_FONT_MESSAGE, + buf, sizeof (buf))) != NULL) + { + if (style->font_desc) { - if (style->font_desc) - pango_font_description_free (style->font_desc); - - style->font_desc = pango_font_description_from_string (font); + pango_font_description_free (style->font_desc); } + + style->font_desc = pango_font_description_from_string (font); + } } static void sys_color_to_gtk_color (XpThemeClass klazz, int id, GdkColor * pcolor) { - DWORD color; + DWORD color; - if (!xp_theme_get_system_color (klazz, id, &color)) - color = GetSysColor (id); + if (!xp_theme_get_system_color (klazz, id, &color)) + color = GetSysColor (id); - pcolor->pixel = color; - pcolor->red = (GetRValue (color) << 8) | GetRValue (color); - pcolor->green = (GetGValue (color) << 8) | GetGValue (color); - pcolor->blue = (GetBValue (color) << 8) | GetBValue (color); + pcolor->pixel = color; + pcolor->red = (GetRValue (color) << 8) | GetRValue (color); + pcolor->green = (GetGValue (color) << 8) | GetGValue (color); + pcolor->blue = (GetBValue (color) << 8) | GetBValue (color); } static int get_system_metric (XpThemeClass klazz, int id) { - int rval; + int rval; - if (!xp_theme_get_system_metric (klazz, id, &rval)) - rval = GetSystemMetrics (id); + if (!xp_theme_get_system_metric (klazz, id, &rval)) + rval = GetSystemMetrics (id); - return rval; + return rval; } static void setup_msw_rc_style (void) { - char buf[1024], font_buf[256], *font_ptr; - char menu_bar_prelight_str[128]; - - GdkColor menu_color; - GdkColor menu_text_color; - GdkColor tooltip_back; - GdkColor tooltip_fore; - GdkColor btn_fore; - GdkColor btn_face; - GdkColor progress_back; - - GdkColor fg_prelight; - GdkColor bg_prelight; - GdkColor base_prelight; - GdkColor text_prelight; - - /* Prelight */ - sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHTTEXT, - &fg_prelight); - sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHT, - &bg_prelight); - sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHT, - &base_prelight); - sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHTTEXT, - &text_prelight); - - sys_color_to_gtk_color (XP_THEME_CLASS_MENU, COLOR_MENUTEXT, - &menu_text_color); - sys_color_to_gtk_color (XP_THEME_CLASS_MENU, COLOR_MENU, &menu_color); - - /* tooltips */ - sys_color_to_gtk_color (XP_THEME_CLASS_TOOLTIP, COLOR_INFOTEXT, - &tooltip_fore); - sys_color_to_gtk_color (XP_THEME_CLASS_TOOLTIP, COLOR_INFOBK, - &tooltip_back); - - /* text on push buttons. TODO: button shadows, backgrounds, and - highlights */ - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNTEXT, &btn_fore); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, &btn_face); - - /* progress bar background color */ - sys_color_to_gtk_color (XP_THEME_CLASS_PROGRESS, COLOR_HIGHLIGHT, - &progress_back); - - /* Enable coloring for menus. */ - font_ptr = - sys_font_to_pango_font (XP_THEME_CLASS_MENU, XP_THEME_FONT_MENU, - font_buf, sizeof (font_buf)); - g_snprintf (buf, sizeof (buf), - "style \"msw-menu\" = \"msw-default\"\n" "{\n" - "GtkMenuItem::toggle-spacing = 8\n" - "fg[PRELIGHT] = { %d, %d, %d }\n" - "bg[PRELIGHT] = { %d, %d, %d }\n" - "text[PRELIGHT] = { %d, %d, %d }\n" - "base[PRELIGHT] = { %d, %d, %d }\n" - "fg[NORMAL] = { %d, %d, %d }\n" - "bg[NORMAL] = { %d, %d, %d }\n" "%s = \"%s\"\n" - "}widget_class \"*MenuItem*\" style \"msw-menu\"\n" - "widget_class \"*GtkMenu\" style \"msw-menu\"\n" - "widget_class \"*GtkMenuShell*\" style \"msw-menu\"\n", - fg_prelight.red, fg_prelight.green, fg_prelight.blue, - bg_prelight.red, bg_prelight.green, bg_prelight.blue, - text_prelight.red, text_prelight.green, text_prelight.blue, - base_prelight.red, base_prelight.green, base_prelight.blue, - menu_text_color.red, menu_text_color.green, - menu_text_color.blue, menu_color.red, menu_color.green, - menu_color.blue, (font_ptr ? "font_name" : "#"), - (font_ptr ? font_ptr : " font name should go here")); - gtk_rc_parse_string (buf); - - if( xp_theme_is_active() ) { - *menu_bar_prelight_str = '\0'; - } - else { - g_snprintf(menu_bar_prelight_str, sizeof(menu_bar_prelight_str), - "fg[PRELIGHT] = { %d, %d, %d }\n", - menu_text_color.red, menu_text_color.green, menu_text_color.blue); - } - - /* Enable coloring for menu bars. */ - g_snprintf (buf, sizeof (buf), - "style \"msw-menu-bar\" = \"msw-menu\"\n" - "{\n" - "bg[NORMAL] = { %d, %d, %d }\n" - "%s" - "GtkMenuBar::shadow-type = %d\n" - /* - FIXME: This should be enabled once gtk+ support - GtkMenuBar::prelight-item style property. - */ - /* "GtkMenuBar::prelight-item = 1\n" */ - "}widget_class \"*MenuBar*\" style \"msw-menu-bar\"\n", - btn_face.red, btn_face.green, btn_face.blue, - menu_bar_prelight_str, - xp_theme_is_active() ? 0 : 2 ); - gtk_rc_parse_string (buf); - - g_snprintf (buf, sizeof (buf), - "style \"msw-toolbar\" = \"msw-default\"\n" - "{\n" - "GtkHandleBox::shadow-type = %s\n" - "GtkToolbar::shadow-type = %s\n" - "}widget_class \"*HandleBox*\" style \"msw-toolbar\"\n", - "etched-in", "etched-in"); - gtk_rc_parse_string (buf); - - /* enable tooltip fonts */ - font_ptr = - sys_font_to_pango_font (XP_THEME_CLASS_STATUS, XP_THEME_FONT_STATUS, - font_buf, sizeof (font_buf)); - g_snprintf (buf, sizeof (buf), - "style \"msw-tooltips-caption\" = \"msw-default\"\n" - "{fg[NORMAL] = { %d, %d, %d }\n" "%s = \"%s\"\n" - "}widget \"gtk-tooltips.GtkLabel\" style \"msw-tooltips-caption\"\n", - tooltip_fore.red, tooltip_fore.green, tooltip_fore.blue, - (font_ptr ? "font_name" : "#"), - (font_ptr ? font_ptr : " font name should go here")); - gtk_rc_parse_string (buf); - - g_snprintf (buf, sizeof (buf), - "style \"msw-tooltips\" = \"msw-default\"\n" - "{bg[NORMAL] = { %d, %d, %d }\n" - "}widget \"gtk-tooltips*\" style \"msw-tooltips\"\n", - tooltip_back.red, tooltip_back.green, tooltip_back.blue); - gtk_rc_parse_string (buf); - - /* enable font theming for status bars */ - font_ptr = - sys_font_to_pango_font (XP_THEME_CLASS_STATUS, XP_THEME_FONT_STATUS, - font_buf, sizeof (font_buf)); - g_snprintf (buf, sizeof (buf), - "style \"msw-status\" = \"msw-default\"\n" "{%s = \"%s\"\n" - "bg[NORMAL] = { %d, %d, %d }\n" - "}widget_class \"*Status*\" style \"msw-status\"\n", - (font_ptr ? "font_name" : "#"), - (font_ptr ? font_ptr : " font name should go here"), - btn_face.red, btn_face.green, btn_face.blue); - gtk_rc_parse_string (buf); - - /* enable coloring for text on buttons TODO: use GetThemeMetric for the - border and outside border */ - g_snprintf (buf, sizeof (buf), - "style \"msw-button\" = \"msw-default\"\n" - "{\n" - "bg[NORMAL] = { %d, %d, %d }\n" - "bg[PRELIGHT] = { %d, %d, %d }\n" - "bg[INSENSITIVE] = { %d, %d, %d }\n" - "fg[PRELIGHT] = { %d, %d, %d }\n" - "GtkButton::default-border = { 0, 0, 0, 0 }\n" - "GtkButton::default-outside-border = { 0, 0, 0, 0 }\n" - "GtkButton::child-displacement-x = 1\n" - "GtkButton::child-displacement-y = 1\n" - "GtkButton::focus-padding = %d\n" - "}widget_class \"*Button*\" style \"msw-button\"\n", - btn_face.red, btn_face.green, btn_face.blue, - btn_face.red, btn_face.green, btn_face.blue, - btn_face.red, btn_face.green, btn_face.blue, - btn_fore.red, btn_fore.green, btn_fore.blue, - xp_theme_is_active() ? 1 : 2 ); - gtk_rc_parse_string (buf); - - /* enable coloring for progress bars */ - g_snprintf (buf, sizeof (buf), - "style \"msw-progress\" = \"msw-default\"\n" - "{bg[PRELIGHT] = { %d, %d, %d }\n" - "bg[NORMAL] = { %d, %d, %d }\n" - "}widget_class \"*Progress*\" style \"msw-progress\"\n", - progress_back.red, - progress_back.green, - progress_back.blue, - btn_face.red, btn_face.green, btn_face.blue); - gtk_rc_parse_string (buf); - - /* scrollbar thumb width and height */ - g_snprintf (buf, sizeof (buf), - "style \"msw-vscrollbar\" = \"msw-default\"\n" - "{GtkRange::slider-width = %d\n" - "GtkRange::stepper-size = %d\n" - "GtkRange::stepper-spacing = 0\n" - "GtkRange::trough_border = 0\n" - "GtkScale::slider-length = %d\n" - "GtkScrollbar::min-slider-length = 8\n" - "}widget_class \"*VScrollbar*\" style \"msw-vscrollbar\"\n" - "widget_class \"*VScale*\" style \"msw-vscrollbar\"\n", - GetSystemMetrics (SM_CYVTHUMB), - get_system_metric (XP_THEME_CLASS_SCROLLBAR, SM_CXVSCROLL), - 11); - gtk_rc_parse_string (buf); - - g_snprintf (buf, sizeof (buf), - "style \"msw-hscrollbar\" = \"msw-default\"\n" - "{GtkRange::slider-width = %d\n" - "GtkRange::stepper-size = %d\n" - "GtkRange::stepper-spacing = 0\n" - "GtkRange::trough_border = 0\n" - "GtkScale::slider-length = %d\n" - "GtkScrollbar::min-slider-length = 8\n" - "}widget_class \"*HScrollbar*\" style \"msw-hscrollbar\"\n" - "widget_class \"*HScale*\" style \"msw-hscrollbar\"\n", - GetSystemMetrics (SM_CXHTHUMB), - get_system_metric (XP_THEME_CLASS_SCROLLBAR, SM_CYHSCROLL), - 11); - gtk_rc_parse_string (buf); - - gtk_rc_parse_string ( - "style \"msw-scrolled-window\" = \"msw-default\"\n" - "{GtkScrolledWindow::scrollbars-within-bevel = 1}\n" - "class \"GtkScrolledWindow\" style \"msw-scrolled-window\"\n"); - - /* radio/check button sizes */ - g_snprintf (buf, sizeof (buf), - "style \"msw-checkbutton\" = \"msw-button\"\n" - "{GtkCheckButton::indicator-size = 13\n" - "}widget_class \"*CheckButton*\" style \"msw-checkbutton\"\n" - "widget_class \"*RadioButton*\" style \"msw-checkbutton\"\n"); - gtk_rc_parse_string (buf); - - /* size of combo box toggle button */ - g_snprintf (buf, sizeof(buf), - "style \"msw-combobox-button\" = \"msw-default\"\n" - "{\n" - "xthickness = 0\n" - "ythickness = 0\n" - "GtkButton::default-border = { 0, 0, 0, 0 }\n" - "GtkButton::default-outside-border = { 0, 0, 0, 0 }\n" - "GtkButton::child-displacement-x = 0\n" - "GtkButton::child-displacement-y = 0\n" - "GtkWidget::focus-padding = 0\n" - "GtkWidget::focus-line-width = 0\n" - "}\n" - "widget_class \"*ComboBox*ToggleButton*\" style \"msw-combobox-button\"\n"); - gtk_rc_parse_string (buf); - - g_snprintf (buf, sizeof(buf), - "style \"msw-combobox\" = \"msw-default\"\n" - "{\n" - "GtkComboBox::shadow-type = in\n" - "xthickness = %d\n" - "ythickness = %d\n" - "}\n" - "class \"GtkComboBox\" style \"msw-combobox\"\n", - GetSystemMetrics (SM_CXEDGE), - GetSystemMetrics (SM_CYEDGE)); - gtk_rc_parse_string (buf); - - /* size of tree view header */ - g_snprintf (buf, sizeof(buf), - "style \"msw-header-button\" = \"msw-default\"\n" - "{\n" - "xthickness = 4\n" - "ythickness = %d\n" - "GtkButton::default-border = { 0, 0, 0, 0 }\n" - "GtkButton::default-outside-border = { 0, 0, 0, 0 }\n" - "GtkButton::child-displacement-x = 1\n" - "GtkButton::child-displacement-y = 1\n" - "GtkWidget::focus-padding = 0\n" - "GtkWidget::focus-line-width = 0\n" - "}\n" - "widget_class \"*TreeView*Button*\" style \"msw-header-button\"\n", - xp_theme_is_active() ? 2 : 0 ); - gtk_rc_parse_string (buf); - - /* FIXME: This should be enabled once gtk+ support GtkNotebok::prelight-tab */ - /* enable prelight tab of GtkNotebook */ - /* - g_snprintf (buf, sizeof (buf), - "style \"msw-notebook\" = \"msw-default\"\n" - "{GtkNotebook::prelight-tab=1\n" - "}widget_class \"*Notebook*\" style \"msw-notebook\"\n"); - gtk_rc_parse_string (buf); - */ - - /* FIXME: This should be enabled once gtk+ support GtkTreeView::full-row-focus */ - /* - g_snprintf (buf, sizeof (buf), - "style \"msw-treeview\" = \"msw-default\"\n" - "{GtkTreeView::full-row-focus=0\n" - "}widget_class \"*TreeView*\" style \"msw-treeview\"\n"); - gtk_rc_parse_string (buf); - */ + char buf[1024], font_buf[256], *font_ptr; + char menu_bar_prelight_str[128]; + + GdkColor menu_color; + GdkColor menu_text_color; + GdkColor tooltip_back; + GdkColor tooltip_fore; + GdkColor btn_fore; + GdkColor btn_face; + GdkColor progress_back; + + GdkColor fg_prelight; + GdkColor bg_prelight; + GdkColor base_prelight; + GdkColor text_prelight; + + /* Prelight */ + sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHTTEXT, + &fg_prelight); + sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHT, &bg_prelight); + sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHT, + &base_prelight); + sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHTTEXT, + &text_prelight); + + sys_color_to_gtk_color (XP_THEME_CLASS_MENU, COLOR_MENUTEXT, + &menu_text_color); + sys_color_to_gtk_color (XP_THEME_CLASS_MENU, COLOR_MENU, &menu_color); + + /* tooltips */ + sys_color_to_gtk_color (XP_THEME_CLASS_TOOLTIP, COLOR_INFOTEXT, + &tooltip_fore); + sys_color_to_gtk_color (XP_THEME_CLASS_TOOLTIP, COLOR_INFOBK, + &tooltip_back); + + /* text on push buttons. TODO: button shadows, backgrounds, and + highlights */ + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNTEXT, &btn_fore); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, &btn_face); + + /* progress bar background color */ + sys_color_to_gtk_color (XP_THEME_CLASS_PROGRESS, COLOR_HIGHLIGHT, + &progress_back); + + /* Enable coloring for menus. */ + font_ptr = + sys_font_to_pango_font (XP_THEME_CLASS_MENU, XP_THEME_FONT_MENU, + font_buf, sizeof (font_buf)); + g_snprintf (buf, sizeof (buf), + "style \"msw-menu\" = \"msw-default\"\n" "{\n" + "GtkMenuItem::toggle-spacing = 8\n" + "fg[PRELIGHT] = { %d, %d, %d }\n" + "bg[PRELIGHT] = { %d, %d, %d }\n" + "text[PRELIGHT] = { %d, %d, %d }\n" + "base[PRELIGHT] = { %d, %d, %d }\n" + "fg[NORMAL] = { %d, %d, %d }\n" + "bg[NORMAL] = { %d, %d, %d }\n" "%s = \"%s\"\n" + "}widget_class \"*MenuItem*\" style \"msw-menu\"\n" + "widget_class \"*GtkMenu\" style \"msw-menu\"\n" + "widget_class \"*GtkMenuShell*\" style \"msw-menu\"\n", + fg_prelight.red, fg_prelight.green, fg_prelight.blue, + bg_prelight.red, bg_prelight.green, bg_prelight.blue, + text_prelight.red, text_prelight.green, text_prelight.blue, + base_prelight.red, base_prelight.green, base_prelight.blue, + menu_text_color.red, menu_text_color.green, + menu_text_color.blue, menu_color.red, menu_color.green, + menu_color.blue, (font_ptr ? "font_name" : "#"), + (font_ptr ? font_ptr : " font name should go here")); + gtk_rc_parse_string (buf); + + if (xp_theme_is_active ()) + { + *menu_bar_prelight_str = '\0'; + } + else + { + g_snprintf (menu_bar_prelight_str, sizeof (menu_bar_prelight_str), + "fg[PRELIGHT] = { %d, %d, %d }\n", + menu_text_color.red, menu_text_color.green, + menu_text_color.blue); + } + + /* Enable coloring for menu bars. */ + g_snprintf (buf, sizeof (buf), + "style \"msw-menu-bar\" = \"msw-menu\"\n" + "{\n" + "bg[NORMAL] = { %d, %d, %d }\n" + "%s" "GtkMenuBar::shadow-type = %d\n" + /* + FIXME: This should be enabled once gtk+ support + GtkMenuBar::prelight-item style property. + */ + /* "GtkMenuBar::prelight-item = 1\n" */ + "}widget_class \"*MenuBar*\" style \"msw-menu-bar\"\n", + btn_face.red, btn_face.green, btn_face.blue, + menu_bar_prelight_str, xp_theme_is_active ()? 0 : 2); + gtk_rc_parse_string (buf); + + g_snprintf (buf, sizeof (buf), + "style \"msw-toolbar\" = \"msw-default\"\n" + "{\n" + "GtkHandleBox::shadow-type = %s\n" + "GtkToolbar::shadow-type = %s\n" + "}widget_class \"*HandleBox*\" style \"msw-toolbar\"\n", + "etched-in", "etched-in"); + gtk_rc_parse_string (buf); + + /* enable tooltip fonts */ + font_ptr = sys_font_to_pango_font (XP_THEME_CLASS_STATUS, XP_THEME_FONT_STATUS, + font_buf, sizeof (font_buf)); + g_snprintf (buf, sizeof (buf), + "style \"msw-tooltips-caption\" = \"msw-default\"\n" + "{fg[NORMAL] = { %d, %d, %d }\n" "%s = \"%s\"\n" + "}widget \"gtk-tooltips.GtkLabel\" style \"msw-tooltips-caption\"\n", + tooltip_fore.red, tooltip_fore.green, tooltip_fore.blue, + (font_ptr ? "font_name" : "#"), + (font_ptr ? font_ptr : " font name should go here")); + gtk_rc_parse_string (buf); + + g_snprintf (buf, sizeof (buf), + "style \"msw-tooltips\" = \"msw-default\"\n" + "{bg[NORMAL] = { %d, %d, %d }\n" + "}widget \"gtk-tooltips*\" style \"msw-tooltips\"\n", + tooltip_back.red, tooltip_back.green, tooltip_back.blue); + gtk_rc_parse_string (buf); + + /* enable font theming for status bars */ + font_ptr = sys_font_to_pango_font (XP_THEME_CLASS_STATUS, XP_THEME_FONT_STATUS, + font_buf, sizeof (font_buf)); + g_snprintf (buf, sizeof (buf), + "style \"msw-status\" = \"msw-default\"\n" "{%s = \"%s\"\n" + "bg[NORMAL] = { %d, %d, %d }\n" + "}widget_class \"*Status*\" style \"msw-status\"\n", + (font_ptr ? "font_name" : "#"), + (font_ptr ? font_ptr : " font name should go here"), + btn_face.red, btn_face.green, btn_face.blue); + gtk_rc_parse_string (buf); + + /* enable coloring for text on buttons TODO: use GetThemeMetric for the + border and outside border */ + g_snprintf (buf, sizeof (buf), + "style \"msw-button\" = \"msw-default\"\n" + "{\n" + "bg[NORMAL] = { %d, %d, %d }\n" + "bg[PRELIGHT] = { %d, %d, %d }\n" + "bg[INSENSITIVE] = { %d, %d, %d }\n" + "fg[PRELIGHT] = { %d, %d, %d }\n" + "GtkButton::default-border = { 0, 0, 0, 0 }\n" + "GtkButton::default-outside-border = { 0, 0, 0, 0 }\n" + "GtkButton::child-displacement-x = 1\n" + "GtkButton::child-displacement-y = 1\n" + "GtkButton::focus-padding = %d\n" + "}widget_class \"*Button*\" style \"msw-button\"\n", + btn_face.red, btn_face.green, btn_face.blue, + btn_face.red, btn_face.green, btn_face.blue, + btn_face.red, btn_face.green, btn_face.blue, + btn_fore.red, btn_fore.green, btn_fore.blue, + xp_theme_is_active ()? 1 : 2); + gtk_rc_parse_string (buf); + + /* enable coloring for progress bars */ + g_snprintf (buf, sizeof (buf), + "style \"msw-progress\" = \"msw-default\"\n" + "{bg[PRELIGHT] = { %d, %d, %d }\n" + "bg[NORMAL] = { %d, %d, %d }\n" + "}widget_class \"*Progress*\" style \"msw-progress\"\n", + progress_back.red, + progress_back.green, + progress_back.blue, + btn_face.red, btn_face.green, btn_face.blue); + gtk_rc_parse_string (buf); + + /* scrollbar thumb width and height */ + g_snprintf (buf, sizeof (buf), + "style \"msw-vscrollbar\" = \"msw-default\"\n" + "{GtkRange::slider-width = %d\n" + "GtkRange::stepper-size = %d\n" + "GtkRange::stepper-spacing = 0\n" + "GtkRange::trough_border = 0\n" + "GtkScale::slider-length = %d\n" + "GtkScrollbar::min-slider-length = 8\n" + "}widget_class \"*VScrollbar*\" style \"msw-vscrollbar\"\n" + "widget_class \"*VScale*\" style \"msw-vscrollbar\"\n", + GetSystemMetrics (SM_CYVTHUMB), + get_system_metric (XP_THEME_CLASS_SCROLLBAR, SM_CXVSCROLL), 11); + gtk_rc_parse_string (buf); + + g_snprintf (buf, sizeof (buf), + "style \"msw-hscrollbar\" = \"msw-default\"\n" + "{GtkRange::slider-width = %d\n" + "GtkRange::stepper-size = %d\n" + "GtkRange::stepper-spacing = 0\n" + "GtkRange::trough_border = 0\n" + "GtkScale::slider-length = %d\n" + "GtkScrollbar::min-slider-length = 8\n" + "}widget_class \"*HScrollbar*\" style \"msw-hscrollbar\"\n" + "widget_class \"*HScale*\" style \"msw-hscrollbar\"\n", + GetSystemMetrics (SM_CXHTHUMB), + get_system_metric (XP_THEME_CLASS_SCROLLBAR, SM_CYHSCROLL), 11); + gtk_rc_parse_string (buf); + + gtk_rc_parse_string ("style \"msw-scrolled-window\" = \"msw-default\"\n" + "{GtkScrolledWindow::scrollbars-within-bevel = 1}\n" + "class \"GtkScrolledWindow\" style \"msw-scrolled-window\"\n"); + + /* radio/check button sizes */ + g_snprintf (buf, sizeof (buf), + "style \"msw-checkbutton\" = \"msw-button\"\n" + "{GtkCheckButton::indicator-size = 13\n" + "}widget_class \"*CheckButton*\" style \"msw-checkbutton\"\n" + "widget_class \"*RadioButton*\" style \"msw-checkbutton\"\n"); + gtk_rc_parse_string (buf); + + /* size of combo box toggle button */ + g_snprintf (buf, sizeof (buf), + "style \"msw-combobox-button\" = \"msw-default\"\n" + "{\n" + "xthickness = 0\n" + "ythickness = 0\n" + "GtkButton::default-border = { 0, 0, 0, 0 }\n" + "GtkButton::default-outside-border = { 0, 0, 0, 0 }\n" + "GtkButton::child-displacement-x = 0\n" + "GtkButton::child-displacement-y = 0\n" + "GtkWidget::focus-padding = 0\n" + "GtkWidget::focus-line-width = 0\n" + "}\n" + "widget_class \"*ComboBox*ToggleButton*\" style \"msw-combobox-button\"\n"); + gtk_rc_parse_string (buf); + + g_snprintf (buf, sizeof (buf), + "style \"msw-combobox\" = \"msw-default\"\n" + "{\n" + "GtkComboBox::shadow-type = in\n" + "xthickness = %d\n" + "ythickness = %d\n" + "}\n" + "class \"GtkComboBox\" style \"msw-combobox\"\n", + GetSystemMetrics (SM_CXEDGE), GetSystemMetrics (SM_CYEDGE)); + gtk_rc_parse_string (buf); + + /* size of tree view header */ + g_snprintf (buf, sizeof (buf), + "style \"msw-header-button\" = \"msw-default\"\n" + "{\n" + "xthickness = 4\n" + "ythickness = %d\n" + "GtkButton::default-border = { 0, 0, 0, 0 }\n" + "GtkButton::default-outside-border = { 0, 0, 0, 0 }\n" + "GtkButton::child-displacement-x = 1\n" + "GtkButton::child-displacement-y = 1\n" + "GtkWidget::focus-padding = 0\n" + "GtkWidget::focus-line-width = 0\n" + "}\n" + "widget_class \"*TreeView*Button*\" style \"msw-header-button\"\n", + xp_theme_is_active ()? 2 : 0); + gtk_rc_parse_string (buf); + + /* FIXME: This should be enabled once gtk+ support GtkNotebok::prelight-tab */ + /* enable prelight tab of GtkNotebook */ + /* + g_snprintf (buf, sizeof (buf), + "style \"msw-notebook\" = \"msw-default\"\n" + "{GtkNotebook::prelight-tab=1\n" + "}widget_class \"*Notebook*\" style \"msw-notebook\"\n"); + gtk_rc_parse_string (buf); + */ + + /* FIXME: This should be enabled once gtk+ support GtkTreeView::full-row-focus */ + /* + g_snprintf (buf, sizeof (buf), + "style \"msw-treeview\" = \"msw-default\"\n" + "{GtkTreeView::full-row-focus=0\n" + "}widget_class \"*TreeView*\" style \"msw-treeview\"\n"); + gtk_rc_parse_string (buf); + */ } static void -setup_system_styles (GtkStyle * style) -{ - int i; - - /* Default background */ - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, - &style->bg[GTK_STATE_NORMAL]); - sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHT, - &style->bg[GTK_STATE_SELECTED]); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, - &style->bg[GTK_STATE_INSENSITIVE]); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, - &style->bg[GTK_STATE_ACTIVE]); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, - &style->bg[GTK_STATE_PRELIGHT]); - - /* Default base */ - sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOW, - &style->base[GTK_STATE_NORMAL]); - sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHT, - &style->base[GTK_STATE_SELECTED]); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, - &style->base[GTK_STATE_INSENSITIVE]); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, - &style->base[GTK_STATE_ACTIVE]); - sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOW, - &style->base[GTK_STATE_PRELIGHT]); - - /* Default text */ - sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOWTEXT, - &style->text[GTK_STATE_NORMAL]); - sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHTTEXT, - &style->text[GTK_STATE_SELECTED]); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_GRAYTEXT, - &style->text[GTK_STATE_INSENSITIVE]); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNTEXT, - &style->text[GTK_STATE_ACTIVE]); - sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOWTEXT, - &style->text[GTK_STATE_PRELIGHT]); - - /* Default foreground */ - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNTEXT, - &style->fg[GTK_STATE_NORMAL]); - sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHTTEXT, - &style->fg[GTK_STATE_SELECTED]); - sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_GRAYTEXT, - &style->fg[GTK_STATE_INSENSITIVE]); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNTEXT, - &style->fg[GTK_STATE_ACTIVE]); - sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOWTEXT, - &style->fg[GTK_STATE_PRELIGHT]); - - for (i = 0; i < 5; i++) - { - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_3DSHADOW, - &style->dark[i]); - sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_3DHILIGHT, - &style->light[i]); - - style->mid[i].red = - (style->light[i].red + style->dark[i].red) / 2; - style->mid[i].green = - (style->light[i].green + style->dark[i].green) / 2; - style->mid[i].blue = - (style->light[i].blue + style->dark[i].blue) / 2; - - style->text_aa[i].red = - (style->text[i].red + style->base[i].red) / 2; - style->text_aa[i].green = - (style->text[i].green + style->base[i].green) / 2; - style->text_aa[i].blue = - (style->text[i].blue + style->base[i].blue) / 2; - } +setup_system_styles (GtkStyle *style) +{ + int i; + + /* Default background */ + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, + &style->bg[GTK_STATE_NORMAL]); + sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHT, + &style->bg[GTK_STATE_SELECTED]); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, + &style->bg[GTK_STATE_INSENSITIVE]); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, + &style->bg[GTK_STATE_ACTIVE]); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, + &style->bg[GTK_STATE_PRELIGHT]); + + /* Default base */ + sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOW, + &style->base[GTK_STATE_NORMAL]); + sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHT, + &style->base[GTK_STATE_SELECTED]); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, + &style->base[GTK_STATE_INSENSITIVE]); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNFACE, + &style->base[GTK_STATE_ACTIVE]); + sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOW, + &style->base[GTK_STATE_PRELIGHT]); + + /* Default text */ + sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOWTEXT, + &style->text[GTK_STATE_NORMAL]); + sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHTTEXT, + &style->text[GTK_STATE_SELECTED]); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_GRAYTEXT, + &style->text[GTK_STATE_INSENSITIVE]); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNTEXT, + &style->text[GTK_STATE_ACTIVE]); + sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOWTEXT, + &style->text[GTK_STATE_PRELIGHT]); + + /* Default foreground */ + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNTEXT, + &style->fg[GTK_STATE_NORMAL]); + sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_HIGHLIGHTTEXT, + &style->fg[GTK_STATE_SELECTED]); + sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_GRAYTEXT, + &style->fg[GTK_STATE_INSENSITIVE]); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNTEXT, + &style->fg[GTK_STATE_ACTIVE]); + sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOWTEXT, + &style->fg[GTK_STATE_PRELIGHT]); + + for (i = 0; i < 5; i++) + { + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_3DSHADOW, + &style->dark[i]); + sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_3DHILIGHT, + &style->light[i]); + + style->mid[i].red = (style->light[i].red + style->dark[i].red) / 2; + style->mid[i].green = + (style->light[i].green + style->dark[i].green) / 2; + style->mid[i].blue = (style->light[i].blue + style->dark[i].blue) / 2; + + style->text_aa[i].red = (style->text[i].red + style->base[i].red) / 2; + style->text_aa[i].green = + (style->text[i].green + style->base[i].green) / 2; + style->text_aa[i].blue = + (style->text[i].blue + style->base[i].blue) / 2; + } } static gboolean -sanitize_size (GdkWindow * window, gint * width, gint * height) +sanitize_size (GdkWindow *window, gint *width, gint *height) { - gboolean set_bg = FALSE; + gboolean set_bg = FALSE; - if ((*width == -1) && (*height == -1)) - { - set_bg = GDK_IS_WINDOW (window); - gdk_drawable_get_size (window, width, height); - } - else if (*width == -1) - gdk_drawable_get_size (window, width, NULL); - else if (*height == -1) - gdk_drawable_get_size (window, NULL, height); + if ((*width == -1) && (*height == -1)) + { + set_bg = GDK_IS_WINDOW (window); + gdk_drawable_get_size (window, width, height); + } + else if (*width == -1) + { + gdk_drawable_get_size (window, width, NULL); + } + else if (*height == -1) + { + gdk_drawable_get_size (window, NULL, height); + } - return set_bg; + return set_bg; } static XpThemeElement -map_gtk_progress_bar_to_xp (GtkProgressBar * progress_bar, gboolean trough) +map_gtk_progress_bar_to_xp (GtkProgressBar *progress_bar, gboolean trough) { - XpThemeElement ret; + XpThemeElement ret; - switch (progress_bar->orientation) - { - case GTK_PROGRESS_LEFT_TO_RIGHT: - case GTK_PROGRESS_RIGHT_TO_LEFT: - ret = trough - ? XP_THEME_ELEMENT_PROGRESS_TROUGH_H - : XP_THEME_ELEMENT_PROGRESS_BAR_H; - break; - default: - ret = trough - ? XP_THEME_ELEMENT_PROGRESS_TROUGH_V - : XP_THEME_ELEMENT_PROGRESS_BAR_V; - break; - } - return ret; + switch (progress_bar->orientation) + { + case GTK_PROGRESS_LEFT_TO_RIGHT: + case GTK_PROGRESS_RIGHT_TO_LEFT: + ret = trough + ? XP_THEME_ELEMENT_PROGRESS_TROUGH_H + : XP_THEME_ELEMENT_PROGRESS_BAR_H; + break; + + default: + ret = trough + ? XP_THEME_ELEMENT_PROGRESS_TROUGH_V + : XP_THEME_ELEMENT_PROGRESS_BAR_V; + break; + } + + return ret; } static gboolean -is_combo_box_child (GtkWidget* w) +is_combo_box_child (GtkWidget *w) { - GtkWidget* tmp; + GtkWidget *tmp; - if (w == NULL) - return FALSE; + if (w == NULL) + return FALSE; - for (tmp = w->parent; tmp; tmp = tmp->parent) - { - if (GTK_IS_COMBO_BOX(tmp)) - return TRUE; - } + for (tmp = w->parent; tmp; tmp = tmp->parent) + { + if (GTK_IS_COMBO_BOX (tmp)) + return TRUE; + } - return FALSE; + return FALSE; } static gboolean -combo_box_draw_arrow (GtkStyle * style, - GdkWindow * window, - GtkStateType state, - GdkRectangle * area, - GtkWidget * widget) +combo_box_draw_arrow (GtkStyle *style, + GdkWindow *window, + GtkStateType state, + GdkRectangle *area, GtkWidget *widget) { - if (xp_theme_is_active ()) - return TRUE; + if (xp_theme_is_active ()) + return TRUE; - if (widget && GTK_IS_TOGGLE_BUTTON(widget->parent) ) + if (widget && GTK_IS_TOGGLE_BUTTON (widget->parent)) { - DWORD border; - RECT rect; - HDC dc; + DWORD border; + RECT rect; + HDC dc; - dc = get_window_dc( style, window, state, area->x, area->y, area->width, area->height, &rect ); - border = (GTK_TOGGLE_BUTTON(widget->parent)->active ? DFCS_PUSHED|DFCS_FLAT : 0); + dc = get_window_dc (style, window, state, area->x, area->y, area->width, + area->height, &rect); + border = (GTK_TOGGLE_BUTTON (widget->parent)-> + active ? DFCS_PUSHED | DFCS_FLAT : 0); - InflateRect( &rect, 1, 1 ); - DrawFrameControl (dc, &rect, DFC_SCROLL, DFCS_SCROLLDOWN | border); + InflateRect (&rect, 1, 1); + DrawFrameControl (dc, &rect, DFC_SCROLL, DFCS_SCROLLDOWN | border); - release_window_dc( style, window, state ); - return TRUE; + release_window_dc (style, window, state); + + return TRUE; } - return FALSE; + return FALSE; } static void -draw_part (GdkDrawable * drawable, - GdkGC * gc, GdkRectangle * area, gint x, gint y, Part part) +draw_part (GdkDrawable *drawable, + GdkGC *gc, GdkRectangle *area, gint x, gint y, Part part) { - if (area) - gdk_gc_set_clip_rectangle (gc, area); + if (area) + gdk_gc_set_clip_rectangle (gc, area); - if (!parts[part].bmap) - parts[part].bmap = gdk_bitmap_create_from_data (drawable, - parts[part].bits, - PART_SIZE, PART_SIZE); + if (!parts[part].bmap) + { + parts[part].bmap = gdk_bitmap_create_from_data (drawable, + parts[part].bits, + PART_SIZE, PART_SIZE); + } - gdk_gc_set_ts_origin (gc, x, y); - gdk_gc_set_stipple (gc, parts[part].bmap); - gdk_gc_set_fill (gc, GDK_STIPPLED); + gdk_gc_set_ts_origin (gc, x, y); + gdk_gc_set_stipple (gc, parts[part].bmap); + gdk_gc_set_fill (gc, GDK_STIPPLED); - gdk_draw_rectangle (drawable, gc, TRUE, x, y, PART_SIZE, PART_SIZE); + gdk_draw_rectangle (drawable, gc, TRUE, x, y, PART_SIZE, PART_SIZE); - gdk_gc_set_fill (gc, GDK_SOLID); + gdk_gc_set_fill (gc, GDK_SOLID); - if (area) - gdk_gc_set_clip_rectangle (gc, NULL); + if (area) + gdk_gc_set_clip_rectangle (gc, NULL); } static void -draw_check (GtkStyle * style, - GdkWindow * window, +draw_check (GtkStyle *style, + GdkWindow *window, GtkStateType state, GtkShadowType shadow, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, gint x, gint y, gint width, gint height) + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x, gint y, gint width, gint height) { - x -= (1 + PART_SIZE - width) / 2; - y -= (1 + PART_SIZE - height) / 2; + x -= (1 + PART_SIZE - width) / 2; + y -= (1 + PART_SIZE - height) / 2; - if (detail && strcmp (detail, "check") == 0) /* Menu item */ + if (detail && strcmp (detail, "check") == 0) /* Menu item */ + { + if (shadow == GTK_SHADOW_IN) { - if (shadow == GTK_SHADOW_IN) - { - draw_part (window, style->black_gc, area, x, y, - CHECK_TEXT); - draw_part (window, style->dark_gc[state], area, x, y, - CHECK_AA); - } + draw_part (window, style->black_gc, area, x, y, CHECK_TEXT); + draw_part (window, style->dark_gc[state], area, x, y, CHECK_AA); } - else + } + else + { + XpThemeElement theme_elt = XP_THEME_ELEMENT_CHECKBOX; + switch (shadow) { - XpThemeElement theme_elt = XP_THEME_ELEMENT_CHECKBOX; - switch (shadow) - { - case GTK_SHADOW_ETCHED_IN: - theme_elt = XP_THEME_ELEMENT_INCONSISTENT_CHECKBOX; - break; + case GTK_SHADOW_ETCHED_IN: + theme_elt = XP_THEME_ELEMENT_INCONSISTENT_CHECKBOX; + break; - case GTK_SHADOW_IN: - theme_elt = XP_THEME_ELEMENT_PRESSED_CHECKBOX; - break; + case GTK_SHADOW_IN: + theme_elt = XP_THEME_ELEMENT_PRESSED_CHECKBOX; + break; - default: - break; - } + default: + break; + } - if (!xp_theme_draw (window, theme_elt, - style, x, y, width, height, state, area)) - { - if( detail && !strcmp(detail, "cellcheck") ) - state = GTK_STATE_NORMAL; - - draw_part (window, style->black_gc, area, x, y, - CHECK_BLACK); - draw_part (window, style->dark_gc[state], area, x, y, - CHECK_DARK); - draw_part (window, style->mid_gc[state], area, x, y, - CHECK_MID); - draw_part (window, style->light_gc[state], area, x, y, - CHECK_LIGHT); - draw_part (window, style->base_gc[state], area, x, y, - CHECK_BASE); - - if (shadow == GTK_SHADOW_IN) - { - draw_part (window, style->text_gc[state], area, x, - y, CHECK_TEXT); - draw_part (window, style->text_aa_gc[state], area, - x, y, CHECK_AA); - } - else if (shadow == GTK_SHADOW_ETCHED_IN) - { - draw_part (window, style->text_gc[state], area, x, y, CHECK_INCONSISTENT); - draw_part (window, style->text_aa_gc[state], area, x, y, CHECK_AA); - } - } + if (!xp_theme_draw (window, theme_elt, + style, x, y, width, height, state, area)) + { + if (detail && !strcmp (detail, "cellcheck")) + state = GTK_STATE_NORMAL; + + draw_part (window, style->black_gc, area, x, y, CHECK_BLACK); + draw_part (window, style->dark_gc[state], area, x, y, CHECK_DARK); + draw_part (window, style->mid_gc[state], area, x, y, CHECK_MID); + draw_part (window, style->light_gc[state], area, x, y, CHECK_LIGHT); + draw_part (window, style->base_gc[state], area, x, y, CHECK_BASE); + + if (shadow == GTK_SHADOW_IN) + { + draw_part (window, style->text_gc[state], area, x, + y, CHECK_TEXT); + draw_part (window, style->text_aa_gc[state], area, + x, y, CHECK_AA); + } + else if (shadow == GTK_SHADOW_ETCHED_IN) + { + draw_part (window, style->text_gc[state], area, x, y, + CHECK_INCONSISTENT); + draw_part (window, style->text_aa_gc[state], area, x, y, + CHECK_AA); + } } + } } static void -draw_expander (GtkStyle * style, - GdkWindow * window, +draw_expander (GtkStyle *style, + GdkWindow *window, GtkStateType state, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x, gint y, GtkExpanderStyle expander_style) { - gint expander_size; - gint expander_semi_size; - XpThemeElement xp_expander; - - gtk_widget_style_get (widget, "expander_size", &expander_size, NULL); - - switch (expander_style) - { - case GTK_EXPANDER_COLLAPSED: - case GTK_EXPANDER_SEMI_COLLAPSED: - xp_expander = XP_THEME_ELEMENT_TREEVIEW_EXPANDER_CLOSED; - break; - default: - xp_expander = XP_THEME_ELEMENT_TREEVIEW_EXPANDER_OPENED; - break; - } - - if ((expander_size % 2) == 0) - expander_size--; - - if (expander_size > 2) - expander_size -= 2; - - if (area) - gdk_gc_set_clip_rectangle (style->fg_gc[state], area); + gint expander_size; + gint expander_semi_size; + XpThemeElement xp_expander; - expander_semi_size = expander_size / 2; - x -= expander_semi_size; - y -= expander_semi_size; + gtk_widget_style_get (widget, "expander_size", &expander_size, NULL); - if (!xp_theme_draw (window, xp_expander, style, - x, y, expander_size, expander_size, state, area)) - { - HDC dc; - RECT rect; - HPEN pen; - HGDIOBJ old_pen; + switch (expander_style) + { + case GTK_EXPANDER_COLLAPSED: + case GTK_EXPANDER_SEMI_COLLAPSED: + xp_expander = XP_THEME_ELEMENT_TREEVIEW_EXPANDER_CLOSED; + break; - dc = get_window_dc( style, window, state, x, y, expander_size, expander_size, &rect ); - FrameRect( dc, &rect, GetSysColorBrush(COLOR_GRAYTEXT) ); - InflateRect( &rect, -1, -1 ); - FillRect( dc, &rect, GetSysColorBrush(state == GTK_STATE_INSENSITIVE ? COLOR_BTNFACE : COLOR_WINDOW) ); + default: + xp_expander = XP_THEME_ELEMENT_TREEVIEW_EXPANDER_OPENED; + break; + } - InflateRect( &rect, -1, -1 ); + if ((expander_size % 2) == 0) + expander_size--; - pen = CreatePen( PS_SOLID, 1, GetSysColor(COLOR_WINDOWTEXT) ); - old_pen = SelectObject( dc, pen ); + if (expander_size > 2) + expander_size -= 2; - MoveToEx( dc, rect.left, rect.top - 2 + expander_semi_size, NULL ); - LineTo( dc, rect.right, rect.top - 2 + expander_semi_size ); + if (area) + gdk_gc_set_clip_rectangle (style->fg_gc[state], area); - if( expander_style == GTK_EXPANDER_COLLAPSED || - expander_style == GTK_EXPANDER_SEMI_COLLAPSED ) - { - MoveToEx( dc, rect.left - 2 + expander_semi_size, rect.top, NULL ); - LineTo( dc, rect.left - 2 + expander_semi_size, rect.bottom ); - } + expander_semi_size = expander_size / 2; + x -= expander_semi_size; + y -= expander_semi_size; - SelectObject( dc, old_pen ); - DeleteObject( pen ); - release_window_dc( style, window, state ); + if (!xp_theme_draw (window, xp_expander, style, + x, y, expander_size, expander_size, state, area)) + { + HDC dc; + RECT rect; + HPEN pen; + HGDIOBJ old_pen; + + dc = get_window_dc (style, window, state, x, y, expander_size, + expander_size, &rect); + FrameRect (dc, &rect, GetSysColorBrush (COLOR_GRAYTEXT)); + InflateRect (&rect, -1, -1); + FillRect (dc, &rect, + GetSysColorBrush (state == + GTK_STATE_INSENSITIVE ? COLOR_BTNFACE : + COLOR_WINDOW)); + + InflateRect (&rect, -1, -1); + + pen = CreatePen (PS_SOLID, 1, GetSysColor (COLOR_WINDOWTEXT)); + old_pen = SelectObject (dc, pen); + + MoveToEx (dc, rect.left, rect.top - 2 + expander_semi_size, NULL); + LineTo (dc, rect.right, rect.top - 2 + expander_semi_size); + + if (expander_style == GTK_EXPANDER_COLLAPSED || + expander_style == GTK_EXPANDER_SEMI_COLLAPSED) + { + MoveToEx (dc, rect.left - 2 + expander_semi_size, rect.top, NULL); + LineTo (dc, rect.left - 2 + expander_semi_size, rect.bottom); } - if (area) - gdk_gc_set_clip_rectangle (style->fg_gc[state], NULL); + SelectObject (dc, old_pen); + DeleteObject (pen); + release_window_dc (style, window, state); + } + + if (area) + gdk_gc_set_clip_rectangle (style->fg_gc[state], NULL); } static void -draw_option (GtkStyle * style, - GdkWindow * window, +draw_option (GtkStyle *style, + GdkWindow *window, GtkStateType state, GtkShadowType shadow, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, gint x, gint y, gint width, gint height) + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x, gint y, gint width, gint height) { - x -= (1 + PART_SIZE - width) / 2; - y -= (1 + PART_SIZE - height) / 2; + x -= (1 + PART_SIZE - width) / 2; + y -= (1 + PART_SIZE - height) / 2; - if (detail && strcmp (detail, "option") == 0) /* Menu item */ + if (detail && strcmp (detail, "option") == 0) /* Menu item */ + { + if (shadow == GTK_SHADOW_IN) { - if (shadow == GTK_SHADOW_IN) - draw_part (window, style->fg_gc[state], area, x, y, - RADIO_TEXT); + draw_part (window, style->fg_gc[state], area, x, y, RADIO_TEXT); } - else + } + else + { + if (xp_theme_draw (window, shadow == GTK_SHADOW_IN + ? XP_THEME_ELEMENT_PRESSED_RADIO_BUTTON + : XP_THEME_ELEMENT_RADIO_BUTTON, + style, x, y, width, height, state, area)) { - if (xp_theme_draw (window, shadow == GTK_SHADOW_IN - ? XP_THEME_ELEMENT_PRESSED_RADIO_BUTTON - : XP_THEME_ELEMENT_RADIO_BUTTON, - style, x, y, width, height, state, area)) - { - } - else - { - if( detail && !strcmp(detail, "cellradio") ) - state = GTK_STATE_NORMAL; - - draw_part (window, style->black_gc, area, x, y, - RADIO_BLACK); - draw_part (window, style->dark_gc[state], area, x, y, - RADIO_DARK); - draw_part (window, style->mid_gc[state], area, x, y, - RADIO_MID); - draw_part (window, style->light_gc[state], area, x, y, - RADIO_LIGHT); - draw_part (window, style->base_gc[state], area, x, y, - RADIO_BASE); - - if (shadow == GTK_SHADOW_IN) - draw_part (window, style->text_gc[state], area, x, y, - RADIO_TEXT); - } } + else + { + if (detail && !strcmp (detail, "cellradio")) + state = GTK_STATE_NORMAL; + + draw_part (window, style->black_gc, area, x, y, RADIO_BLACK); + draw_part (window, style->dark_gc[state], area, x, y, RADIO_DARK); + draw_part (window, style->mid_gc[state], area, x, y, RADIO_MID); + draw_part (window, style->light_gc[state], area, x, y, RADIO_LIGHT); + draw_part (window, style->base_gc[state], area, x, y, RADIO_BASE); + + if (shadow == GTK_SHADOW_IN) + draw_part (window, style->text_gc[state], area, x, y, RADIO_TEXT); + } + } } static void -draw_varrow (GdkWindow * window, - GdkGC * gc, +draw_varrow (GdkWindow *window, + GdkGC *gc, GtkShadowType shadow_type, - GdkRectangle * area, + GdkRectangle *area, GtkArrowType arrow_type, gint x, gint y, gint width, gint height) { - gint steps, extra; - gint y_start, y_increment; - gint i; + gint steps, extra; + gint y_start, y_increment; + gint i; - if (area) - gdk_gc_set_clip_rectangle (gc, area); + if (area) + gdk_gc_set_clip_rectangle (gc, area); - width = width + width % 2 - 1; /* Force odd */ - steps = 1 + width / 2; - extra = height - steps; + width = width + width % 2 - 1; /* Force odd */ + steps = 1 + width / 2; + extra = height - steps; - if (arrow_type == GTK_ARROW_DOWN) - { - y_start = y; - y_increment = 1; - } - else - { - y_start = y + height - 1; - y_increment = -1; - } + if (arrow_type == GTK_ARROW_DOWN) + { + y_start = y; + y_increment = 1; + } + else + { + y_start = y + height - 1; + y_increment = -1; + } - for (i = extra; i < height; i++) - { - gdk_draw_line (window, gc, - x + (i - extra), y_start + i * y_increment, - x + width - (i - extra) - 1, - y_start + i * y_increment); - } + for (i = extra; i < height; i++) + { + gdk_draw_line (window, gc, + x + (i - extra), y_start + i * y_increment, + x + width - (i - extra) - 1, y_start + i * y_increment); + } - if (area) - gdk_gc_set_clip_rectangle (gc, NULL); + if (area) + gdk_gc_set_clip_rectangle (gc, NULL); } static void -draw_harrow (GdkWindow * window, - GdkGC * gc, +draw_harrow (GdkWindow *window, + GdkGC *gc, GtkShadowType shadow_type, - GdkRectangle * area, + GdkRectangle *area, GtkArrowType arrow_type, gint x, gint y, gint width, gint height) { - gint steps, extra; - gint x_start, x_increment; - gint i; + gint steps, extra; + gint x_start, x_increment; + gint i; - if (area) - gdk_gc_set_clip_rectangle (gc, area); + if (area) + gdk_gc_set_clip_rectangle (gc, area); - height = height + height % 2 - 1; /* Force odd */ - steps = 1 + height / 2; - extra = width - steps; + height = height + height % 2 - 1; /* Force odd */ + steps = 1 + height / 2; + extra = width - steps; - if (arrow_type == GTK_ARROW_RIGHT) - { - x_start = x; - x_increment = 1; - } - else - { - x_start = x + width - 1; - x_increment = -1; - } + if (arrow_type == GTK_ARROW_RIGHT) + { + x_start = x; + x_increment = 1; + } + else + { + x_start = x + width - 1; + x_increment = -1; + } - for (i = extra; i < width; i++) - { - gdk_draw_line (window, gc, - x_start + i * x_increment, y + (i - extra), - x_start + i * x_increment, - y + height - (i - extra) - 1); - } + for (i = extra; i < width; i++) + { + gdk_draw_line (window, gc, + x_start + i * x_increment, y + (i - extra), + x_start + i * x_increment, y + height - (i - extra) - 1); + } - if (area) - gdk_gc_set_clip_rectangle (gc, NULL); + if (area) + gdk_gc_set_clip_rectangle (gc, NULL); } /* This function makes up for some brokeness in gtkrange.c @@ -1388,894 +1416,985 @@ draw_harrow (GdkWindow * window, * to the point we don't have room for full-sized steppers. */ static void -reverse_engineer_stepper_box (GtkWidget * range, +reverse_engineer_stepper_box (GtkWidget *range, GtkArrowType arrow_type, - gint * x, gint * y, gint * width, gint * height) + gint *x, gint *y, gint *width, gint *height) { - gint slider_width = 14, stepper_size = 14; - gint box_width; - gint box_height; + gint slider_width = 14, stepper_size = 14; + gint box_width; + gint box_height; - if (range) - { - gtk_widget_style_get (range, - "slider_width", &slider_width, - "stepper_size", &stepper_size, NULL); - } + if (range) + { + gtk_widget_style_get (range, + "slider_width", &slider_width, + "stepper_size", &stepper_size, NULL); + } - if (arrow_type == GTK_ARROW_UP || arrow_type == GTK_ARROW_DOWN) - { - box_width = slider_width; - box_height = stepper_size; - } - else - { - box_width = stepper_size; - box_height = slider_width; - } + if (arrow_type == GTK_ARROW_UP || arrow_type == GTK_ARROW_DOWN) + { + box_width = slider_width; + box_height = stepper_size; + } + else + { + box_width = stepper_size; + box_height = slider_width; + } - *x = *x - (box_width - *width) / 2; - *y = *y - (box_height - *height) / 2; - *width = box_width; - *height = box_height; + *x = *x - (box_width - *width) / 2; + *y = *y - (box_height - *height) / 2; + *width = box_width; + *height = box_height; } static XpThemeElement to_xp_arrow (GtkArrowType arrow_type) { - XpThemeElement xp_arrow; + XpThemeElement xp_arrow; - switch (arrow_type) - { - case GTK_ARROW_UP: - xp_arrow = XP_THEME_ELEMENT_ARROW_UP; - break; - case GTK_ARROW_DOWN: - xp_arrow = XP_THEME_ELEMENT_ARROW_DOWN; - break; - case GTK_ARROW_LEFT: - xp_arrow = XP_THEME_ELEMENT_ARROW_LEFT; - break; - default: - xp_arrow = XP_THEME_ELEMENT_ARROW_RIGHT; - break; - } + switch (arrow_type) + { + case GTK_ARROW_UP: + xp_arrow = XP_THEME_ELEMENT_ARROW_UP; + break; + + case GTK_ARROW_DOWN: + xp_arrow = XP_THEME_ELEMENT_ARROW_DOWN; + break; + + case GTK_ARROW_LEFT: + xp_arrow = XP_THEME_ELEMENT_ARROW_LEFT; + break; + + default: + xp_arrow = XP_THEME_ELEMENT_ARROW_RIGHT; + break; + } - return xp_arrow; + return xp_arrow; } static void -draw_arrow (GtkStyle * style, - GdkWindow * window, +draw_arrow (GtkStyle *style, + GdkWindow *window, GtkStateType state, GtkShadowType shadow, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, GtkArrowType arrow_type, gboolean fill, gint x, gint y, gint width, gint height) { - const gchar *name; - HDC dc; - RECT rect; + const gchar *name; + HDC dc; + RECT rect; - name = gtk_widget_get_name (widget); + name = gtk_widget_get_name (widget); - sanitize_size (window, &width, &height); + sanitize_size (window, &width, &height); - if (GTK_IS_ARROW(widget) && is_combo_box_child(widget)) - { - if (combo_box_draw_arrow (style, window, state, area, widget)) - { - return; - } - } + if (GTK_IS_ARROW (widget) && is_combo_box_child (widget)) + { + if (combo_box_draw_arrow (style, window, state, area, widget)) + { + return; + } + } - if (detail && strcmp (detail, "spinbutton") == 0) + if (detail && strcmp (detail, "spinbutton") == 0) + { + if (xp_theme_is_drawable (XP_THEME_ELEMENT_SPIN_BUTTON_UP)) { - if (xp_theme_is_drawable (XP_THEME_ELEMENT_SPIN_BUTTON_UP)) - { - return; - } + return; + } - width -= 2; - --height; - if( arrow_type == GTK_ARROW_DOWN ) - ++y; - ++x; + width -= 2; + --height; + if (arrow_type == GTK_ARROW_DOWN) + ++y; + ++x; - if( state == GTK_STATE_ACTIVE ) { - ++x; - ++y; - } - draw_varrow (window, style->fg_gc[state], shadow, area, - arrow_type, x, y, width, height); - return; - } - else if (detail && (!strcmp (detail, "vscrollbar") - || !strcmp (detail, "hscrollbar"))) - { - gboolean is_disabled = FALSE; - UINT btn_type = 0; - GtkScrollbar *scrollbar = GTK_SCROLLBAR (widget); - - gint box_x = x; - gint box_y = y; - gint box_width = width; - gint box_height = height; - - reverse_engineer_stepper_box (widget, arrow_type, - &box_x, &box_y, &box_width, - &box_height); - - if (scrollbar->range.adjustment->page_size >= - (scrollbar->range.adjustment->upper - - scrollbar->range.adjustment->lower)) - is_disabled = TRUE; - - if (xp_theme_draw - (window, to_xp_arrow (arrow_type), style, box_x, box_y, - box_width, box_height, state, area)) - { - } - else - { - switch (arrow_type) - { - case GTK_ARROW_UP: - btn_type = DFCS_SCROLLUP; - break; - case GTK_ARROW_DOWN: - btn_type = DFCS_SCROLLDOWN; - break; - case GTK_ARROW_LEFT: - btn_type = DFCS_SCROLLLEFT; - break; - case GTK_ARROW_RIGHT: - btn_type = DFCS_SCROLLRIGHT; - break; - case GTK_ARROW_NONE: - break; - } - if( state == GTK_STATE_INSENSITIVE ) - btn_type |= DFCS_INACTIVE; - if( widget ) { - sanitize_size (window, &width, &height); - - dc = get_window_dc( style, window, state, - box_x, box_y, box_width, box_height, &rect ); - DrawFrameControl( dc, &rect, DFC_SCROLL, - btn_type|(shadow == GTK_SHADOW_IN ? (DFCS_PUSHED|DFCS_FLAT) : 0) ); - release_window_dc( style, window, state ); - } - } + if (state == GTK_STATE_ACTIVE) + { + ++x; + ++y; } - else + + draw_varrow (window, style->fg_gc[state], shadow, area, + arrow_type, x, y, width, height); + + return; + } + else if (detail && (!strcmp (detail, "vscrollbar") + || !strcmp (detail, "hscrollbar"))) + { + gboolean is_disabled = FALSE; + UINT btn_type = 0; + GtkScrollbar *scrollbar = GTK_SCROLLBAR (widget); + + gint box_x = x; + gint box_y = y; + gint box_width = width; + gint box_height = height; + + reverse_engineer_stepper_box (widget, arrow_type, + &box_x, &box_y, &box_width, &box_height); + + if (scrollbar->range.adjustment->page_size >= + (scrollbar->range.adjustment->upper - + scrollbar->range.adjustment->lower)) { - /* draw the toolbar chevrons - waiting for GTK 2.4 */ - if (name && !strcmp (name, "gtk-toolbar-arrow")) - { - if (xp_theme_draw - (window, XP_THEME_ELEMENT_REBAR_CHEVRON, style, x, y, - width, height, state, area)) - return; - } - /* probably a gtk combo box on a toolbar */ - else if (0 /* widget->parent && GTK_IS_BUTTON + is_disabled = TRUE; + } + + if (xp_theme_draw (window, to_xp_arrow (arrow_type), style, box_x, box_y, + box_width, box_height, state, area)) + { + } + else + { + switch (arrow_type) + { + case GTK_ARROW_UP: + btn_type = DFCS_SCROLLUP; + break; + + case GTK_ARROW_DOWN: + btn_type = DFCS_SCROLLDOWN; + break; + + case GTK_ARROW_LEFT: + btn_type = DFCS_SCROLLLEFT; + break; + + case GTK_ARROW_RIGHT: + btn_type = DFCS_SCROLLRIGHT; + break; + + case GTK_ARROW_NONE: + break; + } + + if (state == GTK_STATE_INSENSITIVE) + { + btn_type |= DFCS_INACTIVE; + } + + if (widget) + { + sanitize_size (window, &width, &height); + + dc = get_window_dc (style, window, state, + box_x, box_y, box_width, box_height, &rect); + DrawFrameControl (dc, &rect, DFC_SCROLL, + btn_type | (shadow == + GTK_SHADOW_IN ? (DFCS_PUSHED | + DFCS_FLAT) : 0)); + release_window_dc (style, window, state); + } + } + } + else + { + /* draw the toolbar chevrons - waiting for GTK 2.4 */ + if (name && !strcmp (name, "gtk-toolbar-arrow")) + { + if (xp_theme_draw + (window, XP_THEME_ELEMENT_REBAR_CHEVRON, style, x, y, + width, height, state, area)) + { + return; + } + } + /* probably a gtk combo box on a toolbar */ + else if (0 /* widget->parent && GTK_IS_BUTTON (widget->parent) */ ) - { - if (xp_theme_draw - (window, XP_THEME_ELEMENT_COMBOBUTTON, style, x - 3, - widget->allocation.y + 1, width + 5, - widget->allocation.height - 4, state, area)) - return; - } + { + if (xp_theme_draw + (window, XP_THEME_ELEMENT_COMBOBUTTON, style, x - 3, + widget->allocation.y + 1, width + 5, + widget->allocation.height - 4, state, area)) + { + return; + } + } - if (arrow_type == GTK_ARROW_UP || arrow_type == GTK_ARROW_DOWN) - { - x += (width - 7) / 2; - y += (height - 5) / 2; + if (arrow_type == GTK_ARROW_UP || arrow_type == GTK_ARROW_DOWN) + { + x += (width - 7) / 2; + y += (height - 5) / 2; - draw_varrow (window, style->fg_gc[state], shadow, area, - arrow_type, x, y, 7, 5); - } - else - { - x += (width - 5) / 2; - y += (height - 7) / 2; + draw_varrow (window, style->fg_gc[state], shadow, area, + arrow_type, x, y, 7, 5); + } + else + { + x += (width - 5) / 2; + y += (height - 7) / 2; - draw_harrow (window, style->fg_gc[state], shadow, area, - arrow_type, x, y, 5, 7); - } + draw_harrow (window, style->fg_gc[state], shadow, area, + arrow_type, x, y, 5, 7); } + } } static void -option_menu_get_props (GtkWidget * widget, - GtkRequisition * indicator_size, - GtkBorder * indicator_spacing) +option_menu_get_props (GtkWidget *widget, + GtkRequisition *indicator_size, + GtkBorder *indicator_spacing) { - GtkRequisition *tmp_size = NULL; - GtkBorder *tmp_spacing = NULL; + GtkRequisition *tmp_size = NULL; + GtkBorder *tmp_spacing = NULL; - if (widget) - gtk_widget_style_get (widget, - "indicator_size", &tmp_size, - "indicator_spacing", &tmp_spacing, NULL); + if (widget) + gtk_widget_style_get (widget, + "indicator_size", &tmp_size, + "indicator_spacing", &tmp_spacing, NULL); - if (tmp_size) - { - *indicator_size = *tmp_size; - gtk_requisition_free (tmp_size); - } - else - *indicator_size = default_option_indicator_size; + if (tmp_size) + { + *indicator_size = *tmp_size; + gtk_requisition_free (tmp_size); + } + else + { + *indicator_size = default_option_indicator_size; + } - if (tmp_spacing) - { - *indicator_spacing = *tmp_spacing; - gtk_border_free (tmp_spacing); - } - else - *indicator_spacing = default_option_indicator_spacing; + if (tmp_spacing) + { + *indicator_spacing = *tmp_spacing; + gtk_border_free (tmp_spacing); + } + else + { + *indicator_spacing = default_option_indicator_spacing; + } } static gboolean -is_toolbar_child (GtkWidget * wid) +is_toolbar_child (GtkWidget *wid) { - while (wid) - { - if (GTK_IS_TOOLBAR (wid) || GTK_IS_HANDLE_BOX (wid)) - return TRUE; - else - wid = wid->parent; - } + while (wid) + { + if (GTK_IS_TOOLBAR (wid) || GTK_IS_HANDLE_BOX (wid)) + return TRUE; + else + wid = wid->parent; + } - return FALSE; + return FALSE; } static gboolean -is_menu_tool_button_child (GtkWidget * wid) +is_menu_tool_button_child (GtkWidget *wid) { - while (wid) - { - if (GTK_IS_MENU_TOOL_BUTTON (wid) ) - return TRUE; - else - wid = wid->parent; - } - return FALSE; + while (wid) + { + if (GTK_IS_MENU_TOOL_BUTTON (wid)) + return TRUE; + else + wid = wid->parent; + } + return FALSE; } -HDC get_window_dc(GtkStyle * style, GdkWindow * window, GtkStateType state_type, gint x, gint y, gint width, gint height, RECT *rect) +HDC +get_window_dc (GtkStyle *style, GdkWindow *window, GtkStateType state_type, + gint x, gint y, gint width, gint height, RECT *rect) { - int xoff, yoff; - GdkDrawable *drawable; + int xoff, yoff; + GdkDrawable *drawable; - if (!GDK_IS_WINDOW (window)) - { - xoff = 0; - yoff = 0; - drawable = window; - } - else - { - gdk_window_get_internal_paint_info (window, &drawable, &xoff, &yoff); - } + if (!GDK_IS_WINDOW (window)) + { + xoff = 0; + yoff = 0; + drawable = window; + } + else + { + gdk_window_get_internal_paint_info (window, &drawable, &xoff, &yoff); + } - rect->left = x - xoff; - rect->top = y - yoff; - rect->right = rect->left + width; - rect->bottom = rect->top + height; + rect->left = x - xoff; + rect->top = y - yoff; + rect->right = rect->left + width; + rect->bottom = rect->top + height; - return gdk_win32_hdc_get (drawable, style->dark_gc[state_type], 0); + return gdk_win32_hdc_get (drawable, style->dark_gc[state_type], 0); } -void release_window_dc(GtkStyle * style, GdkWindow * window, GtkStateType state_type) +void +release_window_dc (GtkStyle *style, GdkWindow *window, + GtkStateType state_type) { - GdkDrawable *drawable; + GdkDrawable *drawable; - if (!GDK_IS_WINDOW (window)) - { - drawable = window; - } - else - { - gdk_window_get_internal_paint_info (window, &drawable, NULL, NULL); - } + if (!GDK_IS_WINDOW (window)) + { + drawable = window; + } + else + { + gdk_window_get_internal_paint_info (window, &drawable, NULL, NULL); + } - gdk_win32_hdc_release (drawable, style->dark_gc[state_type], 0); + gdk_win32_hdc_release (drawable, style->dark_gc[state_type], 0); } -static HPEN get_light_pen() +static HPEN +get_light_pen () { - if( ! g_light_pen ) { - g_light_pen = CreatePen( PS_SOLID|PS_INSIDEFRAME, 1, GetSysColor(COLOR_BTNHIGHLIGHT) ); + if (!g_light_pen) + { + g_light_pen = CreatePen (PS_SOLID | PS_INSIDEFRAME, 1, + GetSysColor (COLOR_BTNHIGHLIGHT)); } - return g_light_pen; + + return g_light_pen; } -static HPEN get_dark_pen() +static HPEN +get_dark_pen () { - if( ! g_dark_pen ) { - g_dark_pen = CreatePen( PS_SOLID|PS_INSIDEFRAME, 1, GetSysColor(COLOR_BTNSHADOW) ); + if (!g_dark_pen) + { + g_dark_pen = CreatePen (PS_SOLID | PS_INSIDEFRAME, 1, + GetSysColor (COLOR_BTNSHADOW)); } - return g_dark_pen; + + return g_dark_pen; } static void -draw_3d_border( HDC hdc, RECT* rc, gboolean sunken ) +draw_3d_border (HDC hdc, RECT *rc, gboolean sunken) { - HPEN pen1, pen2; - HGDIOBJ old_pen; + HPEN pen1, pen2; + HGDIOBJ old_pen; - if( sunken ){ - pen1 = get_dark_pen(); - pen2 = get_light_pen(); + if (sunken) + { + pen1 = get_dark_pen (); + pen2 = get_light_pen (); } - else{ - pen1 = get_light_pen(); - pen2 = get_dark_pen(); + else + { + pen1 = get_light_pen (); + pen2 = get_dark_pen (); } - MoveToEx( hdc, rc->left, rc->bottom - 1, NULL); + MoveToEx (hdc, rc->left, rc->bottom - 1, NULL); - old_pen = SelectObject( hdc, pen1 ); - LineTo( hdc, rc->left, rc->top ); - LineTo( hdc, rc->right-1, rc->top ); - SelectObject( hdc, old_pen ); + old_pen = SelectObject (hdc, pen1); + LineTo (hdc, rc->left, rc->top); + LineTo (hdc, rc->right - 1, rc->top); + SelectObject (hdc, old_pen); - old_pen = SelectObject( hdc, pen2 ); - LineTo( hdc, rc->right-1, rc->bottom-1 ); - LineTo( hdc, rc->left, rc->bottom-1 ); - SelectObject( hdc, old_pen ); + old_pen = SelectObject (hdc, pen2); + LineTo (hdc, rc->right - 1, rc->bottom - 1); + LineTo (hdc, rc->left, rc->bottom - 1); + SelectObject (hdc, old_pen); } -static gboolean -draw_menu_item(GdkWindow* window, GtkWidget* widget, GtkStyle* style, - gint x, gint y, gint width, gint height, - GtkStateType state_type, GdkRectangle* area ) +static gboolean +draw_menu_item (GdkWindow *window, GtkWidget *widget, GtkStyle *style, + gint x, gint y, gint width, gint height, + GtkStateType state_type, GdkRectangle *area) { - GtkWidget* parent; - GtkMenuShell* bar; - HDC dc; - RECT rect; + GtkWidget *parent; + GtkMenuShell *bar; + HDC dc; + RECT rect; - if( (parent = gtk_widget_get_parent(widget)) - && GTK_IS_MENU_BAR(parent) - && !xp_theme_is_active() ) + if ((parent = gtk_widget_get_parent (widget)) + && GTK_IS_MENU_BAR (parent) && !xp_theme_is_active ()) { - bar = GTK_MENU_SHELL(parent); + bar = GTK_MENU_SHELL (parent); - dc = get_window_dc( style, window, state_type, x, y, width, height, &rect ); - if( state_type == GTK_STATE_PRELIGHT ){ - draw_3d_border( dc, &rect, bar->active ); - } - release_window_dc( style, window, state_type ); - return TRUE; + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + + if (state_type == GTK_STATE_PRELIGHT) + { + draw_3d_border (dc, &rect, bar->active); + } + + release_window_dc (style, window, state_type); + + return TRUE; } - return FALSE; + + return FALSE; } static HBRUSH -get_dither_brush( void ) +get_dither_brush (void) { - WORD pattern[8]; - HBITMAP pattern_bmp; - int i; + WORD pattern[8]; + HBITMAP pattern_bmp; + int i; - if( g_dither_brush ) - return g_dither_brush; - for ( i = 0; i < 8; i++ ) - pattern[i] = (WORD)(0x5555 << (i & 1)); - pattern_bmp = CreateBitmap(8, 8, 1, 1, &pattern); - if (pattern_bmp) { - g_dither_brush = CreatePatternBrush(pattern_bmp); - DeleteObject(pattern_bmp); - } + if (g_dither_brush) return g_dither_brush; + + for (i = 0; i < 8; i++) + { + pattern[i] = (WORD) (0x5555 << (i & 1)); + } + + pattern_bmp = CreateBitmap (8, 8, 1, 1, &pattern); + + if (pattern_bmp) + { + g_dither_brush = CreatePatternBrush (pattern_bmp); + DeleteObject (pattern_bmp); + } + + return g_dither_brush; } -static gboolean -draw_tool_button(GdkWindow* window, GtkWidget* widget, GtkStyle* style, - gint x, gint y, gint width, gint height, - GtkStateType state_type, GdkRectangle* area ) +static gboolean +draw_tool_button (GdkWindow *window, GtkWidget *widget, GtkStyle *style, + gint x, gint y, gint width, gint height, + GtkStateType state_type, GdkRectangle *area) { - HDC dc; - RECT rect; - gboolean is_toggled = FALSE; + HDC dc; + RECT rect; + gboolean is_toggled = FALSE; - if ( xp_theme_is_active() ) { - return (xp_theme_draw (window, XP_THEME_ELEMENT_TOOLBAR_BUTTON, style, - x, y, width, height, state_type, area) ); + if (xp_theme_is_active ()) + { + return (xp_theme_draw (window, XP_THEME_ELEMENT_TOOLBAR_BUTTON, style, + x, y, width, height, state_type, area)); } - if( GTK_IS_TOGGLE_BUTTON(widget) ){ - if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ) { - is_toggled = TRUE; - } + if (GTK_IS_TOGGLE_BUTTON (widget)) + { + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + { + is_toggled = TRUE; + } } - if( state_type != GTK_STATE_PRELIGHT - && state_type != GTK_STATE_ACTIVE && !is_toggled ) - return FALSE; + if (state_type != GTK_STATE_PRELIGHT + && state_type != GTK_STATE_ACTIVE && !is_toggled) + { + return FALSE; + } - dc = get_window_dc( style, window, state_type, x, y, width, height, &rect ); - if( state_type == GTK_STATE_PRELIGHT ){ - if( is_toggled ) { - FillRect( dc, &rect, GetSysColorBrush(COLOR_BTNFACE)); - } - draw_3d_border( dc, &rect, is_toggled); + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + if (state_type == GTK_STATE_PRELIGHT) + { + if (is_toggled) + { + FillRect (dc, &rect, GetSysColorBrush (COLOR_BTNFACE)); + } + + draw_3d_border (dc, &rect, is_toggled); } - else if ( state_type == GTK_STATE_ACTIVE ){ - if( is_toggled && ! is_menu_tool_button_child(widget->parent) ){ - SetTextColor( dc, GetSysColor(COLOR_3DHILIGHT) ); - SetBkColor( dc, GetSysColor(COLOR_BTNFACE) ); - FillRect( dc, &rect, get_dither_brush() ); - } - draw_3d_border( dc, &rect, TRUE ); + else if (state_type == GTK_STATE_ACTIVE) + { + if (is_toggled && !is_menu_tool_button_child (widget->parent)) + { + SetTextColor (dc, GetSysColor (COLOR_3DHILIGHT)); + SetBkColor (dc, GetSysColor (COLOR_BTNFACE)); + FillRect (dc, &rect, get_dither_brush ()); + } + + draw_3d_border (dc, &rect, TRUE); } - release_window_dc( style, window, state_type ); - return TRUE; + + release_window_dc (style, window, state_type); + + return TRUE; } static void -draw_push_button( GdkWindow* window, GtkWidget* widget, GtkStyle* style, gint x, gint y, - gint width, gint height, - GtkStateType state_type, gboolean is_default ) -{ - HDC dc; - RECT rect; - - dc = get_window_dc( style, window, state_type, - x, y, width, height, &rect ); - if( GTK_IS_TOGGLE_BUTTON(widget) ) { - if( state_type == GTK_STATE_PRELIGHT && - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ) - { - state_type = GTK_STATE_ACTIVE; - } - } - - if( state_type == GTK_STATE_ACTIVE ) { - if( GTK_IS_TOGGLE_BUTTON(widget) ) { - DrawEdge( dc, &rect, EDGE_SUNKEN, BF_RECT|BF_ADJUST); - SetTextColor( dc, GetSysColor(COLOR_3DHILIGHT) ); - SetBkColor( dc, GetSysColor(COLOR_BTNFACE) ); - FillRect( dc, &rect, get_dither_brush() ); - } - else { - FrameRect( dc, &rect, GetSysColorBrush(COLOR_WINDOWFRAME) ); - InflateRect( &rect, -1, -1 ); - FrameRect( dc, &rect, GetSysColorBrush(COLOR_BTNSHADOW) ); - InflateRect( &rect, -1, -1 ); - FillRect( dc, &rect, GetSysColorBrush(COLOR_BTNFACE) ); - } - } - else { - if( is_default || GTK_WIDGET_HAS_FOCUS(widget) ) { - FrameRect( dc, &rect, GetSysColorBrush(COLOR_WINDOWFRAME) ); - InflateRect( &rect, -1, -1 ); - } - DrawFrameControl( dc, &rect, DFC_BUTTON, DFCS_BUTTONPUSH ); +draw_push_button (GdkWindow *window, GtkWidget *widget, GtkStyle *style, + gint x, gint y, gint width, gint height, + GtkStateType state_type, gboolean is_default) +{ + HDC dc; + RECT rect; + + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + + if (GTK_IS_TOGGLE_BUTTON (widget)) + { + if (state_type == GTK_STATE_PRELIGHT && + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + { + state_type = GTK_STATE_ACTIVE; + } + } + + if (state_type == GTK_STATE_ACTIVE) + { + if (GTK_IS_TOGGLE_BUTTON (widget)) + { + DrawEdge (dc, &rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST); + SetTextColor (dc, GetSysColor (COLOR_3DHILIGHT)); + SetBkColor (dc, GetSysColor (COLOR_BTNFACE)); + FillRect (dc, &rect, get_dither_brush ()); + } + else + { + FrameRect (dc, &rect, GetSysColorBrush (COLOR_WINDOWFRAME)); + InflateRect (&rect, -1, -1); + FrameRect (dc, &rect, GetSysColorBrush (COLOR_BTNSHADOW)); + InflateRect (&rect, -1, -1); + FillRect (dc, &rect, GetSysColorBrush (COLOR_BTNFACE)); } - release_window_dc(style, window, state_type); + } + else + { + if (is_default || GTK_WIDGET_HAS_FOCUS (widget)) + { + FrameRect (dc, &rect, GetSysColorBrush (COLOR_WINDOWFRAME)); + InflateRect (&rect, -1, -1); + } + + DrawFrameControl (dc, &rect, DFC_BUTTON, DFCS_BUTTONPUSH); + } + + release_window_dc (style, window, state_type); } static void -draw_box (GtkStyle * style, - GdkWindow * window, +draw_box (GtkStyle *style, + GdkWindow *window, GtkStateType state_type, GtkShadowType shadow_type, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, gint x, gint y, gint width, gint height) -{ - if (is_combo_box_child (widget) && detail && !strcmp (detail, "button")) { - RECT rect; - HDC dc; - int cx; - - dc = get_window_dc (style, window, state_type, x, y, width - cx, height, &rect); - FillRect (dc, &rect, GetSysColorBrush(COLOR_WINDOW)); - release_window_dc (style, window, state_type); - - cx = 2 * GetSystemMetrics (SM_CXEDGE) + 16; /* TODO evaluate arrow width */ - x += width - cx; - width = cx; - - if (xp_theme_is_active () && xp_theme_draw ( - window, XP_THEME_ELEMENT_COMBOBUTTON, style, - x, y, width, height, state_type, area)) - return; - } - - if (detail && - (!strcmp (detail, "button") || !strcmp (detail, "buttondefault"))) - { - if (GTK_IS_TREE_VIEW (widget->parent) - || GTK_IS_CLIST (widget->parent)) - { - if (xp_theme_draw - (window, XP_THEME_ELEMENT_LIST_HEADER, style, x, y, - width, height, state_type, area)) - return; - else { - HDC dc; - RECT rect; - dc = get_window_dc( style, window, state_type, x, y, width, height, &rect ); - - DrawFrameControl( dc, &rect, DFC_BUTTON, DFCS_BUTTONPUSH | - (state_type == GTK_STATE_ACTIVE ? (DFCS_PUSHED|DFCS_FLAT) : 0 ) ); - release_window_dc( style, window, state_type ); - } - } - else if (is_toolbar_child (widget->parent) - || (GTK_RELIEF_NONE == gtk_button_get_relief(GTK_BUTTON(widget)) ) ) - { - if( draw_tool_button( window, widget, style, x, y, - width, height, state_type, area ) ) - { - return; - } - } - else - { - gboolean is_default = GTK_WIDGET_HAS_DEFAULT(widget); - if (xp_theme_draw - (window, - is_default ? XP_THEME_ELEMENT_DEFAULT_BUTTON : - XP_THEME_ELEMENT_BUTTON, style, x, y, width, height, - state_type, area)) - { - return; - } - draw_push_button( window, widget, style, - x, y, width, height, state_type, is_default ); - return; - } - return; - } - else if (detail && !strcmp (detail, "spinbutton")) + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x, gint y, gint width, gint height) +{ + if (is_combo_box_child (widget) && detail && !strcmp (detail, "button")) + { + RECT rect; + HDC dc; + int cx; + + dc = get_window_dc (style, window, state_type, x, y, width - cx, height, &rect); + FillRect (dc, &rect, GetSysColorBrush (COLOR_WINDOW)); + release_window_dc (style, window, state_type); + + cx = 2 * GetSystemMetrics (SM_CXEDGE) + 16; /* TODO evaluate arrow width */ + x += width - cx; + width = cx; + + if (xp_theme_is_active () + && xp_theme_draw (window, XP_THEME_ELEMENT_COMBOBUTTON, style, x, y, + width, height, state_type, area)) { - if (xp_theme_is_drawable (XP_THEME_ELEMENT_SPIN_BUTTON_UP)) - { - return; - } + return; } - else if (detail && (!strcmp (detail, "spinbutton_up") - || !strcmp (detail, "spinbutton_down"))) + } + + if (detail && + (!strcmp (detail, "button") || !strcmp (detail, "buttondefault"))) + { + if (GTK_IS_TREE_VIEW (widget->parent) || GTK_IS_CLIST (widget->parent)) { - if ( ! xp_theme_draw ( window, - (!strcmp (detail, "spinbutton_up")) - ? XP_THEME_ELEMENT_SPIN_BUTTON_UP - : XP_THEME_ELEMENT_SPIN_BUTTON_DOWN, - style, x, y, width, height, state_type, area)) - { - RECT rect; - HDC dc; - - dc = get_window_dc( style, window, state_type, - x, y, width, height, &rect ); - DrawEdge( dc, &rect, - state_type == GTK_STATE_ACTIVE ? EDGE_SUNKEN : EDGE_RAISED, BF_RECT ); - release_window_dc( style, window, state_type ); - } - return; + if (xp_theme_draw + (window, XP_THEME_ELEMENT_LIST_HEADER, style, x, y, + width, height, state_type, area)) + { + return; + } + else + { + HDC dc; + RECT rect; + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + + DrawFrameControl (dc, &rect, DFC_BUTTON, DFCS_BUTTONPUSH | + (state_type == + GTK_STATE_ACTIVE ? (DFCS_PUSHED | DFCS_FLAT) + : 0)); + release_window_dc (style, window, state_type); + } } - else if (detail && !strcmp (detail, "slider")) + else if (is_toolbar_child (widget->parent) + || (GTK_RELIEF_NONE == + gtk_button_get_relief (GTK_BUTTON (widget)))) { - if (GTK_IS_SCROLLBAR (widget)) - { - GtkScrollbar *scrollbar = GTK_SCROLLBAR (widget); - gboolean is_v = GTK_IS_VSCROLLBAR (widget); - - if (xp_theme_draw (window, - is_v - ? XP_THEME_ELEMENT_SCROLLBAR_V - : XP_THEME_ELEMENT_SCROLLBAR_H, - style, x, y, width, height, state_type, - area)) - { - XpThemeElement gripper = - (is_v ? XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_V : - XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_H); - - /* Do not display grippers on tiny scroll bars, - the limit imposed is rather arbitrary, perhaps - we can fetch the gripper geometry from - somewhere and use that... */ - if ((gripper == - XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_H - && width < 16) - || (gripper == - XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_V - && height < 16)) - { - return; - } - - xp_theme_draw (window, gripper, style, x, y, - width, height, state_type, area); - return; - } - else - { - if (scrollbar->range.adjustment->page_size >= - (scrollbar->range.adjustment->upper - - scrollbar->range.adjustment->lower)) - return; - } - } + if (draw_tool_button (window, widget, style, x, y, + width, height, state_type, area)) + { + return; + } } - else if (detail && !strcmp (detail, "bar")) + else { - if (widget && GTK_IS_PROGRESS_BAR (widget)) - { - GtkProgressBar *progress_bar = GTK_PROGRESS_BAR (widget); - XpThemeElement xp_progress_bar = - map_gtk_progress_bar_to_xp (progress_bar, FALSE); + gboolean is_default = GTK_WIDGET_HAS_DEFAULT (widget); + if (xp_theme_draw + (window, + is_default ? XP_THEME_ELEMENT_DEFAULT_BUTTON : + XP_THEME_ELEMENT_BUTTON, style, x, y, width, height, + state_type, area)) + { + return; + } - if (xp_theme_draw (window, xp_progress_bar, style, x, y, - width, height, state_type, area)) - { - return; - } + draw_push_button (window, widget, style, + x, y, width, height, state_type, is_default); - shadow_type = GTK_SHADOW_NONE; - } + return; } - else if (detail && strcmp (detail, "menuitem") == 0) + + return; + } + else if (detail && !strcmp (detail, "spinbutton")) + { + if (xp_theme_is_drawable (XP_THEME_ELEMENT_SPIN_BUTTON_UP)) { - shadow_type = GTK_SHADOW_NONE; - if( draw_menu_item(window, widget, style, - x, y, width, height, state_type, area ) ) - { - return; - } + return; } - else if (detail && !strcmp (detail, "trough")) + } + else if (detail && (!strcmp (detail, "spinbutton_up") + || !strcmp (detail, "spinbutton_down"))) + { + if (!xp_theme_draw (window, + (!strcmp (detail, "spinbutton_up")) + ? XP_THEME_ELEMENT_SPIN_BUTTON_UP + : XP_THEME_ELEMENT_SPIN_BUTTON_DOWN, + style, x, y, width, height, state_type, area)) { - if (widget && GTK_IS_PROGRESS_BAR (widget)) - { - GtkProgressBar *progress_bar = GTK_PROGRESS_BAR (widget); - XpThemeElement xp_progress_bar = - map_gtk_progress_bar_to_xp (progress_bar, TRUE); - if (xp_theme_draw - (window, xp_progress_bar, style, x, y, width, height, - state_type, area)) - { - return; - } - else - { - /* Blank in classic Windows */ - } - } - else if (widget && GTK_IS_SCROLLBAR (widget)) + RECT rect; + HDC dc; + + dc = get_window_dc (style, window, state_type, + x, y, width, height, &rect); + DrawEdge (dc, &rect, + state_type == + GTK_STATE_ACTIVE ? EDGE_SUNKEN : EDGE_RAISED, BF_RECT); + release_window_dc (style, window, state_type); + } + return; + } + else if (detail && !strcmp (detail, "slider")) + { + if (GTK_IS_SCROLLBAR (widget)) + { + GtkScrollbar *scrollbar = GTK_SCROLLBAR (widget); + gboolean is_v = GTK_IS_VSCROLLBAR (widget); + + if (xp_theme_draw (window, + is_v + ? XP_THEME_ELEMENT_SCROLLBAR_V + : XP_THEME_ELEMENT_SCROLLBAR_H, + style, x, y, width, height, state_type, area)) + { + XpThemeElement gripper = + (is_v ? XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_V : + XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_H); + + /* Do not display grippers on tiny scroll bars, + the limit imposed is rather arbitrary, perhaps + we can fetch the gripper geometry from + somewhere and use that... */ + if ((gripper == + XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_H + && width < 16) + || (gripper == + XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_V && height < 16)) { - gboolean is_vertical = GTK_IS_VSCROLLBAR (widget); - - if (xp_theme_draw (window, - is_vertical - ? XP_THEME_ELEMENT_TROUGH_V - : XP_THEME_ELEMENT_TROUGH_H, - style, - x, y, width, height, state_type, area)) - { - return; - } - else - { - HDC dc; - RECT rect; - - sanitize_size (window, &width, &height); - dc = get_window_dc( style, window, state_type, x, y, width, height, &rect ); - SetTextColor( dc, GetSysColor(COLOR_3DHILIGHT) ); - SetBkColor( dc, GetSysColor(COLOR_BTNFACE) ); - FillRect( dc, &rect, get_dither_brush() ); - release_window_dc( style, window, state_type ); - - return; - } + return; } - else if (widget && GTK_IS_SCALE (widget)) + + xp_theme_draw (window, gripper, style, x, y, + width, height, state_type, area); + return; + } + else + { + if (scrollbar->range.adjustment->page_size >= + (scrollbar->range.adjustment->upper - + scrollbar->range.adjustment->lower)) { - gboolean is_vertical = GTK_IS_VSCALE (widget); - - if (!xp_theme_is_active ()) - { - parent_class->draw_box (style, window, state_type, - GTK_SHADOW_NONE, area, - widget, detail, x, y, - width, height); - } - - if (is_vertical) - { - if (xp_theme_draw - (window, XP_THEME_ELEMENT_SCALE_TROUGH_V, - style, (2 * x + width) / 2, y, 2, height, - state_type, area)) - return; - - parent_class->draw_box (style, window, state_type, - GTK_SHADOW_ETCHED_IN, - area, NULL, NULL, - (2 * x + width) / 2, y, 1, - height); - } - else - { - if (xp_theme_draw - (window, XP_THEME_ELEMENT_SCALE_TROUGH_H, - style, x, (2 * y + height) / 2, width, 2, - state_type, area)) - return; - - parent_class->draw_box (style, window, state_type, - GTK_SHADOW_ETCHED_IN, - area, NULL, NULL, x, - (2 * y + height) / 2, - width, 1); - } - return; + return; } + } } - else if (detail && strcmp (detail, "optionmenu") == 0) + } + else if (detail && !strcmp (detail, "bar")) + { + if (widget && GTK_IS_PROGRESS_BAR (widget)) { - if (xp_theme_draw (window, XP_THEME_ELEMENT_EDIT_TEXT, - style, x, y, width, height, state_type, area)) - { - return; - } + GtkProgressBar *progress_bar = GTK_PROGRESS_BAR (widget); + XpThemeElement xp_progress_bar = + map_gtk_progress_bar_to_xp (progress_bar, FALSE); + + if (xp_theme_draw (window, xp_progress_bar, style, x, y, + width, height, state_type, area)) + { + return; + } + + shadow_type = GTK_SHADOW_NONE; } - else if (detail - && (strcmp (detail, "vscrollbar") == 0 - || strcmp (detail, "hscrollbar") == 0)) + } + else if (detail && strcmp (detail, "menuitem") == 0) + { + shadow_type = GTK_SHADOW_NONE; + if (draw_menu_item (window, widget, style, + x, y, width, height, state_type, area)) { - return; + return; } - else if (detail - && (strcmp (detail, "handlebox_bin") == 0 - || strcmp (detail, "toolbar") == 0 - || strcmp (detail, "menubar") == 0)) + } + else if (detail && !strcmp (detail, "trough")) + { + if (widget && GTK_IS_PROGRESS_BAR (widget)) { - sanitize_size( window, &width, &height ); - if (xp_theme_draw (window, XP_THEME_ELEMENT_REBAR, - style, x, y, width, height, state_type, area)) - { - return; - } + GtkProgressBar *progress_bar = GTK_PROGRESS_BAR (widget); + XpThemeElement xp_progress_bar = + map_gtk_progress_bar_to_xp (progress_bar, TRUE); + if (xp_theme_draw + (window, xp_progress_bar, style, x, y, width, height, + state_type, area)) + { + return; + } + else + { + /* Blank in classic Windows */ + } } - else if (detail && (!strcmp (detail, "handlebox"))) /* grip */ + else if (widget && GTK_IS_SCROLLBAR (widget)) { - if( !xp_theme_is_active() ) { - return; - } + gboolean is_vertical = GTK_IS_VSCROLLBAR (widget); + + if (xp_theme_draw (window, + is_vertical + ? XP_THEME_ELEMENT_TROUGH_V + : XP_THEME_ELEMENT_TROUGH_H, + style, x, y, width, height, state_type, area)) + { + return; + } + else + { + HDC dc; + RECT rect; + + sanitize_size (window, &width, &height); + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + + SetTextColor (dc, GetSysColor (COLOR_3DHILIGHT)); + SetBkColor (dc, GetSysColor (COLOR_BTNFACE)); + FillRect (dc, &rect, get_dither_brush ()); + + release_window_dc (style, window, state_type); + + return; + } } - else if (detail && !strcmp (detail, "notebook") && GTK_IS_NOTEBOOK (widget)) + else if (widget && GTK_IS_SCALE (widget)) { - GtkNotebook *notebook = GTK_NOTEBOOK (widget); + gboolean is_vertical = GTK_IS_VSCALE (widget); + + if (!xp_theme_is_active ()) + { + parent_class->draw_box (style, window, state_type, + GTK_SHADOW_NONE, area, + widget, detail, x, y, width, height); + } + + if (is_vertical) + { + if (xp_theme_draw + (window, XP_THEME_ELEMENT_SCALE_TROUGH_V, + style, (2 * x + width) / 2, y, 2, height, + state_type, area)) + { + return; + } - if (xp_theme_draw (window, XP_THEME_ELEMENT_TAB_PANE, style, - x, y, width, height, state_type, area)) + parent_class->draw_box (style, window, state_type, + GTK_SHADOW_ETCHED_IN, + area, NULL, NULL, + (2 * x + width) / 2, y, 1, height); + } + else + { + if (xp_theme_draw + (window, XP_THEME_ELEMENT_SCALE_TROUGH_H, + style, x, (2 * y + height) / 2, width, 2, + state_type, area)) { - return; + return; } + + parent_class->draw_box (style, window, state_type, + GTK_SHADOW_ETCHED_IN, + area, NULL, NULL, x, + (2 * y + height) / 2, width, 1); + } + + return; } + } + else if (detail && strcmp (detail, "optionmenu") == 0) + { + if (xp_theme_draw (window, XP_THEME_ELEMENT_EDIT_TEXT, + style, x, y, width, height, state_type, area)) + { + return; + } + } + else if (detail + && (strcmp (detail, "vscrollbar") == 0 + || strcmp (detail, "hscrollbar") == 0)) + { + return; + } + else if (detail + && (strcmp (detail, "handlebox_bin") == 0 + || strcmp (detail, "toolbar") == 0 + || strcmp (detail, "menubar") == 0)) + { + sanitize_size (window, &width, &height); + if (xp_theme_draw (window, XP_THEME_ELEMENT_REBAR, + style, x, y, width, height, state_type, area)) + { + return; + } + } + else if (detail && (!strcmp (detail, "handlebox"))) /* grip */ + { + if (!xp_theme_is_active ()) + { + return; + } + } + else if (detail && !strcmp (detail, "notebook") && GTK_IS_NOTEBOOK (widget)) + { + GtkNotebook *notebook = GTK_NOTEBOOK (widget); - else + if (xp_theme_draw (window, XP_THEME_ELEMENT_TAB_PANE, style, + x, y, width, height, state_type, area)) { - const gchar *name = gtk_widget_get_name (widget); + return; + } + } - if (name && !strcmp (name, "gtk-tooltips")) - { - if (xp_theme_draw - (window, XP_THEME_ELEMENT_TOOLTIP, style, x, y, width, - height, state_type, area)) - { - return; - } - else - { - HBRUSH brush; - RECT rect; - HDC hdc; - - hdc = get_window_dc(style, window, state_type, x, y, width, height, &rect); - - brush = GetSysColorBrush (COLOR_3DDKSHADOW); - if (brush) - FrameRect (hdc, &rect, brush); - InflateRect (&rect, -1, -1); - FillRect (hdc, &rect, - (HBRUSH) (COLOR_INFOBK + 1)); - - release_window_dc (style, window, state_type); - - return; - } + else + { + const gchar *name = gtk_widget_get_name (widget); + + if (name && !strcmp (name, "gtk-tooltips")) + { + if (xp_theme_draw + (window, XP_THEME_ELEMENT_TOOLTIP, style, x, y, width, + height, state_type, area)) + { + return; + } + else + { + HBRUSH brush; + RECT rect; + HDC hdc; + + hdc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + brush = GetSysColorBrush (COLOR_3DDKSHADOW); + + if (brush) + { + FrameRect (hdc, &rect, brush); } + + InflateRect (&rect, -1, -1); + FillRect (hdc, &rect, (HBRUSH) (COLOR_INFOBK + 1)); + + release_window_dc (style, window, state_type); + + return; + } } + } - parent_class->draw_box (style, window, state_type, shadow_type, area, - widget, detail, x, y, width, height); + parent_class->draw_box (style, window, state_type, shadow_type, area, + widget, detail, x, y, width, height); - if (detail && strcmp (detail, "optionmenu") == 0) - { - GtkRequisition indicator_size; - GtkBorder indicator_spacing; - gint vline_x; + if (detail && strcmp (detail, "optionmenu") == 0) + { + GtkRequisition indicator_size; + GtkBorder indicator_spacing; + gint vline_x; - option_menu_get_props (widget, &indicator_size, - &indicator_spacing); + option_menu_get_props (widget, &indicator_size, &indicator_spacing); - sanitize_size (window, &width, &height); + sanitize_size (window, &width, &height); - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - vline_x = - x + indicator_size.width + indicator_spacing.left + - indicator_spacing.right; - else - vline_x = - x + width - (indicator_size.width + + if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) + { + vline_x = + x + indicator_size.width + indicator_spacing.left + + indicator_spacing.right; + } + else + { + vline_x = x + width - (indicator_size.width + indicator_spacing.left + indicator_spacing.right) - style->xthickness; - parent_class->draw_vline (style, window, state_type, area, widget, - detail, - y + style->ythickness + 1, - y + height - style->ythickness - 3, - vline_x); + parent_class->draw_vline (style, window, state_type, area, widget, + detail, + y + style->ythickness + 1, + y + height - style->ythickness - 3, vline_x); } + } } static void -draw_tab (GtkStyle * style, - GdkWindow * window, +draw_tab (GtkStyle *style, + GdkWindow *window, GtkStateType state, GtkShadowType shadow, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, gint x, gint y, gint width, gint height) + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x, gint y, gint width, gint height) { - GtkRequisition indicator_size; - GtkBorder indicator_spacing; + GtkRequisition indicator_size; + GtkBorder indicator_spacing; - gint arrow_height; + gint arrow_height; - g_return_if_fail (style != NULL); - g_return_if_fail (window != NULL); + g_return_if_fail (style != NULL); + g_return_if_fail (window != NULL); - if (detail && !strcmp (detail, "optionmenutab")) + if (detail && !strcmp (detail, "optionmenutab")) + { + if (xp_theme_draw (window, XP_THEME_ELEMENT_COMBOBUTTON, + style, x - 5, widget->allocation.y + 1, + width + 10, widget->allocation.height - 2, + state, area)) { - if (xp_theme_draw (window, XP_THEME_ELEMENT_COMBOBUTTON, - style, x - 5, widget->allocation.y + 1, - width + 10, widget->allocation.height - 2, - state, area)) - { - return; - } + return; } + } - option_menu_get_props (widget, &indicator_size, &indicator_spacing); + option_menu_get_props (widget, &indicator_size, &indicator_spacing); - x += (width - indicator_size.width) / 2; - arrow_height = (indicator_size.width + 1) / 2; + x += (width - indicator_size.width) / 2; + arrow_height = (indicator_size.width + 1) / 2; - y += (height - arrow_height) / 2; + y += (height - arrow_height) / 2; - draw_varrow (window, style->black_gc, shadow, area, GTK_ARROW_DOWN, - x, y, indicator_size.width, arrow_height); + draw_varrow (window, style->black_gc, shadow, area, GTK_ARROW_DOWN, + x, y, indicator_size.width, arrow_height); } /* Draw classic Windows tab - thanks Mozilla! (no system API for this, but DrawEdge can draw all the parts of a tab) */ -static void DrawTab(HDC hdc, const RECT R, gint32 aPosition, gboolean aSelected, - gboolean aDrawLeft, gboolean aDrawRight) +static void +DrawTab (HDC hdc, const RECT R, gint32 aPosition, gboolean aSelected, + gboolean aDrawLeft, gboolean aDrawRight) { gint32 leftFlag, topFlag, rightFlag, lightFlag, shadeFlag; RECT topRect, sideRect, bottomRect, lightRect, shadeRect; @@ -2289,96 +2408,111 @@ static void DrawTab(HDC hdc, const RECT R, gint32 aPosition, gboolean aSelected, switch (aPosition) { case BF_LEFT: - leftFlag = BF_TOP; topFlag = BF_LEFT; + leftFlag = BF_TOP; + topFlag = BF_LEFT; rightFlag = BF_BOTTOM; lightFlag = BF_DIAGONAL_ENDTOPRIGHT; shadeFlag = BF_DIAGONAL_ENDBOTTOMRIGHT; - SetRect(&topRect, R.left, R.top+lOffset, R.right, R.bottom-rOffset); - SetRect(&sideRect, R.left+2, R.top, R.right-2+selectedOffset, R.bottom); - SetRect(&bottomRect, R.right-2, R.top, R.right, R.bottom); - SetRect(&lightRect, R.left, R.top, R.left+3, R.top+3); - SetRect(&shadeRect, R.left+1, R.bottom-2, R.left+2, R.bottom-1); + SetRect (&topRect, R.left, R.top + lOffset, R.right, + R.bottom - rOffset); + SetRect (&sideRect, R.left + 2, R.top, R.right - 2 + selectedOffset, + R.bottom); + SetRect (&bottomRect, R.right - 2, R.top, R.right, R.bottom); + SetRect (&lightRect, R.left, R.top, R.left + 3, R.top + 3); + SetRect (&shadeRect, R.left + 1, R.bottom - 2, R.left + 2, + R.bottom - 1); break; case BF_TOP: - leftFlag = BF_LEFT; topFlag = BF_TOP; + leftFlag = BF_LEFT; + topFlag = BF_TOP; rightFlag = BF_RIGHT; lightFlag = BF_DIAGONAL_ENDTOPRIGHT; shadeFlag = BF_DIAGONAL_ENDBOTTOMRIGHT; - SetRect(&topRect, R.left+lOffset, R.top, R.right-rOffset, R.bottom); - SetRect(&sideRect, R.left, R.top+2, R.right, R.bottom-1+selectedOffset); - SetRect(&bottomRect, R.left, R.bottom-1, R.right, R.bottom); - SetRect(&lightRect, R.left, R.top, R.left+3, R.top+3); - SetRect(&shadeRect, R.right-2, R.top+1, R.right-1, R.top+2); + SetRect (&topRect, R.left + lOffset, R.top, R.right - rOffset, + R.bottom); + SetRect (&sideRect, R.left, R.top + 2, R.right, + R.bottom - 1 + selectedOffset); + SetRect (&bottomRect, R.left, R.bottom - 1, R.right, R.bottom); + SetRect (&lightRect, R.left, R.top, R.left + 3, R.top + 3); + SetRect (&shadeRect, R.right - 2, R.top + 1, R.right - 1, R.top + 2); break; + case BF_RIGHT: - leftFlag = BF_TOP; topFlag = BF_RIGHT; + leftFlag = BF_TOP; + topFlag = BF_RIGHT; rightFlag = BF_BOTTOM; lightFlag = BF_DIAGONAL_ENDTOPLEFT; shadeFlag = BF_DIAGONAL_ENDBOTTOMLEFT; - SetRect(&topRect, R.left, R.top+lOffset, R.right, R.bottom-rOffset); - SetRect(&sideRect, R.left+2-selectedOffset, R.top, R.right-2, R.bottom); - SetRect(&bottomRect, R.left, R.top, R.left+2, R.bottom); - SetRect(&lightRect, R.right-3, R.top, R.right-1, R.top+2); - SetRect(&shadeRect, R.right-2, R.bottom-3, R.right, R.bottom-1); + SetRect (&topRect, R.left, R.top + lOffset, R.right, + R.bottom - rOffset); + SetRect (&sideRect, R.left + 2 - selectedOffset, R.top, R.right - 2, + R.bottom); + SetRect (&bottomRect, R.left, R.top, R.left + 2, R.bottom); + SetRect (&lightRect, R.right - 3, R.top, R.right - 1, R.top + 2); + SetRect (&shadeRect, R.right - 2, R.bottom - 3, R.right, R.bottom - 1); break; case BF_BOTTOM: - leftFlag = BF_LEFT; topFlag = BF_BOTTOM; + leftFlag = BF_LEFT; + topFlag = BF_BOTTOM; rightFlag = BF_RIGHT; lightFlag = BF_DIAGONAL_ENDTOPLEFT; shadeFlag = BF_DIAGONAL_ENDBOTTOMLEFT; - SetRect(&topRect, R.left+lOffset, R.top, R.right-rOffset, R.bottom); - SetRect(&sideRect, R.left, R.top+2-selectedOffset, R.right, R.bottom-2); - SetRect(&bottomRect, R.left, R.top, R.right, R.top+2); - SetRect(&lightRect, R.left, R.bottom-3, R.left+2, R.bottom-1); - SetRect(&shadeRect, R.right-2, R.bottom-3, R.right, R.bottom-1); + SetRect (&topRect, R.left + lOffset, R.top, R.right - rOffset, + R.bottom); + SetRect (&sideRect, R.left, R.top + 2 - selectedOffset, R.right, + R.bottom - 2); + SetRect (&bottomRect, R.left, R.top, R.right, R.top + 2); + SetRect (&lightRect, R.left, R.bottom - 3, R.left + 2, R.bottom - 1); + SetRect (&shadeRect, R.right - 2, R.bottom - 3, R.right, R.bottom - 1); break; default: - g_return_if_reached(); + g_return_if_reached (); } - + /* Background */ - FillRect(hdc, &R, (HBRUSH) (COLOR_3DFACE+1) ); + FillRect (hdc, &R, (HBRUSH) (COLOR_3DFACE + 1)); /* Tab "Top" */ - DrawEdge(hdc, &topRect, EDGE_RAISED, BF_SOFT | topFlag); + DrawEdge (hdc, &topRect, EDGE_RAISED, BF_SOFT | topFlag); /* Tab "Bottom" */ if (!aSelected) - DrawEdge(hdc, &bottomRect, EDGE_RAISED, BF_SOFT | topFlag); + DrawEdge (hdc, &bottomRect, EDGE_RAISED, BF_SOFT | topFlag); /* Tab "Sides" */ if (!aDrawLeft) leftFlag = 0; if (!aDrawRight) rightFlag = 0; - DrawEdge(hdc, &sideRect, EDGE_RAISED, BF_SOFT | leftFlag | rightFlag); + + DrawEdge (hdc, &sideRect, EDGE_RAISED, BF_SOFT | leftFlag | rightFlag); /* Tab Diagonal Corners */ if (aDrawLeft) - DrawEdge(hdc, &lightRect, EDGE_RAISED, BF_SOFT | lightFlag); + DrawEdge (hdc, &lightRect, EDGE_RAISED, BF_SOFT | lightFlag); if (aDrawRight) - DrawEdge(hdc, &shadeRect, EDGE_RAISED, BF_SOFT | shadeFlag); + DrawEdge (hdc, &shadeRect, EDGE_RAISED, BF_SOFT | shadeFlag); } static gboolean draw_themed_tab_button (GtkStyle *style, - GdkWindow *window, - GtkStateType state_type, - GtkNotebook *notebook, - gint x, gint y, - gint width, gint height, - gint gap_side) + GdkWindow *window, + GtkStateType state_type, + GtkNotebook *notebook, + gint x, gint y, + gint width, gint height, gint gap_side) { GdkPixmap *pixmap = NULL; - gint border_width = gtk_container_get_border_width (GTK_CONTAINER (notebook)); + gint border_width = + gtk_container_get_border_width (GTK_CONTAINER (notebook)); GtkWidget *widget = GTK_WIDGET (notebook); GdkRectangle draw_rect, clip_rect; GdkPixbufRotation rotation = GDK_PIXBUF_ROTATE_NONE; @@ -2388,59 +2522,61 @@ draw_themed_tab_button (GtkStyle *style, int widget_right; if (state_type == GTK_STATE_NORMAL) - { - draw_rect.x = x; - draw_rect.y = y; - draw_rect.width = width + 2; - draw_rect.height = height; - - clip_rect = draw_rect; - clip_rect.height--; - } + { + draw_rect.x = x; + draw_rect.y = y; + draw_rect.width = width + 2; + draw_rect.height = height; + + clip_rect = draw_rect; + clip_rect.height--; + } else - { - draw_rect.x = x + 2; - draw_rect.y = y; - draw_rect.width = width - 2; - draw_rect.height = height - 2; - clip_rect = draw_rect; - } + { + draw_rect.x = x + 2; + draw_rect.y = y; + draw_rect.width = width - 2; + draw_rect.height = height - 2; + clip_rect = draw_rect; + } /* If we are currently drawing the right-most tab, and if that tab is the selected tab... */ widget_right = widget->allocation.x + widget->allocation.width - border_width - 2; + if (draw_rect.x + draw_rect.width >= widget_right) - { - draw_rect.width = clip_rect.width = widget_right - draw_rect.x; - } + { + draw_rect.width = clip_rect.width = widget_right - draw_rect.x; + } } if (gap_side == GTK_POS_BOTTOM) { int widget_right; - + if (state_type == GTK_STATE_NORMAL) - { - draw_rect.x = x; - draw_rect.y = y; - draw_rect.width = width + 2; - draw_rect.height = height; - - clip_rect = draw_rect; - } + { + draw_rect.x = x; + draw_rect.y = y; + draw_rect.width = width + 2; + draw_rect.height = height; + + clip_rect = draw_rect; + } else - { - draw_rect.x = x + 2; - draw_rect.y = y + 2; - draw_rect.width = width - 2; - draw_rect.height = height - 2; - clip_rect = draw_rect; - } + { + draw_rect.x = x + 2; + draw_rect.y = y + 2; + draw_rect.width = width - 2; + draw_rect.height = height - 2; + clip_rect = draw_rect; + } /* If we are currently drawing the right-most tab, and if that tab is the selected tab... */ widget_right = widget->allocation.x + widget->allocation.width - border_width - 2; + if (draw_rect.x + draw_rect.width >= widget_right) - { - draw_rect.width = clip_rect.width = widget_right - draw_rect.x; - } + { + draw_rect.width = clip_rect.width = widget_right - draw_rect.x; + } rotation = GDK_PIXBUF_ROTATE_UPSIDEDOWN; } @@ -2449,30 +2585,31 @@ draw_themed_tab_button (GtkStyle *style, int widget_bottom; if (state_type == GTK_STATE_NORMAL) - { - draw_rect.x = x; - draw_rect.y = y; - draw_rect.width = width; - draw_rect.height = height + 2; - - clip_rect = draw_rect; - clip_rect.width--; - } + { + draw_rect.x = x; + draw_rect.y = y; + draw_rect.width = width; + draw_rect.height = height + 2; + + clip_rect = draw_rect; + clip_rect.width--; + } else - { - draw_rect.x = x; - draw_rect.y = y + 2; - draw_rect.width = width - 2; - draw_rect.height = height - 2; - clip_rect = draw_rect; - } + { + draw_rect.x = x; + draw_rect.y = y + 2; + draw_rect.width = width - 2; + draw_rect.height = height - 2; + clip_rect = draw_rect; + } /* If we are currently drawing the bottom-most tab, and if that tab is the selected tab... */ widget_bottom = widget->allocation.x + widget->allocation.height - border_width - 2; + if (draw_rect.y + draw_rect.height >= widget_bottom) - { - draw_rect.height = clip_rect.height = widget_bottom - draw_rect.y; - } + { + draw_rect.height = clip_rect.height = widget_bottom - draw_rect.y; + } rotation = GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE; } @@ -2481,30 +2618,31 @@ draw_themed_tab_button (GtkStyle *style, int widget_bottom; if (state_type == GTK_STATE_NORMAL) - { - draw_rect.x = x + 1; - draw_rect.y = y; - draw_rect.width = width; - draw_rect.height = height + 2; - - clip_rect = draw_rect; - clip_rect.width--; - } + { + draw_rect.x = x + 1; + draw_rect.y = y; + draw_rect.width = width; + draw_rect.height = height + 2; + + clip_rect = draw_rect; + clip_rect.width--; + } else - { - draw_rect.x = x + 2; - draw_rect.y = y + 2; - draw_rect.width = width - 2; - draw_rect.height = height - 2; - clip_rect = draw_rect; - } + { + draw_rect.x = x + 2; + draw_rect.y = y + 2; + draw_rect.width = width - 2; + draw_rect.height = height - 2; + clip_rect = draw_rect; + } /* If we are currently drawing the bottom-most tab, and if that tab is the selected tab... */ widget_bottom = widget->allocation.x + widget->allocation.height - border_width - 2; + if (draw_rect.y + draw_rect.height >= widget_bottom) - { - draw_rect.height = clip_rect.height = widget_bottom - draw_rect.y; - } + { + draw_rect.height = clip_rect.height = widget_bottom - draw_rect.y; + } rotation = GDK_PIXBUF_ROTATE_CLOCKWISE; } @@ -2512,12 +2650,12 @@ draw_themed_tab_button (GtkStyle *style, if (gap_side == GTK_POS_TOP) { if (!xp_theme_draw (window, XP_THEME_ELEMENT_TAB_ITEM, style, - draw_rect.x, draw_rect.y, - draw_rect.width,draw_rect.height, - state_type, &clip_rect)) - { - return FALSE; - } + draw_rect.x, draw_rect.y, + draw_rect.width, draw_rect.height, + state_type, &clip_rect)) + { + return FALSE; + } } else { @@ -2525,35 +2663,37 @@ draw_themed_tab_button (GtkStyle *style, GdkPixbuf *rotated; if (gap_side == GTK_POS_LEFT || gap_side == GTK_POS_RIGHT) - { - pixmap = gdk_pixmap_new (window, clip_rect.height, clip_rect.width, -1); - if (!xp_theme_draw (pixmap, XP_THEME_ELEMENT_TAB_ITEM, style, - draw_rect.y - clip_rect.y, draw_rect.x - clip_rect.x, - draw_rect.height, draw_rect.width, state_type, 0)) - { - g_object_unref (pixmap); - return FALSE; - } - - pixbuf = gdk_pixbuf_get_from_drawable (NULL, pixmap, NULL, 0, 0, 0, 0, - clip_rect.height, clip_rect.width); - g_object_unref (pixmap); - } + { + pixmap = gdk_pixmap_new (window, clip_rect.height, clip_rect.width, -1); + + if (!xp_theme_draw (pixmap, XP_THEME_ELEMENT_TAB_ITEM, style, + draw_rect.y - clip_rect.y, draw_rect.x - clip_rect.x, + draw_rect.height, draw_rect.width, state_type, 0)) + { + g_object_unref (pixmap); + return FALSE; + } + + pixbuf = gdk_pixbuf_get_from_drawable (NULL, pixmap, NULL, 0, 0, 0, 0, + clip_rect.height, clip_rect.width); + g_object_unref (pixmap); + } else - { - pixmap = gdk_pixmap_new (window, clip_rect.width, clip_rect.height, -1); - if (!xp_theme_draw (pixmap, XP_THEME_ELEMENT_TAB_ITEM, style, - draw_rect.x - clip_rect.x, draw_rect.y - clip_rect.y, - draw_rect.width, draw_rect.height, state_type, 0)) - { - g_object_unref (pixmap); - return FALSE; - } - - pixbuf = gdk_pixbuf_get_from_drawable (NULL, pixmap, NULL, 0, 0, 0, 0, - clip_rect.width, clip_rect.height); - g_object_unref (pixmap); - } + { + pixmap = gdk_pixmap_new (window, clip_rect.width, clip_rect.height, -1); + + if (!xp_theme_draw (pixmap, XP_THEME_ELEMENT_TAB_ITEM, style, + draw_rect.x - clip_rect.x, draw_rect.y - clip_rect.y, + draw_rect.width, draw_rect.height, state_type, 0)) + { + g_object_unref (pixmap); + return FALSE; + } + + pixbuf = gdk_pixbuf_get_from_drawable (NULL, pixmap, NULL, 0, 0, 0, 0, + clip_rect.width, clip_rect.height); + g_object_unref (pixmap); + } rotated = gdk_pixbuf_rotate_simple (pixbuf, rotation); g_object_unref (pixbuf); @@ -2563,7 +2703,8 @@ draw_themed_tab_button (GtkStyle *style, // while it is active on a bottom-oriented notebook, there is one white // pixel at the top. There may be a better solution than this if someone // has time to discover it. - if (gap_side == GTK_POS_BOTTOM && state_type == GTK_STATE_NORMAL && x == widget->allocation.x) + if (gap_side == GTK_POS_BOTTOM && state_type == GTK_STATE_NORMAL + && x == widget->allocation.x) { int rowstride = gdk_pixbuf_get_rowstride (pixbuf); int n_channels = gdk_pixbuf_get_n_channels (pixbuf); @@ -2579,73 +2720,71 @@ draw_themed_tab_button (GtkStyle *style, } gdk_draw_pixbuf (window, NULL, pixbuf, 0, 0, clip_rect.x, clip_rect.y, - clip_rect.width, clip_rect.height, GDK_RGB_DITHER_NONE, 0, 0); + clip_rect.width, clip_rect.height, GDK_RGB_DITHER_NONE, + 0, 0); g_object_unref (pixbuf); } - + return TRUE; } static gboolean draw_tab_button (GtkStyle *style, - GdkWindow *window, - GtkStateType state_type, - GtkShadowType shadow_type, - GdkRectangle *area, - GtkWidget *widget, - const gchar *detail, - gint x, gint y, - gint width, gint height, - gint gap_side) + GdkWindow *window, + GtkStateType state_type, + GtkShadowType shadow_type, + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, + gint x, gint y, gint width, gint height, gint gap_side) { if (gap_side == GTK_POS_TOP || gap_side == GTK_POS_BOTTOM) - { - /* experimental tab-drawing code from mozilla */ - RECT rect; - HDC dc; - gint32 aPosition; - - dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); - - if (gap_side == GTK_POS_TOP) - aPosition = BF_TOP; - else if (gap_side == GTK_POS_BOTTOM) - aPosition = BF_BOTTOM; - else if (gap_side == GTK_POS_LEFT) - aPosition = BF_LEFT; - else - aPosition = BF_RIGHT; - - if(state_type == GTK_STATE_PRELIGHT) - state_type = GTK_STATE_NORMAL; - if (area) - gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area); - - DrawTab (dc, rect, aPosition, - state_type != GTK_STATE_PRELIGHT, - (gap_side != GTK_POS_LEFT), - (gap_side != GTK_POS_RIGHT)); - if (area) - gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); - - release_window_dc (style, window, state_type); - return TRUE; - } + { + /* experimental tab-drawing code from mozilla */ + RECT rect; + HDC dc; + gint32 aPosition; + + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + + if (gap_side == GTK_POS_TOP) + aPosition = BF_TOP; + else if (gap_side == GTK_POS_BOTTOM) + aPosition = BF_BOTTOM; + else if (gap_side == GTK_POS_LEFT) + aPosition = BF_LEFT; + else + aPosition = BF_RIGHT; + + if (state_type == GTK_STATE_PRELIGHT) + state_type = GTK_STATE_NORMAL; + if (area) + gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area); + + DrawTab (dc, rect, aPosition, + state_type != GTK_STATE_PRELIGHT, + (gap_side != GTK_POS_LEFT), (gap_side != GTK_POS_RIGHT)); + + if (area) + gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); + + release_window_dc (style, window, state_type); + return TRUE; + } return FALSE; } static void draw_extension (GtkStyle *style, - GdkWindow *window, - GtkStateType state_type, - GtkShadowType shadow_type, - GdkRectangle *area, - GtkWidget *widget, - const gchar *detail, - gint x, gint y, - gint width, gint height, - GtkPositionType gap_side) + GdkWindow *window, + GtkStateType state_type, + GtkShadowType shadow_type, + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, + gint x, gint y, + gint width, gint height, GtkPositionType gap_side) { if (widget && GTK_IS_NOTEBOOK (widget) && detail && !strcmp (detail, "tab")) { @@ -2654,589 +2793,666 @@ draw_extension (GtkStyle *style, /* Why this differs from gap_side, I have no idea.. */ int real_gap_side = gtk_notebook_get_tab_pos (notebook); - if (!draw_themed_tab_button (style, window, state_type, - GTK_NOTEBOOK (widget), x, y, - width, height, real_gap_side)) - { - if (!draw_tab_button (style, window, state_type, - shadow_type, area, widget, - detail, - x, y, width, height, real_gap_side)) - { - parent_class->draw_extension (style, window, state_type, - shadow_type, area, widget, detail, - x, y, width, height, real_gap_side); - } - } + if (!draw_themed_tab_button (style, window, state_type, + GTK_NOTEBOOK (widget), x, y, + width, height, real_gap_side)) + { + if (!draw_tab_button (style, window, state_type, + shadow_type, area, widget, + detail, x, y, width, height, real_gap_side)) + { + parent_class->draw_extension (style, window, state_type, + shadow_type, area, widget, detail, + x, y, width, height, + real_gap_side); + } + } + } +} + +static void +draw_box_gap (GtkStyle *style, GdkWindow *window, GtkStateType state_type, + GtkShadowType shadow_type, GdkRectangle *area, + GtkWidget *widget, const gchar *detail, gint x, + gint y, gint width, gint height, GtkPositionType gap_side, + gint gap_x, gint gap_width) +{ + if (GTK_IS_NOTEBOOK (widget) && detail && !strcmp (detail, "notebook")) + { + GtkNotebook *notebook = GTK_NOTEBOOK (widget); + int side = gtk_notebook_get_tab_pos (notebook); + int x2 = x, y2 = y, w2 = width, h2 = height; + + if (side == GTK_POS_TOP) + { + x2 = x; + y2 = y - notebook->tab_vborder; + w2 = width; + h2 = height + notebook->tab_vborder * 2; + } + else if (side == GTK_POS_BOTTOM) + { + x2 = x; + y2 = y; + w2 = width; + h2 = height + notebook->tab_vborder * 2; + } + else if (side == GTK_POS_LEFT) + { + x2 = x - notebook->tab_hborder; + y2 = y; + w2 = width + notebook->tab_hborder; + h2 = height; + } + else if (side == GTK_POS_RIGHT) + { + x2 = x; + y2 = y; + w2 = width + notebook->tab_hborder * 2; + h2 = height; + } + + if (xp_theme_draw (window, XP_THEME_ELEMENT_TAB_PANE, style, + x2, y2, w2, h2, state_type, area)) + { + return; + } } + + parent_class->draw_box_gap (style, window, state_type, shadow_type, + area, widget, detail, x, y, width, height, + gap_side, gap_x, gap_width); } -static void -draw_box_gap (GtkStyle * style, GdkWindow * window, GtkStateType state_type, - GtkShadowType shadow_type, GdkRectangle * area, - GtkWidget * widget, const gchar * detail, gint x, - gint y, gint width, gint height, GtkPositionType gap_side, - gint gap_x, gint gap_width) +static gboolean +is_popup_window_child (GtkWidget *widget) { - if (GTK_IS_NOTEBOOK (widget) && detail && !strcmp (detail, "notebook")) - { - GtkNotebook *notebook = GTK_NOTEBOOK (widget); - int side = gtk_notebook_get_tab_pos (notebook); - int x2 = x, y2 = y, w2 = width, h2 = height; - - if (side == GTK_POS_TOP) - { - x2 = x; - y2 = y - notebook->tab_vborder; - w2 = width; - h2 = height + notebook->tab_vborder * 2; - } - else if (side == GTK_POS_BOTTOM) - { - x2 = x; - y2 = y; - w2 = width; - h2 = height + notebook->tab_vborder * 2; - } - else if (side == GTK_POS_LEFT) - { - x2 = x - notebook->tab_hborder; - y2 = y; - w2 = width + notebook->tab_hborder; - h2 = height; - } - else if (side == GTK_POS_RIGHT) - { - x2 = x; - y2 = y; - w2 = width + notebook->tab_hborder * 2; - h2 = height; - } - - if (xp_theme_draw (window, XP_THEME_ELEMENT_TAB_PANE, style, - x2, y2, w2, h2, state_type, area)) - { - return; - } - } + GtkWidget *top; + GtkWindowType type = -1; - parent_class->draw_box_gap (style, window, state_type, shadow_type, - area, widget, detail, x, y, width, height, - gap_side, gap_x, gap_width); -} + top = gtk_widget_get_toplevel (widget); -static gboolean is_popup_window_child( GtkWidget* widget ) -{ - GtkWidget* top; - GtkWindowType type = -1; + if (top && GTK_IS_WINDOW (top)) + { + g_object_get (top, "type", &type, NULL); - top = gtk_widget_get_toplevel( widget ); - if( top && GTK_IS_WINDOW(top) ) { - g_object_get(top, "type", &type, NULL ); - if( type == GTK_WINDOW_POPUP ) { /* Hack for combo boxes */ - return TRUE; - } + if (type == GTK_WINDOW_POPUP) + { /* Hack for combo boxes */ + return TRUE; + } } - return FALSE; + + return FALSE; } static void -draw_flat_box (GtkStyle * style, GdkWindow * window, +draw_flat_box (GtkStyle *style, GdkWindow *window, GtkStateType state_type, GtkShadowType shadow_type, - GdkRectangle * area, GtkWidget * widget, - const gchar * detail, gint x, gint y, gint width, gint height) + GdkRectangle *area, GtkWidget *widget, + const gchar *detail, gint x, gint y, gint width, gint height) { - if( detail ) { - if ( !strcmp (detail, "checkbutton") ) + if (detail) + { + if (!strcmp (detail, "checkbutton")) { - if (state_type == GTK_STATE_PRELIGHT) - { - return; - } + if (state_type == GTK_STATE_PRELIGHT) + { + return; + } } } - parent_class->draw_flat_box (style, window, state_type, shadow_type, - area, widget, detail, x, y, width, height); + parent_class->draw_flat_box (style, window, state_type, shadow_type, + area, widget, detail, x, y, width, height); } static gboolean -draw_menu_border ( GdkWindow* win, GtkStyle* style, - gint x, gint y, gint width, gint height ) +draw_menu_border (GdkWindow *win, GtkStyle *style, + gint x, gint y, gint width, gint height) { - RECT rect; - HDC dc; + RECT rect; + HDC dc; + + dc = get_window_dc (style, win, GTK_STATE_NORMAL, x, y, width, height, &rect); - dc = get_window_dc (style, win, GTK_STATE_NORMAL, x, y, width, height, &rect ); - if (!dc) - return FALSE; - if( xp_theme_is_active() ) { - FrameRect( dc, &rect, GetSysColorBrush(COLOR_3DSHADOW) ); + if (!dc) + return FALSE; + + if (xp_theme_is_active ()) + { + FrameRect (dc, &rect, GetSysColorBrush (COLOR_3DSHADOW)); } - else { - DrawEdge( dc, &rect, EDGE_RAISED, BF_RECT ); + else + { + DrawEdge (dc, &rect, EDGE_RAISED, BF_RECT); } - release_window_dc( style, win, GTK_STATE_NORMAL ); - return TRUE; + + release_window_dc (style, win, GTK_STATE_NORMAL); + + return TRUE; } static void -draw_shadow (GtkStyle * style, - GdkWindow * window, +draw_shadow (GtkStyle *style, + GdkWindow *window, GtkStateType state_type, GtkShadowType shadow_type, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, gint x, gint y, gint width, gint height) -{ - gboolean is_handlebox; - gboolean is_toolbar; - - if( detail && !strcmp( detail, "frame") ) - { - HDC dc; - RECT rect; - dc = get_window_dc( style, window, state_type, x, y, width, height, &rect ); - if( is_popup_window_child(widget) ) { - FrameRect( dc, &rect, GetSysColorBrush( COLOR_WINDOWFRAME ) ); - } - else{ - switch( shadow_type ){ - case GTK_SHADOW_IN: - draw_3d_border(dc, &rect, TRUE); - break; - case GTK_SHADOW_OUT: - draw_3d_border(dc, &rect, FALSE); - break; - case GTK_SHADOW_ETCHED_IN: - draw_3d_border(dc, &rect, TRUE); - InflateRect( &rect, -1, -1 ); - draw_3d_border(dc, &rect, FALSE); - break; - case GTK_SHADOW_ETCHED_OUT: - draw_3d_border(dc, &rect, FALSE); - InflateRect( &rect, -1, -1 ); - draw_3d_border(dc, &rect, TRUE); - break; - case GTK_SHADOW_NONE: - break; - } - } - release_window_dc( style, window, state_type ); - return; - } - if (detail && (!strcmp (detail, "entry") || !strcmp (detail, "combobox")) ) - { - if( shadow_type != GTK_SHADOW_IN ) - return; - - if ( !xp_theme_draw (window, XP_THEME_ELEMENT_EDIT_TEXT, style, - x, y, width, height, state_type, area)) + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x, gint y, gint width, gint height) +{ + gboolean is_handlebox; + gboolean is_toolbar; + + if (detail && !strcmp (detail, "frame")) + { + HDC dc; + RECT rect; + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + + if (is_popup_window_child (widget)) + { + FrameRect (dc, &rect, GetSysColorBrush (COLOR_WINDOWFRAME)); + } + else + { + switch (shadow_type) { - HDC dc; - RECT rect; + case GTK_SHADOW_IN: + draw_3d_border (dc, &rect, TRUE); + break; + + case GTK_SHADOW_OUT: + draw_3d_border (dc, &rect, FALSE); + break; + + case GTK_SHADOW_ETCHED_IN: + draw_3d_border (dc, &rect, TRUE); + InflateRect (&rect, -1, -1); + draw_3d_border (dc, &rect, FALSE); + break; - dc = get_window_dc (style, window, state_type, - x, y, width, height, &rect); - DrawEdge (dc, &rect, EDGE_SUNKEN, BF_RECT); - release_window_dc (style, window, state_type); + case GTK_SHADOW_ETCHED_OUT: + draw_3d_border (dc, &rect, FALSE); + InflateRect (&rect, -1, -1); + draw_3d_border (dc, &rect, TRUE); + break; + + case GTK_SHADOW_NONE: + break; } + } + + release_window_dc (style, window, state_type); + + return; + } + if (detail && (!strcmp (detail, "entry") || !strcmp (detail, "combobox"))) + { + if (shadow_type != GTK_SHADOW_IN) + return; + + if (!xp_theme_draw (window, XP_THEME_ELEMENT_EDIT_TEXT, style, + x, y, width, height, state_type, area)) + { + HDC dc; + RECT rect; + + dc = get_window_dc (style, window, state_type, + x, y, width, height, &rect); - return; + DrawEdge (dc, &rect, EDGE_SUNKEN, BF_RECT); + release_window_dc (style, window, state_type); } - if (detail && !strcmp (detail, "scrolled_window") && - xp_theme_draw (window, XP_THEME_ELEMENT_EDIT_TEXT, style, - x, y, width, height, state_type, area)) - return; + return; + } - if (detail && !strcmp (detail, "spinbutton")) - return; + if (detail && !strcmp (detail, "scrolled_window") && + xp_theme_draw (window, XP_THEME_ELEMENT_EDIT_TEXT, style, + x, y, width, height, state_type, area)) + { + return; + } - if (detail && !strcmp (detail, "menu")) - { - if ( draw_menu_border ( window, style, x, y, width, height ) ) { - return; - } - } + if (detail && !strcmp (detail, "spinbutton")) + return; + + if (detail && !strcmp (detail, "menu")) + { + if (draw_menu_border (window, style, x, y, width, height)) + { + return; + } + } + + if (detail && !strcmp (detail, "handlebox")) + return; + + is_handlebox = (detail && !strcmp (detail, "handlebox_bin")); + is_toolbar = (detail + && (!strcmp (detail, "toolbar") + || !strcmp (detail, "menubar"))); + + if (is_toolbar || is_handlebox) + { + if (shadow_type == GTK_SHADOW_NONE) + { + return; + } + + if (widget) + { + HDC dc; + RECT rect; + HGDIOBJ old_pen = NULL; + GtkPositionType pos; + + sanitize_size (window, &width, &height); + + if (is_handlebox) + { + pos = gtk_handle_box_get_handle_position (GTK_HANDLE_BOX (widget)); + /* + If the handle box is at left side, + we shouldn't draw its right border. + The same holds true for top, right, and bottom. + */ + switch (pos) + { + case GTK_POS_LEFT: + pos = GTK_POS_RIGHT; + break; + + case GTK_POS_RIGHT: + pos = GTK_POS_LEFT; + break; - if (detail && !strcmp (detail, "handlebox")) - return; - - is_handlebox = (detail && !strcmp (detail, "handlebox_bin")); - is_toolbar = (detail && (!strcmp (detail, "toolbar") || !strcmp(detail, "menubar"))); - - if ( is_toolbar || is_handlebox ) - { - if( shadow_type == GTK_SHADOW_NONE ) - return; - - if( widget ) { - HDC dc; - RECT rect; - HGDIOBJ old_pen = NULL; - GtkPositionType pos; - - sanitize_size (window, &width, &height); - - if( is_handlebox ) { - pos = gtk_handle_box_get_handle_position(GTK_HANDLE_BOX(widget)); - /* - If the handle box is at left side, - we shouldn't draw its right border. - The same holds true for top, right, and bottom. - */ - switch( pos ) { - case GTK_POS_LEFT: - pos = GTK_POS_RIGHT; break; - case GTK_POS_RIGHT: - pos = GTK_POS_LEFT; break; - case GTK_POS_TOP: - pos = GTK_POS_BOTTOM; break; - case GTK_POS_BOTTOM: - pos = GTK_POS_TOP; break; - } - } - else { - GtkWidget* parent = gtk_widget_get_parent(widget); - /* Dirty hack for toolbars contained in handle boxes */ - if( GTK_IS_HANDLE_BOX( parent ) ) { - pos = gtk_handle_box_get_handle_position( GTK_HANDLE_BOX( parent ) ); - } - else { - /* - Dirty hack: - Make pos != all legal enum vaules of GtkPositionType. - So every border will be draw. - */ - pos = (GtkPositionType)-1; + case GTK_POS_TOP: + pos = GTK_POS_BOTTOM; + break; + + case GTK_POS_BOTTOM: + pos = GTK_POS_TOP; + break; } - } - - dc = get_window_dc( style, window, state_type, x, y, width, height, &rect ); - if( pos != GTK_POS_LEFT ) { - old_pen = SelectObject( dc, get_light_pen() ); - MoveToEx( dc, rect.left, rect.top, NULL ); - LineTo( dc, rect.left, rect.bottom ); - } - if( pos != GTK_POS_TOP ) { - old_pen = SelectObject( dc, get_light_pen() ); - MoveToEx( dc, rect.left, rect.top, NULL ); - LineTo( dc, rect.right, rect.top ); - } - if( pos != GTK_POS_RIGHT ) { - old_pen = SelectObject( dc, get_dark_pen() ); - MoveToEx( dc, rect.right-1, rect.top, NULL ); - LineTo( dc, rect.right-1, rect.bottom ); - } - if( pos != GTK_POS_BOTTOM ) { - old_pen = SelectObject( dc, get_dark_pen() ); - MoveToEx( dc, rect.left, rect.bottom-1, NULL ); - LineTo( dc, rect.right, rect.bottom-1 ); + } + else + { + GtkWidget *parent = gtk_widget_get_parent (widget); + + /* Dirty hack for toolbars contained in handle boxes */ + if (GTK_IS_HANDLE_BOX (parent)) + { + pos = gtk_handle_box_get_handle_position (GTK_HANDLE_BOX (parent)); } - if (old_pen) - SelectObject( dc, old_pen ); - release_window_dc( style, window, state_type ); - } - return; + else + { + /* + Dirty hack: + Make pos != all legal enum vaules of GtkPositionType. + So every border will be draw. + */ + pos = (GtkPositionType) - 1; } + } + + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); - if (detail && !strcmp (detail, "statusbar")) { - return; + if (pos != GTK_POS_LEFT) + { + old_pen = SelectObject (dc, get_light_pen ()); + MoveToEx (dc, rect.left, rect.top, NULL); + LineTo (dc, rect.left, rect.bottom); + } + if (pos != GTK_POS_TOP) + { + old_pen = SelectObject (dc, get_light_pen ()); + MoveToEx (dc, rect.left, rect.top, NULL); + LineTo (dc, rect.right, rect.top); + } + if (pos != GTK_POS_RIGHT) + { + old_pen = SelectObject (dc, get_dark_pen ()); + MoveToEx (dc, rect.right - 1, rect.top, NULL); + LineTo (dc, rect.right - 1, rect.bottom); + } + if (pos != GTK_POS_BOTTOM) + { + old_pen = SelectObject (dc, get_dark_pen ()); + MoveToEx (dc, rect.left, rect.bottom - 1, NULL); + LineTo (dc, rect.right, rect.bottom - 1); + } + if (old_pen) + SelectObject (dc, old_pen); + release_window_dc (style, window, state_type); } - parent_class->draw_shadow (style, window, state_type, shadow_type, area, - widget, detail, x, y, width, height); + return; + } + + if (detail && !strcmp (detail, "statusbar")) + { + return; + } + + parent_class->draw_shadow (style, window, state_type, shadow_type, area, + widget, detail, x, y, width, height); } static void -draw_hline (GtkStyle * style, - GdkWindow * window, +draw_hline (GtkStyle *style, + GdkWindow *window, GtkStateType state_type, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, gint x1, gint x2, gint y) -{ - if (xp_theme_is_active () && detail && !strcmp(detail, "menuitem")) { - if(xp_theme_draw (window, XP_THEME_ELEMENT_MENU_SEPARATOR, style, x1, y, x2, 1, state_type, area)) - return; - else { - if (area) + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x1, gint x2, gint y) +{ + if (xp_theme_is_active () && detail && !strcmp (detail, "menuitem")) + { + if (xp_theme_draw + (window, XP_THEME_ELEMENT_MENU_SEPARATOR, style, x1, y, x2, 1, + state_type, area)) + { + return; + } + else + { + if (area) + { + gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area); + } + + gdk_draw_line (window, style->dark_gc[state_type], x1, y, x2, y); + + if (area) + { + gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); + } + } + } + else + { + if (style->ythickness == 2) + { + if (area) + { gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area); + gdk_gc_set_clip_rectangle (style->light_gc[state_type], area); + } - gdk_draw_line (window, style->dark_gc[state_type], x1, y, x2, y); + gdk_draw_line (window, style->dark_gc[state_type], x1, y, x2, y); + ++y; + gdk_draw_line (window, style->light_gc[state_type], x1, y, x2, y); - if (area) + if (area) + { gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); + gdk_gc_set_clip_rectangle (style->light_gc[state_type], NULL); + } } - } else { - if( style->ythickness == 2 ) - { - if (area) - { - gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area); - gdk_gc_set_clip_rectangle (style->light_gc[state_type], area); - } - gdk_draw_line (window, style->dark_gc[state_type], x1, y, x2, y); - ++y; - gdk_draw_line (window, style->light_gc[state_type], x1, y, x2, y); - if (area) - { - gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); - gdk_gc_set_clip_rectangle (style->light_gc[state_type], NULL); - } - } else - { - parent_class->draw_hline (style, window, state_type, area, widget, - detail, x1, x2, y); - } - } + { + parent_class->draw_hline (style, window, state_type, area, widget, + detail, x1, x2, y); + } + } } static void -draw_vline (GtkStyle * style, - GdkWindow * window, +draw_vline (GtkStyle *style, + GdkWindow *window, GtkStateType state_type, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, gint y1, gint y2, gint x) + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint y1, gint y2, gint x) { - if( style->xthickness == 2 ) - { - if (area) + if (style->xthickness == 2) { - gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area); - gdk_gc_set_clip_rectangle (style->light_gc[state_type], area); + if (area) + { + gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area); + gdk_gc_set_clip_rectangle (style->light_gc[state_type], area); + } + + gdk_draw_line (window, style->dark_gc[state_type], x, y1, x, y2); + ++x; + gdk_draw_line (window, style->light_gc[state_type], x, y1, x, y2); + + if (area) + { + gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); + gdk_gc_set_clip_rectangle (style->light_gc[state_type], NULL); + } } - gdk_draw_line (window, style->dark_gc[state_type], x, y1, x, y2); - ++x; - gdk_draw_line (window, style->light_gc[state_type], x, y1, x, y2); - if (area) + else { - gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); - gdk_gc_set_clip_rectangle (style->light_gc[state_type], NULL); + parent_class->draw_vline (style, window, state_type, area, widget, + detail, y1, y2, x); } - } - else - { - parent_class->draw_vline (style, window, state_type, area, widget, - detail, y1, y2, x); - } } static void -draw_slider (GtkStyle * style, - GdkWindow * window, +draw_slider (GtkStyle *style, + GdkWindow *window, GtkStateType state_type, GtkShadowType shadow_type, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x, gint y, gint width, gint height, GtkOrientation orientation) { - if (GTK_IS_SCALE (widget) && - xp_theme_draw (window, - ((orientation == - GTK_ORIENTATION_VERTICAL) ? - XP_THEME_ELEMENT_SCALE_SLIDER_V : - XP_THEME_ELEMENT_SCALE_SLIDER_H), style, x, y, width, - height, state_type, area)) - { - return; - } + if (GTK_IS_SCALE (widget) && + xp_theme_draw (window, ((orientation == GTK_ORIENTATION_VERTICAL) ? + XP_THEME_ELEMENT_SCALE_SLIDER_V : + XP_THEME_ELEMENT_SCALE_SLIDER_H), style, x, y, width, + height, state_type, area)) + { + return; + } - parent_class->draw_slider (style, window, state_type, shadow_type, area, - widget, detail, x, y, width, height, - orientation); + parent_class->draw_slider (style, window, state_type, shadow_type, area, + widget, detail, x, y, width, height, + orientation); } static void -draw_resize_grip (GtkStyle * style, - GdkWindow * window, +draw_resize_grip (GtkStyle *style, + GdkWindow *window, GtkStateType state_type, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, GdkWindowEdge edge, gint x, gint y, gint width, gint height) { - if (detail && !strcmp (detail, "statusbar")) - { - if (xp_theme_draw - (window, XP_THEME_ELEMENT_STATUS_GRIPPER, style, x, y, width, - height, state_type, area)) - return; - else { - RECT rect; - HDC dc = get_window_dc(style, window, state_type, x, y, width, height, &rect); - - if (area) - gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area); - DrawFrameControl(dc, &rect, DFC_SCROLL, DFCS_SCROLLSIZEGRIP); - release_window_dc(style, window, state_type); - if (area) - gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); - return; - } + if (detail && !strcmp (detail, "statusbar")) + { + if (xp_theme_draw + (window, XP_THEME_ELEMENT_STATUS_GRIPPER, style, x, y, width, + height, state_type, area)) + { + return; + } + else + { + RECT rect; + HDC dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + + if (area) + gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area); + + DrawFrameControl (dc, &rect, DFC_SCROLL, DFCS_SCROLLSIZEGRIP); + release_window_dc (style, window, state_type); + + if (area) + gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); + + return; } + } - parent_class->draw_resize_grip (style, window, state_type, area, - widget, detail, edge, x, y, width, - height); + parent_class->draw_resize_grip (style, window, state_type, area, + widget, detail, edge, x, y, width, height); } static void -draw_handle (GtkStyle * style, - GdkWindow * window, +draw_handle (GtkStyle *style, + GdkWindow *window, GtkStateType state_type, GtkShadowType shadow_type, - GdkRectangle * area, - GtkWidget * widget, - const gchar * detail, + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x, gint y, gint width, gint height, GtkOrientation orientation) { - HDC dc; - RECT rect; + HDC dc; + RECT rect; + + if (is_toolbar_child (widget)) + { + XpThemeElement hndl; + + sanitize_size (window, &width, &height); + + if (GTK_IS_HANDLE_BOX (widget)) + { + GtkPositionType pos; + pos = gtk_handle_box_get_handle_position (GTK_HANDLE_BOX (widget)); + + if (pos == GTK_POS_TOP || pos == GTK_POS_BOTTOM) + { + orientation = GTK_ORIENTATION_HORIZONTAL; + } + else + { + orientation = GTK_ORIENTATION_VERTICAL; + } + } + + if (orientation == GTK_ORIENTATION_VERTICAL) + hndl = XP_THEME_ELEMENT_REBAR_GRIPPER_V; + else + hndl = XP_THEME_ELEMENT_REBAR_GRIPPER_H; + + if (xp_theme_draw (window, hndl, style, x, y, width, height, + state_type, area)) + { + return; + } + + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); - if (is_toolbar_child (widget)) + if (orientation == GTK_ORIENTATION_VERTICAL) + { + rect.left += 3; + rect.right = rect.left + 3; + rect.bottom -= 3; + rect.top += 3; + } + else { - XpThemeElement hndl; + rect.top += 3; + rect.bottom = rect.top + 3; + rect.right -= 3; + rect.left += 3; + } - sanitize_size (window, &width, &height); + draw_3d_border (dc, &rect, FALSE); + release_window_dc (style, window, state_type); + return; + } - if( GTK_IS_HANDLE_BOX(widget) ) { - GtkPositionType pos; - pos = gtk_handle_box_get_handle_position(GTK_HANDLE_BOX(widget)); - if( pos == GTK_POS_TOP || pos == GTK_POS_BOTTOM ) { - orientation = GTK_ORIENTATION_HORIZONTAL; - } - else { - orientation = GTK_ORIENTATION_VERTICAL; - } - } + if (!GTK_IS_PANED (widget)) + { + gint xthick, ythick; + GdkGC *light_gc, *dark_gc, *shadow_gc; + GdkRectangle dest; - if ( orientation == GTK_ORIENTATION_VERTICAL ) - hndl = XP_THEME_ELEMENT_REBAR_GRIPPER_V; - else - hndl = XP_THEME_ELEMENT_REBAR_GRIPPER_H; + sanitize_size (window, &width, &height); - if (xp_theme_draw (window, hndl, style, x, y, width, height, - state_type, area)) - { - return; - } + gtk_paint_box (style, window, state_type, shadow_type, area, + widget, detail, x, y, width, height); - dc = get_window_dc( style, window, state_type, x, y, width, height, &rect ); - if ( orientation == GTK_ORIENTATION_VERTICAL ) { - rect.left += 3; - rect.right = rect.left + 3; - rect.bottom -= 3; - rect.top += 3; - } - else{ - rect.top += 3; - rect.bottom = rect.top + 3; - rect.right -= 3; - rect.left += 3; - } - draw_3d_border( dc, &rect, FALSE ); - release_window_dc( style, window, state_type ); - return; - } - - if (!GTK_IS_PANED (widget)) - { - gint xthick, ythick; - GdkGC *light_gc, *dark_gc, *shadow_gc; - GdkRectangle dest; - - sanitize_size (window, &width, &height); - - gtk_paint_box (style, window, state_type, shadow_type, area, - widget, detail, x, y, width, height); - - light_gc = style->light_gc[state_type]; - dark_gc = style->dark_gc[state_type]; - shadow_gc = style->mid_gc[state_type]; - - xthick = style->xthickness; - ythick = style->ythickness; - - dest.x = x + xthick; - dest.y = y + ythick; - dest.width = width - (xthick * 2); - dest.height = height - (ythick * 2); - - if (dest.width < dest.height) - dest.x += 2; - else - dest.y += 2; - - gdk_gc_set_clip_rectangle (light_gc, &dest); - gdk_gc_set_clip_rectangle (dark_gc, &dest); - gdk_gc_set_clip_rectangle (shadow_gc, &dest); - - if (dest.width < dest.height) - { - gdk_draw_line (window, light_gc, dest.x, dest.y, dest.x, - dest.height); - gdk_draw_line (window, dark_gc, dest.x + (dest.width / 2), - dest.y, dest.x + (dest.width / 2), - dest.height); - gdk_draw_line (window, shadow_gc, dest.x + dest.width, - dest.y, dest.x + dest.width, dest.height); - } - else - { - gdk_draw_line (window, light_gc, dest.x, dest.y, - dest.x + dest.width, dest.y); - gdk_draw_line (window, dark_gc, dest.x, - dest.y + (dest.height / 2), - dest.x + dest.width, - dest.y + (dest.height / 2)); - gdk_draw_line (window, shadow_gc, dest.x, - dest.y + dest.height, dest.x + dest.width, - dest.y + dest.height); - } + light_gc = style->light_gc[state_type]; + dark_gc = style->dark_gc[state_type]; + shadow_gc = style->mid_gc[state_type]; + + xthick = style->xthickness; + ythick = style->ythickness; + + dest.x = x + xthick; + dest.y = y + ythick; + dest.width = width - (xthick * 2); + dest.height = height - (ythick * 2); - gdk_gc_set_clip_rectangle (shadow_gc, NULL); - gdk_gc_set_clip_rectangle (light_gc, NULL); - gdk_gc_set_clip_rectangle (dark_gc, NULL); + if (dest.width < dest.height) + dest.x += 2; + else + dest.y += 2; + + gdk_gc_set_clip_rectangle (light_gc, &dest); + gdk_gc_set_clip_rectangle (dark_gc, &dest); + gdk_gc_set_clip_rectangle (shadow_gc, &dest); + + if (dest.width < dest.height) + { + gdk_draw_line (window, light_gc, dest.x, dest.y, dest.x, + dest.height); + gdk_draw_line (window, dark_gc, dest.x + (dest.width / 2), + dest.y, dest.x + (dest.width / 2), dest.height); + gdk_draw_line (window, shadow_gc, dest.x + dest.width, + dest.y, dest.x + dest.width, dest.height); } + else + { + gdk_draw_line (window, light_gc, dest.x, dest.y, + dest.x + dest.width, dest.y); + gdk_draw_line (window, dark_gc, dest.x, + dest.y + (dest.height / 2), + dest.x + dest.width, dest.y + (dest.height / 2)); + gdk_draw_line (window, shadow_gc, dest.x, + dest.y + dest.height, dest.x + dest.width, + dest.y + dest.height); + } + + gdk_gc_set_clip_rectangle (shadow_gc, NULL); + gdk_gc_set_clip_rectangle (light_gc, NULL); + gdk_gc_set_clip_rectangle (dark_gc, NULL); + } } static void -draw_focus ( GtkStyle *style, - GdkWindow *window, - GtkStateType state_type, - GdkRectangle *area, - GtkWidget *widget, - const gchar *detail, - gint x, - gint y, - gint width, - gint height) -{ - HDC dc; - RECT rect; - if( !GTK_WIDGET_CAN_FOCUS(widget) ) { - return; - } - - if ( is_combo_box_child(widget) - && (GTK_IS_ARROW(widget) || GTK_IS_BUTTON(widget)) ) { - return; - } - if (GTK_IS_TREE_VIEW (widget->parent) /* list view bheader */ - || GTK_IS_CLIST (widget->parent)) { - return; - } - - dc = get_window_dc( style, window, state_type, x, y, width, height, &rect ); - DrawFocusRect(dc, &rect); - release_window_dc( style, window, state_type ); +draw_focus (GtkStyle *style, + GdkWindow *window, + GtkStateType state_type, + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, gint x, gint y, gint width, gint height) +{ + HDC dc; + RECT rect; + + if (!GTK_WIDGET_CAN_FOCUS (widget)) + { + return; + } + + if (is_combo_box_child (widget) + && (GTK_IS_ARROW (widget) || GTK_IS_BUTTON (widget))) + { + return; + } + if (GTK_IS_TREE_VIEW (widget->parent) /* list view bheader */ + || GTK_IS_CLIST (widget->parent)) + { + return; + } + + dc = get_window_dc (style, window, state_type, x, y, width, height, &rect); + DrawFocusRect (dc, &rect); + release_window_dc (style, window, state_type); /* parent_class->draw_focus (style, window, state_type, area, widget, detail, x, y, width, height); @@ -3244,73 +3460,70 @@ draw_focus ( GtkStyle *style, } static void -draw_layout (GtkStyle *style, - GdkWindow *window, - GtkStateType state_type, - gboolean use_text, - GdkRectangle *area, - GtkWidget *widget, - const gchar *detail, - gint old_x, - gint old_y, - PangoLayout *layout) -{ - GtkNotebook *notebook = NULL; - gint x = old_x; - gint y = old_y; - - /* In the XP theme, labels don't appear correctly centered inside - * notebook tabs, so we give them a gentle nudge two pixels to the - * right. A little hackish, but what are 'ya gonna do? -- Cody - */ - if (xp_theme_is_active () && detail && !strcmp (detail, "label")) - { - if (widget->parent != NULL) - { - if (GTK_IS_NOTEBOOK (widget->parent)) - { - notebook = GTK_NOTEBOOK (widget->parent); - int side = gtk_notebook_get_tab_pos (notebook); - - if (side == GTK_POS_TOP || side == GTK_POS_BOTTOM) - { - x += 2; - } - } - } - } - - parent_class->draw_layout (style, window, state_type, - use_text, area, widget, - detail, x, y, layout); +draw_layout (GtkStyle *style, + GdkWindow *window, + GtkStateType state_type, + gboolean use_text, + GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, + gint old_x, gint old_y, PangoLayout *layout) +{ + GtkNotebook *notebook = NULL; + gint x = old_x; + gint y = old_y; + + /* In the XP theme, labels don't appear correctly centered inside + * notebook tabs, so we give them a gentle nudge two pixels to the + * right. A little hackish, but what are 'ya gonna do? -- Cody + */ + if (xp_theme_is_active () && detail && !strcmp (detail, "label")) + { + if (widget->parent != NULL) + { + if (GTK_IS_NOTEBOOK (widget->parent)) + { + notebook = GTK_NOTEBOOK (widget->parent); + int side = gtk_notebook_get_tab_pos (notebook); + + if (side == GTK_POS_TOP || side == GTK_POS_BOTTOM) + { + x += 2; + } + } + } + } + + parent_class->draw_layout (style, window, state_type, + use_text, area, widget, detail, x, y, layout); } static void -msw_style_init_from_rc (GtkStyle * style, GtkRcStyle * rc_style) +msw_style_init_from_rc (GtkStyle *style, GtkRcStyle *rc_style) { - setup_system_font (style); - setup_menu_settings (gtk_settings_get_default ()); - setup_system_styles (style); - parent_class->init_from_rc (style, rc_style); + setup_system_font (style); + setup_menu_settings (gtk_settings_get_default ()); + setup_system_styles (style); + parent_class->init_from_rc (style, rc_style); } static GdkPixmap * load_bg_image (GdkColormap *colormap, - GdkColor *bg_color, - const gchar *filename) + GdkColor *bg_color, const gchar *filename) { if (strcmp (filename, "") == 0) - return (GdkPixmap*) GDK_PARENT_RELATIVE; + { + return (GdkPixmap *) GDK_PARENT_RELATIVE; + } else { return gdk_pixmap_colormap_create_from_xpm (NULL, colormap, NULL, - bg_color, - filename); + bg_color, filename); } } static void -msw_style_realize (GtkStyle * style) +msw_style_realize (GtkStyle *style) { GdkGCValues gc_values; GdkGCValuesMask gc_values_mask; @@ -3320,12 +3533,15 @@ msw_style_realize (GtkStyle * style) for (i = 0; i < 5; i++) { style->mid[i].red = (style->light[i].red + style->dark[i].red) / 2; - style->mid[i].green = (style->light[i].green + style->dark[i].green) / 2; + style->mid[i].green = + (style->light[i].green + style->dark[i].green) / 2; style->mid[i].blue = (style->light[i].blue + style->dark[i].blue) / 2; style->text_aa[i].red = (style->text[i].red + style->base[i].red) / 2; - style->text_aa[i].green = (style->text[i].green + style->base[i].green) / 2; - style->text_aa[i].blue = (style->text[i].blue + style->base[i].blue) / 2; + style->text_aa[i].green = + (style->text[i].green + style->base[i].green) / 2; + style->text_aa[i].blue = + (style->text[i].blue + style->base[i].blue) / 2; } style->black.red = 0x0000; @@ -3342,45 +3558,79 @@ msw_style_realize (GtkStyle * style) gc_values.foreground = style->black; gc_values.background = style->white; - style->black_gc = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask); + style->black_gc = + gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask); gc_values.foreground = style->white; gc_values.background = style->black; - style->white_gc = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask); + style->white_gc = + gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask); gc_values_mask = GDK_GC_FOREGROUND; for (i = 0; i < 5; i++) { if (style->rc_style && style->rc_style->bg_pixmap_name[i]) - style->bg_pixmap[i] = load_bg_image (style->colormap, - &style->bg[i], - style->rc_style->bg_pixmap_name[i]); + { + style->bg_pixmap[i] = load_bg_image (style->colormap, + &style->bg[i], + style->rc_style-> + bg_pixmap_name[i]); + } if (!gdk_colormap_alloc_color (style->colormap, &style->fg[i], FALSE, TRUE)) - g_warning ("unable to allocate color: ( %d %d %d )", - style->fg[i].red, style->fg[i].green, style->fg[i].blue); + { + g_warning ("unable to allocate color: ( %d %d %d )", style->fg[i].red, + style->fg[i].green, style->fg[i].blue); + } + if (!gdk_colormap_alloc_color (style->colormap, &style->bg[i], FALSE, TRUE)) - g_warning ("unable to allocate color: ( %d %d %d )", - style->bg[i].red, style->bg[i].green, style->bg[i].blue); + { + g_warning ("unable to allocate color: ( %d %d %d )", style->bg[i].red, + style->bg[i].green, style->bg[i].blue); + } + if (!gdk_colormap_alloc_color (style->colormap, &style->light[i], FALSE, TRUE)) - g_warning ("unable to allocate color: ( %d %d %d )", - style->light[i].red, style->light[i].green, style->light[i].blue); + { + g_warning ("unable to allocate color: ( %d %d %d )", + style->light[i].red, style->light[i].green, + style->light[i].blue); + } + if (!gdk_colormap_alloc_color (style->colormap, &style->dark[i], FALSE, TRUE)) - g_warning ("unable to allocate color: ( %d %d %d )", - style->dark[i].red, style->dark[i].green, style->dark[i].blue); + { + g_warning ("unable to allocate color: ( %d %d %d )", + style->dark[i].red, style->dark[i].green, + style->dark[i].blue); + } + if (!gdk_colormap_alloc_color (style->colormap, &style->mid[i], FALSE, TRUE)) - g_warning ("unable to allocate color: ( %d %d %d )", - style->mid[i].red, style->mid[i].green, style->mid[i].blue); + { + g_warning ("unable to allocate color: ( %d %d %d )", + style->mid[i].red, style->mid[i].green, + style->mid[i].blue); + } + if (!gdk_colormap_alloc_color (style->colormap, &style->text[i], FALSE, TRUE)) - g_warning ("unable to allocate color: ( %d %d %d )", - style->text[i].red, style->text[i].green, style->text[i].blue); + { + g_warning ("unable to allocate color: ( %d %d %d )", + style->text[i].red, style->text[i].green, + style->text[i].blue); + } + if (!gdk_colormap_alloc_color (style->colormap, &style->base[i], FALSE, TRUE)) - g_warning ("unable to allocate color: ( %d %d %d )", - style->base[i].red, style->base[i].green, style->base[i].blue); + { + g_warning ("unable to allocate color: ( %d %d %d )", + style->base[i].red, style->base[i].green, + style->base[i].blue); + } + if (!gdk_colormap_alloc_color (style->colormap, &style->text_aa[i], FALSE, TRUE)) - g_warning ("unable to allocate color: ( %d %d %d )", - style->text_aa[i].red, style->text_aa[i].green, style->text_aa[i].blue); + { + g_warning ("unable to allocate color: ( %d %d %d )", + style->text_aa[i].red, style->text_aa[i].green, + style->text_aa[i].blue); + } gc_values.foreground = style->fg[i]; style->fg_gc[i] = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask); @@ -3409,91 +3659,98 @@ msw_style_realize (GtkStyle * style) } static void -msw_style_unrealize (GtkStyle * style) +msw_style_unrealize (GtkStyle *style) { - parent_class->unrealize (style); + parent_class->unrealize (style); } static void -msw_style_class_init (MswStyleClass * klass) -{ - GtkStyleClass *style_class = GTK_STYLE_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - - style_class->init_from_rc = msw_style_init_from_rc; - style_class->draw_arrow = draw_arrow; - style_class->draw_box = draw_box; - style_class->draw_check = draw_check; - style_class->draw_option = draw_option; - style_class->draw_tab = draw_tab; - style_class->draw_flat_box = draw_flat_box; - style_class->draw_expander = draw_expander; - style_class->draw_extension = draw_extension; - style_class->draw_box_gap = draw_box_gap; - style_class->draw_shadow = draw_shadow; - style_class->draw_hline = draw_hline; - style_class->draw_vline = draw_vline; - style_class->draw_handle = draw_handle; - style_class->draw_resize_grip = draw_resize_grip; - style_class->draw_slider = draw_slider; - style_class->draw_focus = draw_focus; - style_class->draw_layout = draw_layout; - - style_class->realize = msw_style_realize; - style_class->unrealize = msw_style_unrealize; +msw_style_class_init (MswStyleClass *klass) +{ + GtkStyleClass *style_class = GTK_STYLE_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + style_class->init_from_rc = msw_style_init_from_rc; + style_class->draw_arrow = draw_arrow; + style_class->draw_box = draw_box; + style_class->draw_check = draw_check; + style_class->draw_option = draw_option; + style_class->draw_tab = draw_tab; + style_class->draw_flat_box = draw_flat_box; + style_class->draw_expander = draw_expander; + style_class->draw_extension = draw_extension; + style_class->draw_box_gap = draw_box_gap; + style_class->draw_shadow = draw_shadow; + style_class->draw_hline = draw_hline; + style_class->draw_vline = draw_vline; + style_class->draw_handle = draw_handle; + style_class->draw_resize_grip = draw_resize_grip; + style_class->draw_slider = draw_slider; + style_class->draw_focus = draw_focus; + style_class->draw_layout = draw_layout; + + style_class->realize = msw_style_realize; + style_class->unrealize = msw_style_unrealize; } GType msw_type_style = 0; void -msw_style_register_type (GTypeModule * module) -{ - static const GTypeInfo object_info = { - sizeof (MswStyleClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) msw_style_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (MswStyle), - 0, /* n_preallocs */ - (GInstanceInitFunc) NULL, - }; - - msw_type_style = g_type_module_register_type (module, - GTK_TYPE_STYLE, - "MswStyle", - &object_info, 0); +msw_style_register_type (GTypeModule *module) +{ + static const GTypeInfo object_info = { + sizeof (MswStyleClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) msw_style_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (MswStyle), + 0, /* n_preallocs */ + (GInstanceInitFunc) NULL, + }; + + msw_type_style = g_type_module_register_type (module, + GTK_TYPE_STYLE, + "MswStyle", &object_info, 0); } void msw_style_init (void) { - xp_theme_init (); - msw_style_setup_system_settings (); - setup_msw_rc_style (); + xp_theme_init (); + msw_style_setup_system_settings (); + setup_msw_rc_style (); - if( g_light_pen ){ - DeleteObject( g_light_pen ); - g_light_pen = NULL; + if (g_light_pen) + { + DeleteObject (g_light_pen); + g_light_pen = NULL; } - if( g_dark_pen ){ - DeleteObject( g_dark_pen ); - g_dark_pen = NULL; + + if (g_dark_pen) + { + DeleteObject (g_dark_pen); + g_dark_pen = NULL; } } -void msw_style_finalize(void) +void +msw_style_finalize (void) { - if( g_dither_brush ){ - DeleteObject( g_dither_brush ); + if (g_dither_brush) + { + DeleteObject (g_dither_brush); } - if( g_light_pen ){ - DeleteObject( g_light_pen ); + + if (g_light_pen) + { + DeleteObject (g_light_pen); } - if( g_dark_pen ){ - DeleteObject( g_dark_pen ); + + if (g_dark_pen) + { + DeleteObject (g_dark_pen); } } - diff --git a/modules/engines/ms-windows/msw_theme_main.c b/modules/engines/ms-windows/msw_theme_main.c index 5f0cc135d..febaf95d7 100755 --- a/modules/engines/ms-windows/msw_theme_main.c +++ b/modules/engines/ms-windows/msw_theme_main.c @@ -35,10 +35,10 @@ #endif static GModule *this_module = NULL; -static void (*msw_rc_reset_styles) (GtkSettings * settings) = NULL; -static GdkWindow* hidden_msg_window = NULL; +static void (*msw_rc_reset_styles) (GtkSettings *settings) = NULL; +static GdkWindow *hidden_msg_window = NULL; -static GdkWindow* +static GdkWindow * create_hidden_msg_window (void) { GdkWindowAttr attributes; @@ -60,79 +60,79 @@ create_hidden_msg_window (void) } static GdkFilterReturn -global_filter_func (void *xevent, GdkEvent * event, gpointer data) +global_filter_func (void *xevent, GdkEvent *event, gpointer data) { - MSG *msg = (MSG *) xevent; + MSG *msg = (MSG *) xevent; - switch (msg->message) - { - /* catch theme changes */ - case WM_THEMECHANGED: - case WM_SYSCOLORCHANGE: + switch (msg->message) + { + /* catch theme changes */ + case WM_THEMECHANGED: + case WM_SYSCOLORCHANGE: - if (msw_rc_reset_styles != NULL) - { - xp_theme_reset (); - msw_style_init (); + if (msw_rc_reset_styles != NULL) + { + xp_theme_reset (); + msw_style_init (); - /* force all gtkwidgets to redraw */ - (*msw_rc_reset_styles) (gtk_settings_get_default ()); - } + /* force all gtkwidgets to redraw */ + (*msw_rc_reset_styles) (gtk_settings_get_default ()); + } - return GDK_FILTER_REMOVE; + return GDK_FILTER_REMOVE; - case WM_SETTINGCHANGE: - /* catch cursor blink, etc... changes */ - msw_style_setup_system_settings (); - return GDK_FILTER_REMOVE; + case WM_SETTINGCHANGE: + /* catch cursor blink, etc... changes */ + msw_style_setup_system_settings (); + return GDK_FILTER_REMOVE; - default: - return GDK_FILTER_CONTINUE; - } + default: + return GDK_FILTER_CONTINUE; + } } G_MODULE_EXPORT void theme_init (GTypeModule * module) { - msw_rc_style_register_type (module); - msw_style_register_type (module); - - /* this craziness is required because only gtk 2.4.x and later have - gtk_rc_reset_styles(). But we want to be able to run acceptly well on - any GTK 2.x.x platform. */ - if (gtk_check_version (2, 4, 0) == NULL) - { - this_module = g_module_open (NULL, 0); - - if (this_module) - g_module_symbol (this_module, "gtk_rc_reset_styles", - (gpointer *) (&msw_rc_reset_styles)); - } - - msw_style_init (); - hidden_msg_window = create_hidden_msg_window (); - gdk_window_add_filter (hidden_msg_window, global_filter_func, NULL); + msw_rc_style_register_type (module); + msw_style_register_type (module); + + /* this craziness is required because only gtk 2.4.x and later have + gtk_rc_reset_styles(). But we want to be able to run acceptly well on + any GTK 2.x.x platform. */ + if (gtk_check_version (2, 4, 0) == NULL) + { + this_module = g_module_open (NULL, 0); + + if (this_module) + g_module_symbol (this_module, "gtk_rc_reset_styles", + (gpointer *) (&msw_rc_reset_styles)); + } + + msw_style_init (); + hidden_msg_window = create_hidden_msg_window (); + gdk_window_add_filter (hidden_msg_window, global_filter_func, NULL); } G_MODULE_EXPORT void theme_exit (void) { - gdk_window_remove_filter (hidden_msg_window, global_filter_func, NULL); - gdk_window_destroy (hidden_msg_window); - hidden_msg_window = NULL; - msw_style_finalize(); - - if (this_module) - { - g_module_close (this_module); - this_module = NULL; - } + gdk_window_remove_filter (hidden_msg_window, global_filter_func, NULL); + gdk_window_destroy (hidden_msg_window); + hidden_msg_window = NULL; + msw_style_finalize (); + + if (this_module) + { + g_module_close (this_module); + this_module = NULL; + } } G_MODULE_EXPORT GtkRcStyle * theme_create_rc_style (void) { - return g_object_new (MSW_TYPE_RC_STYLE, NULL); + return g_object_new (MSW_TYPE_RC_STYLE, NULL); } /* The following function will be called by GTK+ when the module @@ -140,7 +140,7 @@ theme_create_rc_style (void) * version of GTK+ that loads us. */ G_MODULE_EXPORT const gchar * -g_module_check_init (GModule * module) +g_module_check_init (GModule *module) { - return gtk_check_version (2, 0, 0); + return gtk_check_version (2, 0, 0); } diff --git a/modules/engines/ms-windows/xp_theme.c b/modules/engines/ms-windows/xp_theme.c index cdc73bb42..b4d0e5b9f 100755 --- a/modules/engines/ms-windows/xp_theme.c +++ b/modules/engines/ms-windows/xp_theme.c @@ -41,143 +41,140 @@ /* These aren't in mingw's "w32api" headers, nor in the Platform SDK * headers. */ -#define TMT_CAPTIONFONT 801 -#define TMT_MENUFONT 803 -#define TMT_STATUSFONT 804 -#define TMT_MSGBOXFONT 805 +#define TMT_CAPTIONFONT 801 +#define TMT_MENUFONT 803 +#define TMT_STATUSFONT 804 +#define TMT_MSGBOXFONT 805 #endif -#define GP_LINEHORZ 2 -#define GP_LINEVERT 3 -#define TP_SEPARATOR 5 -#define TP_SEPARATORVERT 6 +#define GP_LINEHORZ 2 +#define GP_LINEVERT 3 +#define TP_SEPARATOR 5 +#define TP_SEPARATORVERT 6 /* GLOBALS LINEHORZ states */ -#define LHS_FLAT 1 -#define LHS_RAISED 2 -#define LHS_SUNKEN 3 +#define LHS_FLAT 1 +#define LHS_RAISED 2 +#define LHS_SUNKEN 3 /* GLOBAL LINEVERT states */ -#define LVS_FLAT 1 -#define LVS_RAISED 2 -#define LVS_SUNKEN 3 +#define LVS_FLAT 1 +#define LVS_RAISED 2 +#define LVS_SUNKEN 3 /* TRACKBAR parts */ -#define TKP_TRACK 1 -#define TKP_TRACKVERT 2 -#define TKP_THUMB 3 -#define TKP_THUMBBOTTOM 4 -#define TKP_THUMBTOP 5 -#define TKP_THUMBVERT 6 -#define TKP_THUMBLEFT 7 -#define TKP_THUMBRIGHT 8 -#define TKP_TICS 9 -#define TKP_TICSVERT 10 - -#define TRS_NORMAL 1 +#define TKP_TRACK 1 +#define TKP_TRACKVERT 2 +#define TKP_THUMB 3 +#define TKP_THUMBBOTTOM 4 +#define TKP_THUMBTOP 5 +#define TKP_THUMBVERT 6 +#define TKP_THUMBLEFT 7 +#define TKP_THUMBRIGHT 8 +#define TKP_TICS 9 +#define TKP_TICSVERT 10 + +#define TRS_NORMAL 1 static const LPCWSTR class_descriptors[] = { - L"Scrollbar", /* XP_THEME_CLASS_SCROLLBAR */ - L"Button", /* XP_THEME_CLASS_BUTTON */ - L"Header", /* XP_THEME_CLASS_HEADER */ - L"ComboBox", /* XP_THEME_CLASS_COMBOBOX */ - L"Tab", /* XP_THEME_CLASS_TAB */ - L"Edit", /* XP_THEME_CLASS_EDIT */ - L"TreeView", /* XP_THEME_CLASS_TREEVIEW */ - L"Spin", /* XP_THEME_CLASS_SPIN */ - L"Progress", /* XP_THEME_CLASS_PROGRESS */ - L"Tooltip", /* XP_THEME_CLASS_TOOLTIP */ - L"Rebar", /* XP_THEME_CLASS_REBAR */ - L"Toolbar", /* XP_THEME_CLASS_TOOLBAR */ - L"Globals", /* XP_THEME_CLASS_GLOBALS */ - L"Menu", /* XP_THEME_CLASS_MENU */ - L"Window", /* XP_THEME_CLASS_WINDOW */ - L"Status", /* XP_THEME_CLASS_STATUS */ - L"Trackbar" /* XP_THEME_CLASS_TRACKBAR */ + L"Scrollbar", /* XP_THEME_CLASS_SCROLLBAR */ + L"Button", /* XP_THEME_CLASS_BUTTON */ + L"Header", /* XP_THEME_CLASS_HEADER */ + L"ComboBox", /* XP_THEME_CLASS_COMBOBOX */ + L"Tab", /* XP_THEME_CLASS_TAB */ + L"Edit", /* XP_THEME_CLASS_EDIT */ + L"TreeView", /* XP_THEME_CLASS_TREEVIEW */ + L"Spin", /* XP_THEME_CLASS_SPIN */ + L"Progress", /* XP_THEME_CLASS_PROGRESS */ + L"Tooltip", /* XP_THEME_CLASS_TOOLTIP */ + L"Rebar", /* XP_THEME_CLASS_REBAR */ + L"Toolbar", /* XP_THEME_CLASS_TOOLBAR */ + L"Globals", /* XP_THEME_CLASS_GLOBALS */ + L"Menu", /* XP_THEME_CLASS_MENU */ + L"Window", /* XP_THEME_CLASS_WINDOW */ + L"Status", /* XP_THEME_CLASS_STATUS */ + L"Trackbar" /* XP_THEME_CLASS_TRACKBAR */ }; static const short element_part_map[XP_THEME_ELEMENT__SIZEOF] = { - BP_CHECKBOX, - BP_CHECKBOX, - BP_CHECKBOX, - BP_PUSHBUTTON, - HP_HEADERITEM, - CP_DROPDOWNBUTTON, - TABP_BODY, - TABP_TABITEM, - TABP_TABITEMLEFTEDGE, - TABP_TABITEMRIGHTEDGE, - TABP_PANE, - SBP_THUMBBTNHORZ, - SBP_THUMBBTNVERT, - SBP_ARROWBTN, - SBP_ARROWBTN, - SBP_ARROWBTN, - SBP_ARROWBTN, - SBP_GRIPPERHORZ, - SBP_GRIPPERVERT, - SBP_LOWERTRACKHORZ, - SBP_LOWERTRACKVERT, - EP_EDITTEXT, - BP_PUSHBUTTON, - SPNP_UP, - SPNP_DOWN, - BP_RADIOBUTTON, - BP_RADIOBUTTON, - TVP_GLYPH, - TVP_GLYPH, - PP_CHUNK, - PP_CHUNKVERT, - PP_BAR, - PP_BARVERT, - TTP_STANDARD, - 0 /* RP_BAND */ , - RP_GRIPPER, - RP_GRIPPERVERT, - RP_CHEVRON, - TP_BUTTON, - MP_MENUITEM, - MP_SEPARATOR, - SP_GRIPPER, - SP_PANE, - GP_LINEHORZ, - GP_LINEVERT, - TP_SEPARATOR, - TP_SEPARATORVERT, - TKP_TRACK, - TKP_TRACKVERT, - TKP_THUMB, - TKP_THUMBVERT, - TKP_TICS, - TKP_TICSVERT + BP_CHECKBOX, + BP_CHECKBOX, + BP_CHECKBOX, + BP_PUSHBUTTON, + HP_HEADERITEM, + CP_DROPDOWNBUTTON, + TABP_BODY, + TABP_TABITEM, + TABP_TABITEMLEFTEDGE, + TABP_TABITEMRIGHTEDGE, + TABP_PANE, + SBP_THUMBBTNHORZ, + SBP_THUMBBTNVERT, + SBP_ARROWBTN, + SBP_ARROWBTN, + SBP_ARROWBTN, + SBP_ARROWBTN, + SBP_GRIPPERHORZ, + SBP_GRIPPERVERT, + SBP_LOWERTRACKHORZ, + SBP_LOWERTRACKVERT, + EP_EDITTEXT, + BP_PUSHBUTTON, + SPNP_UP, + SPNP_DOWN, + BP_RADIOBUTTON, + BP_RADIOBUTTON, + TVP_GLYPH, + TVP_GLYPH, + PP_CHUNK, + PP_CHUNKVERT, + PP_BAR, + PP_BARVERT, + TTP_STANDARD, + 0 /* RP_BAND */ , + RP_GRIPPER, + RP_GRIPPERVERT, + RP_CHEVRON, + TP_BUTTON, + MP_MENUITEM, + MP_SEPARATOR, + SP_GRIPPER, + SP_PANE, + GP_LINEHORZ, + GP_LINEVERT, + TP_SEPARATOR, + TP_SEPARATORVERT, + TKP_TRACK, + TKP_TRACKVERT, + TKP_THUMB, + TKP_THUMBVERT, + TKP_TICS, + TKP_TICSVERT }; static HINSTANCE uxtheme_dll = NULL; static HTHEME open_themes[XP_THEME_CLASS__SIZEOF]; static gboolean use_xp_theme = FALSE; -typedef HRESULT (FAR PASCAL * GetThemeSysFontFunc) - (HTHEME hTheme, int iFontID, OUT LOGFONT * plf); -typedef int (FAR PASCAL * GetThemeSysSizeFunc) (HTHEME hTheme, int iSizeId); -typedef COLORREF (FAR PASCAL * GetThemeSysColorFunc) (HTHEME hTheme, - int iColorID); -typedef HTHEME (FAR PASCAL * OpenThemeDataFunc) (HWND hwnd, - LPCWSTR pszClassList); -typedef HRESULT (FAR PASCAL * CloseThemeDataFunc) (HTHEME theme); -typedef HRESULT (FAR PASCAL * DrawThemeBackgroundFunc) - (HTHEME hTheme, HDC hdc, int iPartId, int iStateId, - const RECT * pRect, const RECT * pClipRect); -typedef HRESULT (FAR PASCAL * EnableThemeDialogTextureFunc) (HWND hwnd, +typedef HRESULT (FAR PASCAL *GetThemeSysFontFunc) (HTHEME hTheme, int iFontID, OUT LOGFONT *plf); +typedef int (FAR PASCAL *GetThemeSysSizeFunc) (HTHEME hTheme, int iSizeId); +typedef COLORREF (FAR PASCAL *GetThemeSysColorFunc) (HTHEME hTheme, + int iColorID); +typedef HTHEME (FAR PASCAL *OpenThemeDataFunc) (HWND hwnd, + LPCWSTR pszClassList); +typedef HRESULT (FAR PASCAL *CloseThemeDataFunc) (HTHEME theme); +typedef HRESULT (FAR PASCAL *DrawThemeBackgroundFunc) (HTHEME hTheme, HDC hdc, int iPartId, int iStateId, + const RECT *pRect, const RECT *pClipRect); +typedef HRESULT (FAR PASCAL *EnableThemeDialogTextureFunc) (HWND hwnd, DWORD dwFlags); -typedef BOOL (FAR PASCAL * IsThemeActiveFunc) (VOID); -typedef BOOL (FAR PASCAL * IsAppThemedFunc) (VOID); -typedef BOOL (FAR PASCAL * - IsThemeBackgroundPartiallyTransparentFunc) (HTHEME hTheme, - int iPartId, - int iStateId); -typedef HRESULT (FAR PASCAL * DrawThemeParentBackgroundFunc) (HWND hwnd, - HDC hdc, - RECT * prc); +typedef BOOL (FAR PASCAL *IsThemeActiveFunc) (VOID); +typedef BOOL (FAR PASCAL *IsAppThemedFunc) (VOID); +typedef BOOL (FAR PASCAL *IsThemeBackgroundPartiallyTransparentFunc) (HTHEME hTheme, + int iPartId, + int iStateId); +typedef HRESULT (FAR PASCAL *DrawThemeParentBackgroundFunc) (HWND hwnd, + HDC hdc, + RECT *prc); static GetThemeSysFontFunc get_theme_sys_font_func = NULL; static GetThemeSysColorFunc get_theme_sys_color_func = NULL; @@ -188,769 +185,804 @@ static DrawThemeBackgroundFunc draw_theme_background_func = NULL; static EnableThemeDialogTextureFunc enable_theme_dialog_texture_func = NULL; static IsThemeActiveFunc is_theme_active_func = NULL; static IsAppThemedFunc is_app_themed_func = NULL; -static IsThemeBackgroundPartiallyTransparentFunc - is_theme_partially_transparent_func = NULL; +static IsThemeBackgroundPartiallyTransparentFunc is_theme_partially_transparent_func = NULL; static DrawThemeParentBackgroundFunc draw_theme_parent_background_func = NULL; static void xp_theme_close_open_handles (void) { - int i; + int i; - for (i = 0; i < XP_THEME_CLASS__SIZEOF; i++) + for (i = 0; i < XP_THEME_CLASS__SIZEOF; i++) + { + if (open_themes[i]) { - if (open_themes[i]) - { - close_theme_data_func (open_themes[i]); - open_themes[i] = NULL; - } + close_theme_data_func (open_themes[i]); + open_themes[i] = NULL; } + } } void xp_theme_init (void) { - if (uxtheme_dll) - return; - - memset (open_themes, 0, sizeof (open_themes)); - - uxtheme_dll = LoadLibrary ("uxtheme.dll"); - if (!uxtheme_dll) - return; - - is_app_themed_func = - (IsAppThemedFunc) GetProcAddress (uxtheme_dll, "IsAppThemed"); - - if (is_app_themed_func) - { - is_theme_active_func = - (IsThemeActiveFunc) GetProcAddress (uxtheme_dll, - "IsThemeActive"); - open_theme_data_func = - (OpenThemeDataFunc) GetProcAddress (uxtheme_dll, - "OpenThemeData"); - close_theme_data_func = - (CloseThemeDataFunc) GetProcAddress (uxtheme_dll, - "CloseThemeData"); - draw_theme_background_func = - (DrawThemeBackgroundFunc) GetProcAddress (uxtheme_dll, - "DrawThemeBackground"); - enable_theme_dialog_texture_func = - (EnableThemeDialogTextureFunc) GetProcAddress (uxtheme_dll, - "EnableThemeDialogTexture"); - get_theme_sys_font_func = - (GetThemeSysFontFunc) GetProcAddress (uxtheme_dll, - "GetThemeSysFont"); - get_theme_sys_color_func = - (GetThemeSysColorFunc) GetProcAddress (uxtheme_dll, - "GetThemeSysColor"); - get_theme_sys_metric_func = - (GetThemeSysSizeFunc) GetProcAddress (uxtheme_dll, - "GetThemeSysSize"); - is_theme_partially_transparent_func = - (IsThemeBackgroundPartiallyTransparentFunc) - GetProcAddress (uxtheme_dll, - "IsThemeBackgroundPartiallyTransparent"); - draw_theme_parent_background_func = - (DrawThemeParentBackgroundFunc) GetProcAddress (uxtheme_dll, - "DrawThemeParentBackground"); - } + if (uxtheme_dll) + return; + + memset (open_themes, 0, sizeof (open_themes)); + + uxtheme_dll = LoadLibrary ("uxtheme.dll"); + if (!uxtheme_dll) + return; + + is_app_themed_func = (IsAppThemedFunc) GetProcAddress (uxtheme_dll, "IsAppThemed"); + + if (is_app_themed_func) + { + is_theme_active_func = (IsThemeActiveFunc) GetProcAddress (uxtheme_dll, "IsThemeActive"); + open_theme_data_func = (OpenThemeDataFunc) GetProcAddress (uxtheme_dll, "OpenThemeData"); + close_theme_data_func = (CloseThemeDataFunc) GetProcAddress (uxtheme_dll, "CloseThemeData"); + draw_theme_background_func = (DrawThemeBackgroundFunc) GetProcAddress (uxtheme_dll, "DrawThemeBackground"); + enable_theme_dialog_texture_func = (EnableThemeDialogTextureFunc) GetProcAddress (uxtheme_dll, "EnableThemeDialogTexture"); + get_theme_sys_font_func = (GetThemeSysFontFunc) GetProcAddress (uxtheme_dll, "GetThemeSysFont"); + get_theme_sys_color_func = (GetThemeSysColorFunc) GetProcAddress (uxtheme_dll, "GetThemeSysColor"); + get_theme_sys_metric_func = (GetThemeSysSizeFunc) GetProcAddress (uxtheme_dll, "GetThemeSysSize"); + is_theme_partially_transparent_func = (IsThemeBackgroundPartiallyTransparentFunc) GetProcAddress (uxtheme_dll, "IsThemeBackgroundPartiallyTransparent"); + draw_theme_parent_background_func = (DrawThemeParentBackgroundFunc) GetProcAddress (uxtheme_dll, "DrawThemeParentBackground"); + } - if (is_app_themed_func && is_theme_active_func) { - use_xp_theme = (is_app_themed_func () && is_theme_active_func ()); + if (is_app_themed_func && is_theme_active_func) + { + use_xp_theme = (is_app_themed_func () && is_theme_active_func ()); } - else { - use_xp_theme = FALSE; + else + { + use_xp_theme = FALSE; } } void xp_theme_reset (void) { - xp_theme_close_open_handles (); + xp_theme_close_open_handles (); - if (is_app_themed_func && is_theme_active_func) { - use_xp_theme = (is_app_themed_func () && is_theme_active_func ()); + if (is_app_themed_func && is_theme_active_func) + { + use_xp_theme = (is_app_themed_func () && is_theme_active_func ()); } - else { - use_xp_theme = FALSE; + else + { + use_xp_theme = FALSE; } } void xp_theme_exit (void) { - if (!uxtheme_dll) - return; - - xp_theme_close_open_handles (); - - FreeLibrary (uxtheme_dll); - uxtheme_dll = NULL; - use_xp_theme = FALSE; - - is_app_themed_func = NULL; - is_theme_active_func = NULL; - open_theme_data_func = NULL; - close_theme_data_func = NULL; - draw_theme_background_func = NULL; - enable_theme_dialog_texture_func = NULL; - get_theme_sys_font_func = NULL; - get_theme_sys_color_func = NULL; - get_theme_sys_metric_func = NULL; - is_theme_partially_transparent_func = NULL; - draw_theme_parent_background_func = NULL; + if (!uxtheme_dll) + return; + + xp_theme_close_open_handles (); + + FreeLibrary (uxtheme_dll); + uxtheme_dll = NULL; + use_xp_theme = FALSE; + + is_app_themed_func = NULL; + is_theme_active_func = NULL; + open_theme_data_func = NULL; + close_theme_data_func = NULL; + draw_theme_background_func = NULL; + enable_theme_dialog_texture_func = NULL; + get_theme_sys_font_func = NULL; + get_theme_sys_color_func = NULL; + get_theme_sys_metric_func = NULL; + is_theme_partially_transparent_func = NULL; + draw_theme_parent_background_func = NULL; } static HTHEME xp_theme_get_handle_by_class (XpThemeClass klazz) { - if (!open_themes[klazz] && open_theme_data_func) - { - open_themes[klazz] = - open_theme_data_func (NULL, class_descriptors[klazz]); - } - return open_themes[klazz]; + if (!open_themes[klazz] && open_theme_data_func) + { + open_themes[klazz] = open_theme_data_func (NULL, class_descriptors[klazz]); + } + + return open_themes[klazz]; } static HTHEME xp_theme_get_handle_by_element (XpThemeElement element) { - HTHEME ret = NULL; - XpThemeClass klazz = XP_THEME_CLASS__SIZEOF; + HTHEME ret = NULL; + XpThemeClass klazz = XP_THEME_CLASS__SIZEOF; + + switch (element) + { + case XP_THEME_ELEMENT_TOOLTIP: + klazz = XP_THEME_CLASS_TOOLTIP; + break; + + case XP_THEME_ELEMENT_REBAR: + case XP_THEME_ELEMENT_REBAR_GRIPPER_H: + case XP_THEME_ELEMENT_REBAR_GRIPPER_V: + case XP_THEME_ELEMENT_REBAR_CHEVRON: + klazz = XP_THEME_CLASS_REBAR; + break; + + case XP_THEME_ELEMENT_SCALE_TROUGH_H: + case XP_THEME_ELEMENT_SCALE_TROUGH_V: + case XP_THEME_ELEMENT_SCALE_SLIDER_H: + case XP_THEME_ELEMENT_SCALE_SLIDER_V: + case XP_THEME_ELEMENT_SCALE_TICS_H: + case XP_THEME_ELEMENT_SCALE_TICS_V: + klazz = XP_THEME_CLASS_TRACKBAR; + break; + + case XP_THEME_ELEMENT_STATUS_GRIPPER: + case XP_THEME_ELEMENT_STATUS_PANE: + klazz = XP_THEME_CLASS_STATUS; + break; + + case XP_THEME_ELEMENT_TOOLBAR_BUTTON: + case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_H: + case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_V: + klazz = XP_THEME_CLASS_TOOLBAR; + break; + + case XP_THEME_ELEMENT_MENU_ITEM: + case XP_THEME_ELEMENT_MENU_SEPARATOR: + klazz = XP_THEME_CLASS_MENU; + break; + + case XP_THEME_ELEMENT_PRESSED_CHECKBOX: + case XP_THEME_ELEMENT_INCONSISTENT_CHECKBOX: + case XP_THEME_ELEMENT_CHECKBOX: + case XP_THEME_ELEMENT_BUTTON: + case XP_THEME_ELEMENT_DEFAULT_BUTTON: + case XP_THEME_ELEMENT_PRESSED_RADIO_BUTTON: + case XP_THEME_ELEMENT_RADIO_BUTTON: + klazz = XP_THEME_CLASS_BUTTON; + break; + + case XP_THEME_ELEMENT_LIST_HEADER: + klazz = XP_THEME_CLASS_HEADER; + break; + + case XP_THEME_ELEMENT_COMBOBUTTON: + klazz = XP_THEME_CLASS_COMBOBOX; + break; + + case XP_THEME_ELEMENT_BODY: + case XP_THEME_ELEMENT_TAB_ITEM: + case XP_THEME_ELEMENT_TAB_ITEM_LEFT_EDGE: + case XP_THEME_ELEMENT_TAB_ITEM_RIGHT_EDGE: + case XP_THEME_ELEMENT_TAB_PANE: + klazz = XP_THEME_CLASS_TAB; + break; + + case XP_THEME_ELEMENT_SCROLLBAR_V: + case XP_THEME_ELEMENT_SCROLLBAR_H: + case XP_THEME_ELEMENT_ARROW_UP: + case XP_THEME_ELEMENT_ARROW_DOWN: + case XP_THEME_ELEMENT_ARROW_LEFT: + case XP_THEME_ELEMENT_ARROW_RIGHT: + case XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_V: + case XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_H: + case XP_THEME_ELEMENT_TROUGH_V: + case XP_THEME_ELEMENT_TROUGH_H: + klazz = XP_THEME_CLASS_SCROLLBAR; + break; + + case XP_THEME_ELEMENT_EDIT_TEXT: + klazz = XP_THEME_CLASS_EDIT; + break; + + case XP_THEME_ELEMENT_SPIN_BUTTON_UP: + case XP_THEME_ELEMENT_SPIN_BUTTON_DOWN: + klazz = XP_THEME_CLASS_SPIN; + break; + + case XP_THEME_ELEMENT_PROGRESS_BAR_H: + case XP_THEME_ELEMENT_PROGRESS_BAR_V: + case XP_THEME_ELEMENT_PROGRESS_TROUGH_H: + case XP_THEME_ELEMENT_PROGRESS_TROUGH_V: + klazz = XP_THEME_CLASS_PROGRESS; + break; + + case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_OPENED: + case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_CLOSED: + klazz = XP_THEME_CLASS_TREEVIEW; + break; + + case XP_THEME_ELEMENT_LINE_H: + case XP_THEME_ELEMENT_LINE_V: + klazz = XP_THEME_CLASS_GLOBALS; + break; + + default: + break; + } + + if (klazz != XP_THEME_CLASS__SIZEOF) + { + ret = xp_theme_get_handle_by_class (klazz); + } + + return ret; +} - switch (element) +static int +xp_theme_map_gtk_state (XpThemeElement element, GtkStateType state) +{ + int ret = 0; + + switch (element) + { + case XP_THEME_ELEMENT_TOOLTIP: + ret = TTSS_NORMAL; + break; + + case XP_THEME_ELEMENT_REBAR: + ret = 0; + break; + + case XP_THEME_ELEMENT_REBAR_GRIPPER_H: + case XP_THEME_ELEMENT_REBAR_GRIPPER_V: + ret = 0; + break; + + case XP_THEME_ELEMENT_STATUS_GRIPPER: + case XP_THEME_ELEMENT_STATUS_PANE: + ret = 1; + break; + + case XP_THEME_ELEMENT_REBAR_CHEVRON: + switch (state) { - case XP_THEME_ELEMENT_TOOLTIP: - klazz = XP_THEME_CLASS_TOOLTIP; - break; - - case XP_THEME_ELEMENT_REBAR: - case XP_THEME_ELEMENT_REBAR_GRIPPER_H: - case XP_THEME_ELEMENT_REBAR_GRIPPER_V: - case XP_THEME_ELEMENT_REBAR_CHEVRON: - klazz = XP_THEME_CLASS_REBAR; - break; - - case XP_THEME_ELEMENT_SCALE_TROUGH_H: - case XP_THEME_ELEMENT_SCALE_TROUGH_V: - case XP_THEME_ELEMENT_SCALE_SLIDER_H: - case XP_THEME_ELEMENT_SCALE_SLIDER_V: - case XP_THEME_ELEMENT_SCALE_TICS_H: - case XP_THEME_ELEMENT_SCALE_TICS_V: - klazz = XP_THEME_CLASS_TRACKBAR; - break; - - case XP_THEME_ELEMENT_STATUS_GRIPPER: - case XP_THEME_ELEMENT_STATUS_PANE: - klazz = XP_THEME_CLASS_STATUS; - break; - - case XP_THEME_ELEMENT_TOOLBAR_BUTTON: - case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_H: - case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_V: - klazz = XP_THEME_CLASS_TOOLBAR; - break; - - case XP_THEME_ELEMENT_MENU_ITEM: - case XP_THEME_ELEMENT_MENU_SEPARATOR: - klazz = XP_THEME_CLASS_MENU; - break; - - case XP_THEME_ELEMENT_PRESSED_CHECKBOX: - case XP_THEME_ELEMENT_INCONSISTENT_CHECKBOX: - case XP_THEME_ELEMENT_CHECKBOX: - case XP_THEME_ELEMENT_BUTTON: - case XP_THEME_ELEMENT_DEFAULT_BUTTON: - case XP_THEME_ELEMENT_PRESSED_RADIO_BUTTON: - case XP_THEME_ELEMENT_RADIO_BUTTON: - klazz = XP_THEME_CLASS_BUTTON; - break; - - case XP_THEME_ELEMENT_LIST_HEADER: - klazz = XP_THEME_CLASS_HEADER; - break; - - case XP_THEME_ELEMENT_COMBOBUTTON: - klazz = XP_THEME_CLASS_COMBOBOX; - break; - - case XP_THEME_ELEMENT_BODY: - case XP_THEME_ELEMENT_TAB_ITEM: - case XP_THEME_ELEMENT_TAB_ITEM_LEFT_EDGE: - case XP_THEME_ELEMENT_TAB_ITEM_RIGHT_EDGE: - case XP_THEME_ELEMENT_TAB_PANE: - klazz = XP_THEME_CLASS_TAB; - break; - - case XP_THEME_ELEMENT_SCROLLBAR_V: - case XP_THEME_ELEMENT_SCROLLBAR_H: - case XP_THEME_ELEMENT_ARROW_UP: - case XP_THEME_ELEMENT_ARROW_DOWN: - case XP_THEME_ELEMENT_ARROW_LEFT: - case XP_THEME_ELEMENT_ARROW_RIGHT: - case XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_V: - case XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_H: - case XP_THEME_ELEMENT_TROUGH_V: - case XP_THEME_ELEMENT_TROUGH_H: - klazz = XP_THEME_CLASS_SCROLLBAR; - break; - - case XP_THEME_ELEMENT_EDIT_TEXT: - klazz = XP_THEME_CLASS_EDIT; - break; - - case XP_THEME_ELEMENT_SPIN_BUTTON_UP: - case XP_THEME_ELEMENT_SPIN_BUTTON_DOWN: - klazz = XP_THEME_CLASS_SPIN; - break; - - case XP_THEME_ELEMENT_PROGRESS_BAR_H: - case XP_THEME_ELEMENT_PROGRESS_BAR_V: - case XP_THEME_ELEMENT_PROGRESS_TROUGH_H: - case XP_THEME_ELEMENT_PROGRESS_TROUGH_V: - klazz = XP_THEME_CLASS_PROGRESS; - break; - - case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_OPENED: - case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_CLOSED: - klazz = XP_THEME_CLASS_TREEVIEW; - break; - - case XP_THEME_ELEMENT_LINE_H: - case XP_THEME_ELEMENT_LINE_V: - klazz = XP_THEME_CLASS_GLOBALS; - break; + case GTK_STATE_PRELIGHT: + ret = CHEVS_HOT; + break; + + case GTK_STATE_SELECTED: + case GTK_STATE_ACTIVE: + ret = CHEVS_PRESSED; + break; default: - break; + ret = CHEVS_NORMAL; } + break; - if (klazz != XP_THEME_CLASS__SIZEOF) + case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_H: + case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_V: + ret = TS_NORMAL; + break; + + case XP_THEME_ELEMENT_TOOLBAR_BUTTON: + switch (state) { - ret = xp_theme_get_handle_by_class (klazz); + case GTK_STATE_ACTIVE: + ret = TS_PRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = TS_HOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = TS_DISABLED; + break; + + default: + ret = TS_NORMAL; } - return ret; -} + break; -static int -xp_theme_map_gtk_state (XpThemeElement element, GtkStateType state) -{ - int ret = 0; + case XP_THEME_ELEMENT_TAB_PANE: + ret = 1; + break; - switch (element) + case XP_THEME_ELEMENT_TAB_ITEM_LEFT_EDGE: + case XP_THEME_ELEMENT_TAB_ITEM_RIGHT_EDGE: + case XP_THEME_ELEMENT_TAB_ITEM: + switch (state) { - case XP_THEME_ELEMENT_TOOLTIP: - ret = TTSS_NORMAL; - break; - - case XP_THEME_ELEMENT_REBAR: - ret = 0; - break; - - case XP_THEME_ELEMENT_REBAR_GRIPPER_H: - case XP_THEME_ELEMENT_REBAR_GRIPPER_V: - ret = 0; - break; - - case XP_THEME_ELEMENT_STATUS_GRIPPER: - case XP_THEME_ELEMENT_STATUS_PANE: - ret = 1; - break; - - case XP_THEME_ELEMENT_REBAR_CHEVRON: - switch (state) - { - case GTK_STATE_PRELIGHT: - ret = CHEVS_HOT; - break; - case GTK_STATE_SELECTED: - case GTK_STATE_ACTIVE: - ret = CHEVS_PRESSED; - break; - default: - ret = CHEVS_NORMAL; - } - break; - - case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_H: - case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_V: - ret = TS_NORMAL; - break; - - case XP_THEME_ELEMENT_TOOLBAR_BUTTON: - switch (state) - { - case GTK_STATE_ACTIVE: - ret = TS_PRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = TS_HOT; - break; - case GTK_STATE_INSENSITIVE: - ret = TS_DISABLED; - break; - default: - ret = TS_NORMAL; - } - break; - - case XP_THEME_ELEMENT_TAB_PANE: - ret = 1; - break; - - case XP_THEME_ELEMENT_TAB_ITEM_LEFT_EDGE: - case XP_THEME_ELEMENT_TAB_ITEM_RIGHT_EDGE: - case XP_THEME_ELEMENT_TAB_ITEM: - switch (state) - { - case GTK_STATE_PRELIGHT: - ret = TIS_HOT; - break; - case GTK_STATE_INSENSITIVE: - ret = TIS_DISABLED; - break; - case GTK_STATE_SELECTED: - case GTK_STATE_ACTIVE: - ret = TIS_NORMAL; - break; - default: - ret = TIS_SELECTED; - } - break; - - case XP_THEME_ELEMENT_EDIT_TEXT: - switch (state) - { - case GTK_STATE_PRELIGHT: - ret = ETS_FOCUSED; - break; - case GTK_STATE_INSENSITIVE: - ret = ETS_READONLY; - break; - case GTK_STATE_SELECTED: - case GTK_STATE_ACTIVE: - default: - ret = ETS_NORMAL; - } - break; - - case XP_THEME_ELEMENT_TROUGH_H: - case XP_THEME_ELEMENT_TROUGH_V: - ret = SCRBS_NORMAL; - break; - - case XP_THEME_ELEMENT_SCROLLBAR_H: - case XP_THEME_ELEMENT_SCROLLBAR_V: - switch (state) - { - case GTK_STATE_SELECTED: - case GTK_STATE_ACTIVE: - ret = SCRBS_PRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = SCRBS_HOT; - break; - case GTK_STATE_INSENSITIVE: - ret = SCRBS_DISABLED; - break; - default: - ret = SCRBS_NORMAL; - } - break; - - case XP_THEME_ELEMENT_ARROW_DOWN: - switch (state) - { - case GTK_STATE_ACTIVE: - ret = ABS_DOWNPRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = ABS_DOWNHOT; - break; - case GTK_STATE_INSENSITIVE: - ret = ABS_DOWNDISABLED; - break; - default: - ret = ABS_DOWNNORMAL; - } - break; - - case XP_THEME_ELEMENT_ARROW_UP: - switch (state) - { - case GTK_STATE_ACTIVE: - ret = ABS_UPPRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = ABS_UPHOT; - break; - case GTK_STATE_INSENSITIVE: - ret = ABS_UPDISABLED; - break; - default: - ret = ABS_UPNORMAL; - } - break; - - case XP_THEME_ELEMENT_ARROW_LEFT: - switch (state) - { - case GTK_STATE_ACTIVE: - ret = ABS_LEFTPRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = ABS_LEFTHOT; - break; - case GTK_STATE_INSENSITIVE: - ret = ABS_LEFTDISABLED; - break; - default: - ret = ABS_LEFTNORMAL; - } - break; - - case XP_THEME_ELEMENT_ARROW_RIGHT: - switch (state) - { - case GTK_STATE_ACTIVE: - ret = ABS_RIGHTPRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = ABS_RIGHTHOT; - break; - case GTK_STATE_INSENSITIVE: - ret = ABS_RIGHTDISABLED; - break; - default: - ret = ABS_RIGHTNORMAL; - } - break; - - case XP_THEME_ELEMENT_CHECKBOX: - case XP_THEME_ELEMENT_RADIO_BUTTON: - switch (state) - { - case GTK_STATE_SELECTED: - ret = CBS_UNCHECKEDPRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = CBS_UNCHECKEDHOT; - break; - case GTK_STATE_INSENSITIVE: - ret = CBS_UNCHECKEDDISABLED; - break; - default: - ret = CBS_UNCHECKEDNORMAL; - } - break; - - case XP_THEME_ELEMENT_INCONSISTENT_CHECKBOX: - switch (state) - { - case GTK_STATE_SELECTED: - ret = CBS_MIXEDPRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = CBS_MIXEDHOT; - break; - case GTK_STATE_INSENSITIVE: - ret = CBS_MIXEDDISABLED; - break; - default: - ret = CBS_MIXEDNORMAL; - } - break; - - case XP_THEME_ELEMENT_PRESSED_CHECKBOX: - case XP_THEME_ELEMENT_PRESSED_RADIO_BUTTON: - switch (state) - { - case GTK_STATE_SELECTED: - ret = CBS_CHECKEDPRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = CBS_CHECKEDHOT; - break; - case GTK_STATE_INSENSITIVE: - ret = CBS_CHECKEDDISABLED; - break; - default: - ret = CBS_CHECKEDNORMAL; - } - break; - - case XP_THEME_ELEMENT_DEFAULT_BUTTON: - switch (state) - { - case GTK_STATE_ACTIVE: - ret = PBS_PRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = PBS_HOT; - break; - case GTK_STATE_INSENSITIVE: - ret = PBS_DISABLED; - break; - default: - ret = PBS_DEFAULTED; - } - break; - - case XP_THEME_ELEMENT_SPIN_BUTTON_DOWN: - switch (state) - { - case GTK_STATE_ACTIVE: - ret = DNS_PRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = DNS_HOT; - break; - case GTK_STATE_INSENSITIVE: - ret = DNS_DISABLED; - break; - default: - ret = DNS_NORMAL; - } - break; - - case XP_THEME_ELEMENT_SPIN_BUTTON_UP: - switch (state) - { - case GTK_STATE_ACTIVE: - ret = UPS_PRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = UPS_HOT; - break; - case GTK_STATE_INSENSITIVE: - ret = UPS_DISABLED; - break; - default: - ret = UPS_NORMAL; - } - break; - - case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_OPENED: - ret = GLPS_OPENED; - break; - - case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_CLOSED: - ret = GLPS_CLOSED; - break; - - case XP_THEME_ELEMENT_PROGRESS_BAR_H: - case XP_THEME_ELEMENT_PROGRESS_BAR_V: - case XP_THEME_ELEMENT_PROGRESS_TROUGH_H: - case XP_THEME_ELEMENT_PROGRESS_TROUGH_V: - ret = 1; - break; - - case XP_THEME_ELEMENT_MENU_ITEM: - case XP_THEME_ELEMENT_MENU_SEPARATOR: - switch (state) - { - case GTK_STATE_SELECTED: - ret = MS_SELECTED; - break; - case GTK_STATE_INSENSITIVE: - ret = MS_DEMOTED; - break; - default: - ret = MS_NORMAL; - } - break; - - case XP_THEME_ELEMENT_LINE_H: - switch (state) - { - /* LHS_FLAT, LHS_RAISED, LHS_SUNKEN */ - ret = LHS_RAISED; - break; - } - break; - - case XP_THEME_ELEMENT_LINE_V: - switch (state) - { - /* LVS_FLAT, LVS_RAISED, LVS_SUNKEN */ - ret = LVS_RAISED; - break; - } - break; - - case XP_THEME_ELEMENT_SCALE_TROUGH_H: - case XP_THEME_ELEMENT_SCALE_TROUGH_V: - ret = TRS_NORMAL; - break; + case GTK_STATE_PRELIGHT: + ret = TIS_HOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = TIS_DISABLED; + break; + + case GTK_STATE_SELECTED: + case GTK_STATE_ACTIVE: + ret = TIS_NORMAL; + break; default: - switch (state) - { - case GTK_STATE_ACTIVE: - ret = PBS_PRESSED; - break; - case GTK_STATE_PRELIGHT: - ret = PBS_HOT; - break; - case GTK_STATE_INSENSITIVE: - ret = PBS_DISABLED; - break; - default: - ret = PBS_NORMAL; - } + ret = TIS_SELECTED; } - return ret; -} + break; -gboolean -xp_theme_draw (GdkWindow * win, XpThemeElement element, GtkStyle * style, - int x, int y, int width, int height, - GtkStateType state_type, GdkRectangle * area) -{ - HTHEME theme; - RECT rect, clip, *pClip; - int xoff, yoff; - HDC dc; - GdkDrawable *drawable; - int part_state; - - if (!xp_theme_is_drawable (element)) - return FALSE; + case XP_THEME_ELEMENT_EDIT_TEXT: + switch (state) + { + case GTK_STATE_PRELIGHT: + ret = ETS_FOCUSED; + break; - theme = xp_theme_get_handle_by_element (element); - if (!theme) - return FALSE; + case GTK_STATE_INSENSITIVE: + ret = ETS_READONLY; + break; + + case GTK_STATE_SELECTED: + case GTK_STATE_ACTIVE: + default: + ret = ETS_NORMAL; + } + break; + + case XP_THEME_ELEMENT_TROUGH_H: + case XP_THEME_ELEMENT_TROUGH_V: + ret = SCRBS_NORMAL; + break; + + case XP_THEME_ELEMENT_SCROLLBAR_H: + case XP_THEME_ELEMENT_SCROLLBAR_V: + switch (state) + { + case GTK_STATE_SELECTED: + case GTK_STATE_ACTIVE: + ret = SCRBS_PRESSED; + break; - /* FIXME: Recheck its function */ - enable_theme_dialog_texture_func (GDK_WINDOW_HWND (win), ETDT_ENABLETAB); + case GTK_STATE_PRELIGHT: + ret = SCRBS_HOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = SCRBS_DISABLED; + break; - if (!GDK_IS_WINDOW (win)) + default: + ret = SCRBS_NORMAL; + } + break; + + case XP_THEME_ELEMENT_ARROW_DOWN: + switch (state) { - xoff = 0; - yoff = 0; - drawable = win; + case GTK_STATE_ACTIVE: + ret = ABS_DOWNPRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = ABS_DOWNHOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = ABS_DOWNDISABLED; + break; + + default: + ret = ABS_DOWNNORMAL; } - else + break; + + case XP_THEME_ELEMENT_ARROW_UP: + switch (state) { - gdk_window_get_internal_paint_info (win, &drawable, &xoff, &yoff); + case GTK_STATE_ACTIVE: + ret = ABS_UPPRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = ABS_UPHOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = ABS_UPDISABLED; + break; + + default: + ret = ABS_UPNORMAL; } + break; + + case XP_THEME_ELEMENT_ARROW_LEFT: + switch (state) + { + case GTK_STATE_ACTIVE: + ret = ABS_LEFTPRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = ABS_LEFTHOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = ABS_LEFTDISABLED; + break; - rect.left = x - xoff; - rect.top = y - yoff; - rect.right = rect.left + width; - rect.bottom = rect.top + height; + default: + ret = ABS_LEFTNORMAL; + } + break; - if (area) + case XP_THEME_ELEMENT_ARROW_RIGHT: + switch (state) { - clip.left = area->x - xoff; - clip.top = area->y - yoff; - clip.right = clip.left + area->width; - clip.bottom = clip.top + area->height; + case GTK_STATE_ACTIVE: + ret = ABS_RIGHTPRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = ABS_RIGHTHOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = ABS_RIGHTDISABLED; + break; - pClip = &clip; + default: + ret = ABS_RIGHTNORMAL; } - else + break; + + case XP_THEME_ELEMENT_CHECKBOX: + case XP_THEME_ELEMENT_RADIO_BUTTON: + switch (state) { - pClip = NULL; + case GTK_STATE_SELECTED: + ret = CBS_UNCHECKEDPRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = CBS_UNCHECKEDHOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = CBS_UNCHECKEDDISABLED; + break; + + default: + ret = CBS_UNCHECKEDNORMAL; } + break; - gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); - dc = gdk_win32_hdc_get (drawable, style->dark_gc[state_type], 0); - if (!dc) - return FALSE; + case XP_THEME_ELEMENT_INCONSISTENT_CHECKBOX: + switch (state) + { + case GTK_STATE_SELECTED: + ret = CBS_MIXEDPRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = CBS_MIXEDHOT; + break; - part_state = xp_theme_map_gtk_state (element, state_type); + case GTK_STATE_INSENSITIVE: + ret = CBS_MIXEDDISABLED; + break; - draw_theme_background_func (theme, dc, element_part_map[element], - part_state, &rect, pClip); - gdk_win32_hdc_release (drawable, style->dark_gc[state_type], 0); + default: + ret = CBS_MIXEDNORMAL; + } + break; - return TRUE; + case XP_THEME_ELEMENT_PRESSED_CHECKBOX: + case XP_THEME_ELEMENT_PRESSED_RADIO_BUTTON: + switch (state) + { + case GTK_STATE_SELECTED: + ret = CBS_CHECKEDPRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = CBS_CHECKEDHOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = CBS_CHECKEDDISABLED; + break; + + default: + ret = CBS_CHECKEDNORMAL; + } + break; + + case XP_THEME_ELEMENT_DEFAULT_BUTTON: + switch (state) + { + case GTK_STATE_ACTIVE: + ret = PBS_PRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = PBS_HOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = PBS_DISABLED; + break; + + default: + ret = PBS_DEFAULTED; + } + break; + + case XP_THEME_ELEMENT_SPIN_BUTTON_DOWN: + switch (state) + { + case GTK_STATE_ACTIVE: + ret = DNS_PRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = DNS_HOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = DNS_DISABLED; + break; + + default: + ret = DNS_NORMAL; + } + break; + + case XP_THEME_ELEMENT_SPIN_BUTTON_UP: + switch (state) + { + case GTK_STATE_ACTIVE: + ret = UPS_PRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = UPS_HOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = UPS_DISABLED; + break; + + default: + ret = UPS_NORMAL; + } + break; + + case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_OPENED: + ret = GLPS_OPENED; + break; + + case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_CLOSED: + ret = GLPS_CLOSED; + break; + + case XP_THEME_ELEMENT_PROGRESS_BAR_H: + case XP_THEME_ELEMENT_PROGRESS_BAR_V: + case XP_THEME_ELEMENT_PROGRESS_TROUGH_H: + case XP_THEME_ELEMENT_PROGRESS_TROUGH_V: + ret = 1; + break; + + case XP_THEME_ELEMENT_MENU_ITEM: + case XP_THEME_ELEMENT_MENU_SEPARATOR: + switch (state) + { + case GTK_STATE_SELECTED: + ret = MS_SELECTED; + break; + + case GTK_STATE_INSENSITIVE: + ret = MS_DEMOTED; + break; + + default: + ret = MS_NORMAL; + } + break; + + case XP_THEME_ELEMENT_LINE_H: + switch (state) + { + /* LHS_FLAT, LHS_RAISED, LHS_SUNKEN */ + ret = LHS_RAISED; + break; + } + break; + + case XP_THEME_ELEMENT_LINE_V: + switch (state) + { + /* LVS_FLAT, LVS_RAISED, LVS_SUNKEN */ + ret = LVS_RAISED; + break; + } + break; + + case XP_THEME_ELEMENT_SCALE_TROUGH_H: + case XP_THEME_ELEMENT_SCALE_TROUGH_V: + ret = TRS_NORMAL; + break; + + default: + switch (state) + { + case GTK_STATE_ACTIVE: + ret = PBS_PRESSED; + break; + + case GTK_STATE_PRELIGHT: + ret = PBS_HOT; + break; + + case GTK_STATE_INSENSITIVE: + ret = PBS_DISABLED; + break; + + default: + ret = PBS_NORMAL; + } + } + + return ret; +} + +gboolean +xp_theme_draw (GdkWindow *win, XpThemeElement element, GtkStyle *style, + int x, int y, int width, int height, + GtkStateType state_type, GdkRectangle *area) +{ + HTHEME theme; + RECT rect, clip, *pClip; + int xoff, yoff; + HDC dc; + GdkDrawable *drawable; + int part_state; + + if (!xp_theme_is_drawable (element)) + return FALSE; + + theme = xp_theme_get_handle_by_element (element); + if (!theme) + return FALSE; + + /* FIXME: Recheck its function */ + enable_theme_dialog_texture_func (GDK_WINDOW_HWND (win), ETDT_ENABLETAB); + + if (!GDK_IS_WINDOW (win)) + { + xoff = 0; + yoff = 0; + drawable = win; + } + else + { + gdk_window_get_internal_paint_info (win, &drawable, &xoff, &yoff); + } + + rect.left = x - xoff; + rect.top = y - yoff; + rect.right = rect.left + width; + rect.bottom = rect.top + height; + + if (area) + { + clip.left = area->x - xoff; + clip.top = area->y - yoff; + clip.right = clip.left + area->width; + clip.bottom = clip.top + area->height; + + pClip = &clip; + } + else + { + pClip = NULL; + } + + gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL); + dc = gdk_win32_hdc_get (drawable, style->dark_gc[state_type], 0); + if (!dc) + return FALSE; + + part_state = xp_theme_map_gtk_state (element, state_type); + + draw_theme_background_func (theme, dc, element_part_map[element], + part_state, &rect, pClip); + + gdk_win32_hdc_release (drawable, style->dark_gc[state_type], 0); + + return TRUE; } gboolean xp_theme_is_active (void) { - return use_xp_theme; + return use_xp_theme; } gboolean xp_theme_is_drawable (XpThemeElement element) { - if (xp_theme_is_active ()) - return (xp_theme_get_handle_by_element (element) != NULL); + if (xp_theme_is_active ()) + return (xp_theme_get_handle_by_element (element) != NULL); - return FALSE; + return FALSE; } gboolean xp_theme_get_system_font (XpThemeClass klazz, XpThemeFont fontId, - OUT LOGFONT * lf) + OUT LOGFONT *lf) { - if (xp_theme_is_active () && get_theme_sys_font_func != NULL) + if (xp_theme_is_active () && get_theme_sys_font_func != NULL) + { + HTHEME theme = xp_theme_get_handle_by_class (klazz); + int themeFont; + + if (!theme) + return FALSE; + + switch (fontId) { - HTHEME theme = xp_theme_get_handle_by_class (klazz); - int themeFont; - - if (!theme) - return FALSE; - - switch (fontId) - { - case XP_THEME_FONT_CAPTION: - themeFont = TMT_CAPTIONFONT; - break; - case XP_THEME_FONT_MENU: - themeFont = TMT_MENUFONT; - break; - case XP_THEME_FONT_STATUS: - themeFont = TMT_STATUSFONT; - break; - case XP_THEME_FONT_MESSAGE: - default: - themeFont = TMT_MSGBOXFONT; - break; - } - /* if theme is NULL, it will just return the GetSystemFont() - value */ - return ((*get_theme_sys_font_func) (theme, themeFont, lf) == - S_OK); + case XP_THEME_FONT_CAPTION: + themeFont = TMT_CAPTIONFONT; + break; + + case XP_THEME_FONT_MENU: + themeFont = TMT_MENUFONT; + break; + + case XP_THEME_FONT_STATUS: + themeFont = TMT_STATUSFONT; + break; + + case XP_THEME_FONT_MESSAGE: + default: + themeFont = TMT_MSGBOXFONT; + break; } - return FALSE; + /* if theme is NULL, it will just return the GetSystemFont() + value */ + return ((*get_theme_sys_font_func) (theme, themeFont, lf) == S_OK); + } + + return FALSE; } gboolean xp_theme_get_system_color (XpThemeClass klazz, int colorId, - OUT DWORD * pColor) + OUT DWORD *pColor) { - if (xp_theme_is_active () && get_theme_sys_color_func != NULL) - { - HTHEME theme = xp_theme_get_handle_by_class (klazz); - - /* if theme is NULL, it will just return the GetSystemColor() - value */ - *pColor = (*get_theme_sys_color_func) (theme, colorId); - return TRUE; - } + if (xp_theme_is_active () && get_theme_sys_color_func != NULL) + { + HTHEME theme = xp_theme_get_handle_by_class (klazz); + + /* if theme is NULL, it will just return the GetSystemColor() + value */ + *pColor = (*get_theme_sys_color_func) (theme, colorId); + return TRUE; + } - return FALSE; + return FALSE; } gboolean xp_theme_get_system_metric (XpThemeClass klazz, int metricId, OUT int *pVal) { - if (xp_theme_is_active () && get_theme_sys_metric_func != NULL) - { - HTHEME theme = xp_theme_get_handle_by_class (klazz); - - /* if theme is NULL, it will just return the GetSystemMetrics() - value */ - *pVal = (*get_theme_sys_metric_func) (theme, metricId); - return TRUE; - } + if (xp_theme_is_active () && get_theme_sys_metric_func != NULL) + { + HTHEME theme = xp_theme_get_handle_by_class (klazz); + + /* if theme is NULL, it will just return the GetSystemMetrics() + value */ + *pVal = (*get_theme_sys_metric_func) (theme, metricId); + return TRUE; + } - return FALSE; + return FALSE; } diff --git a/modules/engines/ms-windows/xp_theme.h b/modules/engines/ms-windows/xp_theme.h index d0770975a..31a25449e 100755 --- a/modules/engines/ms-windows/xp_theme.h +++ b/modules/engines/ms-windows/xp_theme.h @@ -122,8 +122,8 @@ gboolean xp_theme_draw (GdkWindow *win, XpThemeElement element, GdkRectangle *area); gboolean xp_theme_is_drawable (XpThemeElement element); gboolean xp_theme_get_system_font (XpThemeClass klazz, XpThemeFont fontId, OUT LOGFONT *lf); -gboolean xp_theme_get_system_color (XpThemeClass klazz, int colorId, OUT DWORD * pColor); -gboolean xp_theme_get_system_metric (XpThemeClass klazz, int metricId, OUT int * pVal); +gboolean xp_theme_get_system_color (XpThemeClass klazz, int colorId, OUT DWORD *pColor); +gboolean xp_theme_get_system_metric (XpThemeClass klazz, int metricId, OUT int *pVal); gboolean xp_theme_is_active (void); diff --git a/modules/engines/ms-windows/xp_theme_defs.h b/modules/engines/ms-windows/xp_theme_defs.h index 67dc147ed..49f5179fd 100644 --- a/modules/engines/ms-windows/xp_theme_defs.h +++ b/modules/engines/ms-windows/xp_theme_defs.h @@ -33,226 +33,727 @@ typedef HANDLE HTHEME; #define ETDT_USETABTEXTURE 0x00000004 #define ETDT_ENABLETAB (ETDT_ENABLE | ETDT_USETABTEXTURE) -enum { - BP_PUSHBUTTON = 1, BP_RADIOBUTTON = 2, BP_CHECKBOX = 3, BP_GROUPBOX = 4, +enum { + BP_PUSHBUTTON = 1, + BP_RADIOBUTTON = 2, + BP_CHECKBOX = 3, + BP_GROUPBOX = 4, BP_USERBUTTON = 5 }; -enum { - CBS_UNCHECKEDNORMAL = 1, CBS_UNCHECKEDHOT = 2, CBS_UNCHECKEDPRESSED = 3, CBS_UNCHECKEDDISABLED = 4, - CBS_CHECKEDNORMAL = 5, CBS_CHECKEDHOT = 6, CBS_CHECKEDPRESSED = 7, CBS_CHECKEDDISABLED = 8, - CBS_MIXEDNORMAL = 9, CBS_MIXEDHOT = 10, CBS_MIXEDPRESSED = 11, CBS_MIXEDDISABLED = 12 + +enum { + CBS_UNCHECKEDNORMAL = 1, + CBS_UNCHECKEDHOT = 2, + CBS_UNCHECKEDPRESSED = 3, + CBS_UNCHECKEDDISABLED = 4, + CBS_CHECKEDNORMAL = 5, + CBS_CHECKEDHOT = 6, + CBS_CHECKEDPRESSED = 7, + CBS_CHECKEDDISABLED = 8, + CBS_MIXEDNORMAL = 9, + CBS_MIXEDHOT = 10, + CBS_MIXEDPRESSED = 11, + CBS_MIXEDDISABLED = 12 }; -enum { GBS_NORMAL = 1, GBS_DISABLED = 2 };; + +enum { + GBS_NORMAL = 1, + GBS_DISABLED = 2 +}; + enum { - PBS_NORMAL = 1, PBS_HOT = 2, PBS_PRESSED = 3, PBS_DISABLED = 4, + PBS_NORMAL = 1, + PBS_HOT = 2, + PBS_PRESSED = 3, + PBS_DISABLED = 4, PBS_DEFAULTED = 5 }; -enum { - RBS_UNCHECKEDNORMAL = 1, RBS_UNCHECKEDHOT = 2, RBS_UNCHECKEDPRESSED = 3, RBS_UNCHECKEDDISABLED = 4, - RBS_CHECKEDNORMAL = 5, RBS_CHECKEDHOT = 6, RBS_CHECKEDPRESSED = 7, RBS_CHECKEDDISABLED = 8 -}; -enum { CLP_TIME = 1 }; -enum { CLS_NORMAL = 1 }; -enum { CP_DROPDOWNBUTTON = 1 }; -enum { CBXS_NORMAL = 1, CBXS_HOT = 2, CBXS_PRESSED = 3, CBXS_DISABLED = 4 }; -enum { EP_EDITTEXT = 1, EP_CARET = 2 }; -enum { - ETS_NORMAL = 1, ETS_HOT = 2, ETS_SELECTED = 3, ETS_DISABLED = 4, - ETS_FOCUSED = 5, ETS_READONLY = 6, ETS_ASSIST = 7 + +enum { + RBS_UNCHECKEDNORMAL = 1, + RBS_UNCHECKEDHOT = 2, + RBS_UNCHECKEDPRESSED = 3, + RBS_UNCHECKEDDISABLED = 4, + RBS_CHECKEDNORMAL = 5, + RBS_CHECKEDHOT = 6, + RBS_CHECKEDPRESSED = 7, + RBS_CHECKEDDISABLED = 8 }; -enum { - EBP_HEADERBACKGROUND = 1, EBP_HEADERCLOSE = 2, EBP_HEADERPIN = 3, EBP_IEBARMENU = 4, - EBP_NORMALGROUPBACKGROUND = 5, EBP_NORMALGROUPCOLLAPSE = 6, EBP_NORMALGROUPEXPAND = 7, EBP_NORMALGROUPHEAD = 8, - EBP_SPECIALGROUPBACKGROUND = 9, EBP_SPECIALGROUPCOLLAPSE = 10, EBP_SPECIALGROUPEXPAND = 11, EBP_SPECIALGROUPHEAD = 12 + +enum { + CLP_TIME = 1 }; -enum { EBHC_NORMAL = 1, EBHC_HOT = 2, EBHC_PRESSED = 3 }; -enum { - EBHP_NORMAL = 1, EBHP_HOT = 2, EBHP_PRESSED = 3, EBHP_SELECTEDNORMAL = 4, - EBHP_SELECTEDHOT = 5, EBHP_SELECTEDPRESSED = 6 -}; -enum { EBM_NORMAL = 1, EBM_HOT = 2, EBM_PRESSED = 3 }; -enum { EBNGC_NORMAL = 1, EBNGC_HOT = 2, EBNGC_PRESSED = 3 }; -enum { EBNGE_NORMAL = 1, EBNGE_HOT = 2, EBNGE_PRESSED = 3 }; -enum { EBSGC_NORMAL = 1, EBSGC_HOT = 2, EBSGC_PRESSED = 3 }; -enum { EBSGE_NORMAL = 1, EBSGE_HOT = 2, EBSGE_PRESSED = 3 }; -enum { HP_HEADERITEM = 1, HP_HEADERITEMLEFT = 2, HP_HEADERITEMRIGHT = 3, HP_HEADERSORTARROW = 4 }; -enum { HIS_NORMAL = 1, HIS_HOT = 2, HIS_PRESSED = 3 }; -enum { HILS_NORMAL = 1, HILS_HOT = 2, HILS_PRESSED = 3 }; -enum { HIRS_NORMAL = 1, HIRS_HOT = 2, HIRS_PRESSED = 3 }; -enum { HSAS_SORTEDUP = 1, HSAS_SORTEDDOWN = 2 }; -enum { - LVP_LISTITEM = 1, LVP_LISTGROUP = 2, LVP_LISTDETAIL = 3, LVP_LISTSORTEDDETAIL = 4, + +enum { + CLS_NORMAL = 1 +}; + +enum { + CP_DROPDOWNBUTTON = 1 +}; + +enum { + CBXS_NORMAL = 1, + CBXS_HOT = 2, + CBXS_PRESSED = 3, + CBXS_DISABLED = 4 +}; + +enum { + EP_EDITTEXT = 1, + EP_CARET = 2 +}; + +enum { + ETS_NORMAL = 1, + ETS_HOT = 2, + ETS_SELECTED = 3, + ETS_DISABLED = 4, + ETS_FOCUSED = 5, + ETS_READONLY = 6, + ETS_ASSIST = 7 +}; + +enum { + EBP_HEADERBACKGROUND = 1, + EBP_HEADERCLOSE = 2, + EBP_HEADERPIN = 3, + EBP_IEBARMENU = 4, + EBP_NORMALGROUPBACKGROUND = 5, + EBP_NORMALGROUPCOLLAPSE = 6, + EBP_NORMALGROUPEXPAND = 7, + EBP_NORMALGROUPHEAD = 8, + EBP_SPECIALGROUPBACKGROUND = 9, + EBP_SPECIALGROUPCOLLAPSE = 10, + EBP_SPECIALGROUPEXPAND = 11, + EBP_SPECIALGROUPHEAD = 12 +}; + +enum { + EBHC_NORMAL = 1, + EBHC_HOT = 2, + EBHC_PRESSED = 3 +}; + +enum { + EBHP_NORMAL = 1, + EBHP_HOT = 2, + EBHP_PRESSED = 3, + EBHP_SELECTEDNORMAL = 4, + EBHP_SELECTEDHOT = 5, + EBHP_SELECTEDPRESSED = 6 +}; + +enum { + EBM_NORMAL = 1, + EBM_HOT = 2, + EBM_PRESSED = 3 +}; + +enum { + EBNGC_NORMAL = 1, + EBNGC_HOT = 2, + EBNGC_PRESSED = 3 +}; + +enum { + EBNGE_NORMAL = 1, + EBNGE_HOT = 2, + EBNGE_PRESSED = 3 +}; + +enum { + EBSGC_NORMAL = 1, + EBSGC_HOT = 2, + EBSGC_PRESSED = 3 +}; + +enum { + EBSGE_NORMAL = 1, + EBSGE_HOT = 2, + EBSGE_PRESSED = 3 +}; + +enum { + HP_HEADERITEM = 1, + HP_HEADERITEMLEFT = 2, + HP_HEADERITEMRIGHT = 3, + HP_HEADERSORTARROW = 4 +}; + +enum { + HIS_NORMAL = 1, + HIS_HOT = 2, + HIS_PRESSED = 3 +}; + +enum { + HILS_NORMAL = 1, + HILS_HOT = 2, + HILS_PRESSED = 3 +}; + +enum { + HIRS_NORMAL = 1, + HIRS_HOT = 2, + HIRS_PRESSED = 3 +}; + +enum { + HSAS_SORTEDUP = 1, + HSAS_SORTEDDOWN = 2 +}; + +enum { + LVP_LISTITEM = 1, + LVP_LISTGROUP = 2, + LVP_LISTDETAIL = 3, + LVP_LISTSORTEDDETAIL = 4, LVP_EMPTYTEXT = 5 }; -enum { - LIS_NORMAL = 1, LIS_HOT = 2, LIS_SELECTED = 3, LIS_DISABLED = 4, + +enum { + LIS_NORMAL = 1, + LIS_HOT = 2, + LIS_SELECTED = 3, + LIS_DISABLED = 4, LIS_SELECTEDNOTFOCUS = 5 }; -enum { - MP_MENUITEM = 1, MP_MENUDROPDOWN = 2, MP_MENUBARITEM = 3, MP_MENUBARDROPDOWN = 4, - MP_CHEVRON = 5, MP_SEPARATOR = 6 + +enum { + MP_MENUITEM = 1, + MP_MENUDROPDOWN = 2, + MP_MENUBARITEM = 3, + MP_MENUBARDROPDOWN = 4, + MP_CHEVRON = 5, + MP_SEPARATOR = 6 }; -enum { MS_NORMAL = 1, MS_SELECTED = 2, MS_DEMOTED = 3 }; -enum { MDP_NEWAPPBUTTON = 1, MDP_SEPERATOR = 2 }; -enum { - MDS_NORMAL = 1, MDS_HOT = 2, MDS_PRESSED = 3, MDS_DISABLED = 4, - MDS_CHECKED = 5, MDS_HOTCHECKED = 6 -}; -enum { PGRP_UP = 1, PGRP_DOWN = 2, PGRP_UPHORZ = 3, PGRP_DOWNHORZ = 4 }; -enum { DNS_NORMAL = 1, DNS_HOT = 2, DNS_PRESSED = 3, DNS_DISABLED = 4 }; -enum { DNHZS_NORMAL = 1, DNHZS_HOT = 2, DNHZS_PRESSED = 3, DNHZS_DISABLED = 4 }; -enum { UPS_NORMAL = 1, UPS_HOT = 2, UPS_PRESSED = 3, UPS_DISABLED = 4 }; -enum { UPHZS_NORMAL = 1, UPHZS_HOT = 2, UPHZS_PRESSED = 3, UPHZS_DISABLED = 4 }; -enum { PP_BAR = 1, PP_BARVERT = 2, PP_CHUNK = 3, PP_CHUNKVERT = 4 }; -enum { - RP_GRIPPER = 1, RP_GRIPPERVERT = 2, RP_BAND = 3, RP_CHEVRON = 4, + +enum { + MS_NORMAL = 1, + MS_SELECTED = 2, + MS_DEMOTED = 3 +}; + +enum { + MDP_NEWAPPBUTTON = 1, + MDP_SEPERATOR = 2 +}; + +enum { + MDS_NORMAL = 1, + MDS_HOT = 2, + MDS_PRESSED = 3, + MDS_DISABLED = 4, + MDS_CHECKED = 5, + MDS_HOTCHECKED = 6 +}; + +enum { + PGRP_UP = 1, + PGRP_DOWN = 2, + PGRP_UPHORZ = 3, + PGRP_DOWNHORZ = 4 +}; + +enum { + DNS_NORMAL = 1, + DNS_HOT = 2, + DNS_PRESSED = 3, + DNS_DISABLED = 4 +}; + +enum { + DNHZS_NORMAL = 1, + DNHZS_HOT = 2, + DNHZS_PRESSED = 3, + DNHZS_DISABLED = 4 +}; + +enum { + UPS_NORMAL = 1, + UPS_HOT = 2, + UPS_PRESSED = 3, + UPS_DISABLED = 4 +}; + +enum { + UPHZS_NORMAL = 1, + UPHZS_HOT = 2, + UPHZS_PRESSED = 3, + UPHZS_DISABLED = 4 +}; + +enum { + PP_BAR = 1, + PP_BARVERT = 2, + PP_CHUNK = 3, + PP_CHUNKVERT = 4 +}; + +enum { + RP_GRIPPER = 1, + RP_GRIPPERVERT = 2, + RP_BAND = 3, + RP_CHEVRON = 4, RP_CHEVRONVERT = 5 }; -enum { CHEVS_NORMAL = 1, CHEVS_HOT = 2, CHEVS_PRESSED = 3 }; -enum { - SBP_ARROWBTN = 1, SBP_THUMBBTNHORZ = 2, SBP_THUMBBTNVERT = 3, SBP_LOWERTRACKHORZ = 4, - SBP_UPPERTRACKHORZ = 5, SBP_LOWERTRACKVERT = 6, SBP_UPPERTRACKVERT = 7, SBP_GRIPPERHORZ = 8, - SBP_GRIPPERVERT = 9, SBP_SIZEBOX = 10 + +enum { + CHEVS_NORMAL = 1, + CHEVS_HOT = 2, + CHEVS_PRESSED = 3 }; -enum { - ABS_UPNORMAL = 1, ABS_UPHOT = 2, ABS_UPPRESSED = 3, ABS_UPDISABLED = 4, - ABS_DOWNNORMAL = 5, ABS_DOWNHOT = 6, ABS_DOWNPRESSED = 7, ABS_DOWNDISABLED = 8, - ABS_LEFTNORMAL = 9, ABS_LEFTHOT = 10, ABS_LEFTPRESSED = 11, ABS_LEFTDISABLED = 12, - ABS_RIGHTNORMAL = 13, ABS_RIGHTHOT = 14, ABS_RIGHTPRESSED = 15, ABS_RIGHTDISABLED = 16 -}; -enum { SCRBS_NORMAL = 1, SCRBS_HOT = 2, SCRBS_PRESSED = 3, SCRBS_DISABLED = 4 }; -enum { SZB_RIGHTALIGN = 1, SZB_LEFTALIGN = 2 }; -enum { SPNP_UP = 1, SPNP_DOWN = 2, SPNP_UPHORZ = 3, SPNP_DOWNHORZ = 4 }; -enum { - SPP_USERPANE = 1, SPP_MOREPROGRAMS = 2, SPP_MOREPROGRAMSARROW = 3, SPP_PROGLIST = 4, - SPP_PROGLISTSEPARATOR = 5, SPP_PLACESLIST = 6, SPP_PLACESLISTSEPARATOR = 7, SPP_LOGOFF = 8, - SPP_LOGOFFBUTTONS = 9, SPP_USERPICTURE = 10, SPP_PREVIEW = 11 + +enum { + SBP_ARROWBTN = 1, + SBP_THUMBBTNHORZ = 2, + SBP_THUMBBTNVERT = 3, + SBP_LOWERTRACKHORZ = 4, + SBP_UPPERTRACKHORZ = 5, + SBP_LOWERTRACKVERT = 6, + SBP_UPPERTRACKVERT = 7, + SBP_GRIPPERHORZ = 8, + SBP_GRIPPERVERT = 9, + SBP_SIZEBOX = 10 }; -enum { SPLS_NORMAL = 1, SPLS_HOT = 2, SPLS_PRESSED = 3 }; -enum { SPS_NORMAL = 1, SPS_HOT = 2, SPS_PRESSED = 3 }; -enum { SP_PANE = 1, SP_GRIPPERPANE = 2, SP_GRIPPER = 3 }; -enum { - TABP_TABITEM = 1, TABP_TABITEMLEFTEDGE = 2, TABP_TABITEMRIGHTEDGE = 3, TABP_TABITEMBOTHEDGE = 4, - TABP_TOPTABITEM = 5, TABP_TOPTABITEMLEFTEDGE = 6, TABP_TOPTABITEMRIGHTEDGE = 7, TABP_TOPTABITEMBOTHEDGE = 8, - TABP_PANE = 9, TABP_BODY = 10 + +enum { + ABS_UPNORMAL = 1, + ABS_UPHOT = 2, + ABS_UPPRESSED = 3, + ABS_UPDISABLED = 4, + ABS_DOWNNORMAL = 5, + ABS_DOWNHOT = 6, + ABS_DOWNPRESSED = 7, + ABS_DOWNDISABLED = 8, + ABS_LEFTNORMAL = 9, + ABS_LEFTHOT = 10, + ABS_LEFTPRESSED = 11, + ABS_LEFTDISABLED = 12, + ABS_RIGHTNORMAL = 13, + ABS_RIGHTHOT = 14, + ABS_RIGHTPRESSED = 15, + ABS_RIGHTDISABLED = 16 }; -enum { - TIS_NORMAL = 1, TIS_HOT = 2, TIS_SELECTED = 3, TIS_DISABLED = 4, + +enum { + SCRBS_NORMAL = 1, + SCRBS_HOT = 2, + SCRBS_PRESSED = 3, + SCRBS_DISABLED = 4 +}; + +enum { + SZB_RIGHTALIGN = 1, + SZB_LEFTALIGN = 2 +}; + +enum { + SPNP_UP = 1, + SPNP_DOWN = 2, + SPNP_UPHORZ = 3, + SPNP_DOWNHORZ = 4 +}; + +enum { + SPP_USERPANE = 1, + SPP_MOREPROGRAMS = 2, + SPP_MOREPROGRAMSARROW = 3, + SPP_PROGLIST = 4, + SPP_PROGLISTSEPARATOR = 5, + SPP_PLACESLIST = 6, + SPP_PLACESLISTSEPARATOR = 7, + SPP_LOGOFF = 8, + SPP_LOGOFFBUTTONS = 9, + SPP_USERPICTURE = 10, + SPP_PREVIEW = 11 +}; + +enum { + SPLS_NORMAL = 1, + SPLS_HOT = 2, + SPLS_PRESSED = 3 +}; + +enum { + SPS_NORMAL = 1, + SPS_HOT = 2, + SPS_PRESSED = 3 +}; + +enum { + SP_PANE = 1, + SP_GRIPPERPANE = 2, + SP_GRIPPER = 3 +}; + +enum { + TABP_TABITEM = 1, + TABP_TABITEMLEFTEDGE = 2, + TABP_TABITEMRIGHTEDGE = 3, + TABP_TABITEMBOTHEDGE = 4, + TABP_TOPTABITEM = 5, + TABP_TOPTABITEMLEFTEDGE = 6, + TABP_TOPTABITEMRIGHTEDGE = 7, + TABP_TOPTABITEMBOTHEDGE = 8, + TABP_PANE = 9, + TABP_BODY = 10 +}; + +enum { + TIS_NORMAL = 1, + TIS_HOT = 2, + TIS_SELECTED = 3, + TIS_DISABLED = 4, TIS_FOCUSED = 5 }; -enum { - TIBES_NORMAL = 1, TIBES_HOT = 2, TIBES_SELECTED = 3, TIBES_DISABLED = 4, + +enum { + TIBES_NORMAL = 1, + TIBES_HOT = 2, + TIBES_SELECTED = 3, + TIBES_DISABLED = 4, TIBES_FOCUSED = 5 }; -enum { - TILES_NORMAL = 1, TILES_HOT = 2, TILES_SELECTED = 3, TILES_DISABLED = 4, + +enum { + TILES_NORMAL = 1, + TILES_HOT = 2, + TILES_SELECTED = 3, + TILES_DISABLED = 4, TILES_FOCUSED = 5 }; -enum { - TIRES_NORMAL = 1, TIRES_HOT = 2, TIRES_SELECTED = 3, TIRES_DISABLED = 4, + +enum { + TIRES_NORMAL = 1, + TIRES_HOT = 2, + TIRES_SELECTED = 3, + TIRES_DISABLED = 4, TIRES_FOCUSED = 5 }; -enum { - TTIS_NORMAL = 1, TTIS_HOT = 2, TTIS_SELECTED = 3, TTIS_DISABLED = 4, + +enum { + TTIS_NORMAL = 1, + TTIS_HOT = 2, + TTIS_SELECTED = 3, + TTIS_DISABLED = 4, TTIS_FOCUSED = 5 }; -enum { - TTIBES_NORMAL = 1, TTIBES_HOT = 2, TTIBES_SELECTED = 3, TTIBES_DISABLED = 4, + +enum { + TTIBES_NORMAL = 1, + TTIBES_HOT = 2, + TTIBES_SELECTED = 3, + TTIBES_DISABLED = 4, TTIBES_FOCUSED = 5 }; -enum { - TTILES_NORMAL = 1, TTILES_HOT = 2, TTILES_SELECTED = 3, TTILES_DISABLED = 4, + +enum { + TTILES_NORMAL = 1, + TTILES_HOT = 2, + TTILES_SELECTED = 3, + TTILES_DISABLED = 4, TTILES_FOCUSED = 5 }; -enum { - TTIRES_NORMAL = 1, TTIRES_HOT = 2, TTIRES_SELECTED = 3, TTIRES_DISABLED = 4, + +enum { + TTIRES_NORMAL = 1, + TTIRES_HOT = 2, + TTIRES_SELECTED = 3, + TTIRES_DISABLED = 4, TTIRES_FOCUSED = 5 }; -enum { TDP_GROUPCOUNT = 1, TDP_FLASHBUTTON = 2, TDP_FLASHBUTTONGROUPMENU = 3 }; -enum { - TBP_BACKGROUNDBOTTOM = 1, TBP_BACKGROUNDRIGHT = 2, TBP_BACKGROUNDTOP = 3, TBP_BACKGROUNDLEFT = 4, - TBP_SIZINGBARBOTTOM = 5, TBP_SIZINGBARRIGHT = 6, TBP_SIZINGBARTOP = 7, TBP_SIZINGBARLEFT = 8 + +enum { + TDP_GROUPCOUNT = 1, + TDP_FLASHBUTTON = 2, + TDP_FLASHBUTTONGROUPMENU = 3 }; -enum { - TP_BUTTON = 1, TP_DROPDOWNBUTTON = 2, TP_SPLITBUTTON = 3, TP_SPLITBUTTONDROPDOWN = 4, - TP_SEPARATOR = 5, TP_SEPARATORVERT = 6 + +enum { + TBP_BACKGROUNDBOTTOM = 1, + TBP_BACKGROUNDRIGHT = 2, + TBP_BACKGROUNDTOP = 3, + TBP_BACKGROUNDLEFT = 4, + TBP_SIZINGBARBOTTOM = 5, + TBP_SIZINGBARRIGHT = 6, + TBP_SIZINGBARTOP = 7, + TBP_SIZINGBARLEFT = 8 }; -enum { - TS_NORMAL = 1, TS_HOT = 2, TS_PRESSED = 3, TS_DISABLED = 4, - TS_CHECKED = 5, TS_HOTCHECKED = 6 + +enum { + TP_BUTTON = 1, + TP_DROPDOWNBUTTON = 2, + TP_SPLITBUTTON = 3, + TP_SPLITBUTTONDROPDOWN = 4, + TP_SEPARATOR = 5, + TP_SEPARATORVERT = 6 }; -enum { - TTP_STANDARD = 1, TTP_STANDARDTITLE = 2, TTP_BALLOON = 3, TTP_BALLOONTITLE = 4, + +enum { + TS_NORMAL = 1, + TS_HOT = 2, + TS_PRESSED = 3, + TS_DISABLED = 4, + TS_CHECKED = 5, + TS_HOTCHECKED = 6 +}; + +enum { + TTP_STANDARD = 1, + TTP_STANDARDTITLE = 2, + TTP_BALLOON = 3, + TTP_BALLOONTITLE = 4, TTP_CLOSE = 5 }; -enum { TTBS_NORMAL = 1, TTBS_LINK = 2 }; -enum { TTCS_NORMAL = 1, TTCS_HOT = 2, TTCS_PRESSED = 3 }; -enum { TTSS_NORMAL = 1, TTSS_LINK = 2 }; -enum { - TKP_TRACK = 1, TKP_TRACKVERT = 2, TKP_THUMB = 3, TKP_THUMBBOTTOM = 4, - TKP_THUMBTOP = 5, TKP_THUMBVERT = 6, TKP_THUMBLEFT = 7, TKP_THUMBRIGHT = 8, + +enum { + TTBS_NORMAL = 1, + TTBS_LINK = 2 +}; + +enum { + TTCS_NORMAL = 1, + TTCS_HOT = 2, + TTCS_PRESSED = 3 +}; + +enum { + TTSS_NORMAL = 1, + TTSS_LINK = 2 +}; + +enum { + TKP_TRACK = 1, + TKP_TRACKVERT = 2, + TKP_THUMB = 3, + TKP_THUMBBOTTOM = 4, + TKP_THUMBTOP = 5, + TKP_THUMBVERT = 6, + TKP_THUMBLEFT = 7, + TKP_THUMBRIGHT = 8, TKP_TICS = 9, TKP_TICSVERT = 10 }; -enum { - TUS_NORMAL = 1, TUS_HOT = 2, TUS_PRESSED = 3, TUS_FOCUSED = 4, + +enum { + TUS_NORMAL = 1, + TUS_HOT = 2, + TUS_PRESSED = 3, + TUS_FOCUSED = 4, TUS_DISABLED = 5 }; -enum { - TUBS_NORMAL = 1, TUBS_HOT = 2, TUBS_PRESSED = 3, TUBS_FOCUSED = 4, + +enum { + TUBS_NORMAL = 1, + TUBS_HOT = 2, + TUBS_PRESSED = 3, + TUBS_FOCUSED = 4, TUBS_DISABLED = 5 }; -enum { - TUVLS_NORMAL = 1, TUVLS_HOT = 2, TUVLS_PRESSED = 3, TUVLS_FOCUSED = 4, + +enum { + TUVLS_NORMAL = 1, + TUVLS_HOT = 2, + TUVLS_PRESSED = 3, + TUVLS_FOCUSED = 4, TUVLS_DISABLED = 5 }; -enum { - TUVRS_NORMAL = 1, TUVRS_HOT = 2, TUVRS_PRESSED = 3, TUVRS_FOCUSED = 4, + +enum { + TUVRS_NORMAL = 1, + TUVRS_HOT = 2, + TUVRS_PRESSED = 3, + TUVRS_FOCUSED = 4, TUVRS_DISABLED = 5 }; -enum { - TUTS_NORMAL = 1, TUTS_HOT = 2, TUTS_PRESSED = 3, TUTS_FOCUSED = 4, + +enum { + TUTS_NORMAL = 1, + TUTS_HOT = 2, + TUTS_PRESSED = 3, + TUTS_FOCUSED = 4, TUTS_DISABLED = 5 }; -enum { - TUVS_NORMAL = 1, TUVS_HOT = 2, TUVS_PRESSED = 3, TUVS_FOCUSED = 4, + +enum { + TUVS_NORMAL = 1, + TUVS_HOT = 2, + TUVS_PRESSED = 3, + TUVS_FOCUSED = 4, TUVS_DISABLED = 5 }; -enum { TSS_NORMAL = 1 }; -enum { TSVS_NORMAL = 1 }; -enum { TRS_NORMAL = 1 }; -enum { TRVS_NORMAL = 1 }; -enum { TNP_BACKGROUND = 1, TNP_ANIMBACKGROUND = 2 }; -enum { TVP_TREEITEM = 1, TVP_GLYPH = 2, TVP_BRANCH = 3 }; -enum { GLPS_CLOSED = 1, GLPS_OPENED = 2 }; -enum { - TREIS_NORMAL = 1, TREIS_HOT = 2, TREIS_SELECTED = 3, TREIS_DISABLED = 4, + +enum { + TSS_NORMAL = 1 +}; + +enum { + TSVS_NORMAL = 1 +}; + +enum { + TRS_NORMAL = 1 +}; + +enum { + TRVS_NORMAL = 1 +}; + +enum { + TNP_BACKGROUND = 1, + TNP_ANIMBACKGROUND = 2 +}; + +enum { + TVP_TREEITEM = 1, + TVP_GLYPH = 2, + TVP_BRANCH = 3 +}; + +enum { + GLPS_CLOSED = 1, + GLPS_OPENED = 2 +}; + +enum { + TREIS_NORMAL = 1, + TREIS_HOT = 2, + TREIS_SELECTED = 3, + TREIS_DISABLED = 4, TREIS_SELECTEDNOTFOCUS = 5 }; -enum { - WP_CAPTION = 1, WP_SMALLCAPTION = 2, WP_MINCAPTION = 3, WP_SMALLMINCAPTION = 4, - WP_MAXCAPTION = 5, WP_SMALLMAXCAPTION = 6, WP_FRAMELEFT = 7, WP_FRAMERIGHT = 8, - WP_FRAMEBOTTOM = 9, WP_SMALLFRAMELEFT = 10, WP_SMALLFRAMERIGHT = 11, WP_SMALLFRAMEBOTTOM = 12, - WP_SYSBUTTON = 13, WP_MDISYSBUTTON = 14, WP_MINBUTTON = 15, WP_MDIMINBUTTON = 16, - WP_MAXBUTTON = 17, WP_CLOSEBUTTON = 18, WP_SMALLCLOSEBUTTON = 19, WP_MDICLOSEBUTTON = 20, - WP_RESTOREBUTTON = 21, WP_MDIRESTOREBUTTON = 22, WP_HELPBUTTON = 23, WP_MDIHELPBUTTON = 24, - WP_HORZSCROLL = 25, WP_HORZTHUMB = 26, WP_VERTSCROLL = 27, WP_VERTTHUMB = 28, - WP_DIALOG = 29, WP_CAPTIONSIZINGTEMPLATE = 30, WP_SMALLCAPTIONSIZINGTEMPLATE = 31, WP_FRAMELEFTSIZINGTEMPLATE = 32, - WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33, WP_FRAMERIGHTSIZINGTEMPLATE = 34, WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35, WP_FRAMEBOTTOMSIZINGTEMPLATE = 36, +enum { + WP_CAPTION = 1, + WP_SMALLCAPTION = 2, + WP_MINCAPTION = 3, + WP_SMALLMINCAPTION = 4, + WP_MAXCAPTION = 5, + WP_SMALLMAXCAPTION = 6, + WP_FRAMELEFT = 7, + WP_FRAMERIGHT = 8, + WP_FRAMEBOTTOM = 9, + WP_SMALLFRAMELEFT = 10, + WP_SMALLFRAMERIGHT = 11, + WP_SMALLFRAMEBOTTOM = 12, + WP_SYSBUTTON = 13, + WP_MDISYSBUTTON = 14, + WP_MINBUTTON = 15, + WP_MDIMINBUTTON = 16, + WP_MAXBUTTON = 17, + WP_CLOSEBUTTON = 18, + WP_SMALLCLOSEBUTTON = 19, + WP_MDICLOSEBUTTON = 20, + WP_RESTOREBUTTON = 21, + WP_MDIRESTOREBUTTON = 22, + WP_HELPBUTTON = 23, + WP_MDIHELPBUTTON = 24, + WP_HORZSCROLL = 25, + WP_HORZTHUMB = 26, + WP_VERTSCROLL = 27, + WP_VERTTHUMB = 28, + WP_DIALOG = 29, + WP_CAPTIONSIZINGTEMPLATE = 30, + WP_SMALLCAPTIONSIZINGTEMPLATE = 31, + WP_FRAMELEFTSIZINGTEMPLATE = 32, + WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33, + WP_FRAMERIGHTSIZINGTEMPLATE = 34, + WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35, + WP_FRAMEBOTTOMSIZINGTEMPLATE = 36, WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37 }; -enum { CS_ACTIVE = 1, CS_INACTIVE = 2, CS_DISABLED = 3 }; -enum { CBS_NORMAL = 1, CBS_HOT = 2, CBS_PUSHED = 3, CBS_DISABLED = 4 }; -enum { FS_ACTIVE = 1, FS_INACTIVE = 2 }; -enum { HBS_NORMAL = 1, HBS_HOT = 2, HBS_PUSHED = 3, HBS_DISABLED = 4 }; -enum { HSS_NORMAL = 1, HSS_HOT = 2, HSS_PUSHED = 3, HSS_DISABLED = 4 }; -enum { HTS_NORMAL = 1, HTS_HOT = 2, HTS_PUSHED = 3, HTS_DISABLED = 4 }; -enum { MAXBS_NORMAL = 1, MAXBS_HOT = 2, MAXBS_PUSHED = 3, MAXBS_DISABLED = 4 }; -enum { MXCS_ACTIVE = 1, MXCS_INACTIVE = 2, MXCS_DISABLED = 3 }; -enum { MINBS_NORMAL = 1, MINBS_HOT = 2, MINBS_PUSHED = 3, MINBS_DISABLED = 4 }; -enum { RBS_NORMAL = 1, RBS_HOT = 2, RBS_PUSHED = 3, RBS_DISABLED = 4 }; -enum { SBS_NORMAL = 1, SBS_HOT = 2, SBS_PUSHED = 3, SBS_DISABLED = 4 }; -enum { MNCS_ACTIVE = 1, MNCS_INACTIVE = 2, MNCS_DISABLED = 3 }; -enum { VSS_NORMAL = 1, VSS_HOT = 2, VSS_PUSHED = 3, VSS_DISABLED = 4 }; -enum { VTS_NORMAL = 1, VTS_HOT = 2, VTS_PUSHED = 3, VTS_DISABLED = 4 }; + +enum { + CS_ACTIVE = 1, + CS_INACTIVE = 2, + CS_DISABLED = 3 +}; + +enum { + CBS_NORMAL = 1, + CBS_HOT = 2, + CBS_PUSHED = 3, + CBS_DISABLED = 4 +}; + +enum { + FS_ACTIVE = 1, + FS_INACTIVE = 2 +}; + +enum { + HBS_NORMAL = 1, + HBS_HOT = 2, + HBS_PUSHED = 3, + HBS_DISABLED = 4 +}; + +enum { + HSS_NORMAL = 1, + HSS_HOT = 2, + HSS_PUSHED = 3, + HSS_DISABLED = 4 +}; + +enum { + HTS_NORMAL = 1, + HTS_HOT = 2, + HTS_PUSHED = 3, + HTS_DISABLED = 4 +}; + +enum { + MAXBS_NORMAL = 1, + MAXBS_HOT = 2, + MAXBS_PUSHED = 3, + MAXBS_DISABLED = 4 +}; + +enum { + MXCS_ACTIVE = 1, + MXCS_INACTIVE = 2, + MXCS_DISABLED = 3 +}; + +enum { + MINBS_NORMAL = 1, + MINBS_HOT = 2, + MINBS_PUSHED = 3, + MINBS_DISABLED = 4 +}; + +enum { + RBS_NORMAL = 1, + RBS_HOT = 2, + RBS_PUSHED = 3, + RBS_DISABLED = 4 +}; + +enum { + SBS_NORMAL = 1, + SBS_HOT = 2, + SBS_PUSHED = 3, + SBS_DISABLED = 4 +}; + +enum { + MNCS_ACTIVE = 1, + MNCS_INACTIVE = 2, + MNCS_DISABLED = 3 +}; + +enum { + VSS_NORMAL = 1, + VSS_HOT = 2, + VSS_PUSHED = 3, + VSS_DISABLED = 4 +}; + +enum { + VTS_NORMAL = 1, + VTS_HOT = 2, + VTS_PUSHED = 3, + VTS_DISABLED = 4 +}; #endif /* XP_THEME_DFNS_H */