comctl32: statusbar: Change the height expression to one that seems to be the same as in Windows.
This commit is contained in:
parent
20a1ca2bbf
commit
f240b8f49e
|
@ -94,6 +94,7 @@ typedef struct
|
||||||
#define HORZ_BORDER 0
|
#define HORZ_BORDER 0
|
||||||
#define VERT_BORDER 2
|
#define VERT_BORDER 2
|
||||||
#define HORZ_GAP 2
|
#define HORZ_GAP 2
|
||||||
|
#define MIN_PANE_HEIGHT 18
|
||||||
|
|
||||||
static const WCHAR themeClass[] = { 'S','t','a','t','u','s',0 };
|
static const WCHAR themeClass[] = { 'S','t','a','t','u','s',0 };
|
||||||
|
|
||||||
|
@ -114,9 +115,11 @@ STATUSBAR_ComputeHeight(STATUS_INFO *infoPtr)
|
||||||
HTHEME theme;
|
HTHEME theme;
|
||||||
UINT height;
|
UINT height;
|
||||||
TEXTMETRICW tm;
|
TEXTMETRICW tm;
|
||||||
|
int margin;
|
||||||
|
|
||||||
COMCTL32_GetFontMetrics(infoPtr->hFont ? infoPtr->hFont : infoPtr->hDefaultFont, &tm);
|
COMCTL32_GetFontMetrics(infoPtr->hFont ? infoPtr->hFont : infoPtr->hDefaultFont, &tm);
|
||||||
height = tm.tmHeight + 4 + infoPtr->verticalBorder;
|
margin = (tm.tmInternalLeading ? tm.tmInternalLeading : 2);
|
||||||
|
height = max(tm.tmHeight + margin + 2*GetSystemMetrics(SM_CYBORDER), MIN_PANE_HEIGHT) + infoPtr->verticalBorder;
|
||||||
|
|
||||||
if ((theme = GetWindowTheme(infoPtr->Self)))
|
if ((theme = GetWindowTheme(infoPtr->Self)))
|
||||||
{
|
{
|
||||||
|
|
|
@ -106,12 +106,56 @@ static void test_create()
|
||||||
DestroyWindow(hwnd);
|
DestroyWindow(hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_setfont()
|
static int CALLBACK check_height_font_enumproc(ENUMLOGFONTEX *enumlf, NEWTEXTMETRICEX *ntm, DWORD type, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
HWND hwndStatus = (HWND)lParam;
|
||||||
|
HDC hdc = GetDC(NULL);
|
||||||
|
static const int sizes[] = {8, 9, 10, 12, 16, 22, 28, 36, 48, 72};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
trace("Font %s\n", enumlf->elfFullName);
|
||||||
|
for (i = 0; i < sizeof(sizes)/sizeof(sizes[0]); i++)
|
||||||
|
{
|
||||||
|
HFONT hFont;
|
||||||
|
TEXTMETRIC tm;
|
||||||
|
HFONT hCtrlFont;
|
||||||
|
HFONT hOldFont;
|
||||||
|
RECT rcCtrl;
|
||||||
|
|
||||||
|
enumlf->elfLogFont.lfHeight = sizes[i];
|
||||||
|
hFont = CreateFontIndirect(&enumlf->elfLogFont);
|
||||||
|
hCtrlFont = (HFONT)SendMessage(hwndStatus, WM_SETFONT, (WPARAM)hFont, TRUE);
|
||||||
|
hOldFont = SelectObject(hdc, hFont);
|
||||||
|
|
||||||
|
GetClientRect(hwndStatus, &rcCtrl);
|
||||||
|
GetTextMetrics(hdc, &tm);
|
||||||
|
expect(max(tm.tmHeight + (tm.tmInternalLeading ? tm.tmInternalLeading : 2) + 4, 20), rcCtrl.bottom);
|
||||||
|
|
||||||
|
SelectObject(hdc, hOldFont);
|
||||||
|
SendMessage(hwndStatus, WM_SETFONT, (WPARAM)hCtrlFont, TRUE);
|
||||||
|
DeleteObject(hFont);
|
||||||
|
}
|
||||||
|
ReleaseDC(NULL, hdc);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int CALLBACK check_height_family_enumproc(ENUMLOGFONTEX *enumlf, NEWTEXTMETRICEX *ntm, DWORD type, LPARAM lParam)
|
||||||
|
{
|
||||||
|
HDC hdc = GetDC(NULL);
|
||||||
|
enumlf->elfLogFont.lfHeight = 0;
|
||||||
|
EnumFontFamiliesEx(hdc, &enumlf->elfLogFont, (FONTENUMPROC)check_height_font_enumproc, lParam, 0);
|
||||||
|
ReleaseDC(NULL, hdc);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_height(void)
|
||||||
|
{
|
||||||
|
LOGFONT lf;
|
||||||
HFONT hFont;
|
HFONT hFont;
|
||||||
RECT rc1, rc2;
|
RECT rc1, rc2;
|
||||||
HWND hwndStatus = CreateWindow(SUBCLASS_NAME, NULL, WS_CHILD|WS_VISIBLE,
|
HWND hwndStatus = CreateWindow(SUBCLASS_NAME, NULL, WS_CHILD|WS_VISIBLE,
|
||||||
0, 0, 300, 20, g_hMainWnd, NULL, NULL, NULL);
|
0, 0, 300, 20, g_hMainWnd, NULL, NULL, NULL);
|
||||||
|
HDC hdc;
|
||||||
|
|
||||||
GetClientRect(hwndStatus, &rc1);
|
GetClientRect(hwndStatus, &rc1);
|
||||||
hFont = CreateFont(32, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
hFont = CreateFont(32, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||||
|
@ -122,7 +166,7 @@ static void test_setfont()
|
||||||
ok(g_wmsize_count > 0, "WM_SETFONT should issue WM_SIZE\n");
|
ok(g_wmsize_count > 0, "WM_SETFONT should issue WM_SIZE\n");
|
||||||
|
|
||||||
GetClientRect(hwndStatus, &rc2);
|
GetClientRect(hwndStatus, &rc2);
|
||||||
todo_wine expect_rect(0, 0, 672, 42, rc2);
|
todo_wine expect_rect(0, 0, 672, 42, rc2); /* GetTextMetrics returns invalid tmInternalLeading for this font */
|
||||||
|
|
||||||
g_wmsize_count = 0;
|
g_wmsize_count = 0;
|
||||||
SendMessage(hwndStatus, WM_SETFONT, (WPARAM)hFont, TRUE);
|
SendMessage(hwndStatus, WM_SETFONT, (WPARAM)hFont, TRUE);
|
||||||
|
@ -131,6 +175,14 @@ static void test_setfont()
|
||||||
GetClientRect(hwndStatus, &rc2);
|
GetClientRect(hwndStatus, &rc2);
|
||||||
todo_wine expect_rect(0, 0, 672, 42, rc2);
|
todo_wine expect_rect(0, 0, 672, 42, rc2);
|
||||||
|
|
||||||
|
/* test the height formula */
|
||||||
|
ZeroMemory(&lf, sizeof(lf));
|
||||||
|
SendMessage(hwndStatus, SB_SETMINHEIGHT, 0, 0);
|
||||||
|
hdc = GetDC(NULL);
|
||||||
|
trace("dpi=%d\n", GetDeviceCaps(hdc, LOGPIXELSY));
|
||||||
|
EnumFontFamiliesEx(hdc, &lf, (FONTENUMPROC)check_height_family_enumproc, (LPARAM)hwndStatus, 0);
|
||||||
|
ReleaseDC(NULL, hdc);
|
||||||
|
|
||||||
DestroyWindow(hwndStatus);
|
DestroyWindow(hwndStatus);
|
||||||
DeleteObject(hFont);
|
DeleteObject(hFont);
|
||||||
}
|
}
|
||||||
|
@ -294,5 +346,5 @@ START_TEST(status)
|
||||||
|
|
||||||
test_status_control();
|
test_status_control();
|
||||||
test_create();
|
test_create();
|
||||||
test_setfont();
|
test_height();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue