ReactOS  0.4.15-dev-1150-g593bcce
CreateFontIndirect.c File Reference
#include "precomp.h"
Include dependency graph for CreateFontIndirect.c:

Go to the source code of this file.

Classes

struct  FONT_SEL_TEST
 

Macros

#define trace_if(val, msg)   do { if (!(val)) trace(msg); } while (0)
 
#define _TMPF_VAR_PITCH   TMPF_FIXED_PITCH
 
#define _TMPF_VAR_PITCH   TMPF_FIXED_PITCH
 

Typedefs

typedef enum TRISTATE TRISTATE
 
typedef struct FONT_SEL_TEST FONT_SEL_TEST
 

Enumerations

enum  TRISTATE { TS_UNKNOWN, TS_TRUE, TS_FALSE }
 

Functions

void Test_CreateFontIndirectA (void)
 
void Test_CreateFontIndirectW (void)
 
void Test_CreateFontIndirectExA (void)
 
void Test_CreateFontIndirectExW (void)
 
static INT CALLBACK is_truetype_font_proc (const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
 
static BOOL is_truetype_font_installed (HDC hDC, const char *name)
 
static INT CALLBACK is_charset_font_proc (const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
 
static BOOL is_charset_font_installed (HDC hDC, BYTE CharSet)
 
static INT CALLBACK is_fixed_charset_font_proc (const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
 
static BOOL is_fixed_charset_font_installed (HDC hDC, BYTE CharSet)
 
static void Test_FontPresence (void)
 
static void Test_FontSelectionEntry (HDC hDC, UINT nIndex, FONT_SEL_TEST *Entry)
 
static void Test_FontSelection (void)
 
 START_TEST (CreateFontIndirect)
 

Variables

static FONT_SEL_TEST g_Entries []
 

Macro Definition Documentation

◆ _TMPF_VAR_PITCH [1/2]

#define _TMPF_VAR_PITCH   TMPF_FIXED_PITCH

Definition at line 288 of file CreateFontIndirect.c.

◆ _TMPF_VAR_PITCH [2/2]

#define _TMPF_VAR_PITCH   TMPF_FIXED_PITCH

Definition at line 288 of file CreateFontIndirect.c.

◆ trace_if

#define trace_if (   val,
  msg 
)    do { if (!(val)) trace(msg); } while (0)

Definition at line 11 of file CreateFontIndirect.c.

Typedef Documentation

◆ FONT_SEL_TEST

◆ TRISTATE

Enumeration Type Documentation

◆ TRISTATE

Enumerator
TS_UNKNOWN 
TS_TRUE 
TS_FALSE 

Definition at line 290 of file CreateFontIndirect.c.

Function Documentation

◆ is_charset_font_installed()

static BOOL is_charset_font_installed ( HDC  hDC,
BYTE  CharSet 
)
static

Definition at line 200 of file CreateFontIndirect.c.

201 {
202  LOGFONT lf;
203  ZeroMemory(&lf, sizeof(lf));
206  return TRUE;
207  return FALSE;
208 }
#define TRUE
Definition: types.h:120
#define ZeroMemory
Definition: winbase.h:1648
BYTE lfCharSet
Definition: dimm.idl:50
#define DEFAULT_CHARSET
Definition: wingdi.h:383
static void CharSet(RTF_Info *info)
Definition: reader.c:2420
#define FALSE
Definition: types.h:117
static HDC hDC
Definition: 3dtext.c:33
static INT CALLBACK is_charset_font_proc(const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
int WINAPI EnumFontFamiliesExA(_In_ HDC, _In_ PLOGFONTA, _In_ FONTENUMPROCA, _In_ LPARAM, _In_ DWORD)

Referenced by Test_FontPresence(), and Test_FontSelection().

◆ is_charset_font_proc()

static INT CALLBACK is_charset_font_proc ( const LOGFONTA elf,
const TEXTMETRICA ntm,
DWORD  type,
LPARAM  lParam 
)
static

Definition at line 192 of file CreateFontIndirect.c.

194 {
195  if (ntm->tmCharSet == (BYTE)lParam)
196  return 0;
197  return 1;
198 }
BYTE tmCharSet
Definition: wingdi.h:2379
unsigned char BYTE
Definition: xxhash.c:193
LPARAM lParam
Definition: combotst.c:139

Referenced by is_charset_font_installed().

◆ is_fixed_charset_font_installed()

static BOOL is_fixed_charset_font_installed ( HDC  hDC,
BYTE  CharSet 
)
static

Definition at line 223 of file CreateFontIndirect.c.

224 {
225  LOGFONT lf;
226  ZeroMemory(&lf, sizeof(lf));
229  return TRUE;
230  return FALSE;
231 }
#define TRUE
Definition: types.h:120
#define ZeroMemory
Definition: winbase.h:1648
BYTE lfCharSet
Definition: dimm.idl:50
#define DEFAULT_CHARSET
Definition: wingdi.h:383
static INT CALLBACK is_fixed_charset_font_proc(const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
static void CharSet(RTF_Info *info)
Definition: reader.c:2420
#define FALSE
Definition: types.h:117
static HDC hDC
Definition: 3dtext.c:33
int WINAPI EnumFontFamiliesExA(_In_ HDC, _In_ PLOGFONTA, _In_ FONTENUMPROCA, _In_ LPARAM, _In_ DWORD)

Referenced by Test_FontPresence().

◆ is_fixed_charset_font_proc()

static INT CALLBACK is_fixed_charset_font_proc ( const LOGFONTA elf,
const TEXTMETRICA ntm,
DWORD  type,
LPARAM  lParam 
)
static

Definition at line 214 of file CreateFontIndirect.c.

216 {
217  if (ntm->tmCharSet == (BYTE)lParam && !(ntm->tmPitchAndFamily & _TMPF_VAR_PITCH))
218  return 0;
219  return 1;
220 }
#define _TMPF_VAR_PITCH
BYTE tmPitchAndFamily
Definition: wingdi.h:2378
BYTE tmCharSet
Definition: wingdi.h:2379
unsigned char BYTE
Definition: xxhash.c:193
LPARAM lParam
Definition: combotst.c:139

Referenced by is_fixed_charset_font_installed().

◆ is_truetype_font_installed()

static BOOL is_truetype_font_installed ( HDC  hDC,
const char name 
)
static

Definition at line 180 of file CreateFontIndirect.c.

181 {
182  LOGFONT lf;
183  ZeroMemory(&lf, sizeof(lf));
185  lstrcpy(lf.lfFaceName, name);
187  return TRUE;
188  return FALSE;
189 }
#define TRUE
Definition: types.h:120
#define ZeroMemory
Definition: winbase.h:1648
BYTE lfCharSet
Definition: dimm.idl:50
#define DEFAULT_CHARSET
Definition: wingdi.h:383
#define FALSE
Definition: types.h:117
static HDC hDC
Definition: 3dtext.c:33
#define lstrcpy
Definition: winbase.h:3714
static INT CALLBACK is_truetype_font_proc(const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
Definition: name.c:38
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
int WINAPI EnumFontFamiliesExA(_In_ HDC, _In_ PLOGFONTA, _In_ FONTENUMPROCA, _In_ LPARAM, _In_ DWORD)

Referenced by Test_FontPresence().

◆ is_truetype_font_proc()

static INT CALLBACK is_truetype_font_proc ( const LOGFONTA elf,
const TEXTMETRICA ntm,
DWORD  type,
LPARAM  lParam 
)
static

Definition at line 172 of file CreateFontIndirect.c.

174 {
175  if (type != TRUETYPE_FONTTYPE) return 1;
176 
177  return 0;
178 }
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define TRUETYPE_FONTTYPE
Definition: wingdi.h:1108

Referenced by is_truetype_font_installed().

◆ START_TEST()

START_TEST ( CreateFontIndirect  )

Definition at line 765 of file CreateFontIndirect.c.

766 {
773 }
static void Test_FontPresence(void)
void Test_CreateFontIndirectExA(void)
void Test_CreateFontIndirectA(void)
void Test_CreateFontIndirectExW(void)
void Test_CreateFontIndirectW(void)
static void Test_FontSelection(void)

◆ Test_CreateFontIndirectA()

void Test_CreateFontIndirectA ( void  )

Definition at line 14 of file CreateFontIndirect.c.

15 {
16  LOGFONTA logfont;
17  HFONT hFont;
18  ULONG ret;
19  ENUMLOGFONTEXDVW elfedv2;
20 
21  logfont.lfHeight = 12;
22  logfont.lfWidth = 0;
23  logfont.lfEscapement = 0;
24  logfont.lfOrientation = 0;
25  logfont.lfWeight = FW_NORMAL;
26  logfont.lfItalic = 0;
27  logfont.lfUnderline = 0;
28  logfont.lfStrikeOut = 0;
29  logfont.lfCharSet = DEFAULT_CHARSET;
32  logfont.lfQuality = PROOF_QUALITY;
34  memset(logfont.lfFaceName, 'A', LF_FACESIZE);
35  hFont = CreateFontIndirectA(&logfont);
36  ok(hFont != 0, "CreateFontIndirectA failed\n");
37 
38  memset(&elfedv2, 0, sizeof(elfedv2));
39  ret = GetObjectW(hFont, sizeof(elfedv2), &elfedv2);
40  ok(ret == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "ret = %ld\n", ret);
41  ok(elfedv2.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == 0, "\n");
42  ok(elfedv2.elfEnumLogfontEx.elfFullName[0] == 0, "\n");
43 }
BYTE lfItalic
Definition: dimm.idl:47
#define LF_FACESIZE
Definition: dimm.idl:39
WCHAR elfFullName[LF_FULLFACESIZE]
Definition: wingdi.h:2702
HFONT WINAPI CreateFontIndirectA(_In_ const LOGFONTA *)
BYTE lfStrikeOut
Definition: dimm.idl:49
BYTE lfUnderline
Definition: dimm.idl:48
BYTE lfCharSet
Definition: dimm.idl:50
#define DEFAULT_CHARSET
Definition: wingdi.h:383
#define PROOF_QUALITY
Definition: wingdi.h:437
HFONT hFont
Definition: main.c:53
BYTE lfOutPrecision
Definition: dimm.idl:51
LONG lfHeight
Definition: dimm.idl:42
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
LONG lfWeight
Definition: dimm.idl:46
BYTE lfPitchAndFamily
Definition: dimm.idl:54
#define DEFAULT_PITCH
Definition: wingdi.h:442
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
unsigned long DWORD
Definition: ntddk_ex.h:95
LONG lfWidth
Definition: dimm.idl:43
LONG lfOrientation
Definition: dimm.idl:45
int ret
BYTE lfQuality
Definition: dimm.idl:53
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
BYTE lfClipPrecision
Definition: dimm.idl:52
#define ok(value,...)
Definition: atltest.h:57
#define FW_NORMAL
Definition: wingdi.h:372
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
LOGFONTW elfLogFont
Definition: wingdi.h:2701
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
unsigned int ULONG
Definition: retypes.h:1
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
ENUMLOGFONTEXW elfEnumLogfontEx
Definition: wingdi.h:2778
#define memset(x, y, z)
Definition: compat.h:39
LONG lfEscapement
Definition: dimm.idl:44

Referenced by START_TEST().

◆ Test_CreateFontIndirectExA()

void Test_CreateFontIndirectExA ( void  )

Definition at line 79 of file CreateFontIndirect.c.

80 {
81  ENUMLOGFONTEXDVA elfedva, elfedva2;
82  ENUMLOGFONTEXDVW elfedvw;
83  ENUMLOGFONTEXA *penumlfa;
84  LOGFONTA *plogfonta;
85  HFONT hFont;
86  ULONG ret;
87 
88  memset(&elfedva, 0, sizeof(elfedva));
89  penumlfa = &elfedva.elfEnumLogfontEx;
90  plogfonta = &elfedva.elfEnumLogfontEx.elfLogFont;
91 
92  plogfonta->lfHeight = 12;
93  plogfonta->lfWidth = 0;
94  plogfonta->lfEscapement = 0;
95  plogfonta->lfOrientation = 0;
96  plogfonta->lfWeight = FW_NORMAL;
97  plogfonta->lfItalic = 0;
98  plogfonta->lfUnderline = 0;
99  plogfonta->lfStrikeOut = 0;
100  plogfonta->lfCharSet = DEFAULT_CHARSET;
101  plogfonta->lfOutPrecision = OUT_DEFAULT_PRECIS;
103  plogfonta->lfQuality = PROOF_QUALITY;
104  plogfonta->lfPitchAndFamily = DEFAULT_PITCH;
105 
106  memset(plogfonta->lfFaceName, 'A', LF_FACESIZE * sizeof(WCHAR));
107  memset(penumlfa->elfFullName, 'B', LF_FULLFACESIZE * sizeof(WCHAR));
108 
109  hFont = CreateFontIndirectExA(&elfedva);
110  ok(hFont != 0, "CreateFontIndirectExA failed\n");
111 
112  ret = GetObjectW(hFont, sizeof(elfedvw), &elfedvw);
113  ok(ret == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n");
114  ok(elfedvw.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == 0, "\n");
115  ok(elfedvw.elfEnumLogfontEx.elfFullName[LF_FULLFACESIZE-1] == 0, "\n");
116 
117  memset(&elfedva2, 0, sizeof(elfedva2));
118  ret = GetObjectA(hFont, sizeof(elfedva2), &elfedva2);
119  ok(ret == sizeof(ENUMLOGFONTEXDVA), "ret = %ld\n", ret);
120  ok(elfedva2.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == 0, "\n");
121  ok(elfedva2.elfEnumLogfontEx.elfFullName[LF_FULLFACESIZE-1] == 0, "\n");
122 }
int WINAPI GetObjectA(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
BYTE lfItalic
Definition: dimm.idl:47
#define LF_FACESIZE
Definition: dimm.idl:39
WCHAR elfFullName[LF_FULLFACESIZE]
Definition: wingdi.h:2702
#define LF_FULLFACESIZE
Definition: wingdi.h:41
BYTE lfStrikeOut
Definition: dimm.idl:49
BYTE lfUnderline
Definition: dimm.idl:48
BYTE lfCharSet
Definition: dimm.idl:50
#define DEFAULT_CHARSET
Definition: wingdi.h:383
ENUMLOGFONTEXA elfEnumLogfontEx
Definition: wingdi.h:2773
#define PROOF_QUALITY
Definition: wingdi.h:437
BYTE elfFullName[LF_FULLFACESIZE]
Definition: wingdi.h:2696
HFONT hFont
Definition: main.c:53
BYTE lfOutPrecision
Definition: dimm.idl:51
LONG lfHeight
Definition: dimm.idl:42
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
LONG lfWeight
Definition: dimm.idl:46
BYTE lfPitchAndFamily
Definition: dimm.idl:54
#define DEFAULT_PITCH
Definition: wingdi.h:442
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
unsigned long DWORD
Definition: ntddk_ex.h:95
LONG lfWidth
Definition: dimm.idl:43
LONG lfOrientation
Definition: dimm.idl:45
int ret
BYTE lfQuality
Definition: dimm.idl:53
HFONT WINAPI CreateFontIndirectExA(const ENUMLOGFONTEXDVA *)
Definition: font.c:1657
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
BYTE lfClipPrecision
Definition: dimm.idl:52
#define ok(value,...)
Definition: atltest.h:57
#define FW_NORMAL
Definition: wingdi.h:372
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
LOGFONTW elfLogFont
Definition: wingdi.h:2701
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
unsigned int ULONG
Definition: retypes.h:1
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
ENUMLOGFONTEXW elfEnumLogfontEx
Definition: wingdi.h:2778
#define memset(x, y, z)
Definition: compat.h:39
LOGFONTA elfLogFont
Definition: wingdi.h:2695
LONG lfEscapement
Definition: dimm.idl:44

Referenced by START_TEST().

◆ Test_CreateFontIndirectExW()

void Test_CreateFontIndirectExW ( void  )

Definition at line 125 of file CreateFontIndirect.c.

126 {
127  ENUMLOGFONTEXDVW elfedv, elfedv2;
128  ENUMLOGFONTEXDVA elfedva;
129  ENUMLOGFONTEXW *penumlfw;
130  LOGFONTW *plogfontw;
131  HFONT hFont;
132  ULONG ret;
133 
134  memset(&elfedv, 0, sizeof(elfedv));
135  penumlfw = &elfedv.elfEnumLogfontEx;
136  plogfontw = &elfedv.elfEnumLogfontEx.elfLogFont;
137 
138  plogfontw->lfHeight = 12;
139  plogfontw->lfWidth = 0;
140  plogfontw->lfEscapement = 0;
141  plogfontw->lfOrientation = 0;
142  plogfontw->lfWeight = FW_NORMAL;
143  plogfontw->lfItalic = 0;
144  plogfontw->lfUnderline = 0;
145  plogfontw->lfStrikeOut = 0;
146  plogfontw->lfCharSet = DEFAULT_CHARSET;
147  plogfontw->lfOutPrecision = OUT_DEFAULT_PRECIS;
149  plogfontw->lfQuality = PROOF_QUALITY;
150  plogfontw->lfPitchAndFamily = DEFAULT_PITCH;
151 
152  memset(plogfontw->lfFaceName, 'A', LF_FACESIZE * sizeof(WCHAR));
153  memset(penumlfw->elfFullName, 'B', LF_FULLFACESIZE * sizeof(WCHAR));
154 
155  hFont = CreateFontIndirectExW(&elfedv);
156  ok(hFont != 0, "CreateFontIndirectExW failed\n");
157 
158  memset(&elfedv2, 0, sizeof(elfedv2));
159  ret = GetObjectW(hFont, sizeof(elfedv2), &elfedv2);
160  ok(ret == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n");
161  ok(elfedv2.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == ((WCHAR)'A' << 8) + 'A', "\n");
162  ok(elfedv2.elfEnumLogfontEx.elfFullName[LF_FULLFACESIZE-1] == ((WCHAR)'B' << 8) + 'B', "\n");
163 
164  memset(&elfedva, 0, sizeof(elfedva));
165  ret = GetObjectA(hFont, sizeof(elfedva), &elfedva);
166  ok(ret == sizeof(ENUMLOGFONTEXDVA), "\n");
167  ok(elfedva.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == '?', "\n");
168  ok(elfedva.elfEnumLogfontEx.elfFullName[LF_FULLFACESIZE-1] == 0, "\n");
169 }
int WINAPI GetObjectA(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
#define LF_FACESIZE
Definition: dimm.idl:39
WCHAR elfFullName[LF_FULLFACESIZE]
Definition: wingdi.h:2702
BYTE lfPitchAndFamily
Definition: dimm.idl:71
#define LF_FULLFACESIZE
Definition: wingdi.h:41
LONG lfHeight
Definition: dimm.idl:59
BYTE lfCharSet
Definition: dimm.idl:67
BYTE lfClipPrecision
Definition: dimm.idl:69
LONG lfEscapement
Definition: dimm.idl:61
#define DEFAULT_CHARSET
Definition: wingdi.h:383
ENUMLOGFONTEXA elfEnumLogfontEx
Definition: wingdi.h:2773
#define PROOF_QUALITY
Definition: wingdi.h:437
BYTE elfFullName[LF_FULLFACESIZE]
Definition: wingdi.h:2696
HFONT hFont
Definition: main.c:53
LONG lfOrientation
Definition: dimm.idl:62
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
LONG lfWidth
Definition: dimm.idl:60
BYTE lfOutPrecision
Definition: dimm.idl:68
#define DEFAULT_PITCH
Definition: wingdi.h:442
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
unsigned long DWORD
Definition: ntddk_ex.h:95
HFONT WINAPI CreateFontIndirectExW(const ENUMLOGFONTEXDVW *)
Definition: font.c:1681
int ret
BYTE lfQuality
Definition: dimm.idl:70
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
BYTE lfStrikeOut
Definition: dimm.idl:66
#define ok(value,...)
Definition: atltest.h:57
BYTE lfItalic
Definition: dimm.idl:64
#define FW_NORMAL
Definition: wingdi.h:372
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
LOGFONTW elfLogFont
Definition: wingdi.h:2701
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
unsigned int ULONG
Definition: retypes.h:1
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
LONG lfWeight
Definition: dimm.idl:63
ENUMLOGFONTEXW elfEnumLogfontEx
Definition: wingdi.h:2778
BYTE lfUnderline
Definition: dimm.idl:65
#define memset(x, y, z)
Definition: compat.h:39
LOGFONTA elfLogFont
Definition: wingdi.h:2695

Referenced by START_TEST().

◆ Test_CreateFontIndirectW()

void Test_CreateFontIndirectW ( void  )

Definition at line 46 of file CreateFontIndirect.c.

47 {
48  LOGFONTW logfont;
49  HFONT hFont;
50  ULONG ret;
51  ENUMLOGFONTEXDVW elfedv2;
52 
53  logfont.lfHeight = 12;
54  logfont.lfWidth = 0;
55  logfont.lfEscapement = 0;
56  logfont.lfOrientation = 0;
57  logfont.lfWeight = FW_NORMAL;
58  logfont.lfItalic = 0;
59  logfont.lfUnderline = 0;
60  logfont.lfStrikeOut = 0;
61  logfont.lfCharSet = DEFAULT_CHARSET;
64  logfont.lfQuality = PROOF_QUALITY;
66  memset(logfont.lfFaceName, 'A', LF_FACESIZE * 2);
67  hFont = CreateFontIndirectW(&logfont);
68  ok(hFont != 0, "CreateFontIndirectW failed\n");
69 
70  memset(&elfedv2, 0, sizeof(elfedv2));
71  ret = GetObjectW(hFont, sizeof(elfedv2), &elfedv2);
72  ok(ret == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n");
73  ok(elfedv2.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == ((WCHAR)'A' << 8) + 'A', "\n");
74  ok(elfedv2.elfEnumLogfontEx.elfFullName[0] == 0, "\n");
75  /* Theres a bunch of data in elfFullName ... */
76 }
#define LF_FACESIZE
Definition: dimm.idl:39
WCHAR elfFullName[LF_FULLFACESIZE]
Definition: wingdi.h:2702
BYTE lfPitchAndFamily
Definition: dimm.idl:71
LONG lfHeight
Definition: dimm.idl:59
BYTE lfCharSet
Definition: dimm.idl:67
BYTE lfClipPrecision
Definition: dimm.idl:69
LONG lfEscapement
Definition: dimm.idl:61
#define DEFAULT_CHARSET
Definition: wingdi.h:383
#define PROOF_QUALITY
Definition: wingdi.h:437
HFONT hFont
Definition: main.c:53
LONG lfOrientation
Definition: dimm.idl:62
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
LONG lfWidth
Definition: dimm.idl:60
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
BYTE lfOutPrecision
Definition: dimm.idl:68
#define DEFAULT_PITCH
Definition: wingdi.h:442
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
BYTE lfQuality
Definition: dimm.idl:70
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
BYTE lfStrikeOut
Definition: dimm.idl:66
#define ok(value,...)
Definition: atltest.h:57
BYTE lfItalic
Definition: dimm.idl:64
#define FW_NORMAL
Definition: wingdi.h:372
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
LOGFONTW elfLogFont
Definition: wingdi.h:2701
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
unsigned int ULONG
Definition: retypes.h:1
LONG lfWeight
Definition: dimm.idl:63
ENUMLOGFONTEXW elfEnumLogfontEx
Definition: wingdi.h:2778
BYTE lfUnderline
Definition: dimm.idl:65
#define memset(x, y, z)
Definition: compat.h:39

Referenced by START_TEST().

◆ Test_FontPresence()

static void Test_FontPresence ( void  )
static

Definition at line 234 of file CreateFontIndirect.c.

235 {
236  HDC hDC;
237 
239 
240  ok(is_truetype_font_installed(hDC, "Arial"), "'Arial' is not found\n");
241  ok(is_truetype_font_installed(hDC, "Courier New"), "'Courier New' is not found\n");
242  ok(is_truetype_font_installed(hDC, "Marlett"), "'Marlett' is not found\n");
243  ok(is_truetype_font_installed(hDC, "MS Shell Dlg"), "'MS Shell Dlg' is not found\n");
244  ok(is_truetype_font_installed(hDC, "Tahoma"), "'Tahoma' is not found\n");
245  ok(is_truetype_font_installed(hDC, "Times New Roman"), "'Times New Roman' is not found\n");
246 
247  ok(is_charset_font_installed(hDC, ANSI_CHARSET), "ANSI_CHARSET fonts are not found\n");
248  ok(is_charset_font_installed(hDC, SYMBOL_CHARSET), "SYMBOL_CHARSET fonts are not found\n");
249  trace_if(is_charset_font_installed(hDC, SHIFTJIS_CHARSET), "SHIFTJIS_CHARSET fonts are not found\n");
250  trace_if(is_charset_font_installed(hDC, HANGUL_CHARSET), "HANGUL_CHARSET fonts are not found\n");
251  trace_if(is_charset_font_installed(hDC, GB2312_CHARSET), "GB2312_CHARSET fonts are not found\n");
252  trace_if(is_charset_font_installed(hDC, CHINESEBIG5_CHARSET), "CHINESEBIG5_CHARSET fonts are not found\n");
253  ok(is_charset_font_installed(hDC, OEM_CHARSET), "OEM_CHARSET fonts are not found\n");
254  trace_if(is_charset_font_installed(hDC, JOHAB_CHARSET), "JOHAB_CHARSET fonts are not found\n");
255  trace_if(is_charset_font_installed(hDC, HEBREW_CHARSET), "HEBREW_CHARSET fonts are not found\n");
256  trace_if(is_charset_font_installed(hDC, ARABIC_CHARSET), "ARABIC_CHARSET fonts are not found\n");
257  trace_if(is_charset_font_installed(hDC, GREEK_CHARSET), "GREEK_CHARSET fonts are not found\n");
258  trace_if(is_charset_font_installed(hDC, TURKISH_CHARSET), "TURKISH_CHARSET fonts are not found\n");
259  trace_if(is_charset_font_installed(hDC, VIETNAMESE_CHARSET), "VIETNAMESE_CHARSET fonts are not found\n");
260  trace_if(is_charset_font_installed(hDC, THAI_CHARSET), "THAI_CHARSET fonts are not found\n");
261  trace_if(is_charset_font_installed(hDC, EASTEUROPE_CHARSET), "EASTEUROPE_CHARSET fonts are not found\n");
262  trace_if(is_charset_font_installed(hDC, RUSSIAN_CHARSET), "RUSSIAN_CHARSET fonts are not found\n");
263  trace_if(is_charset_font_installed(hDC, MAC_CHARSET), "MAC_CHARSET fonts are not found\n");
264  trace_if(is_charset_font_installed(hDC, BALTIC_CHARSET), "BALTIC_CHARSET fonts are not found\n");
265 
266  ok(is_fixed_charset_font_installed(hDC, ANSI_CHARSET), "fixed ANSI_CHARSET fonts are not found\n");
267  trace_if(is_fixed_charset_font_installed(hDC, SHIFTJIS_CHARSET), "fixed SHIFTJIS_CHARSET fonts are not found\n");
268  trace_if(is_fixed_charset_font_installed(hDC, HANGUL_CHARSET), "fixed HANGUL_CHARSET fonts are not found\n");
269  trace_if(is_fixed_charset_font_installed(hDC, GB2312_CHARSET), "fixed GB2312_CHARSET fonts are not found\n");
270  trace_if(is_fixed_charset_font_installed(hDC, CHINESEBIG5_CHARSET), "fixed CHINESEBIG5_CHARSET fonts are not found\n");
271  ok(is_fixed_charset_font_installed(hDC, OEM_CHARSET), "fixed OEM_CHARSET fonts are not found\n");
272  trace_if(is_fixed_charset_font_installed(hDC, JOHAB_CHARSET), "fixed JOHAB_CHARSET fonts are not found\n");
273  trace_if(is_fixed_charset_font_installed(hDC, HEBREW_CHARSET), "fixed HEBREW_CHARSET fonts are not found\n");
274  trace_if(is_fixed_charset_font_installed(hDC, ARABIC_CHARSET), "fixed ARABIC_CHARSET fonts are not found\n");
275  trace_if(is_fixed_charset_font_installed(hDC, GREEK_CHARSET), "fixed GREEK_CHARSET fonts are not found\n");
276  trace_if(is_fixed_charset_font_installed(hDC, TURKISH_CHARSET), "fixed TURKISH_CHARSET fonts are not found\n");
277  trace_if(is_fixed_charset_font_installed(hDC, VIETNAMESE_CHARSET), "fixed VIETNAMESE_CHARSET fonts are not found\n");
278  trace_if(is_fixed_charset_font_installed(hDC, THAI_CHARSET), "fixed THAI_CHARSET fonts are not found\n");
279  trace_if(is_fixed_charset_font_installed(hDC, EASTEUROPE_CHARSET), "fixed EASTEUROPE_CHARSET fonts are not found\n");
280  trace_if(is_fixed_charset_font_installed(hDC, RUSSIAN_CHARSET), "fixed RUSSIAN_CHARSET fonts are not found\n");
281  trace_if(is_fixed_charset_font_installed(hDC, MAC_CHARSET), "fixed MAC_CHARSET fonts are not found\n");
282  trace_if(is_fixed_charset_font_installed(hDC, BALTIC_CHARSET), "fixed BALTIC_CHARSET fonts are not found\n");
283 
284  DeleteDC(hDC);
285 }
#define MAC_CHARSET
Definition: wingdi.h:402
#define EASTEUROPE_CHARSET
Definition: wingdi.h:398
#define SYMBOL_CHARSET
Definition: wingdi.h:384
static HDC
Definition: imagelist.c:92
#define CHINESEBIG5_CHARSET
Definition: wingdi.h:389
static BOOL is_truetype_font_installed(HDC hDC, const char *name)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
smooth NULL
Definition: ftsmooth.c:416
#define TURKISH_CHARSET
Definition: wingdi.h:391
#define HANGUL_CHARSET
Definition: wingdi.h:387
#define THAI_CHARSET
Definition: wingdi.h:396
#define SHIFTJIS_CHARSET
Definition: wingdi.h:385
static BOOL is_charset_font_installed(HDC hDC, BYTE CharSet)
#define RUSSIAN_CHARSET
Definition: wingdi.h:395
#define OEM_CHARSET
Definition: wingdi.h:399
#define GB2312_CHARSET
Definition: wingdi.h:388
static HDC hDC
Definition: 3dtext.c:33
static BOOL is_fixed_charset_font_installed(HDC hDC, BYTE CharSet)
BOOL WINAPI DeleteDC(_In_ HDC)
#define VIETNAMESE_CHARSET
Definition: wingdi.h:401
#define HEBREW_CHARSET
Definition: wingdi.h:392
#define ok(value,...)
Definition: atltest.h:57
#define ARABIC_CHARSET
Definition: wingdi.h:393
#define ANSI_CHARSET
Definition: wingdi.h:382
#define JOHAB_CHARSET
Definition: wingdi.h:400
#define BALTIC_CHARSET
Definition: wingdi.h:394
#define GREEK_CHARSET
Definition: wingdi.h:390
#define trace_if(val, msg)

Referenced by START_TEST().

◆ Test_FontSelection()

static void Test_FontSelection ( void  )
static

Definition at line 748 of file CreateFontIndirect.c.

749 {
750  UINT nIndex;
751  HDC hDC;
752 
754  for (nIndex = 0; nIndex < _countof(g_Entries); ++nIndex)
755  {
756  if (!is_charset_font_installed(hDC, g_Entries[nIndex].CharSetBefore))
757  skip("charset not available: 0x%x\n", g_Entries[nIndex].CharSetBefore);
758  else
759  Test_FontSelectionEntry(hDC, nIndex, g_Entries + nIndex);
760  }
761  DeleteDC(hDC);
762 }
static void Test_FontSelectionEntry(HDC hDC, UINT nIndex, FONT_SEL_TEST *Entry)
static HDC
Definition: imagelist.c:92
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
smooth NULL
Definition: ftsmooth.c:416
#define _countof(array)
Definition: sndvol32.h:68
static BOOL is_charset_font_installed(HDC hDC, BYTE CharSet)
static HDC hDC
Definition: 3dtext.c:33
BOOL WINAPI DeleteDC(_In_ HDC)
unsigned int UINT
Definition: ndis.h:50
#define skip(...)
Definition: atltest.h:64
static FONT_SEL_TEST g_Entries[]

Referenced by START_TEST().

◆ Test_FontSelectionEntry()

static void Test_FontSelectionEntry ( HDC  hDC,
UINT  nIndex,
FONT_SEL_TEST Entry 
)
static

Definition at line 675 of file CreateFontIndirect.c.

676 {
677  LOGFONTA lf;
678  HFONT hFont;
679  HGDIOBJ hFontOld;
680  TEXTMETRICA tm;
681 
682  ZeroMemory(&lf, sizeof(lf));
683 
684  if (Entry->FaceNameBefore[0])
685  lstrcpynA(lf.lfFaceName, Entry->FaceNameBefore, _countof(lf.lfFaceName));
686 
687  lf.lfCharSet = Entry->CharSetBefore;
688 
689  if (Entry->BoldBefore == TS_TRUE)
690  lf.lfWeight = FW_BOLD;
691  else if (Entry->BoldBefore == TS_FALSE)
692  lf.lfWeight = FW_NORMAL;
693  else
694  lf.lfWeight = FW_DONTCARE;
695 
696  lf.lfItalic = Entry->ItalicBefore;
697  lf.lfUnderline = Entry->UnderlineBefore;
698  lf.lfStrikeOut = Entry->StruckOutBefore;
699 
700  if (Entry->FixedPitchBefore == TS_TRUE)
702  else if (Entry->FixedPitchBefore == TS_FALSE)
704  else
706 
707  hFont = CreateFontIndirectA(&lf);
708  ok(hFont != NULL, "Entry #%u: hFont failed\n", nIndex);
709 
710  hFontOld = SelectObject(hDC, hFont);
711  {
712  ok(GetTextMetricsA(hDC, &tm), "Entry #%u: GetTextMetricsA failed\n", nIndex);
713 
714  if (Entry->CharSetAfter != DEFAULT_CHARSET)
715  ok(tm.tmCharSet == Entry->CharSetAfter, "Entry #%u: CharSet mismatched, it was %u\n", nIndex, tm.tmCharSet);
716 
717  if (Entry->BoldAfter == TS_TRUE)
718  ok(tm.tmWeight >= FW_BOLD, "Entry #%u: Weight was non-bold\n", nIndex);
719  else if (Entry->BoldAfter == TS_FALSE)
720  ok(tm.tmWeight <= FW_MEDIUM, "Entry #%u: Weight was bold\n", nIndex);
721 
722  if (Entry->ItalicAfter == TS_TRUE)
723  ok(tm.tmItalic, "Entry #%u: Italic was non-italic\n", nIndex);
724  else if (Entry->ItalicAfter == TS_FALSE)
725  ok(!tm.tmItalic, "Entry #%u: Italic was italic\n", nIndex);
726 
727  if (Entry->UnderlineAfter == TS_TRUE)
728  ok(tm.tmUnderlined, "Entry #%u: Underlined was FALSE\n", nIndex);
729  else if (Entry->UnderlineAfter == TS_FALSE)
730  ok(!tm.tmUnderlined, "Entry #%u: Underlined was TRUE\n", nIndex);
731 
732  if (Entry->StruckOutAfter == TS_TRUE)
733  ok(tm.tmStruckOut, "Entry #%u: Struck-out was FALSE\n", nIndex);
734  else if (Entry->StruckOutAfter == TS_FALSE)
735  ok(!tm.tmStruckOut, "Entry #%u: Struck-out was TRUE\n", nIndex);
736 #if 0 // FIXME: fails on WHS testbot
737  if (Entry->FixedPitchAfter == TS_TRUE)
738  ok(!(tm.tmPitchAndFamily & _TMPF_VAR_PITCH), "Entry #%u: Pitch mismatched, it was non-fixed-pitch\n", nIndex);
739  else if (Entry->FixedPitchAfter == TS_FALSE)
740  ok((tm.tmPitchAndFamily & _TMPF_VAR_PITCH), "Entry #%u: Pitch mismatched, it was fixed-pitch\n", nIndex);
741 #endif
742  }
743  SelectObject(hDC, hFontOld);
745 }
#define _TMPF_VAR_PITCH
BYTE lfItalic
Definition: dimm.idl:47
#define VARIABLE_PITCH
Definition: wingdi.h:444
#define FF_DONTCARE
Definition: wingdi.h:447
HFONT WINAPI CreateFontIndirectA(_In_ const LOGFONTA *)
BYTE lfStrikeOut
Definition: dimm.idl:49
BYTE lfUnderline
Definition: dimm.idl:48
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1499
#define ZeroMemory
Definition: winbase.h:1648
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
BYTE lfCharSet
Definition: dimm.idl:50
#define DEFAULT_CHARSET
Definition: wingdi.h:383
HFONT hFont
Definition: main.c:53
#define FIXED_PITCH
Definition: wingdi.h:443
LONG lfWeight
Definition: dimm.idl:46
smooth NULL
Definition: ftsmooth.c:416
BYTE lfPitchAndFamily
Definition: dimm.idl:54
BOOL WINAPI GetTextMetricsA(_In_ HDC, _Out_ LPTEXTMETRICA)
Definition: text.c:200
#define FW_MEDIUM
Definition: wingdi.h:374
#define DEFAULT_PITCH
Definition: wingdi.h:442
#define _countof(array)
Definition: sndvol32.h:68
Definition: time.h:76
static HDC hDC
Definition: 3dtext.c:33
#define FW_DONTCARE
Definition: wingdi.h:367
#define FW_BOLD
Definition: wingdi.h:377
#define ok(value,...)
Definition: atltest.h:57
#define lstrcpynA
Definition: compat.h:499
#define FW_NORMAL
Definition: wingdi.h:372
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
base of all file and directory entries
Definition: entries.h:82

Referenced by Test_FontSelection().

Variable Documentation

◆ g_Entries

FONT_SEL_TEST g_Entries[]
static

Definition at line 318 of file CreateFontIndirect.c.

Referenced by Test_FontSelection().