xref: /reactos/dll/win32/uxtheme/property.c (revision c2c66aff)
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