Commit 8be1357b authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

t2embed: Fix embedding type resolution order.

parent 8fbaeb30
...@@ -33,7 +33,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(t2embed); ...@@ -33,7 +33,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(t2embed);
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{ {
switch (fdwReason) switch (fdwReason)
{ {
case DLL_WINE_PREATTACH: case DLL_WINE_PREATTACH:
...@@ -89,14 +88,20 @@ LONG WINAPI TTGetEmbeddingType(HDC hDC, ULONG *status) ...@@ -89,14 +88,20 @@ LONG WINAPI TTGetEmbeddingType(HDC hDC, ULONG *status)
if (!status) if (!status)
return E_PERMISSIONSINVALID; return E_PERMISSIONSINVALID;
otm.otmfsType &= 0xf;
if (otm.otmfsType == LICENSE_INSTALLABLE) if (otm.otmfsType == LICENSE_INSTALLABLE)
*status = EMBED_INSTALLABLE; *status = EMBED_INSTALLABLE;
else if (otm.otmfsType & LICENSE_NOEMBEDDING)
*status = EMBED_NOEMBEDDING;
else if (otm.otmfsType & LICENSE_PREVIEWPRINT)
*status = EMBED_PREVIEWPRINT;
else if (otm.otmfsType & LICENSE_EDITABLE) else if (otm.otmfsType & LICENSE_EDITABLE)
*status = EMBED_EDITABLE; *status = EMBED_EDITABLE;
else if (otm.otmfsType & LICENSE_PREVIEWPRINT)
*status = EMBED_PREVIEWPRINT;
else if (otm.otmfsType & LICENSE_NOEMBEDDING)
*status = EMBED_NOEMBEDDING;
else
{
WARN("unrecognized flags, %#x\n", otm.otmfsType);
*status = EMBED_INSTALLABLE;
}
return E_NONE; return E_NONE;
} }
......
TESTDLL = t2embed.dll TESTDLL = t2embed.dll
IMPORTS = gdi32 t2embed IMPORTS = user32 gdi32 t2embed
C_SRCS = \ C_SRCS = \
t2embed.c t2embed.c
...@@ -19,10 +19,59 @@ ...@@ -19,10 +19,59 @@
#include <stdarg.h> #include <stdarg.h>
#include "windef.h" #include "windef.h"
#include "winbase.h"
#include "wingdi.h" #include "wingdi.h"
#include "winuser.h"
#include "t2embapi.h" #include "t2embapi.h"
#include "wine/test.h" #include "wine/test.h"
static int CALLBACK enum_font_proc(ENUMLOGFONTEXA *enumlf, NEWTEXTMETRICEXA *ntm, DWORD type, LPARAM lParam)
{
OUTLINETEXTMETRICA otm;
HDC hdc = GetDC(NULL);
HFONT hfont, old_font;
ULONG status;
LONG ret;
hfont = CreateFontIndirectA(&enumlf->elfLogFont);
old_font = SelectObject(hdc, hfont);
otm.otmSize = sizeof(otm);
if (GetOutlineTextMetricsA(hdc, otm.otmSize, &otm))
{
ULONG expected = 0xffff;
UINT fsType = otm.otmfsType & 0xf;
ret = TTGetEmbeddingType(hdc, &status);
ok(ret == E_NONE, "got %d\n", ret);
if (fsType == LICENSE_INSTALLABLE)
expected = EMBED_INSTALLABLE;
else if (fsType & LICENSE_EDITABLE)
expected = EMBED_EDITABLE;
else if (fsType & LICENSE_PREVIEWPRINT)
expected = EMBED_PREVIEWPRINT;
else if (fsType & LICENSE_NOEMBEDDING)
expected = EMBED_NOEMBEDDING;
ok(expected == status, "%s: status %d, expected %d, fsType %#x\n", enumlf->elfLogFont.lfFaceName, status,
expected, otm.otmfsType);
}
else
{
status = 0xdeadbeef;
ret = TTGetEmbeddingType(hdc, &status);
ok(ret == E_NOTATRUETYPEFONT, "%s: got %d\n", enumlf->elfLogFont.lfFaceName, ret);
ok(status == 0xdeadbeef, "%s: got status %d\n", enumlf->elfLogFont.lfFaceName, status);
}
SelectObject(hdc, old_font);
DeleteObject(hfont);
ReleaseDC(NULL, hdc);
return 1;
}
static void test_TTGetEmbeddingType(void) static void test_TTGetEmbeddingType(void)
{ {
HFONT hfont, old_font; HFONT hfont, old_font;
...@@ -73,6 +122,12 @@ static void test_TTGetEmbeddingType(void) ...@@ -73,6 +122,12 @@ static void test_TTGetEmbeddingType(void)
SelectObject(hdc, old_font); SelectObject(hdc, old_font);
DeleteObject(hfont); DeleteObject(hfont);
/* repeat for all system fonts */
logfont.lfCharSet = DEFAULT_CHARSET;
logfont.lfFaceName[0] = 0;
EnumFontFamiliesExA(hdc, &logfont, (FONTENUMPROCA)enum_font_proc, 0, 0);
DeleteDC(hdc); DeleteDC(hdc);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment