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