1 /* MS-Windows Engine (aka GTK-Wimp)
3 * Copyright (C) 2003, 2004 Raymond Penners <raymond@dotsphinx.com>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
21 #define _WIN32_WINNT 0x0501
34 #ifdef BUILDING_STANDALONE
35 #include "gdk/gdkwin32.h"
37 #include "gdk/win32/gdkwin32.h"
40 #include "xp_theme_defs.h"
42 #ifndef TMT_CAPTIONFONT
44 /* These aren't in mingw's "w32api" headers, nor in the Platform SDK
47 #define TMT_CAPTIONFONT 801
48 #define TMT_MENUFONT 803
49 #define TMT_STATUSFONT 804
50 #define TMT_MSGBOXFONT 805
55 #define TP_SEPARATOR 5
56 #define TP_SEPARATORVERT 6
58 /* GLOBALS LINEHORZ states */
63 /* GLOBAL LINEVERT states */
70 #define TKP_TRACKVERT 2
72 #define TKP_THUMBBOTTOM 4
73 #define TKP_THUMBTOP 5
74 #define TKP_THUMBVERT 6
75 #define TKP_THUMBLEFT 7
76 #define TKP_THUMBRIGHT 8
78 #define TKP_TICSVERT 10
85 #define MBI_DISABLED 4
86 #define MBI_DISABLEDHOT 5
87 #define MBI_DISABLEDPUSHED 6
89 #define MENU_POPUPITEM 14
90 #define MENU_POPUPSEPARATOR 15
92 static const LPCWSTR class_descriptors[] = {
93 L"Scrollbar", /* XP_THEME_CLASS_SCROLLBAR */
94 L"Button", /* XP_THEME_CLASS_BUTTON */
95 L"Header", /* XP_THEME_CLASS_HEADER */
96 L"ComboBox", /* XP_THEME_CLASS_COMBOBOX */
97 L"Tab", /* XP_THEME_CLASS_TAB */
98 L"Edit", /* XP_THEME_CLASS_EDIT */
99 L"TreeView", /* XP_THEME_CLASS_TREEVIEW */
100 L"Spin", /* XP_THEME_CLASS_SPIN */
101 L"Progress", /* XP_THEME_CLASS_PROGRESS */
102 L"Tooltip", /* XP_THEME_CLASS_TOOLTIP */
103 L"Rebar", /* XP_THEME_CLASS_REBAR */
104 L"Toolbar", /* XP_THEME_CLASS_TOOLBAR */
105 L"Globals", /* XP_THEME_CLASS_GLOBALS */
106 L"Menu", /* XP_THEME_CLASS_MENU */
107 L"Window", /* XP_THEME_CLASS_WINDOW */
108 L"Status", /* XP_THEME_CLASS_STATUS */
109 L"Trackbar" /* XP_THEME_CLASS_TRACKBAR */
112 static const short element_part_map[XP_THEME_ELEMENT__SIZEOF] = {
121 TABP_TABITEMLEFTEDGE,
122 TABP_TABITEMRIGHTEDGE,
152 MENU_POPUPITEM, /*MP_MENUITEM,*/
153 MENU_POPUPSEPARATOR, /*MP_SEPARATOR,*/
168 static HINSTANCE uxtheme_dll = NULL;
169 static HTHEME open_themes[XP_THEME_CLASS__SIZEOF];
170 static gboolean use_xp_theme = FALSE;
172 typedef HRESULT (FAR PASCAL *GetThemeSysFontFunc) (HTHEME hTheme, int iFontID, OUT LOGFONTW *plf);
173 typedef int (FAR PASCAL *GetThemeSysSizeFunc) (HTHEME hTheme, int iSizeId);
174 typedef COLORREF (FAR PASCAL *GetThemeSysColorFunc) (HTHEME hTheme,
176 typedef HTHEME (FAR PASCAL *OpenThemeDataFunc) (HWND hwnd,
177 LPCWSTR pszClassList);
178 typedef HRESULT (FAR PASCAL *CloseThemeDataFunc) (HTHEME theme);
179 typedef HRESULT (FAR PASCAL *DrawThemeBackgroundFunc) (HTHEME hTheme, HDC hdc, int iPartId, int iStateId,
180 const RECT *pRect, const RECT *pClipRect);
181 typedef HRESULT (FAR PASCAL *EnableThemeDialogTextureFunc) (HWND hwnd,
183 typedef BOOL (FAR PASCAL *IsThemeActiveFunc) (VOID);
184 typedef BOOL (FAR PASCAL *IsAppThemedFunc) (VOID);
185 typedef BOOL (FAR PASCAL *IsThemeBackgroundPartiallyTransparentFunc) (HTHEME hTheme,
188 typedef HRESULT (FAR PASCAL *DrawThemeParentBackgroundFunc) (HWND hwnd,
192 static GetThemeSysFontFunc get_theme_sys_font_func = NULL;
193 static GetThemeSysColorFunc get_theme_sys_color_func = NULL;
194 static GetThemeSysSizeFunc get_theme_sys_metric_func = NULL;
195 static OpenThemeDataFunc open_theme_data_func = NULL;
196 static CloseThemeDataFunc close_theme_data_func = NULL;
197 static DrawThemeBackgroundFunc draw_theme_background_func = NULL;
198 static EnableThemeDialogTextureFunc enable_theme_dialog_texture_func = NULL;
199 static IsThemeActiveFunc is_theme_active_func = NULL;
200 static IsAppThemedFunc is_app_themed_func = NULL;
201 static IsThemeBackgroundPartiallyTransparentFunc is_theme_partially_transparent_func = NULL;
202 static DrawThemeParentBackgroundFunc draw_theme_parent_background_func = NULL;
205 xp_theme_close_open_handles (void)
209 for (i = 0; i < XP_THEME_CLASS__SIZEOF; i++)
213 close_theme_data_func (open_themes[i]);
214 open_themes[i] = NULL;
225 memset (open_themes, 0, sizeof (open_themes));
227 uxtheme_dll = LoadLibrary ("uxtheme.dll");
231 is_app_themed_func = (IsAppThemedFunc) GetProcAddress (uxtheme_dll, "IsAppThemed");
233 if (is_app_themed_func)
235 is_theme_active_func = (IsThemeActiveFunc) GetProcAddress (uxtheme_dll, "IsThemeActive");
236 open_theme_data_func = (OpenThemeDataFunc) GetProcAddress (uxtheme_dll, "OpenThemeData");
237 close_theme_data_func = (CloseThemeDataFunc) GetProcAddress (uxtheme_dll, "CloseThemeData");
238 draw_theme_background_func = (DrawThemeBackgroundFunc) GetProcAddress (uxtheme_dll, "DrawThemeBackground");
239 enable_theme_dialog_texture_func = (EnableThemeDialogTextureFunc) GetProcAddress (uxtheme_dll, "EnableThemeDialogTexture");
240 get_theme_sys_font_func = (GetThemeSysFontFunc) GetProcAddress (uxtheme_dll, "GetThemeSysFont");
241 get_theme_sys_color_func = (GetThemeSysColorFunc) GetProcAddress (uxtheme_dll, "GetThemeSysColor");
242 get_theme_sys_metric_func = (GetThemeSysSizeFunc) GetProcAddress (uxtheme_dll, "GetThemeSysSize");
243 is_theme_partially_transparent_func = (IsThemeBackgroundPartiallyTransparentFunc) GetProcAddress (uxtheme_dll, "IsThemeBackgroundPartiallyTransparent");
244 draw_theme_parent_background_func = (DrawThemeParentBackgroundFunc) GetProcAddress (uxtheme_dll, "DrawThemeParentBackground");
247 if (is_app_themed_func && is_theme_active_func)
249 use_xp_theme = (is_app_themed_func () && is_theme_active_func ());
253 use_xp_theme = FALSE;
258 xp_theme_reset (void)
260 xp_theme_close_open_handles ();
262 if (is_app_themed_func && is_theme_active_func)
264 use_xp_theme = (is_app_themed_func () && is_theme_active_func ());
268 use_xp_theme = FALSE;
278 xp_theme_close_open_handles ();
280 FreeLibrary (uxtheme_dll);
282 use_xp_theme = FALSE;
284 is_app_themed_func = NULL;
285 is_theme_active_func = NULL;
286 open_theme_data_func = NULL;
287 close_theme_data_func = NULL;
288 draw_theme_background_func = NULL;
289 enable_theme_dialog_texture_func = NULL;
290 get_theme_sys_font_func = NULL;
291 get_theme_sys_color_func = NULL;
292 get_theme_sys_metric_func = NULL;
293 is_theme_partially_transparent_func = NULL;
294 draw_theme_parent_background_func = NULL;
298 xp_theme_get_handle_by_class (XpThemeClass klazz)
300 if (!open_themes[klazz] && open_theme_data_func)
302 open_themes[klazz] = open_theme_data_func (NULL, class_descriptors[klazz]);
305 return open_themes[klazz];
309 xp_theme_get_handle_by_element (XpThemeElement element)
312 XpThemeClass klazz = XP_THEME_CLASS__SIZEOF;
316 case XP_THEME_ELEMENT_TOOLTIP:
317 klazz = XP_THEME_CLASS_TOOLTIP;
320 case XP_THEME_ELEMENT_REBAR:
321 case XP_THEME_ELEMENT_REBAR_GRIPPER_H:
322 case XP_THEME_ELEMENT_REBAR_GRIPPER_V:
323 case XP_THEME_ELEMENT_REBAR_CHEVRON:
324 klazz = XP_THEME_CLASS_REBAR;
327 case XP_THEME_ELEMENT_SCALE_TROUGH_H:
328 case XP_THEME_ELEMENT_SCALE_TROUGH_V:
329 case XP_THEME_ELEMENT_SCALE_SLIDER_H:
330 case XP_THEME_ELEMENT_SCALE_SLIDER_V:
331 case XP_THEME_ELEMENT_SCALE_TICS_H:
332 case XP_THEME_ELEMENT_SCALE_TICS_V:
333 klazz = XP_THEME_CLASS_TRACKBAR;
336 case XP_THEME_ELEMENT_STATUS_GRIPPER:
337 case XP_THEME_ELEMENT_STATUS_PANE:
338 klazz = XP_THEME_CLASS_STATUS;
341 case XP_THEME_ELEMENT_TOOLBAR_BUTTON:
342 case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_H:
343 case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_V:
344 klazz = XP_THEME_CLASS_TOOLBAR;
347 case XP_THEME_ELEMENT_MENU_ITEM:
348 case XP_THEME_ELEMENT_MENU_SEPARATOR:
349 klazz = XP_THEME_CLASS_MENU;
352 case XP_THEME_ELEMENT_PRESSED_CHECKBOX:
353 case XP_THEME_ELEMENT_INCONSISTENT_CHECKBOX:
354 case XP_THEME_ELEMENT_CHECKBOX:
355 case XP_THEME_ELEMENT_BUTTON:
356 case XP_THEME_ELEMENT_DEFAULT_BUTTON:
357 case XP_THEME_ELEMENT_PRESSED_RADIO_BUTTON:
358 case XP_THEME_ELEMENT_RADIO_BUTTON:
359 klazz = XP_THEME_CLASS_BUTTON;
362 case XP_THEME_ELEMENT_LIST_HEADER:
363 klazz = XP_THEME_CLASS_HEADER;
366 case XP_THEME_ELEMENT_COMBOBUTTON:
367 klazz = XP_THEME_CLASS_COMBOBOX;
370 case XP_THEME_ELEMENT_BODY:
371 case XP_THEME_ELEMENT_TAB_ITEM:
372 case XP_THEME_ELEMENT_TAB_ITEM_LEFT_EDGE:
373 case XP_THEME_ELEMENT_TAB_ITEM_RIGHT_EDGE:
374 case XP_THEME_ELEMENT_TAB_PANE:
375 klazz = XP_THEME_CLASS_TAB;
378 case XP_THEME_ELEMENT_SCROLLBAR_V:
379 case XP_THEME_ELEMENT_SCROLLBAR_H:
380 case XP_THEME_ELEMENT_ARROW_UP:
381 case XP_THEME_ELEMENT_ARROW_DOWN:
382 case XP_THEME_ELEMENT_ARROW_LEFT:
383 case XP_THEME_ELEMENT_ARROW_RIGHT:
384 case XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_V:
385 case XP_THEME_ELEMENT_SCROLLBAR_GRIPPER_H:
386 case XP_THEME_ELEMENT_TROUGH_V:
387 case XP_THEME_ELEMENT_TROUGH_H:
388 klazz = XP_THEME_CLASS_SCROLLBAR;
391 case XP_THEME_ELEMENT_EDIT_TEXT:
392 klazz = XP_THEME_CLASS_EDIT;
395 case XP_THEME_ELEMENT_SPIN_BUTTON_UP:
396 case XP_THEME_ELEMENT_SPIN_BUTTON_DOWN:
397 klazz = XP_THEME_CLASS_SPIN;
400 case XP_THEME_ELEMENT_PROGRESS_BAR_H:
401 case XP_THEME_ELEMENT_PROGRESS_BAR_V:
402 case XP_THEME_ELEMENT_PROGRESS_TROUGH_H:
403 case XP_THEME_ELEMENT_PROGRESS_TROUGH_V:
404 klazz = XP_THEME_CLASS_PROGRESS;
407 case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_OPENED:
408 case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_CLOSED:
409 klazz = XP_THEME_CLASS_TREEVIEW;
412 case XP_THEME_ELEMENT_LINE_H:
413 case XP_THEME_ELEMENT_LINE_V:
414 klazz = XP_THEME_CLASS_GLOBALS;
421 if (klazz != XP_THEME_CLASS__SIZEOF)
423 ret = xp_theme_get_handle_by_class (klazz);
430 xp_theme_map_gtk_state (XpThemeElement element, GtkStateType state)
436 case XP_THEME_ELEMENT_TOOLTIP:
440 case XP_THEME_ELEMENT_REBAR:
444 case XP_THEME_ELEMENT_REBAR_GRIPPER_H:
445 case XP_THEME_ELEMENT_REBAR_GRIPPER_V:
449 case XP_THEME_ELEMENT_STATUS_GRIPPER:
450 case XP_THEME_ELEMENT_STATUS_PANE:
454 case XP_THEME_ELEMENT_REBAR_CHEVRON:
457 case GTK_STATE_PRELIGHT:
461 case GTK_STATE_SELECTED:
462 case GTK_STATE_ACTIVE:
471 case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_H:
472 case XP_THEME_ELEMENT_TOOLBAR_SEPARATOR_V:
476 case XP_THEME_ELEMENT_TOOLBAR_BUTTON:
479 case GTK_STATE_ACTIVE:
483 case GTK_STATE_PRELIGHT:
487 case GTK_STATE_INSENSITIVE:
496 case XP_THEME_ELEMENT_TAB_PANE:
500 case XP_THEME_ELEMENT_TAB_ITEM_LEFT_EDGE:
501 case XP_THEME_ELEMENT_TAB_ITEM_RIGHT_EDGE:
502 case XP_THEME_ELEMENT_TAB_ITEM:
505 case GTK_STATE_PRELIGHT:
509 case GTK_STATE_INSENSITIVE:
513 case GTK_STATE_SELECTED:
514 case GTK_STATE_ACTIVE:
523 case XP_THEME_ELEMENT_EDIT_TEXT:
526 case GTK_STATE_PRELIGHT:
530 case GTK_STATE_INSENSITIVE:
534 case GTK_STATE_SELECTED:
535 case GTK_STATE_ACTIVE:
541 case XP_THEME_ELEMENT_TROUGH_H:
542 case XP_THEME_ELEMENT_TROUGH_V:
546 case XP_THEME_ELEMENT_SCROLLBAR_H:
547 case XP_THEME_ELEMENT_SCROLLBAR_V:
550 case GTK_STATE_SELECTED:
551 case GTK_STATE_ACTIVE:
555 case GTK_STATE_PRELIGHT:
559 case GTK_STATE_INSENSITIVE:
560 ret = SCRBS_DISABLED;
568 case XP_THEME_ELEMENT_ARROW_DOWN:
571 case GTK_STATE_ACTIVE:
572 ret = ABS_DOWNPRESSED;
575 case GTK_STATE_PRELIGHT:
579 case GTK_STATE_INSENSITIVE:
580 ret = ABS_DOWNDISABLED;
584 ret = ABS_DOWNNORMAL;
588 case XP_THEME_ELEMENT_ARROW_UP:
591 case GTK_STATE_ACTIVE:
595 case GTK_STATE_PRELIGHT:
599 case GTK_STATE_INSENSITIVE:
600 ret = ABS_UPDISABLED;
608 case XP_THEME_ELEMENT_ARROW_LEFT:
611 case GTK_STATE_ACTIVE:
612 ret = ABS_LEFTPRESSED;
615 case GTK_STATE_PRELIGHT:
619 case GTK_STATE_INSENSITIVE:
620 ret = ABS_LEFTDISABLED;
624 ret = ABS_LEFTNORMAL;
628 case XP_THEME_ELEMENT_ARROW_RIGHT:
631 case GTK_STATE_ACTIVE:
632 ret = ABS_RIGHTPRESSED;
635 case GTK_STATE_PRELIGHT:
639 case GTK_STATE_INSENSITIVE:
640 ret = ABS_RIGHTDISABLED;
644 ret = ABS_RIGHTNORMAL;
648 case XP_THEME_ELEMENT_CHECKBOX:
649 case XP_THEME_ELEMENT_RADIO_BUTTON:
652 case GTK_STATE_SELECTED:
653 ret = CBS_UNCHECKEDPRESSED;
656 case GTK_STATE_PRELIGHT:
657 ret = CBS_UNCHECKEDHOT;
660 case GTK_STATE_INSENSITIVE:
661 ret = CBS_UNCHECKEDDISABLED;
665 ret = CBS_UNCHECKEDNORMAL;
669 case XP_THEME_ELEMENT_INCONSISTENT_CHECKBOX:
672 case GTK_STATE_SELECTED:
673 ret = CBS_MIXEDPRESSED;
676 case GTK_STATE_PRELIGHT:
680 case GTK_STATE_INSENSITIVE:
681 ret = CBS_MIXEDDISABLED;
685 ret = CBS_MIXEDNORMAL;
689 case XP_THEME_ELEMENT_PRESSED_CHECKBOX:
690 case XP_THEME_ELEMENT_PRESSED_RADIO_BUTTON:
693 case GTK_STATE_SELECTED:
694 ret = CBS_CHECKEDPRESSED;
697 case GTK_STATE_PRELIGHT:
698 ret = CBS_CHECKEDHOT;
701 case GTK_STATE_INSENSITIVE:
702 ret = CBS_CHECKEDDISABLED;
706 ret = CBS_CHECKEDNORMAL;
710 case XP_THEME_ELEMENT_DEFAULT_BUTTON:
713 case GTK_STATE_ACTIVE:
717 case GTK_STATE_PRELIGHT:
721 case GTK_STATE_INSENSITIVE:
730 case XP_THEME_ELEMENT_SPIN_BUTTON_DOWN:
733 case GTK_STATE_ACTIVE:
737 case GTK_STATE_PRELIGHT:
741 case GTK_STATE_INSENSITIVE:
750 case XP_THEME_ELEMENT_SPIN_BUTTON_UP:
753 case GTK_STATE_ACTIVE:
757 case GTK_STATE_PRELIGHT:
761 case GTK_STATE_INSENSITIVE:
770 case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_OPENED:
774 case XP_THEME_ELEMENT_TREEVIEW_EXPANDER_CLOSED:
778 case XP_THEME_ELEMENT_PROGRESS_BAR_H:
779 case XP_THEME_ELEMENT_PROGRESS_BAR_V:
780 case XP_THEME_ELEMENT_PROGRESS_TROUGH_H:
781 case XP_THEME_ELEMENT_PROGRESS_TROUGH_V:
785 case XP_THEME_ELEMENT_MENU_ITEM:
786 case XP_THEME_ELEMENT_MENU_SEPARATOR:
789 case GTK_STATE_SELECTED:
793 case GTK_STATE_PRELIGHT:
797 case GTK_STATE_INSENSITIVE:
806 case XP_THEME_ELEMENT_LINE_H:
809 /* LHS_FLAT, LHS_RAISED, LHS_SUNKEN */
815 case XP_THEME_ELEMENT_LINE_V:
818 /* LVS_FLAT, LVS_RAISED, LVS_SUNKEN */
824 case XP_THEME_ELEMENT_SCALE_TROUGH_H:
825 case XP_THEME_ELEMENT_SCALE_TROUGH_V:
832 case GTK_STATE_ACTIVE:
836 case GTK_STATE_PRELIGHT:
840 case GTK_STATE_INSENSITIVE:
853 get_window_dc (GtkStyle *style,
855 GtkStateType state_type,
856 XpDCInfo *dc_info_out,
857 gint x, gint y, gint width, gint height,
860 GdkDrawable *drawable = NULL;
861 GdkGC *gc = style->dark_gc[state_type];
862 gint x_offset, y_offset;
864 dc_info_out->data = NULL;
866 drawable = gdk_win32_begin_direct_draw_libgtk_only (window,
867 gc, &dc_info_out->data,
868 &x_offset, &y_offset);
872 rect_out->left = x - x_offset;
873 rect_out->top = y - y_offset;
874 rect_out->right = rect_out->left + width;
875 rect_out->bottom = rect_out->top + height;
877 dc_info_out->drawable = drawable;
878 dc_info_out->gc = gc;
879 dc_info_out->x_offset = x_offset;
880 dc_info_out->y_offset = y_offset;
882 return gdk_win32_hdc_get (drawable, gc, 0);
886 release_window_dc (XpDCInfo *dc_info)
888 gdk_win32_hdc_release (dc_info->drawable, dc_info->gc, 0);
890 gdk_win32_end_direct_draw_libgtk_only (dc_info->data);
894 xp_theme_draw (GdkWindow *win, XpThemeElement element, GtkStyle *style,
895 int x, int y, int width, int height,
896 GtkStateType state_type, GdkRectangle *area)
899 RECT rect, clip, *pClip;
904 if (!xp_theme_is_drawable (element))
907 theme = xp_theme_get_handle_by_element (element);
911 /* FIXME: Recheck its function */
912 enable_theme_dialog_texture_func (GDK_WINDOW_HWND (win), ETDT_ENABLETAB);
914 dc = get_window_dc (style, win, state_type, &dc_info,
922 clip.left = area->x - dc_info.x_offset;
923 clip.top = area->y - dc_info.y_offset;
924 clip.right = clip.left + area->width;
925 clip.bottom = clip.top + area->height;
934 part_state = xp_theme_map_gtk_state (element, state_type);
936 draw_theme_background_func (theme, dc, element_part_map[element],
937 part_state, &rect, pClip);
939 release_window_dc (&dc_info);
945 xp_theme_is_active (void)
951 xp_theme_is_drawable (XpThemeElement element)
953 if (xp_theme_is_active ())
954 return (xp_theme_get_handle_by_element (element) != NULL);
960 xp_theme_get_system_font (XpThemeClass klazz, XpThemeFont fontId,
963 if (xp_theme_is_active () && get_theme_sys_font_func != NULL)
965 HTHEME theme = xp_theme_get_handle_by_class (klazz);
973 case XP_THEME_FONT_CAPTION:
974 themeFont = TMT_CAPTIONFONT;
977 case XP_THEME_FONT_MENU:
978 themeFont = TMT_MENUFONT;
981 case XP_THEME_FONT_STATUS:
982 themeFont = TMT_STATUSFONT;
985 case XP_THEME_FONT_MESSAGE:
987 themeFont = TMT_MSGBOXFONT;
991 /* if theme is NULL, it will just return the GetSystemFont()
993 return ((*get_theme_sys_font_func) (theme, themeFont, lf) == S_OK);
1000 xp_theme_get_system_color (XpThemeClass klazz, int colorId,
1003 if (xp_theme_is_active () && get_theme_sys_color_func != NULL)
1005 HTHEME theme = xp_theme_get_handle_by_class (klazz);
1007 /* if theme is NULL, it will just return the GetSystemColor()
1009 *pColor = (*get_theme_sys_color_func) (theme, colorId);
1017 xp_theme_get_system_metric (XpThemeClass klazz, int metricId, OUT int *pVal)
1019 if (xp_theme_is_active () && get_theme_sys_metric_func != NULL)
1021 HTHEME theme = xp_theme_get_handle_by_class (klazz);
1023 /* if theme is NULL, it will just return the GetSystemMetrics()
1025 *pVal = (*get_theme_sys_metric_func) (theme, metricId);