6 #define WIN32_NO_STATUS
8 #define COM_NO_WINDOWS_H
16 #include <undocuser.h>
23 #define NTOS_MODE_USER
24 #include <ndk/ntndk.h>
25 #include <ndk/rtltypes.h>
27 #include <wine/debug.h>
28 WINE_DEFAULT_DEBUG_CHANNEL(uxtheme
);
32 #define MAX_THEME_APP_NAME 60
33 #define MAX_THEME_CLASS_NAME 60
34 #define MAX_THEME_VALUE_NAME 60
36 typedef struct _THEME_PROPERTY
{
39 PROPERTYORIGIN origin
;
44 struct _THEME_PROPERTY
*next
;
45 } THEME_PROPERTY
, *PTHEME_PROPERTY
;
47 typedef struct _THEME_PARTSTATE
{
50 PTHEME_PROPERTY properties
;
52 struct _THEME_PARTSTATE
*next
;
53 } THEME_PARTSTATE
, *PTHEME_PARTSTATE
;
57 typedef struct _THEME_CLASS
{
59 struct _THEME_FILE
* tf
;
60 WCHAR szAppName
[MAX_THEME_APP_NAME
];
61 WCHAR szClassName
[MAX_THEME_CLASS_NAME
];
62 PTHEME_PARTSTATE partstate
;
63 struct _THEME_CLASS
*overrides
;
65 struct _THEME_CLASS
*next
;
66 } THEME_CLASS
, *PTHEME_CLASS
;
68 typedef struct _THEME_IMAGE
{
73 struct _THEME_IMAGE
*next
;
74 } THEME_IMAGE
, *PTHEME_IMAGE
;
76 typedef struct _THEME_FILE
{
79 WCHAR szThemeFile
[MAX_PATH
];
80 LPWSTR pszAvailColors
;
83 LPWSTR pszSelectedColor
;
84 LPWSTR pszSelectedSize
;
87 PTHEME_PROPERTY metrics
;
89 } THEME_FILE
, *PTHEME_FILE
;
91 typedef struct _UXINI_FILE
*PUXINI_FILE
;
93 typedef struct _UXTHEME_HANDLE
95 RTL_HANDLE_TABLE_ENTRY Handle
;
97 } UXTHEME_HANDLE
, *PUXTHEME_HANDLE
;
99 PTHEME_CLASS
ValidateHandle(HTHEME hTheme
);
101 HRESULT
UXTHEME_LoadImage(HTHEME hTheme
, HDC hdc
, int iPartId
, int iStateId
, const RECT
*pRect
, BOOL glyph
,
102 HBITMAP
*hBmp
, RECT
*bmpRect
, BOOL
* hasImageAlpha
);
104 BOOL
MSSTYLES_LookupProperty(LPCWSTR pszPropertyName
, int *dwPrimitive
, int *dwId
);
105 BOOL
MSSTYLES_LookupEnum(LPCWSTR pszValueName
, int dwEnum
, int *dwValue
);
106 BOOL
MSSTYLES_LookupPartState(LPCWSTR pszClass
, LPCWSTR pszPart
, LPCWSTR pszState
, int *iPartId
, int *iStateId
);
108 HRESULT
MSSTYLES_OpenThemeFile(LPCWSTR lpThemeFile
, LPCWSTR pszColorName
, LPCWSTR pszSizeName
, PTHEME_FILE
*tf
);
109 HRESULT
MSSTYLES_ReferenceTheme(PTHEME_FILE tf
);
110 void MSSTYLES_CloseThemeFile(PTHEME_FILE tf
);
111 void MSSTYLES_ParseThemeIni(PTHEME_FILE tf
);
112 PTHEME_CLASS
MSSTYLES_OpenThemeClass(PTHEME_FILE tf
, LPCWSTR pszAppName
, LPCWSTR pszClassList
);
113 HRESULT
MSSTYLES_CloseThemeClass(PTHEME_CLASS tc
);
114 PUXINI_FILE
MSSTYLES_GetThemeIni(PTHEME_FILE tf
);
115 PTHEME_PARTSTATE
MSSTYLES_FindPartState(PTHEME_CLASS tc
, int iPartId
, int iStateId
, PTHEME_CLASS
*tcNext
);
116 PTHEME_PROPERTY
MSSTYLES_FindProperty(PTHEME_CLASS tc
, int iPartId
, int iStateId
, int iPropertyPrimitive
, int iPropertyId
);
117 PTHEME_PROPERTY
MSSTYLES_FindMetric(PTHEME_FILE tf
, int iPropertyPrimitive
, int iPropertyId
);
118 HBITMAP
MSSTYLES_LoadBitmap(PTHEME_CLASS tc
, LPCWSTR lpFilename
, BOOL
* hasAlpha
);
120 HRESULT
MSSTYLES_GetPropertyBool(PTHEME_PROPERTY tp
, BOOL
*pfVal
);
121 HRESULT
MSSTYLES_GetPropertyColor(PTHEME_PROPERTY tp
, COLORREF
*pColor
);
122 HRESULT
MSSTYLES_GetPropertyFont(PTHEME_PROPERTY tp
, HDC hdc
, LOGFONTW
*pFont
);
123 HRESULT
MSSTYLES_GetPropertyInt(PTHEME_PROPERTY tp
, int *piVal
);
124 HRESULT
MSSTYLES_GetPropertyIntList(PTHEME_PROPERTY tp
, INTLIST
*pIntList
);
125 HRESULT
MSSTYLES_GetPropertyPosition(PTHEME_PROPERTY tp
, POINT
*pPoint
);
126 HRESULT
MSSTYLES_GetPropertyString(PTHEME_PROPERTY tp
, LPWSTR pszBuff
, int cchMaxBuffChars
);
127 HRESULT
MSSTYLES_GetPropertyRect(PTHEME_PROPERTY tp
, RECT
*pRect
);
128 HRESULT
MSSTYLES_GetPropertyMargins(PTHEME_PROPERTY tp
, RECT
*prc
, MARGINS
*pMargins
);
130 PUXINI_FILE
UXINI_LoadINI(HMODULE hTheme
, LPCWSTR lpName
);
131 void UXINI_CloseINI(PUXINI_FILE uf
);
132 LPCWSTR
UXINI_GetNextSection(PUXINI_FILE uf
, DWORD
*dwLen
);
133 BOOL
UXINI_FindSection(PUXINI_FILE uf
, LPCWSTR lpName
);
134 LPCWSTR
UXINI_GetNextValue(PUXINI_FILE uf
, DWORD
*dwNameLen
, LPCWSTR
*lpValue
, DWORD
*dwValueLen
);
135 BOOL
UXINI_FindValue(PUXINI_FILE uf
, LPCWSTR lpName
, LPCWSTR
*lpValue
, DWORD
*dwValueLen
);
137 /* Scroll-bar hit testing */
140 SCROLL_NOWHERE
, /* Outside the scroll bar */
141 SCROLL_TOP_ARROW
, /* Top or left arrow */
142 SCROLL_TOP_RECT
, /* Rectangle between the top arrow and the thumb */
143 SCROLL_THUMB
, /* Thumb rectangle */
144 SCROLL_BOTTOM_RECT
, /* Rectangle between the thumb and the bottom arrow */
145 SCROLL_BOTTOM_ARROW
/* Bottom or right arrow */
148 /* The window context stores data for the window needed through the life of the window */
149 typedef struct _WND_DATA
152 HTHEME hthemeScrollbar
;
154 RECT rcCaptionButtons
[4];
156 BOOL HasAppDefinedRgn
;
159 BOOL DirtyThemeRegion
;
160 HBRUSH hTabBackgroundBrush
;
161 HBITMAP hTabBackgroundBmp
;
163 BOOL SCROLL_trackVertical
;
164 enum SCROLL_HITTEST SCROLL_trackHitTest
;
165 BOOL SCROLL_MovingThumb
; /* Is the moving thumb being displayed? */
166 HWND SCROLL_TrackingWin
;
167 INT SCROLL_TrackingBar
;
168 INT SCROLL_TrackingPos
;
169 INT SCROLL_TrackingVal
;
170 } WND_DATA
, *PWND_DATA
;
172 /* The draw context stores data that are needed by the drawing operations in the non client area of the window */
173 typedef struct _DRAW_CONTEXT
181 BOOL Active
; /* wi.dwWindowStatus isn't correct for mdi child windows */
185 /* for double buffering */
188 } DRAW_CONTEXT
, *PDRAW_CONTEXT
;
199 The following values specify all possible button states
200 Note that not all of them are documented but it is easy to
201 find them by opening a theme file
209 BUTTON_INACTIVE_HOT
,
210 BUTTON_INACTIVE_PRESSED
,
211 BUTTON_INACTIVE_DISABLED
212 } THEME_BUTTON_STATES
;
214 #define HT_ISBUTTON(ht) ((ht) == HTMINBUTTON || (ht) == HTMAXBUTTON || (ht) == HTCLOSE || (ht) == HTHELP)
216 #define HASSIZEGRIP(Style, ExStyle, ParentStyle, WindowRect, ParentClientRect) \
217 ((!(Style & WS_CHILD) && (Style & WS_THICKFRAME) && !(Style & WS_MAXIMIZE)) || \
218 ((Style & WS_CHILD) && (ParentStyle & WS_THICKFRAME) && !(ParentStyle & WS_MAXIMIZE) && \
219 (WindowRect.right - WindowRect.left == ParentClientRect.right) && \
220 (WindowRect.bottom - WindowRect.top == ParentClientRect.bottom)))
222 #define HAS_MENU(hwnd,style) ((((style) & (WS_CHILD | WS_POPUP)) != WS_CHILD) && GetMenu(hwnd))
224 #define BUTTON_GAP_SIZE 2
226 #define MENU_BAR_ITEMS_SPACE (12)
228 #define SCROLL_TIMER 0 /* Scroll timer id */
230 /* Overlap between arrows and thumb */
231 #define SCROLL_ARROW_THUMB_OVERLAP 0
233 /* Delay (in ms) before first repetition when holding the button down */
234 #define SCROLL_FIRST_DELAY 200
236 /* Delay (in ms) between scroll repetitions */
237 #define SCROLL_REPEAT_DELAY 50
239 /* Minimum size of the thumb in pixels */
240 #define SCROLL_MIN_THUMB 6
242 /* Minimum size of the rectangle between the arrows */
243 #define SCROLL_MIN_RECT 4
245 LRESULT CALLBACK
ThemeWndProc(HWND hWnd
, UINT Msg
, WPARAM wParam
, LPARAM lParam
, WNDPROC DefWndProc
);
246 void ThemeCalculateCaptionButtonsPos(HWND hWnd
, HTHEME htheme
);
247 void ThemeDrawScrollBar(PDRAW_CONTEXT pcontext
, INT Bar
, POINT
* pt
);
248 VOID
NC_TrackScrollBar(HWND Wnd
, WPARAM wParam
, POINT Pt
);
249 void ThemeInitDrawContext(PDRAW_CONTEXT pcontext
, HWND hWnd
, HRGN hRgn
);
250 void ThemeCleanupDrawContext(PDRAW_CONTEXT pcontext
);
251 PWND_DATA
ThemeGetWndData(HWND hWnd
);
252 HTHEME
GetNCCaptionTheme(HWND hWnd
, DWORD style
);
253 HTHEME
GetNCScrollbarTheme(HWND hWnd
, DWORD style
);
255 extern HINSTANCE hDllInst
;
256 extern ATOM atWindowTheme
;
257 extern ATOM atWndContext
;
258 extern BOOL g_bThemeHooksActive
;
260 void UXTHEME_InitSystem(HINSTANCE hInst
);
261 void UXTHEME_LoadTheme(BOOL bLoad
);
262 BOOL CALLBACK
UXTHEME_broadcast_theme_changed (HWND hWnd
, LPARAM enable
);
264 /* No alpha blending */
265 #define ALPHABLEND_NONE 0
266 /* "Cheap" binary alpha blending - but possibly faster */
267 #define ALPHABLEND_BINARY 1
268 /* Full alpha blending */
269 #define ALPHABLEND_FULL 2
271 #endif /* _UXTHEME_PCH_ */