Index: dll/win32/uxtheme/draw.c =================================================================== --- dll/win32/uxtheme/draw.c (revision 68608) +++ dll/win32/uxtheme/draw.c (working copy) @@ -1617,9 +1617,30 @@ * DrawThemeText (UXTHEME.@) */ HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, - LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, - DWORD dwTextFlags2, const RECT *pRect) + LPCWSTR pszText, int iCharCount, DWORD flags, + DWORD flags2, const RECT *pRect) { + DTTOPTS opts; + RECT rt; + + TRACE("%d %d\n", iPartId, iStateId); + + CopyRect(&rt, pRect); + + opts.dwSize = sizeof(opts); + if (flags2 & DTT_GRAYED) { + opts.dwFlags = DTT_TEXTCOLOR; + opts.crText = GetSysColor(COLOR_GRAYTEXT); + } + return DrawThemeTextEx(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, flags, &rt, &opts); +} + +/*********************************************************************** + * DrawThemeTextEx (UXTHEME.@) + */ +HRESULT WINAPI DrawThemeTextEx(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, + LPCWSTR pszText, int iCharCount, DWORD flags, RECT *rect, const DTTOPTS *options) +{ HRESULT hr; HFONT hFont = NULL; HGDIOBJ oldFont = NULL; @@ -1627,11 +1648,15 @@ COLORREF textColor; COLORREF oldTextColor; int oldBkMode; - RECT rt; - - TRACE("%d %d: stub\n", iPartId, iStateId); + + TRACE("%p %p %d %d %s:%d 0x%08x %p %p\n", hTheme, hdc, iPartId, iStateId, + debugstr_wn(pszText, iCharCount), iCharCount, flags, rect, options); + if(!hTheme) return E_HANDLE; + + if (options->dwFlags & ~DTT_TEXTCOLOR) + FIXME("unsupported flags 0x%08x\n", options->dwFlags); hr = GetThemeFont(hTheme, hdc, iPartId, iStateId, TMT_FONT, &logfont); if(SUCCEEDED(hr)) { @@ -1639,12 +1664,12 @@ if(!hFont) TRACE("Failed to create font\n"); } - CopyRect(&rt, pRect); + if(hFont) oldFont = SelectObject(hdc, hFont); - - if(dwTextFlags2 & DTT_GRAYED) - textColor = GetSysColor(COLOR_GRAYTEXT); + + if (options->dwFlags & DTT_TEXTCOLOR) + textColor = options->crText; else { if(FAILED(GetThemeColor(hTheme, iPartId, iStateId, TMT_TEXTCOLOR, &textColor))) textColor = GetTextColor(hdc); @@ -1651,7 +1676,7 @@ } oldTextColor = SetTextColor(hdc, textColor); oldBkMode = SetBkMode(hdc, TRANSPARENT); - DrawTextW(hdc, pszText, iCharCount, &rt, dwTextFlags); + DrawTextW(hdc, pszText, iCharCount, rect, flags); SetBkMode(hdc, oldBkMode); SetTextColor(hdc, oldTextColor); Index: dll/win32/uxtheme/uxtheme.spec =================================================================== --- dll/win32/uxtheme/uxtheme.spec (revision 68608) +++ dll/win32/uxtheme/uxtheme.spec (working copy) @@ -37,59 +37,60 @@ 37 stdcall DrawThemeIcon(ptr ptr long long ptr ptr long) 38 stdcall DrawThemeParentBackground(ptr ptr ptr) 39 stdcall DrawThemeText(ptr ptr long long wstr long long long ptr) -40 stdcall EnableThemeDialogTexture(ptr long) -41 stdcall EnableTheming(long) -42 stdcall GetCurrentThemeName(wstr long wstr long wstr long) -43 stdcall -noname ClassicGetSystemMetrics(long) -44 stdcall -noname ClassicSystemParametersInfoA(long long ptr long) -45 stdcall -noname ClassicSystemParametersInfoW(long long ptr long) -46 stdcall -noname ClassicAdjustWindowRectEx(ptr long long long) -47 stdcall DrawThemeBackgroundEx(ptr ptr long long ptr ptr) -48 stub -noname GetThemeParseErrorInfo -49 stdcall GetThemeAppProperties() -50 stdcall GetThemeBackgroundContentRect(ptr ptr long long ptr ptr) -51 stdcall GetThemeBackgroundExtent(ptr ptr long long ptr ptr) -52 stdcall GetThemeBackgroundRegion(ptr ptr long long ptr ptr) -53 stdcall GetThemeBool(ptr long long long ptr) -54 stdcall GetThemeColor(ptr long long long ptr) -55 stdcall GetThemeDocumentationProperty(wstr wstr wstr long) -56 stdcall GetThemeEnumValue(ptr long long long ptr) -57 stdcall GetThemeFilename(ptr long long long wstr long) -58 stdcall GetThemeFont(ptr ptr long long long ptr) -59 stdcall GetThemeInt(ptr long long long ptr) -60 stub -noname CreateThemeDataFromObjects -61 stdcall -noname OpenThemeDataEx(ptr wstr long) -62 stub -noname ServerClearStockObjects -63 stub -noname MarkSelection -#64 ProcessLoadTheme_RunDLLW -#65 SetSystemVisualStyle -#66 ServiceClearStockObjects -67 stdcall GetThemeIntList(ptr long long long ptr) -68 stdcall GetThemeMargins(ptr ptr long long long ptr ptr) -69 stdcall GetThemeMetric(ptr ptr long long long ptr) -70 stdcall GetThemePartSize(ptr ptr long long ptr long ptr) -71 stdcall GetThemePosition(ptr long long long ptr) -72 stdcall GetThemePropertyOrigin(ptr long long long ptr) -#73 IsThemeActiveByPolicy -74 stdcall GetThemeRect(ptr long long long ptr) -75 stdcall GetThemeString(ptr long long long wstr long) -76 stdcall GetThemeSysBool(ptr long) -77 stdcall GetThemeSysColor(ptr long) -78 stdcall GetThemeSysColorBrush(ptr long) -79 stdcall GetThemeSysFont(ptr long ptr) -80 stdcall GetThemeSysInt(ptr long ptr) -81 stdcall GetThemeSysSize(ptr long) -82 stdcall GetThemeSysString(ptr long wstr long) -83 stdcall GetThemeTextExtent(ptr ptr long long wstr long long ptr ptr) -84 stdcall GetThemeTextMetrics(ptr ptr long long ptr) -85 stdcall GetWindowTheme(ptr) -86 stdcall HitTestThemeBackground(ptr long long long long ptr long double ptr) -87 stdcall IsAppThemed() -88 stdcall IsThemeActive() -89 stdcall IsThemeBackgroundPartiallyTransparent(ptr long long) -90 stdcall IsThemeDialogTextureEnabled(ptr) -91 stdcall IsThemePartDefined(ptr long long) -92 stdcall OpenThemeData(ptr wstr) -93 stdcall SetThemeAppProperties(long) -94 stdcall SetWindowTheme(ptr wstr wstr) -95 stdcall ThemeInitApiHook(long ptr) +40 stdcall DrawThemeTextEx(ptr ptr long long wstr long long ptr ptr) +41 stdcall EnableThemeDialogTexture(ptr long) +42 stdcall EnableTheming(long) +43 stdcall GetCurrentThemeName(wstr long wstr long wstr long) +44 stdcall -noname ClassicGetSystemMetrics(long) +45 stdcall -noname ClassicSystemParametersInfoA(long long ptr long) +46 stdcall -noname ClassicSystemParametersInfoW(long long ptr long) +47 stdcall -noname ClassicAdjustWindowRectEx(ptr long long long) +48 stdcall DrawThemeBackgroundEx(ptr ptr long long ptr ptr) +49 stub -noname GetThemeParseErrorInfo +50 stdcall GetThemeAppProperties() +51 stdcall GetThemeBackgroundContentRect(ptr ptr long long ptr ptr) +52 stdcall GetThemeBackgroundExtent(ptr ptr long long ptr ptr) +53 stdcall GetThemeBackgroundRegion(ptr ptr long long ptr ptr) +54 stdcall GetThemeBool(ptr long long long ptr) +55 stdcall GetThemeColor(ptr long long long ptr) +56 stdcall GetThemeDocumentationProperty(wstr wstr wstr long) +57 stdcall GetThemeEnumValue(ptr long long long ptr) +58 stdcall GetThemeFilename(ptr long long long wstr long) +59 stdcall GetThemeFont(ptr ptr long long long ptr) +60 stdcall GetThemeInt(ptr long long long ptr) +61 stub -noname CreateThemeDataFromObjects +62 stdcall -noname OpenThemeDataEx(ptr wstr long) +63 stub -noname ServerClearStockObjects +64 stub -noname MarkSelection +#65 ProcessLoadTheme_RunDLLW +#66 SetSystemVisualStyle +#67 ServiceClearStockObjects +68 stdcall GetThemeIntList(ptr long long long ptr) +69 stdcall GetThemeMargins(ptr ptr long long long ptr ptr) +70 stdcall GetThemeMetric(ptr ptr long long long ptr) +71 stdcall GetThemePartSize(ptr ptr long long ptr long ptr) +72 stdcall GetThemePosition(ptr long long long ptr) +73 stdcall GetThemePropertyOrigin(ptr long long long ptr) +#74 IsThemeActiveByPolicy +75 stdcall GetThemeRect(ptr long long long ptr) +76 stdcall GetThemeString(ptr long long long wstr long) +77 stdcall GetThemeSysBool(ptr long) +78 stdcall GetThemeSysColor(ptr long) +79 stdcall GetThemeSysColorBrush(ptr long) +80 stdcall GetThemeSysFont(ptr long ptr) +81 stdcall GetThemeSysInt(ptr long ptr) +82 stdcall GetThemeSysSize(ptr long) +83 stdcall GetThemeSysString(ptr long wstr long) +84 stdcall GetThemeTextExtent(ptr ptr long long wstr long long ptr ptr) +85 stdcall GetThemeTextMetrics(ptr ptr long long ptr) +86 stdcall GetWindowTheme(ptr) +87 stdcall HitTestThemeBackground(ptr long long long long ptr long double ptr) +88 stdcall IsAppThemed() +89 stdcall IsThemeActive() +90 stdcall IsThemeBackgroundPartiallyTransparent(ptr long long) +91 stdcall IsThemeDialogTextureEnabled(ptr) +92 stdcall IsThemePartDefined(ptr long long) +93 stdcall OpenThemeData(ptr wstr) +94 stdcall SetThemeAppProperties(long) +95 stdcall SetWindowTheme(ptr wstr wstr) +96 stdcall ThemeInitApiHook(long ptr) Index: include/psdk/uxtheme.h =================================================================== --- include/psdk/uxtheme.h (revision 68608) +++ include/psdk/uxtheme.h (working copy) @@ -37,6 +37,44 @@ #define OTD_NONCLIENT 0x0002 #define OTD_VALIDBITS (OTD_FORCE_RECT_SIZING | OTD_NONCLIENT) +/* DTTOPTS.dwFlags bits */ +#define DTT_TEXTCOLOR 0x00000001 +#define DTT_BORDERCOLOR 0x00000002 +#define DTT_SHADOWCOLOR 0x00000004 +#define DTT_SHADOWTYPE 0x00000008 +#define DTT_SHADOWOFFSET 0x00000010 +#define DTT_BORDERSIZE 0x00000020 +#define DTT_FONTPROP 0x00000040 +#define DTT_COLORPROP 0x00000080 +#define DTT_STATEID 0x00000100 +#define DTT_CALCRECT 0x00000200 +#define DTT_APPLYOVERLAY 0x00000400 +#define DTT_GLOWSIZE 0x00000800 +#define DTT_CALLBACK 0x00001000 +#define DTT_COMPOSITED 0x00002000 +#define DTT_VALIDBITS 0x00003fff + +typedef int (WINAPI *DTT_CALLBACK_PROC)(HDC,LPWSTR,int,RECT*,UINT,LPARAM); + +typedef struct _DTTOPTS { + DWORD dwSize; + DWORD dwFlags; + COLORREF crText; + COLORREF crBorder; + COLORREF crShadow; + int iTextShadowType; + POINT ptShadowOffset; + int iBorderSize; + int iFontPropId; + int iColorPropId; + int iStateId; + BOOL fApplyOverlay; + int iGlowSize; + DTT_CALLBACK_PROC pfnDrawTextCallback; + LPARAM lParam; +} DTTOPTS, *PDTTOPTS; + + typedef HANDLE HPAINTBUFFER; typedef HANDLE HTHEME; @@ -97,6 +135,7 @@ HRESULT WINAPI DrawThemeIcon(HTHEME,HDC,int,int,const RECT*,HIMAGELIST,int); HRESULT WINAPI DrawThemeParentBackground(HWND,HDC,RECT*); HRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD,const RECT*); +HRESULT WINAPI DrawThemeTextEx(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,RECT*,const DTTOPTS*); HRESULT WINAPI EnableThemeDialogTexture(HWND,DWORD); HRESULT WINAPI EnableTheming(BOOL); HRESULT WINAPI GetCurrentThemeName(LPWSTR,int,LPWSTR,int,LPWSTR,int);