23 #include <wine/unicode.h> 31 #define MSSTYLES_VERSION 0x0003 34 't',
'h',
'e',
'm',
'e',
's',
'_',
'i',
'n',
'i',
'\0' 59 static const WCHAR szPackThemVersionResource[] = {
60 'P',
'A',
'C',
'K',
'T',
'H',
'E',
'M',
'_',
'V',
'E',
'R',
'S',
'I',
'O',
'N',
'\0' 62 static const WCHAR szColorNamesResource[] = {
63 'C',
'O',
'L',
'O',
'R',
'N',
'A',
'M',
'E',
'S',
'\0' 65 static const WCHAR szSizeNamesResource[] = {
66 'S',
'I',
'Z',
'E',
'N',
'A',
'M',
'E',
'S',
'\0' 87 TRACE(
"No version resource found\n");
93 TRACE(
"Version resource found, but wrong size: %d\n", versize);
100 TRACE(
"Version of theme file is unsupported: 0x%04x\n",
version);
106 TRACE(
"Color names resource not found\n");
113 TRACE(
"Size names resource not found\n");
124 pszSelectedColor = tmp;
131 pszSelectedColor = pszColors;
138 pszSelectedSize = tmp;
145 pszSelectedSize = pszSizes;
147 if(!pszSelectedColor || !pszSelectedSize) {
148 TRACE(
"Requested color/size (%s/%s) not found in theme\n",
155 (*tf)->hTheme = hTheme;
159 (*tf)->pszAvailColors = pszColors;
160 (*tf)->pszAvailSizes = pszSizes;
161 (*tf)->pszSelectedColor = pszSelectedColor;
162 (*tf)->pszSelectedSize = pszSelectedSize;
163 (*tf)->dwRefCount = 1;
165 TRACE(
"Theme %p refcount: %d\n", *
tf, (*tf)->dwRefCount);
184 TRACE(
"Theme %p refcount: %d\n",
tf,
tf->dwRefCount);
186 if(!
tf->dwRefCount) {
210 tf->images =
img->next;
227 TRACE(
"Theme %p refcount: %d\n",
tf,
tf->dwRefCount);
248 static const WCHAR szFileResNamesResource[] = {
249 'F',
'I',
'L',
'E',
'R',
'E',
'S',
'N',
'A',
'M',
'E',
'S',
'\0' 251 DWORD dwColorCount = 0;
252 DWORD dwSizeCount = 0;
253 DWORD dwColorNum = 0;
256 DWORD dwResourceIndex;
263 tmp =
tf->pszAvailColors;
266 dwColorNum = dwColorCount;
270 tmp =
tf->pszAvailSizes;
273 dwSizeNum = dwSizeCount;
279 TRACE(
"FILERESNAMES map not found\n");
283 dwResourceIndex = (dwSizeCount * dwColorNum) + dwSizeNum;
284 for(
i=0;
i < dwResourceIndex;
i++) {
316 WCHAR part[60] = {
'\0'};
320 lstrcpynW(sec, lpSection,
min(dwLen+1,
sizeof(sec)/
sizeof(sec[0])));
345 lstrcpynW(part, comp,
sizeof(part)/
sizeof(part[0]));
355 lstrcpynW(part, comp,
sizeof(part)/
sizeof(part[0]));
428 cur->hTheme =
tf->hTheme;
431 cur->next =
tf->classes;
456 if(
cur->iPartId == iPartId &&
cur->iStateId == iStateId) {
485 cur->iPartId = iPartId;
486 cur->iStateId = iStateId;
488 cur->next =
tc->partstate;
510 if(
cur->iPropertyId == iPropertyId) {
511 if(
cur->iPrimitiveType == iPropertyPrimitive) {
515 if(!iPropertyPrimitive)
583 cur->iPrimitiveType = iPropertyPrimitive;
584 cur->iPropertyId = iPropertyId;
585 cur->lpValue = lpValue;
586 cur->dwValueLen = dwValueLen;
589 cur->origin = PO_STATE;
591 cur->origin = PO_PART;
593 cur->origin = PO_GLOBAL;
595 cur->origin = PO_CLASS;
624 cur->iPrimitiveType = iPropertyPrimitive;
625 cur->iPropertyId = iPropertyId;
626 cur->lpValue = lpValue;
627 cur->dwValueLen = dwValueLen;
629 cur->origin = PO_GLOBAL;
631 cur->next =
tf->metrics;
646 static const WCHAR szSysMetrics[] = {
'S',
'y',
's',
'M',
'e',
't',
'r',
'i',
'c',
's',
'\0'};
647 static const WCHAR szGlobals[] = {
'g',
'l',
'o',
'b',
'a',
'l',
's',
'\0'};
657 int iPropertyPrimitive;
675 lstrcpynW(szPropertyName,
lpName,
min(dwLen+1,
sizeof(szPropertyName)/
sizeof(szPropertyName[0])));
701 lstrcpynW(szPropertyName,
lpName,
min(dwLen+1,
sizeof(szPropertyName)/
sizeof(szPropertyName[0])));
742 ERR(
"Failed to parse theme ini\n");
771 start = pszClassList;
794 cls->
tf->dwRefCount++;
795 TRACE(
"Theme %p refcount: %d\n",
tf,
tf->dwRefCount);
803 cls->
tf->dwRefCount++;
804 TRACE(
"Theme %p refcount: %d\n",
tf,
tf->dwRefCount);
841 TRACE(
"(%p, %d, %d, %d)\n",
tc, iPartId, iStateId, iPropertyId);
852 else if(iPartId != 0)
874 if(
dib.dsBm.bmBitsPixel != 32)
879 n =
dib.dsBmih.biHeight *
dib.dsBmih.biWidth;
884 p[0] = (
p[0] *
a) >> 8;
885 p[1] = (
p[1] *
a) >> 8;
886 p[2] = (
p[2] *
a) >> 8;
901 lstrcpynW(szFile, lpFilename,
sizeof(szFile)/
sizeof(szFile[0]));
904 if(*tmp ==
'\\') *tmp =
'_';
905 if(*tmp ==
'/') *tmp =
'_';
906 if(*tmp ==
'.') *tmp =
'_';
910 img =
tc->tf->images;
916 *hasAlpha =
img->hasAlpha;
925 img->hasAlpha = *hasAlpha;
928 img->next =
tc->tf->images;
929 tc->tf->images =
img;
940 while(
cur < lpStringEnd && ((*cur < '0' || *cur >
'9') && *
cur !=
'-'))
cur++;
941 if(
cur >= lpStringEnd) {
948 while(
cur < lpStringEnd && (*
cur >=
'0' && *
cur <=
'9')) {
954 if(lpValEnd) *lpValEnd =
cur;
964 if(
cur >= lpStringEnd) {
968 while(
cur < lpStringEnd && *
cur !=
'\n'&& *
cur !=
',')
cur++;
974 if(lpValEnd) *lpValEnd =
cur;
986 if(*
tp->lpValue ==
't' || *
tp->lpValue ==
'T')
1002 lpCur =
tp->lpValue;
1003 lpEnd =
tp->lpValue +
tp->dwValueLen;
1006 TRACE(
"Could not parse color property\n");
1010 TRACE(
"Could not parse color property\n");
1014 TRACE(
"Could not parse color property\n");
1029 static const WCHAR szBold[] = {
'b',
'o',
'l',
'd',
'\0'};
1030 static const WCHAR szItalic[] = {
'i',
't',
'a',
'l',
'i',
'c',
'\0'};
1031 static const WCHAR szUnderline[] = {
'u',
'n',
'd',
'e',
'r',
'l',
'i',
'n',
'e',
'\0'};
1032 static const WCHAR szStrikeOut[] = {
's',
't',
'r',
'i',
'k',
'e',
'o',
'u',
't',
'\0'};
1037 TRACE(
"Property is there, but failed to get face name\n");
1042 TRACE(
"Property is there, but failed to get point size\n");
1086 TRACE(
"Could not parse int property\n");
1103 for(
i=0;
i < MAX_INTLIST_COUNT;
i++) {
1107 pIntList->iValueCount =
i;
1123 TRACE(
"Could not parse position property\n");
1127 TRACE(
"Could not parse position property\n");
1160 TRACE(
"Could not parse rect property\n");
1180 TRACE(
"Could not parse margins property\n");
WCHAR szAppName[MAX_THEME_APP_NAME]
PTHEME_PROPERTY MSSTYLES_FindProperty(PTHEME_CLASS tc, int iPartId, int iStateId, int iPropertyPrimitive, int iPropertyId)
PTHEME_PARTSTATE partstate
PTHEME_PROPERTY MSSTYLES_FindMetric(PTHEME_FILE tf, int iPropertyPrimitive, int iPropertyId)
static BOOL MSSTYLES_GetNextToken(LPCWSTR lpStringStart, LPCWSTR lpStringEnd, LPCWSTR *lpValEnd, LPWSTR lpBuff, DWORD buffSize)
#define HRESULT_FROM_WIN32(x)
static BOOL MSSTYLES_ParseIniSectionName(LPCWSTR lpSection, DWORD dwLen, LPWSTR szAppName, LPWSTR szClassName, int *iPartId, int *iStateId)
struct _THEME_CLASS * overrides
HDC WINAPI GetDC(_In_opt_ HWND)
WINE_UNICODE_INLINE WCHAR * strchrW(const WCHAR *str, WCHAR ch)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
HRESULT MSSTYLES_GetPropertyMargins(PTHEME_PROPERTY tp, RECT *prc, MARGINS *pMargins)
static PTHEME_CLASS MSSTYLES_AddClass(PTHEME_FILE tf, LPCWSTR pszAppName, LPCWSTR pszClassName)
PTHEME_PROPERTY properties
DWORD WINAPI GetLastError(VOID)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
HRESULT MSSTYLES_CloseThemeClass(PTHEME_CLASS tc)
GLint GLint GLint GLint GLint x
static PUXINI_FILE MSSTYLES_GetActiveThemeIni(PTHEME_FILE tf)
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
HRESULT MSSTYLES_ReferenceTheme(PTHEME_FILE tf)
static PTHEME_PROPERTY MSSTYLES_LFindProperty(PTHEME_PROPERTY tp, int iPropertyPrimitive, int iPropertyId)
struct _THEME_PARTSTATE * next
#define MAX_THEME_CLASS_NAME
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
struct _THEME_PROPERTY * next
LPCWSTR UXINI_GetNextSection(PUXINI_FILE uf, DWORD *dwLen)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
static const WCHAR version[]
BOOL MSSTYLES_LookupProperty(LPCWSTR pszPropertyName, int *dwPrimitive, int *dwId)
static PTHEME_PROPERTY MSSTYLES_AddProperty(PTHEME_PARTSTATE ps, int iPropertyPrimitive, int iPropertyId, LPCWSTR lpValue, DWORD dwValueLen, BOOL isGlobal)
HRESULT MSSTYLES_GetPropertyBool(PTHEME_PROPERTY tp, BOOL *pfVal)
PTHEME_CLASS MSSTYLES_OpenThemeClass(PTHEME_FILE tf, LPCWSTR pszAppName, LPCWSTR pszClassList)
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
HBITMAP MSSTYLES_LoadBitmap(PTHEME_CLASS tc, LPCWSTR lpFilename, BOOL *hasAlpha)
static PTHEME_CLASS MSSTYLES_FindClass(PTHEME_FILE tf, LPCWSTR pszAppName, LPCWSTR pszClassName)
static const WCHAR szClassName[]
#define E_PROP_ID_UNSUPPORTED
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
void UXINI_CloseINI(PUXINI_FILE uf)
HRESULT MSSTYLES_OpenThemeFile(LPCWSTR lpThemeFile, LPCWSTR pszColorName, LPCWSTR pszSizeName, PTHEME_FILE *tf)
#define LOCALE_SYSTEM_DEFAULT
struct _THEME_CLASS * next
PUXINI_FILE MSSTYLES_GetThemeIni(PTHEME_FILE tf)
#define MAX_THEME_APP_NAME
PTHEME_PARTSTATE MSSTYLES_FindPartState(PTHEME_CLASS tc, int iPartId, int iStateId, PTHEME_CLASS *tcNext)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
static const WCHAR szThemesIniResource[]
HRESULT MSSTYLES_GetPropertyColor(PTHEME_PROPERTY tp, COLORREF *pColor)
#define MAX_THEME_VALUE_NAME
HRESULT MSSTYLES_GetPropertyRect(PTHEME_PROPERTY tp, RECT *pRect)
WCHAR szClassName[MAX_THEME_CLASS_NAME]
LPCWSTR UXINI_GetNextValue(PUXINI_FILE uf, DWORD *dwNameLen, LPCWSTR *lpValue, DWORD *dwValueLen)
static HRESULT MSSTYLES_GetFont(LPCWSTR lpCur, LPCWSTR lpEnd, LPCWSTR *lpValEnd, LOGFONTW *pFont)
#define LOAD_LIBRARY_AS_DATAFILE
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
void MSSTYLES_ParseThemeIni(PTHEME_FILE tf)
static PTHEME_PARTSTATE MSSTYLES_AddPartState(PTHEME_CLASS tc, int iPartId, int iStateId)
static unsigned __int64 next
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HRESULT MSSTYLES_GetPropertyFont(PTHEME_PROPERTY tp, HDC hdc, LOGFONTW *pFont)
HRESULT MSSTYLES_GetPropertyInt(PTHEME_PROPERTY tp, int *piVal)
PUXINI_FILE UXINI_LoadINI(HMODULE hTheme, LPCWSTR lpName)
static PTHEME_PROPERTY MSSTYLES_PSFindProperty(PTHEME_PARTSTATE ps, int iPropertyPrimitive, int iPropertyId)
#define LR_CREATEDIBSECTION
static BOOL MSSTYLES_GetNextInteger(LPCWSTR lpStringStart, LPCWSTR lpStringEnd, LPCWSTR *lpValEnd, int *value)
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
GLint GLint GLint GLint GLint GLint y
WCHAR lfFaceName[LF_FACESIZE]
HRESULT MSSTYLES_GetPropertyString(PTHEME_PROPERTY tp, LPWSTR pszBuff, int cchMaxBuffChars)
static BOOL prepare_alpha(HBITMAP bmp, BOOL *hasAlpha)
BOOL MSSTYLES_LookupPartState(LPCWSTR pszClass, LPCWSTR pszPart, LPCWSTR pszState, int *iPartId, int *iStateId)
#define MAKEINTRESOURCEW(i)
static PTHEME_PROPERTY MSSTYLES_AddMetric(PTHEME_FILE tf, int iPropertyPrimitive, int iPropertyId, LPCWSTR lpValue, DWORD dwValueLen)
GLboolean GLboolean GLboolean GLboolean a
HRESULT MSSTYLES_GetPropertyPosition(PTHEME_PROPERTY tp, POINT *pPoint)
void MSSTYLES_CloseThemeFile(PTHEME_FILE tf)
#define HeapFree(x, y, z)
HRESULT MSSTYLES_GetPropertyIntList(PTHEME_PROPERTY tp, INTLIST *pIntList)