xp_theme.c
来自「This GTK+ version 2.12.3. GTK+ is a mult」· C语言 代码 · 共 957 行 · 第 1/2 页
C
957 行
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; 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;}gbooleanxp_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;}gbooleanxp_theme_is_active (void){ return use_xp_theme;}gbooleanxp_theme_is_drawable (XpThemeElement element){ if (xp_theme_is_active ()) return (xp_theme_get_handle_by_element (element) != NULL); return FALSE;}gbooleanxp_theme_get_system_font (XpThemeClass klazz, XpThemeFont fontId, OUT LOGFONT * lf){ 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) { 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); } return FALSE;}gbooleanxp_theme_get_system_color (XpThemeClass klazz, int colorId, 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; } return FALSE;}gbooleanxp_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; } return FALSE;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?