bb76232aca2625fa78432803469ae5db8e171c6a
[reactos.git] / reactos / dll / win32 / uxtheme / property.c
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
31 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
32 if(!hTheme)
33 return E_HANDLE;
34
35 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_BOOL, iPropId)))
36 return E_PROP_ID_UNSUPPORTED;
37 return MSSTYLES_GetPropertyBool(tp, pfVal);
38 }
39
40 /***********************************************************************
41 * GetThemeColor (UXTHEME.@)
42 */
43 HRESULT WINAPI GetThemeColor(HTHEME hTheme, int iPartId, int iStateId,
44 int iPropId, COLORREF *pColor)
45 {
46 PTHEME_PROPERTY tp;
47
48 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
49 if(!hTheme)
50 return E_HANDLE;
51
52 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_COLOR, iPropId)))
53 return E_PROP_ID_UNSUPPORTED;
54 return MSSTYLES_GetPropertyColor(tp, pColor);
55 }
56
57 /***********************************************************************
58 * GetThemeEnumValue (UXTHEME.@)
59 */
60 HRESULT WINAPI GetThemeEnumValue(HTHEME hTheme, int iPartId, int iStateId,
61 int iPropId, int *piVal)
62 {
63 HRESULT hr;
64 WCHAR val[60];
65 PTHEME_PROPERTY tp;
66
67 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
68 if(!hTheme)
69 return E_HANDLE;
70
71 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_ENUM, iPropId)))
72 return E_PROP_ID_UNSUPPORTED;
73
74 hr = MSSTYLES_GetPropertyString(tp, val, sizeof(val)/sizeof(val[0]));
75 if(FAILED(hr))
76 return hr;
77 if(!MSSTYLES_LookupEnum(val, iPropId, piVal))
78 return E_PROP_ID_UNSUPPORTED;
79 return S_OK;
80 }
81
82 /***********************************************************************
83 * GetThemeFilename (UXTHEME.@)
84 */
85 HRESULT WINAPI GetThemeFilename(HTHEME hTheme, int iPartId, int iStateId,
86 int iPropId, LPWSTR pszThemeFilename,
87 int cchMaxBuffChars)
88 {
89 PTHEME_PROPERTY tp;
90
91 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
92 if(!hTheme)
93 return E_HANDLE;
94
95 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_FILENAME, iPropId)))
96 return E_PROP_ID_UNSUPPORTED;
97 return MSSTYLES_GetPropertyString(tp, pszThemeFilename, cchMaxBuffChars);
98 }
99
100 /***********************************************************************
101 * GetThemeFont (UXTHEME.@)
102 */
103 HRESULT WINAPI GetThemeFont(HTHEME hTheme, HDC hdc, int iPartId,
104 int iStateId, int iPropId, LOGFONTW *pFont)
105 {
106 PTHEME_PROPERTY tp;
107
108 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
109 if(!hTheme)
110 return E_HANDLE;
111
112 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_FONT, iPropId)))
113 return E_PROP_ID_UNSUPPORTED;
114 return MSSTYLES_GetPropertyFont(tp, hdc, pFont);
115 }
116
117 /***********************************************************************
118 * GetThemeInt (UXTHEME.@)
119 */
120 HRESULT WINAPI GetThemeInt(HTHEME hTheme, int iPartId, int iStateId,
121 int iPropId, int *piVal)
122 {
123 PTHEME_PROPERTY tp;
124
125 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
126 if(!hTheme)
127 return E_HANDLE;
128
129 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_INT, iPropId)))
130 return E_PROP_ID_UNSUPPORTED;
131 return MSSTYLES_GetPropertyInt(tp, piVal);
132 }
133
134 /***********************************************************************
135 * GetThemeIntList (UXTHEME.@)
136 */
137 HRESULT WINAPI GetThemeIntList(HTHEME hTheme, int iPartId, int iStateId,
138 int iPropId, INTLIST *pIntList)
139 {
140 PTHEME_PROPERTY tp;
141
142 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
143 if(!hTheme)
144 return E_HANDLE;
145
146 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_INTLIST, iPropId)))
147 return E_PROP_ID_UNSUPPORTED;
148 return MSSTYLES_GetPropertyIntList(tp, pIntList);
149 }
150
151 /***********************************************************************
152 * GetThemePosition (UXTHEME.@)
153 */
154 HRESULT WINAPI GetThemePosition(HTHEME hTheme, int iPartId, int iStateId,
155 int iPropId, POINT *pPoint)
156 {
157 PTHEME_PROPERTY tp;
158
159 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
160 if(!hTheme)
161 return E_HANDLE;
162
163 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_POSITION, iPropId)))
164 return E_PROP_ID_UNSUPPORTED;
165 return MSSTYLES_GetPropertyPosition(tp, pPoint);
166 }
167
168 /***********************************************************************
169 * GetThemeRect (UXTHEME.@)
170 */
171 HRESULT WINAPI GetThemeRect(HTHEME hTheme, int iPartId, int iStateId,
172 int iPropId, RECT *pRect)
173 {
174 PTHEME_PROPERTY tp;
175
176 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
177 if(!hTheme)
178 return E_HANDLE;
179
180 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_RECT, iPropId)))
181 return E_PROP_ID_UNSUPPORTED;
182 return MSSTYLES_GetPropertyRect(tp, pRect);
183 }
184
185 /***********************************************************************
186 * GetThemeString (UXTHEME.@)
187 */
188 HRESULT WINAPI GetThemeString(HTHEME hTheme, int iPartId, int iStateId,
189 int iPropId, LPWSTR pszBuff, int cchMaxBuffChars)
190 {
191 PTHEME_PROPERTY tp;
192
193 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
194 if(!hTheme)
195 return E_HANDLE;
196
197 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_STRING, iPropId)))
198 return E_PROP_ID_UNSUPPORTED;
199 return MSSTYLES_GetPropertyString(tp, pszBuff, cchMaxBuffChars);
200 }
201
202 /***********************************************************************
203 * GetThemeMargins (UXTHEME.@)
204 */
205 HRESULT WINAPI GetThemeMargins(HTHEME hTheme, HDC hdc, int iPartId,
206 int iStateId, int iPropId, RECT *prc,
207 MARGINS *pMargins)
208 {
209 PTHEME_PROPERTY tp;
210
211 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
212 memset (pMargins, 0, sizeof (MARGINS));
213 if(!hTheme)
214 return E_HANDLE;
215
216 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_MARGINS, iPropId)))
217 return E_PROP_ID_UNSUPPORTED;
218 return MSSTYLES_GetPropertyMargins(tp, prc, pMargins);
219 }
220
221 /***********************************************************************
222 * GetThemeMetric (UXTHEME.@)
223 */
224 HRESULT WINAPI GetThemeMetric(HTHEME hTheme, HDC hdc, int iPartId,
225 int iStateId, int iPropId, int *piVal)
226 {
227 PTHEME_PROPERTY tp;
228 WCHAR val[60];
229 HRESULT hr;
230
231 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
232 if(!hTheme)
233 return E_HANDLE;
234
235 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, 0, iPropId)))
236 return E_PROP_ID_UNSUPPORTED;
237 switch(tp->iPrimitiveType) {
238 case TMT_POSITION: /* Only the X coord is retrieved */
239 case TMT_MARGINS: /* Only the cxLeftWidth member is retrieved */
240 case TMT_INTLIST: /* Only the first int is retrieved */
241 case TMT_SIZE:
242 case TMT_INT:
243 return MSSTYLES_GetPropertyInt(tp, piVal);
244 case TMT_BOOL:
245 return MSSTYLES_GetPropertyBool(tp, piVal);
246 case TMT_COLOR:
247 return MSSTYLES_GetPropertyColor(tp, (COLORREF*)piVal);
248 case TMT_ENUM:
249 hr = MSSTYLES_GetPropertyString(tp, val, sizeof(val)/sizeof(val[0]));
250 if(FAILED(hr))
251 return hr;
252 if(!MSSTYLES_LookupEnum(val, iPropId, piVal))
253 return E_PROP_ID_UNSUPPORTED;
254 return S_OK;
255 case TMT_FILENAME:
256 /* Windows does return a value for this, but its value doesn't make sense */
257 FIXME("Filename\n");
258 break;
259 }
260 return E_PROP_ID_UNSUPPORTED;
261 }
262
263 /***********************************************************************
264 * GetThemePropertyOrigin (UXTHEME.@)
265 */
266 HRESULT WINAPI GetThemePropertyOrigin(HTHEME hTheme, int iPartId, int iStateId,
267 int iPropId, PROPERTYORIGIN *pOrigin)
268 {
269 PTHEME_PROPERTY tp;
270
271 TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId);
272 if(!hTheme)
273 return E_HANDLE;
274
275 if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, 0, iPropId))) {
276 *pOrigin = PO_NOTFOUND;
277 return S_OK;
278 }
279 *pOrigin = tp->origin;
280 return S_OK;
281 }