2 * Unit test suite for comdlg32 API functions: font dialogs
4 * Copyright 2009 Vincent Povirk for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26 static int get_dpiy(void)
32 result
= GetDeviceCaps(hdc
, LOGPIXELSY
);
38 static HDC
get_printer_ic(void)
40 PRINTER_INFO_2A
*info
;
41 DWORD info_size
, num_printers
=0;
45 EnumPrintersA(PRINTER_ENUM_LOCAL
, NULL
, 2, NULL
, 0, &info_size
, &num_printers
);
50 info
= HeapAlloc(GetProcessHeap(), 0, info_size
);
52 ret
= EnumPrintersA(PRINTER_ENUM_LOCAL
, NULL
, 2, (LPBYTE
)info
, info_size
, &info_size
, &num_printers
);
55 result
= CreateICA(info
->pDriverName
, info
->pPrinterName
, NULL
, NULL
);
57 HeapFree(GetProcessHeap(), 0, info
);
62 static UINT_PTR CALLBACK
CFHookProcOK(HWND hdlg
, UINT msg
, WPARAM wparam
, LPARAM lparam
)
67 PostMessageA(hdlg
, WM_COMMAND
, IDOK
, FALSE
);
74 static void test_ChooseFontA(void)
79 int dpiy
= get_dpiy();
80 int expected_pointsize
, expected_lfheight
;
83 memset(&lfa
, 0, sizeof(LOGFONTA
));
85 lfa
.lfWeight
= FW_NORMAL
;
86 strcpy(lfa
.lfFaceName
, "Symbol");
88 memset(&cfa
, 0, sizeof(CHOOSEFONTA
));
89 cfa
.lStructSize
= sizeof(cfa
);
91 cfa
.Flags
= CF_ENABLEHOOK
|CF_INITTOLOGFONTSTRUCT
|CF_SCREENFONTS
;
92 cfa
.lpfnHook
= CFHookProcOK
;
94 ret
= ChooseFontA(&cfa
);
96 expected_pointsize
= MulDiv(16, 72, dpiy
) * 10;
97 expected_lfheight
= -MulDiv(expected_pointsize
, dpiy
, 720);
99 ok(ret
== TRUE
, "ChooseFontA returned FALSE\n");
100 ok(cfa
.iPointSize
== expected_pointsize
, "Expected %i, got %i\n", expected_pointsize
, cfa
.iPointSize
);
101 ok(lfa
.lfHeight
== expected_lfheight
, "Expected %i, got %i\n", expected_lfheight
, lfa
.lfHeight
);
102 ok(lfa
.lfWeight
== FW_NORMAL
, "Expected FW_NORMAL, got %i\n", lfa
.lfWeight
);
103 ok(strcmp(lfa
.lfFaceName
, "Symbol") == 0, "Expected Symbol, got %s\n", lfa
.lfFaceName
);
105 printer_ic
= get_printer_ic();
107 skip("can't get a DC for a local printer\n");
110 memset(&lfa
, 0, sizeof(LOGFONTA
));
112 lfa
.lfWeight
= FW_NORMAL
;
113 strcpy(lfa
.lfFaceName
, "Symbol");
115 memset(&cfa
, 0, sizeof(CHOOSEFONTA
));
116 cfa
.lStructSize
= sizeof(cfa
);
117 cfa
.lpLogFont
= &lfa
;
118 cfa
.Flags
= CF_ENABLEHOOK
|CF_INITTOLOGFONTSTRUCT
|CF_PRINTERFONTS
;
119 cfa
.hDC
= printer_ic
;
120 cfa
.lpfnHook
= CFHookProcOK
;
122 ret
= ChooseFontA(&cfa
);
124 expected_pointsize
= MulDiv(16, 72, dpiy
) * 10;
125 expected_lfheight
= -MulDiv(expected_pointsize
, dpiy
, 720);
127 ok(ret
== TRUE
, "ChooseFontA returned FALSE\n");
128 ok(cfa
.iPointSize
== expected_pointsize
, "Expected %i, got %i\n", expected_pointsize
, cfa
.iPointSize
);
129 ok(lfa
.lfHeight
== expected_lfheight
, "Expected %i, got %i\n", expected_lfheight
, lfa
.lfHeight
);
130 ok(lfa
.lfWeight
== FW_NORMAL
, "Expected FW_NORMAL, got %i\n", lfa
.lfWeight
);
131 ok((strcmp(lfa
.lfFaceName
, "Symbol") == 0) ||
132 broken(*lfa
.lfFaceName
== 0), "Expected Symbol, got %s\n", lfa
.lfFaceName
);
134 DeleteDC(printer_ic
);