Commit 2bb581b9 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

uxtheme: Partial implementation of DrawThemeTextEx.

parent d86f2af3
...@@ -1633,8 +1633,29 @@ HRESULT WINAPI DrawThemeIcon(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, ...@@ -1633,8 +1633,29 @@ HRESULT WINAPI DrawThemeIcon(HTHEME hTheme, HDC hdc, int iPartId, int iStateId,
* DrawThemeText (UXTHEME.@) * DrawThemeText (UXTHEME.@)
*/ */
HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId,
LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, LPCWSTR pszText, int iCharCount, DWORD flags,
DWORD dwTextFlags2, const RECT *pRect) 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; HRESULT hr;
HFONT hFont = NULL; HFONT hFont = NULL;
...@@ -1643,11 +1664,15 @@ HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, ...@@ -1643,11 +1664,15 @@ HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId,
COLORREF textColor; COLORREF textColor;
COLORREF oldTextColor; COLORREF oldTextColor;
int oldBkMode; int oldBkMode;
RECT rt;
TRACE("%p %p %d %d %s:%d 0x%08x %p %p\n", hTheme, hdc, iPartId, iStateId,
TRACE("%d %d: stub\n", iPartId, iStateId); debugstr_wn(pszText, iCharCount), iCharCount, flags, rect, options);
if(!hTheme) if(!hTheme)
return E_HANDLE; 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); hr = GetThemeFont(hTheme, hdc, iPartId, iStateId, TMT_FONT, &logfont);
if(SUCCEEDED(hr)) { if(SUCCEEDED(hr)) {
...@@ -1655,19 +1680,19 @@ HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, ...@@ -1655,19 +1680,19 @@ HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId,
if(!hFont) if(!hFont)
TRACE("Failed to create font\n"); TRACE("Failed to create font\n");
} }
CopyRect(&rt, pRect);
if(hFont) if(hFont)
oldFont = SelectObject(hdc, hFont); oldFont = SelectObject(hdc, hFont);
if(dwTextFlags2 & DTT_GRAYED) if (options->dwFlags & DTT_TEXTCOLOR)
textColor = GetSysColor(COLOR_GRAYTEXT); textColor = options->crText;
else { else {
if(FAILED(GetThemeColor(hTheme, iPartId, iStateId, TMT_TEXTCOLOR, &textColor))) if(FAILED(GetThemeColor(hTheme, iPartId, iStateId, TMT_TEXTCOLOR, &textColor)))
textColor = GetTextColor(hdc); textColor = GetTextColor(hdc);
} }
oldTextColor = SetTextColor(hdc, textColor); oldTextColor = SetTextColor(hdc, textColor);
oldBkMode = SetBkMode(hdc, TRANSPARENT); oldBkMode = SetBkMode(hdc, TRANSPARENT);
DrawTextW(hdc, pszText, iCharCount, &rt, dwTextFlags); DrawTextW(hdc, pszText, iCharCount, rect, flags);
SetBkMode(hdc, oldBkMode); SetBkMode(hdc, oldBkMode);
SetTextColor(hdc, oldTextColor); SetTextColor(hdc, oldTextColor);
......
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
@ stdcall DrawThemeIcon(ptr ptr long long ptr ptr long) @ stdcall DrawThemeIcon(ptr ptr long long ptr ptr long)
@ stdcall DrawThemeParentBackground(ptr ptr ptr) @ stdcall DrawThemeParentBackground(ptr ptr ptr)
@ stdcall DrawThemeText(ptr ptr long long wstr long long long ptr) @ stdcall DrawThemeText(ptr ptr long long wstr long long long ptr)
@ stdcall DrawThemeTextEx(ptr ptr long long wstr long long ptr ptr)
@ stdcall EnableThemeDialogTexture(ptr long) @ stdcall EnableThemeDialogTexture(ptr long)
@ stdcall EnableTheming(long) @ stdcall EnableTheming(long)
@ stdcall EndBufferedAnimation(ptr long) @ stdcall EndBufferedAnimation(ptr long)
......
...@@ -53,6 +53,46 @@ HRESULT WINAPI DrawThemeParentBackground(HWND,HDC,RECT*); ...@@ -53,6 +53,46 @@ HRESULT WINAPI DrawThemeParentBackground(HWND,HDC,RECT*);
HRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD, HRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD,
const RECT*); const RECT*);
/* 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;
HRESULT WINAPI DrawThemeTextEx(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,RECT*,
const DTTOPTS*);
#define ETDT_DISABLE 0x00000001 #define ETDT_DISABLE 0x00000001
#define ETDT_ENABLE 0x00000002 #define ETDT_ENABLE 0x00000002
#define ETDT_USETABTEXTURE 0x00000004 #define ETDT_USETABTEXTURE 0x00000004
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment