1*c2c66affSColin Finck /*
2*c2c66affSColin Finck * Win32 5.1 Theme properties
3*c2c66affSColin Finck *
4*c2c66affSColin Finck * Copyright (C) 2003 Kevin Koltzau
5*c2c66affSColin Finck *
6*c2c66affSColin Finck * This library is free software; you can redistribute it and/or
7*c2c66affSColin Finck * modify it under the terms of the GNU Lesser General Public
8*c2c66affSColin Finck * License as published by the Free Software Foundation; either
9*c2c66affSColin Finck * version 2.1 of the License, or (at your option) any later version.
10*c2c66affSColin Finck *
11*c2c66affSColin Finck * This library is distributed in the hope that it will be useful,
12*c2c66affSColin Finck * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*c2c66affSColin Finck * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14*c2c66affSColin Finck * Lesser General Public License for more details.
15*c2c66affSColin Finck *
16*c2c66affSColin Finck * You should have received a copy of the GNU Lesser General Public
17*c2c66affSColin Finck * License along with this library; if not, write to the Free Software
18*c2c66affSColin Finck * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19*c2c66affSColin Finck */
20*c2c66affSColin Finck
21*c2c66affSColin Finck #include "uxthemep.h"
22*c2c66affSColin Finck
23*c2c66affSColin Finck /***********************************************************************
24*c2c66affSColin Finck * GetThemeBool (UXTHEME.@)
25*c2c66affSColin Finck */
GetThemeBool(HTHEME hTheme,int iPartId,int iStateId,int iPropId,BOOL * pfVal)26*c2c66affSColin Finck HRESULT WINAPI GetThemeBool(HTHEME hTheme, int iPartId, int iStateId,
27*c2c66affSColin Finck int iPropId, BOOL *pfVal)
28*c2c66affSColin Finck {
29*c2c66affSColin Finck PTHEME_PROPERTY tp;
30*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
31*c2c66affSColin Finck
32*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
33*c2c66affSColin Finck
34*c2c66affSColin Finck if(!pClass)
35*c2c66affSColin Finck return E_HANDLE;
36*c2c66affSColin Finck
37*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_BOOL, iPropId)))
38*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
39*c2c66affSColin Finck return MSSTYLES_GetPropertyBool(tp, pfVal);
40*c2c66affSColin Finck }
41*c2c66affSColin Finck
42*c2c66affSColin Finck /***********************************************************************
43*c2c66affSColin Finck * GetThemeColor (UXTHEME.@)
44*c2c66affSColin Finck */
GetThemeColor(HTHEME hTheme,int iPartId,int iStateId,int iPropId,COLORREF * pColor)45*c2c66affSColin Finck HRESULT WINAPI GetThemeColor(HTHEME hTheme, int iPartId, int iStateId,
46*c2c66affSColin Finck int iPropId, COLORREF *pColor)
47*c2c66affSColin Finck {
48*c2c66affSColin Finck PTHEME_PROPERTY tp;
49*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
50*c2c66affSColin Finck
51*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
52*c2c66affSColin Finck if(!pClass)
53*c2c66affSColin Finck return E_HANDLE;
54*c2c66affSColin Finck
55*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_COLOR, iPropId)))
56*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
57*c2c66affSColin Finck return MSSTYLES_GetPropertyColor(tp, pColor);
58*c2c66affSColin Finck }
59*c2c66affSColin Finck
60*c2c66affSColin Finck /***********************************************************************
61*c2c66affSColin Finck * GetThemeEnumValue (UXTHEME.@)
62*c2c66affSColin Finck */
GetThemeEnumValue(HTHEME hTheme,int iPartId,int iStateId,int iPropId,int * piVal)63*c2c66affSColin Finck HRESULT WINAPI GetThemeEnumValue(HTHEME hTheme, int iPartId, int iStateId,
64*c2c66affSColin Finck int iPropId, int *piVal)
65*c2c66affSColin Finck {
66*c2c66affSColin Finck HRESULT hr;
67*c2c66affSColin Finck WCHAR val[60];
68*c2c66affSColin Finck PTHEME_PROPERTY tp;
69*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
70*c2c66affSColin Finck
71*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
72*c2c66affSColin Finck if(!pClass)
73*c2c66affSColin Finck return E_HANDLE;
74*c2c66affSColin Finck
75*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_ENUM, iPropId)))
76*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
77*c2c66affSColin Finck
78*c2c66affSColin Finck hr = MSSTYLES_GetPropertyString(tp, val, sizeof(val)/sizeof(val[0]));
79*c2c66affSColin Finck if(FAILED(hr))
80*c2c66affSColin Finck return hr;
81*c2c66affSColin Finck if(!MSSTYLES_LookupEnum(val, iPropId, piVal))
82*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
83*c2c66affSColin Finck return S_OK;
84*c2c66affSColin Finck }
85*c2c66affSColin Finck
86*c2c66affSColin Finck /***********************************************************************
87*c2c66affSColin Finck * GetThemeFilename (UXTHEME.@)
88*c2c66affSColin Finck */
GetThemeFilename(HTHEME hTheme,int iPartId,int iStateId,int iPropId,LPWSTR pszThemeFilename,int cchMaxBuffChars)89*c2c66affSColin Finck HRESULT WINAPI GetThemeFilename(HTHEME hTheme, int iPartId, int iStateId,
90*c2c66affSColin Finck int iPropId, LPWSTR pszThemeFilename,
91*c2c66affSColin Finck int cchMaxBuffChars)
92*c2c66affSColin Finck {
93*c2c66affSColin Finck PTHEME_PROPERTY tp;
94*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
95*c2c66affSColin Finck
96*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
97*c2c66affSColin Finck if(!pClass)
98*c2c66affSColin Finck return E_HANDLE;
99*c2c66affSColin Finck
100*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_FILENAME, iPropId)))
101*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
102*c2c66affSColin Finck return MSSTYLES_GetPropertyString(tp, pszThemeFilename, cchMaxBuffChars);
103*c2c66affSColin Finck }
104*c2c66affSColin Finck
105*c2c66affSColin Finck /***********************************************************************
106*c2c66affSColin Finck * GetThemeFont (UXTHEME.@)
107*c2c66affSColin Finck */
GetThemeFont(HTHEME hTheme,HDC hdc,int iPartId,int iStateId,int iPropId,LOGFONTW * pFont)108*c2c66affSColin Finck HRESULT WINAPI GetThemeFont(HTHEME hTheme, HDC hdc, int iPartId,
109*c2c66affSColin Finck int iStateId, int iPropId, LOGFONTW *pFont)
110*c2c66affSColin Finck {
111*c2c66affSColin Finck PTHEME_PROPERTY tp;
112*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
113*c2c66affSColin Finck
114*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
115*c2c66affSColin Finck if(!pClass)
116*c2c66affSColin Finck return E_HANDLE;
117*c2c66affSColin Finck
118*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_FONT, iPropId)))
119*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
120*c2c66affSColin Finck return MSSTYLES_GetPropertyFont(tp, hdc, pFont);
121*c2c66affSColin Finck }
122*c2c66affSColin Finck
123*c2c66affSColin Finck /***********************************************************************
124*c2c66affSColin Finck * GetThemeInt (UXTHEME.@)
125*c2c66affSColin Finck */
GetThemeInt(HTHEME hTheme,int iPartId,int iStateId,int iPropId,int * piVal)126*c2c66affSColin Finck HRESULT WINAPI GetThemeInt(HTHEME hTheme, int iPartId, int iStateId,
127*c2c66affSColin Finck int iPropId, int *piVal)
128*c2c66affSColin Finck {
129*c2c66affSColin Finck PTHEME_PROPERTY tp;
130*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
131*c2c66affSColin Finck
132*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
133*c2c66affSColin Finck if(!pClass)
134*c2c66affSColin Finck return E_HANDLE;
135*c2c66affSColin Finck
136*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_INT, iPropId)))
137*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
138*c2c66affSColin Finck return MSSTYLES_GetPropertyInt(tp, piVal);
139*c2c66affSColin Finck }
140*c2c66affSColin Finck
141*c2c66affSColin Finck /***********************************************************************
142*c2c66affSColin Finck * GetThemeIntList (UXTHEME.@)
143*c2c66affSColin Finck */
GetThemeIntList(HTHEME hTheme,int iPartId,int iStateId,int iPropId,INTLIST * pIntList)144*c2c66affSColin Finck HRESULT WINAPI GetThemeIntList(HTHEME hTheme, int iPartId, int iStateId,
145*c2c66affSColin Finck int iPropId, INTLIST *pIntList)
146*c2c66affSColin Finck {
147*c2c66affSColin Finck PTHEME_PROPERTY tp;
148*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
149*c2c66affSColin Finck
150*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
151*c2c66affSColin Finck if(!pClass)
152*c2c66affSColin Finck return E_HANDLE;
153*c2c66affSColin Finck
154*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_INTLIST, iPropId)))
155*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
156*c2c66affSColin Finck return MSSTYLES_GetPropertyIntList(tp, pIntList);
157*c2c66affSColin Finck }
158*c2c66affSColin Finck
159*c2c66affSColin Finck /***********************************************************************
160*c2c66affSColin Finck * GetThemePosition (UXTHEME.@)
161*c2c66affSColin Finck */
GetThemePosition(HTHEME hTheme,int iPartId,int iStateId,int iPropId,POINT * pPoint)162*c2c66affSColin Finck HRESULT WINAPI GetThemePosition(HTHEME hTheme, int iPartId, int iStateId,
163*c2c66affSColin Finck int iPropId, POINT *pPoint)
164*c2c66affSColin Finck {
165*c2c66affSColin Finck PTHEME_PROPERTY tp;
166*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
167*c2c66affSColin Finck
168*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
169*c2c66affSColin Finck if(!pClass)
170*c2c66affSColin Finck return E_HANDLE;
171*c2c66affSColin Finck
172*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_POSITION, iPropId)))
173*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
174*c2c66affSColin Finck return MSSTYLES_GetPropertyPosition(tp, pPoint);
175*c2c66affSColin Finck }
176*c2c66affSColin Finck
177*c2c66affSColin Finck /***********************************************************************
178*c2c66affSColin Finck * GetThemeRect (UXTHEME.@)
179*c2c66affSColin Finck */
GetThemeRect(HTHEME hTheme,int iPartId,int iStateId,int iPropId,RECT * pRect)180*c2c66affSColin Finck HRESULT WINAPI GetThemeRect(HTHEME hTheme, int iPartId, int iStateId,
181*c2c66affSColin Finck int iPropId, RECT *pRect)
182*c2c66affSColin Finck {
183*c2c66affSColin Finck PTHEME_PROPERTY tp;
184*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
185*c2c66affSColin Finck
186*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
187*c2c66affSColin Finck if(!pClass)
188*c2c66affSColin Finck return E_HANDLE;
189*c2c66affSColin Finck
190*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_RECT, iPropId)))
191*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
192*c2c66affSColin Finck return MSSTYLES_GetPropertyRect(tp, pRect);
193*c2c66affSColin Finck }
194*c2c66affSColin Finck
195*c2c66affSColin Finck /***********************************************************************
196*c2c66affSColin Finck * GetThemeString (UXTHEME.@)
197*c2c66affSColin Finck */
GetThemeString(HTHEME hTheme,int iPartId,int iStateId,int iPropId,LPWSTR pszBuff,int cchMaxBuffChars)198*c2c66affSColin Finck HRESULT WINAPI GetThemeString(HTHEME hTheme, int iPartId, int iStateId,
199*c2c66affSColin Finck int iPropId, LPWSTR pszBuff, int cchMaxBuffChars)
200*c2c66affSColin Finck {
201*c2c66affSColin Finck PTHEME_PROPERTY tp;
202*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
203*c2c66affSColin Finck
204*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
205*c2c66affSColin Finck if(!pClass)
206*c2c66affSColin Finck return E_HANDLE;
207*c2c66affSColin Finck
208*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_STRING, iPropId)))
209*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
210*c2c66affSColin Finck return MSSTYLES_GetPropertyString(tp, pszBuff, cchMaxBuffChars);
211*c2c66affSColin Finck }
212*c2c66affSColin Finck
213*c2c66affSColin Finck /***********************************************************************
214*c2c66affSColin Finck * GetThemeMargins (UXTHEME.@)
215*c2c66affSColin Finck */
GetThemeMargins(HTHEME hTheme,HDC hdc,int iPartId,int iStateId,int iPropId,RECT * prc,MARGINS * pMargins)216*c2c66affSColin Finck HRESULT WINAPI GetThemeMargins(HTHEME hTheme, HDC hdc, int iPartId,
217*c2c66affSColin Finck int iStateId, int iPropId, RECT *prc,
218*c2c66affSColin Finck MARGINS *pMargins)
219*c2c66affSColin Finck {
220*c2c66affSColin Finck PTHEME_PROPERTY tp;
221*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
222*c2c66affSColin Finck
223*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
224*c2c66affSColin Finck memset (pMargins, 0, sizeof (MARGINS));
225*c2c66affSColin Finck if(!pClass)
226*c2c66affSColin Finck return E_HANDLE;
227*c2c66affSColin Finck
228*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, TMT_MARGINS, iPropId)))
229*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
230*c2c66affSColin Finck return MSSTYLES_GetPropertyMargins(tp, prc, pMargins);
231*c2c66affSColin Finck }
232*c2c66affSColin Finck
233*c2c66affSColin Finck /***********************************************************************
234*c2c66affSColin Finck * GetThemeMetric (UXTHEME.@)
235*c2c66affSColin Finck */
GetThemeMetric(HTHEME hTheme,HDC hdc,int iPartId,int iStateId,int iPropId,int * piVal)236*c2c66affSColin Finck HRESULT WINAPI GetThemeMetric(HTHEME hTheme, HDC hdc, int iPartId,
237*c2c66affSColin Finck int iStateId, int iPropId, int *piVal)
238*c2c66affSColin Finck {
239*c2c66affSColin Finck PTHEME_PROPERTY tp;
240*c2c66affSColin Finck WCHAR val[60];
241*c2c66affSColin Finck HRESULT hr;
242*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
243*c2c66affSColin Finck
244*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
245*c2c66affSColin Finck if(!pClass)
246*c2c66affSColin Finck return E_HANDLE;
247*c2c66affSColin Finck
248*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, 0, iPropId)))
249*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
250*c2c66affSColin Finck
251*c2c66affSColin Finck switch(tp->iPrimitiveType) {
252*c2c66affSColin Finck case TMT_POSITION: /* Only the X coord is retrieved */
253*c2c66affSColin Finck case TMT_MARGINS: /* Only the cxLeftWidth member is retrieved */
254*c2c66affSColin Finck case TMT_INTLIST: /* Only the first int is retrieved */
255*c2c66affSColin Finck case TMT_SIZE:
256*c2c66affSColin Finck case TMT_INT:
257*c2c66affSColin Finck return MSSTYLES_GetPropertyInt(tp, piVal);
258*c2c66affSColin Finck case TMT_BOOL:
259*c2c66affSColin Finck return MSSTYLES_GetPropertyBool(tp, piVal);
260*c2c66affSColin Finck case TMT_COLOR:
261*c2c66affSColin Finck return MSSTYLES_GetPropertyColor(tp, (COLORREF*)piVal);
262*c2c66affSColin Finck case TMT_ENUM:
263*c2c66affSColin Finck hr = MSSTYLES_GetPropertyString(tp, val, sizeof(val)/sizeof(val[0]));
264*c2c66affSColin Finck if(FAILED(hr))
265*c2c66affSColin Finck return hr;
266*c2c66affSColin Finck if(!MSSTYLES_LookupEnum(val, iPropId, piVal))
267*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
268*c2c66affSColin Finck return S_OK;
269*c2c66affSColin Finck case TMT_FILENAME:
270*c2c66affSColin Finck /* Windows does return a value for this, but its value doesn't make sense */
271*c2c66affSColin Finck FIXME("Filename\n");
272*c2c66affSColin Finck break;
273*c2c66affSColin Finck }
274*c2c66affSColin Finck return E_PROP_ID_UNSUPPORTED;
275*c2c66affSColin Finck }
276*c2c66affSColin Finck
277*c2c66affSColin Finck /***********************************************************************
278*c2c66affSColin Finck * GetThemePropertyOrigin (UXTHEME.@)
279*c2c66affSColin Finck */
GetThemePropertyOrigin(HTHEME hTheme,int iPartId,int iStateId,int iPropId,PROPERTYORIGIN * pOrigin)280*c2c66affSColin Finck HRESULT WINAPI GetThemePropertyOrigin(HTHEME hTheme, int iPartId, int iStateId,
281*c2c66affSColin Finck int iPropId, PROPERTYORIGIN *pOrigin)
282*c2c66affSColin Finck {
283*c2c66affSColin Finck PTHEME_PROPERTY tp;
284*c2c66affSColin Finck PTHEME_CLASS pClass = ValidateHandle(hTheme);
285*c2c66affSColin Finck
286*c2c66affSColin Finck TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
287*c2c66affSColin Finck if(!pClass)
288*c2c66affSColin Finck return E_HANDLE;
289*c2c66affSColin Finck
290*c2c66affSColin Finck if(!(tp = MSSTYLES_FindProperty(pClass, iPartId, iStateId, 0, iPropId))) {
291*c2c66affSColin Finck *pOrigin = PO_NOTFOUND;
292*c2c66affSColin Finck return S_OK;
293*c2c66affSColin Finck }
294*c2c66affSColin Finck *pOrigin = tp->origin;
295*c2c66affSColin Finck return S_OK;
296*c2c66affSColin Finck }
297