⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xp_theme.c

📁 linux下电话本所依赖的一些图形库
💻 C
📖 第 1 页 / 共 2 页
字号:
/* MS-Windows Engine (aka GTK-Wimp) * * Copyright (C) 2003, 2004 Raymond Penners <raymond@dotsphinx.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#define _WIN32_WINNT 0x0501#include "xp_theme.h"#include <config.h>#include <windows.h>#include <math.h>#include <string.h>#include <stdio.h>#include "gdk/win32/gdkwin32.h"#ifdef HAVE_UXTHEME_H#include <uxtheme.h>#include <tmschema.h>#else#include "xp_theme_defs.h"#endif#ifndef TMT_CAPTIONFONT/* 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#endifstatic 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 */};static const short element_part_map[]={  BP_CHECKBOX,  BP_CHECKBOX,  BP_PUSHBUTTON,  HP_HEADERITEM,  CP_DROPDOWNBUTTON,  TABP_BODY,  TABP_TABITEM,  TABP_TABITEMLEFTEDGE,  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,  RP_BAND,  RP_GRIPPER,  RP_GRIPPERVERT,  RP_CHEVRON,  TP_BUTTON,  MP_MENUITEM,  MP_SEPARATOR,  SP_GRIPPER,  SP_PANE};static HINSTANCE uxtheme_dll = NULL;static HTHEME open_themes[XP_THEME_CLASS__SIZEOF];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);static GetThemeSysFontFunc get_theme_sys_font_func = NULL;static GetThemeSysColorFunc get_theme_sys_color_func = NULL;static GetThemeSysSizeFunc get_theme_sys_metric_func = NULL;static OpenThemeDataFunc open_theme_data_func = NULL;static CloseThemeDataFunc close_theme_data_func = NULL;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 DrawThemeParentBackgroundFunc draw_theme_parent_background_func = NULL;static voidxp_theme_close_open_handles (void){  int i;  for (i=0; i < XP_THEME_CLASS__SIZEOF; i++)    {      if (open_themes[i])        {          close_theme_data_func (open_themes[i]);          open_themes[i] = NULL;	}    }}voidxp_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");  }}voidxp_theme_reset (void){  xp_theme_close_open_handles ();}voidxp_theme_exit (void){  if (! uxtheme_dll)    return;  xp_theme_close_open_handles ();  FreeLibrary (uxtheme_dll);  uxtheme_dll = NULL;  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 HTHEMExp_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];}static HTHEMExp_theme_get_handle_by_element (XpThemeElement element){  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_STATUS_GRIPPER:    case XP_THEME_ELEMENT_STATUS_PANE:      klazz = XP_THEME_CLASS_STATUS;      break;	case XP_THEME_ELEMENT_TOOLBAR_BUTTON:      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_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_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;    default:      break;    }  if (klazz != XP_THEME_CLASS__SIZEOF)    {      ret = xp_theme_get_handle_by_class (klazz);    }  return ret;}static intxp_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 = CHEVS_NORMAL;      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_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:      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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -