ReactOS  0.4.14-dev-98-gb0d4763
property.c
Go to the documentation of this file.
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 {
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 {
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];
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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  */
217  int iStateId, int iPropId, RECT *prc,
218  MARGINS *pMargins)
219 {
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 {
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 {
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 }
PTHEME_PROPERTY MSSTYLES_FindProperty(PTHEME_CLASS tc, int iPartId, int iStateId, int iPropertyPrimitive, int iPropertyId)
Definition: msstyles.c:835
HRESULT WINAPI GetThemePropertyOrigin(HTHEME hTheme, int iPartId, int iStateId, int iPropId, PROPERTYORIGIN *pOrigin)
Definition: property.c:280
#define E_HANDLE
Definition: winerror.h:2850
#define TMT_BOOL
Definition: vssym32.h:137
HRESULT hr
Definition: shlfolder.c:183
HRESULT WINAPI GetThemeEnumValue(HTHEME hTheme, int iPartId, int iStateId, int iPropId, int *piVal)
Definition: property.c:63
#define TMT_INTLIST
Definition: vssym32.h:145
static HDC
Definition: imagelist.c:92
HRESULT MSSTYLES_GetPropertyMargins(PTHEME_PROPERTY tp, RECT *prc, MARGINS *pMargins)
Definition: msstyles.c:1171
HRESULT WINAPI GetThemePosition(HTHEME hTheme, int iPartId, int iStateId, int iPropId, POINT *pPoint)
Definition: property.c:162
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
HRESULT WINAPI GetThemeBool(HTHEME hTheme, int iPartId, int iStateId, int iPropId, BOOL *pfVal)
Definition: property.c:26
HRESULT WINAPI GetThemeFilename(HTHEME hTheme, int iPartId, int iStateId, int iPropId, LPWSTR pszThemeFilename, int cchMaxBuffChars)
Definition: property.c:89
HRESULT WINAPI GetThemeFont(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, LOGFONTW *pFont)
Definition: property.c:108
HRESULT WINAPI GetThemeString(HTHEME hTheme, int iPartId, int iStateId, int iPropId, LPWSTR pszBuff, int cchMaxBuffChars)
Definition: property.c:198
#define TMT_MARGINS
Definition: vssym32.h:139
Definition: misc.c:279
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TMT_STRING
Definition: vssym32.h:135
#define FIXME(fmt,...)
Definition: debug.h:110
#define TMT_ENUM
Definition: uxthemep.h:30
#define TMT_FONT
Definition: vssym32.h:144
#define TMT_RECT
Definition: vssym32.h:143
HRESULT MSSTYLES_GetPropertyBool(PTHEME_PROPERTY tp, BOOL *pfVal)
Definition: msstyles.c:983
GLuint GLfloat * val
Definition: glext.h:7180
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
Definition: btrfs.c:2883
#define TRACE(s)
Definition: solgame.cpp:4
#define E_PROP_ID_UNSUPPORTED
Definition: vfwmsgs.h:173
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
DWORD COLORREF
Definition: windef.h:285
#define WINAPI
Definition: msvc.h:8
HRESULT WINAPI GetThemeMetric(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, int *piVal)
Definition: property.c:236
#define TMT_FILENAME
Definition: vssym32.h:140
PTHEME_CLASS ValidateHandle(HTHEME hTheme)
Definition: system.c:717
HDC hdc
Definition: main.c:9
HRESULT MSSTYLES_GetPropertyColor(PTHEME_PROPERTY tp, COLORREF *pColor)
Definition: msstyles.c:996
HRESULT WINAPI GetThemeColor(HTHEME hTheme, int iPartId, int iStateId, int iPropId, COLORREF *pColor)
Definition: property.c:45
HRESULT MSSTYLES_GetPropertyRect(PTHEME_PROPERTY tp, RECT *pRect)
Definition: msstyles.c:1151
HRESULT WINAPI GetThemeMargins(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, RECT *prc, MARGINS *pMargins)
Definition: property.c:216
#define S_OK
Definition: intsafe.h:59
HRESULT MSSTYLES_GetPropertyFont(PTHEME_PROPERTY tp, HDC hdc, LOGFONTW *pFont)
Definition: msstyles.c:1066
#define TMT_INT
Definition: vssym32.h:136
HRESULT MSSTYLES_GetPropertyInt(PTHEME_PROPERTY tp, int *piVal)
Definition: msstyles.c:1083
#define TMT_POSITION
Definition: vssym32.h:142
BOOL MSSTYLES_LookupEnum(LPCWSTR pszValueName, int dwEnum, int *dwValue)
Definition: stylemap.c:1126
#define TMT_COLOR
Definition: vssym32.h:138
HRESULT WINAPI GetThemeRect(HTHEME hTheme, int iPartId, int iStateId, int iPropId, RECT *pRect)
Definition: property.c:180
HRESULT MSSTYLES_GetPropertyString(PTHEME_PROPERTY tp, LPWSTR pszBuff, int cchMaxBuffChars)
Definition: msstyles.c:1140
HRESULT WINAPI GetThemeIntList(HTHEME hTheme, int iPartId, int iStateId, int iPropId, INTLIST *pIntList)
Definition: property.c:144
WCHAR * LPWSTR
Definition: xmlstorage.h:184
_Out_ LPRECT prc
Definition: ntgdi.h:1658
HRESULT MSSTYLES_GetPropertyPosition(PTHEME_PROPERTY tp, POINT *pPoint)
Definition: msstyles.c:1116
#define memset(x, y, z)
Definition: compat.h:39
HRESULT WINAPI GetThemeInt(HTHEME hTheme, int iPartId, int iStateId, int iPropId, int *piVal)
Definition: property.c:126
HRESULT MSSTYLES_GetPropertyIntList(PTHEME_PROPERTY tp, INTLIST *pIntList)
Definition: msstyles.c:1097
#define TMT_SIZE
Definition: vssym32.h:141