2 * Copyright 2016 Nikolay Sivov for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26 #include "wine/test.h"
28 static int CALLBACK
enum_font_proc(ENUMLOGFONTEXA
*enumlf
, NEWTEXTMETRICEXA
*ntm
, DWORD type
, LPARAM lParam
)
30 OUTLINETEXTMETRICA otm
;
31 HDC hdc
= GetDC(NULL
);
32 HFONT hfont
, old_font
;
36 hfont
= CreateFontIndirectA(&enumlf
->elfLogFont
);
37 old_font
= SelectObject(hdc
, hfont
);
39 otm
.otmSize
= sizeof(otm
);
40 if (GetOutlineTextMetricsA(hdc
, otm
.otmSize
, &otm
))
42 ULONG expected
= 0xffff;
43 UINT fsType
= otm
.otmfsType
& 0xf;
45 ret
= TTGetEmbeddingType(hdc
, &status
);
46 ok(ret
== E_NONE
|| ret
== E_NOTATRUETYPEFONT
, "Unexpected return value %#x.\n", ret
);
50 if (fsType
== LICENSE_INSTALLABLE
)
51 expected
= EMBED_INSTALLABLE
;
52 else if (fsType
& LICENSE_EDITABLE
)
53 expected
= EMBED_EDITABLE
;
54 else if (fsType
& LICENSE_PREVIEWPRINT
)
55 expected
= EMBED_PREVIEWPRINT
;
56 else if (fsType
& LICENSE_NOEMBEDDING
)
57 expected
= EMBED_NOEMBEDDING
;
59 ok(expected
== status
, "%s: status %d, expected %d, fsType %#x\n", enumlf
->elfLogFont
.lfFaceName
, status
,
60 expected
, otm
.otmfsType
);
66 ret
= TTGetEmbeddingType(hdc
, &status
);
67 ok(ret
== E_NOTATRUETYPEFONT
, "%s: got %d\n", enumlf
->elfLogFont
.lfFaceName
, ret
);
68 ok(status
== 0xdeadbeef, "%s: got status %d\n", enumlf
->elfLogFont
.lfFaceName
, status
);
71 SelectObject(hdc
, old_font
);
78 static void test_TTGetEmbeddingType(void)
80 HFONT hfont
, old_font
;
86 ret
= TTGetEmbeddingType(NULL
, NULL
);
87 ok(ret
== E_HDCINVALID
, "got %d\n", ret
);
90 ret
= TTGetEmbeddingType(NULL
, &status
);
91 ok(ret
== E_HDCINVALID
, "got %#x\n", ret
);
92 ok(status
== 0xdeadbeef, "got %u\n", status
);
95 ret
= TTGetEmbeddingType((HDC
)0xdeadbeef, &status
);
96 ok(ret
== E_NOTATRUETYPEFONT
|| broken(ret
== E_ERRORACCESSINGFONTDATA
) /* xp, vista */, "got %#x\n", ret
);
97 ok(status
== 0xdeadbeef, "got %u\n", status
);
99 hdc
= CreateCompatibleDC(0);
101 ret
= TTGetEmbeddingType(hdc
, NULL
);
102 ok(ret
== E_NOTATRUETYPEFONT
, "got %#x\n", ret
);
105 ret
= TTGetEmbeddingType(hdc
, &status
);
106 ok(ret
== E_NOTATRUETYPEFONT
, "got %#x\n", ret
);
107 ok(status
== 0xdeadbeef, "got %u\n", status
);
109 memset(&logfont
, 0, sizeof(logfont
));
110 logfont
.lfHeight
= 12;
111 logfont
.lfWeight
= FW_NORMAL
;
112 strcpy(logfont
.lfFaceName
, "Tahoma");
113 hfont
= CreateFontIndirectA(&logfont
);
114 ok(hfont
!= NULL
, "got %p\n", hfont
);
116 old_font
= SelectObject(hdc
, hfont
);
119 ret
= TTGetEmbeddingType(hdc
, &status
);
120 ok(ret
== E_NONE
, "got %#x\n", ret
);
121 ok(status
!= 0, "got %u\n", status
);
123 ret
= TTGetEmbeddingType(hdc
, NULL
);
124 ok(ret
== E_PERMISSIONSINVALID
, "got %#x\n", ret
);
126 SelectObject(hdc
, old_font
);
129 /* repeat for all system fonts */
130 logfont
.lfCharSet
= DEFAULT_CHARSET
;
131 logfont
.lfFaceName
[0] = 0;
132 EnumFontFamiliesExA(hdc
, &logfont
, (FONTENUMPROCA
)enum_font_proc
, 0, 0);
137 static void test_TTIsEmbeddingEnabledForFacename(void)
142 ret
= TTIsEmbeddingEnabledForFacename(NULL
, NULL
);
143 ok(ret
== E_FACENAMEINVALID
, "got %#x\n", ret
);
146 ret
= TTIsEmbeddingEnabledForFacename(NULL
, &status
);
147 ok(ret
== E_FACENAMEINVALID
, "got %#x\n", ret
);
148 ok(status
== 123, "got %d\n", status
);
150 ret
= TTIsEmbeddingEnabledForFacename("Arial", NULL
);
151 ok(ret
== E_PBENABLEDINVALID
, "got %#x\n", ret
);
154 ret
= TTIsEmbeddingEnabledForFacename("Arial", &status
);
155 ok(ret
== E_NONE
, "got %#x\n", ret
);
156 ok(status
!= 123, "got %d\n", status
);
159 static void test_TTIsEmbeddingEnabled(void)
161 HFONT old_font
, hfont
;
166 ret
= TTIsEmbeddingEnabled(NULL
, NULL
);
167 ok(ret
== E_HDCINVALID
, "got %#x\n", ret
);
170 ret
= TTIsEmbeddingEnabled(NULL
, &status
);
171 ok(ret
== E_HDCINVALID
, "got %#x\n", ret
);
172 ok(status
== 123, "got %d\n", status
);
174 hdc
= CreateCompatibleDC(0);
176 memset(&logfont
, 0, sizeof(logfont
));
177 logfont
.lfHeight
= 12;
178 logfont
.lfWeight
= FW_NORMAL
;
179 strcpy(logfont
.lfFaceName
, "Tahoma");
180 hfont
= CreateFontIndirectA(&logfont
);
181 ok(hfont
!= NULL
, "got %p\n", hfont
);
183 old_font
= SelectObject(hdc
, hfont
);
185 ret
= TTIsEmbeddingEnabled(hdc
, NULL
);
186 ok(ret
== E_PBENABLEDINVALID
, "Unexpected return value %#x.\n", ret
);
189 ret
= TTIsEmbeddingEnabled(hdc
, &status
);
190 ok(ret
== E_NONE
, "got %#x\n", ret
);
191 ok(status
!= 123, "got %u\n", status
);
193 SelectObject(hdc
, old_font
);
200 test_TTGetEmbeddingType();
201 test_TTIsEmbeddingEnabledForFacename();
202 test_TTIsEmbeddingEnabled();