user32: Handle magic font size 0x7fff in dialog templates correctly.
This commit is contained in:
parent
2dc78e555b
commit
9096368b6a
|
@ -436,6 +436,21 @@ static LPCSTR DIALOG_ParseTemplate32( LPCSTR template, DLG_TEMPLATE * result )
|
|||
{
|
||||
result->pointSize = GET_WORD(p);
|
||||
p++;
|
||||
|
||||
/* If pointSize is 0x7fff, it means that we need to use the font
|
||||
* in NONCLIENTMETRICSW.lfMessageFont, and NOT read the weight,
|
||||
* italic, and facename from the dialog template.
|
||||
*/
|
||||
if (result->pointSize == 0x7fff)
|
||||
{
|
||||
/* We could call SystemParametersInfo here, but then we'd have
|
||||
* to convert from pixel size to point size (which can be
|
||||
* imprecise).
|
||||
*/
|
||||
TRACE(" FONT: Using message box font\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (result->dialogEx)
|
||||
{
|
||||
result->weight = GET_WORD(p); p++;
|
||||
|
@ -443,10 +458,12 @@ static LPCSTR DIALOG_ParseTemplate32( LPCSTR template, DLG_TEMPLATE * result )
|
|||
}
|
||||
result->faceName = p;
|
||||
p += strlenW( result->faceName ) + 1;
|
||||
|
||||
TRACE(" FONT %d, %s, %d, %s\n",
|
||||
result->pointSize, debugstr_w( result->faceName ),
|
||||
result->weight, result->italic ? "TRUE" : "FALSE" );
|
||||
}
|
||||
}
|
||||
|
||||
/* First control is on dword boundary */
|
||||
return (LPCSTR)(((UINT_PTR)p + 3) & ~3);
|
||||
|
@ -491,17 +508,32 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
|
|||
/* Create custom font if needed */
|
||||
|
||||
if (template.style & DS_SETFONT)
|
||||
{
|
||||
HDC dc = GetDC(0);
|
||||
|
||||
if (template.pointSize == 0x7fff)
|
||||
{
|
||||
/* We get the message font from the non-client metrics */
|
||||
NONCLIENTMETRICSW ncMetrics;
|
||||
|
||||
ncMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
|
||||
if (SystemParametersInfoW(SPI_GETNONCLIENTMETRICS,
|
||||
sizeof(NONCLIENTMETRICSW), &ncMetrics, 0))
|
||||
{
|
||||
hUserFont = CreateFontIndirectW( &ncMetrics.lfMessageFont );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We convert the size to pixels and then make it -ve. This works
|
||||
* for both +ve and -ve template.pointSize */
|
||||
HDC dc;
|
||||
int pixels;
|
||||
dc = GetDC(0);
|
||||
pixels = MulDiv(template.pointSize, GetDeviceCaps(dc , LOGPIXELSY), 72);
|
||||
int pixels = MulDiv(template.pointSize, GetDeviceCaps(dc , LOGPIXELSY), 72);
|
||||
hUserFont = CreateFontW( -pixels, 0, 0, 0, template.weight,
|
||||
template.italic, FALSE, FALSE, DEFAULT_CHARSET, 0, 0,
|
||||
PROOF_QUALITY, FF_DONTCARE,
|
||||
template.faceName );
|
||||
}
|
||||
|
||||
if (hUserFont)
|
||||
{
|
||||
SIZE charSize;
|
||||
|
|
|
@ -999,7 +999,7 @@ static void test_MessageBoxFontTest(void)
|
|||
hDlg = CreateDialogIndirectParamW(g_hinst, (LPCDLGTEMPLATE)dlgTemplate, NULL, messageBoxFontDlgWinProc, 0);
|
||||
if (!hDlg)
|
||||
{
|
||||
todo_wine win_skip("dialog wasn't created\n");
|
||||
win_skip("dialog wasn't created\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue