Move tests from rosapps to rostests
[reactos.git] / rostests / tests / primitives / mk_font.cpp
1
2 // ------------------------------------------------------------------
3 // Windows 2000 Graphics API Black Book
4 // Chapter 4 - Utility functions
5 //
6 // Created by Damon Chandler <dmc27@ee.cornell.edu>
7 // Updates can be downloaded at: <www.coriolis.com>
8 //
9 // Please do not hesistate to e-mail me at dmc27@ee.cornell.edu
10 // if you have any questions about this code.
11 // ------------------------------------------------------------------
12
13 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
14 #include <windows.h>
15 #include <cassert>
16
17 #include "mk_font.h"
18 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
19
20 namespace font {
21
22 // creates a logical font
23 HFONT MakeFont(
24 IN HDC hDestDC, // handle to target DC
25 IN LPCSTR typeface_name, // font's typeface name
26 IN int point_size, // font's point size
27 IN const BYTE charset, // font's character set
28 IN const DWORD style // font's styles
29 )
30 {
31 //
32 // NOTE: On Windows 9x/Me, GetWorldTransform is not
33 // supported. For compatibility with these platforms you
34 // should initialize the XFORM::eM22 data member to 1.0.
35 //
36 XFORM xf = {0, 0, 0, 1.0, 0, 0};
37 GetWorldTransform(hDestDC, &xf);
38 int pixels_per_inch = GetDeviceCaps(hDestDC, LOGPIXELSY);
39
40 POINT PSize = {
41 0,
42 -MulDiv(static_cast<int>(xf.eM22 * point_size + 0.5),
43 pixels_per_inch, 72)
44 };
45
46 HFONT hResult = NULL;
47 if (DPtoLP(hDestDC, &PSize, 1))
48 {
49 LOGFONT lf;
50 memset(&lf, 0, sizeof(LOGFONT));
51
52 lf.lfHeight = PSize.y;
53 lf.lfCharSet = charset;
54 lstrcpyn(reinterpret_cast<LPTSTR>(&lf.lfFaceName),
55 typeface_name, LF_FACESIZE);
56
57 lf.lfWeight = (style & FS_BOLD) ? FW_BOLD : FW_DONTCARE;
58 lf.lfItalic = (style & FS_ITALIC) ? true : false;
59 lf.lfUnderline = (style & FS_UNDERLINE) ? true : false;
60 lf.lfStrikeOut = (style & FS_STRIKEOUT) ? true : false;
61
62 // create the logical font
63 hResult = CreateFontIndirect(&lf);
64 }
65 return hResult;
66 }
67 //-------------------------------------------------------------------------
68
69 } // namespace font