dwrite/tests: Initial tests for GetGlyphImageFormats().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
533d3b904e
commit
ef31887c40
|
@ -42,6 +42,9 @@
|
||||||
#define MS_POST_TAG DWRITE_MAKE_OPENTYPE_TAG('p','o','s','t')
|
#define MS_POST_TAG DWRITE_MAKE_OPENTYPE_TAG('p','o','s','t')
|
||||||
#define MS_GSUB_TAG DWRITE_MAKE_OPENTYPE_TAG('G','S','U','B')
|
#define MS_GSUB_TAG DWRITE_MAKE_OPENTYPE_TAG('G','S','U','B')
|
||||||
#define MS_KERN_TAG DWRITE_MAKE_OPENTYPE_TAG('k','e','r','n')
|
#define MS_KERN_TAG DWRITE_MAKE_OPENTYPE_TAG('k','e','r','n')
|
||||||
|
#define MS_GLYF_TAG DWRITE_MAKE_OPENTYPE_TAG('g','l','y','f')
|
||||||
|
#define MS_CFF__TAG DWRITE_MAKE_OPENTYPE_TAG('C','F','F',' ')
|
||||||
|
#define MS_COLR_TAG DWRITE_MAKE_OPENTYPE_TAG('C','O','L','R')
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
#define GET_BE_WORD(x) (x)
|
#define GET_BE_WORD(x) (x)
|
||||||
|
@ -7382,6 +7385,120 @@ static void test_inmemory_file_loader(void)
|
||||||
ok(ref == 0, "factory not released, %u\n", ref);
|
ok(ref == 0, "factory not released, %u\n", ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL face_has_table(IDWriteFontFace4 *fontface, UINT32 tag)
|
||||||
|
{
|
||||||
|
BOOL exists = FALSE;
|
||||||
|
const void *data;
|
||||||
|
void *context;
|
||||||
|
UINT32 size;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = IDWriteFontFace4_TryGetFontTable(fontface, tag, &data, &size, &context, &exists);
|
||||||
|
ok(hr == S_OK, "TryGetFontTable() failed, %#x\n", hr);
|
||||||
|
if (exists)
|
||||||
|
IDWriteFontFace4_ReleaseFontTable(fontface, context);
|
||||||
|
|
||||||
|
return exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DWORD get_face_glyph_image_formats(IDWriteFontFace4 *fontface)
|
||||||
|
{
|
||||||
|
DWORD ret = DWRITE_GLYPH_IMAGE_FORMATS_NONE;
|
||||||
|
|
||||||
|
if (face_has_table(fontface, MS_GLYF_TAG))
|
||||||
|
ret |= DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE;
|
||||||
|
|
||||||
|
if (face_has_table(fontface, MS_CFF__TAG))
|
||||||
|
ret |= DWRITE_GLYPH_IMAGE_FORMATS_CFF;
|
||||||
|
|
||||||
|
if (face_has_table(fontface, MS_COLR_TAG))
|
||||||
|
ret |= DWRITE_GLYPH_IMAGE_FORMATS_COLR;
|
||||||
|
|
||||||
|
/* TODO: handle SVG and bitmap data */
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_GetGlyphImageFormats(void)
|
||||||
|
{
|
||||||
|
IDWriteFontCollection *syscollection;
|
||||||
|
IDWriteFactory *factory;
|
||||||
|
UINT32 i, count;
|
||||||
|
HRESULT hr;
|
||||||
|
ULONG ref;
|
||||||
|
IDWriteFontFace *fontface;
|
||||||
|
IDWriteFontFace4 *fontface4;
|
||||||
|
|
||||||
|
factory = create_factory();
|
||||||
|
|
||||||
|
fontface = create_fontface(factory);
|
||||||
|
hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace4, (void **)&fontface4);
|
||||||
|
IDWriteFontFace_Release(fontface);
|
||||||
|
if (FAILED(hr)) {
|
||||||
|
win_skip("GetGlyphImageFormats() is not supported\n");
|
||||||
|
IDWriteFactory_Release(factory);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
IDWriteFontFace4_Release(fontface4);
|
||||||
|
|
||||||
|
hr = IDWriteFactory_GetSystemFontCollection(factory, &syscollection, FALSE);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
count = IDWriteFontCollection_GetFontFamilyCount(syscollection);
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
WCHAR familynameW[256], facenameW[128];
|
||||||
|
IDWriteLocalizedStrings *names;
|
||||||
|
IDWriteFontFamily *family;
|
||||||
|
UINT32 j, fontcount;
|
||||||
|
IDWriteFont *font;
|
||||||
|
|
||||||
|
hr = IDWriteFontCollection_GetFontFamily(syscollection, i, &family);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IDWriteFontFamily_GetFamilyNames(family, &names);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
get_enus_string(names, familynameW, sizeof(familynameW)/sizeof(*familynameW));
|
||||||
|
IDWriteLocalizedStrings_Release(names);
|
||||||
|
|
||||||
|
fontcount = IDWriteFontFamily_GetFontCount(family);
|
||||||
|
for (j = 0; j < fontcount; j++) {
|
||||||
|
DWORD formats, expected_formats;
|
||||||
|
|
||||||
|
hr = IDWriteFontFamily_GetFont(family, j, &font);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IDWriteFont_CreateFontFace(font, &fontface);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IDWriteFont_GetFaceNames(font, &names);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
get_enus_string(names, facenameW, sizeof(facenameW)/sizeof(*facenameW));
|
||||||
|
|
||||||
|
IDWriteLocalizedStrings_Release(names);
|
||||||
|
|
||||||
|
IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace4, (void **)&fontface4);
|
||||||
|
|
||||||
|
/* Mask describes font as a whole. */
|
||||||
|
formats = IDWriteFontFace4_GetGlyphImageFormats(fontface4);
|
||||||
|
expected_formats = get_face_glyph_image_formats(fontface4);
|
||||||
|
todo_wine
|
||||||
|
ok(formats == expected_formats, "%s - %s, expected formats %#x, got formats %#x.\n",
|
||||||
|
wine_dbgstr_w(familynameW), wine_dbgstr_w(facenameW), expected_formats, formats);
|
||||||
|
|
||||||
|
IDWriteFontFace4_Release(fontface4);
|
||||||
|
IDWriteFontFace_Release(fontface);
|
||||||
|
IDWriteFont_Release(font);
|
||||||
|
}
|
||||||
|
|
||||||
|
IDWriteFontFamily_Release(family);
|
||||||
|
}
|
||||||
|
|
||||||
|
IDWriteFontCollection_Release(syscollection);
|
||||||
|
ref = IDWriteFactory_Release(factory);
|
||||||
|
ok(ref == 0, "factory not released, %u\n", ref);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(font)
|
START_TEST(font)
|
||||||
{
|
{
|
||||||
IDWriteFactory *factory;
|
IDWriteFactory *factory;
|
||||||
|
@ -7444,6 +7561,7 @@ START_TEST(font)
|
||||||
test_HasKerningPairs();
|
test_HasKerningPairs();
|
||||||
test_ComputeGlyphOrigins();
|
test_ComputeGlyphOrigins();
|
||||||
test_inmemory_file_loader();
|
test_inmemory_file_loader();
|
||||||
|
test_GetGlyphImageFormats();
|
||||||
|
|
||||||
IDWriteFactory_Release(factory);
|
IDWriteFactory_Release(factory);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue