Mark Harmstone : comctl32: Fix clipping error with themed groupboxes.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Feb 9 09:54:48 CST 2015
Module: wine
Branch: master
Commit: 26896f1bd519e6189f027b160849d16fb5992fa9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=26896f1bd519e6189f027b160849d16fb5992fa9
Author: Mark Harmstone <hellas at burntcomma.com>
Date: Sat Feb 7 13:48:32 2015 +0000
comctl32: Fix clipping error with themed groupboxes.
---
dlls/comctl32/theme_button.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/theme_button.c b/dlls/comctl32/theme_button.c
index 01f16fb..78d7cc4 100644
--- a/dlls/comctl32/theme_button.c
+++ b/dlls/comctl32/theme_button.c
@@ -31,6 +31,10 @@
#include "vssym32.h"
#include "comctl32.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(theme_button);
+
#define BUTTON_TYPE 0x0f /* bit mask for the available button types */
/* These are indices into a states array to determine the theme state for a given theme part. */
@@ -179,10 +183,23 @@ static void GB_draw(HTHEME theme, HWND hwnd, HDC hDC, ButtonState drawState, UIN
static const int states[] = { GBS_NORMAL, GBS_DISABLED, GBS_NORMAL, GBS_NORMAL, GBS_NORMAL };
RECT bgRect, textRect, contentRect;
- HFONT font = (HFONT)SendMessageW(hwnd, WM_GETFONT, 0, 0);
- HFONT hPrevFont = font ? SelectObject(hDC, font) : NULL;
int state = states[ drawState ];
WCHAR *text = get_button_text(hwnd);
+ LOGFONTW lf;
+ HFONT font, hPrevFont = NULL;
+ BOOL created_font = FALSE;
+
+ HRESULT hr = GetThemeFont(theme, hDC, BP_GROUPBOX, state, TMT_FONT, &lf);
+ if (SUCCEEDED(hr)) {
+ font = CreateFontIndirectW(&lf);
+ if (!font)
+ TRACE("Failed to create font\n");
+ else {
+ hPrevFont = SelectObject(hDC, font);
+ created_font = TRUE;
+ }
+ } else
+ font = (HFONT)SendMessageW(hwnd, WM_GETFONT, 0, 0);
GetClientRect(hwnd, &bgRect);
textRect = bgRect;
@@ -216,6 +233,7 @@ static void GB_draw(HTHEME theme, HWND hwnd, HDC hDC, ButtonState drawState, UIN
HeapFree(GetProcessHeap(), 0, text);
}
+ if (created_font) DeleteObject(font);
if (hPrevFont) SelectObject(hDC, hPrevFont);
}
More information about the wine-cvs
mailing list