Commit a7845c31 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

dwrite/tests: Run GetPanose() tests on all system fonts.

parent 3c6cbc2f
......@@ -5078,11 +5078,38 @@ static void test_GetGdiCompatibleMetrics(void)
IDWriteFactory_Release(factory);
}
static void get_expected_panose(IDWriteFont1 *font, DWRITE_PANOSE *panose)
{
IDWriteFontFace *fontface;
const TT_OS2_V2 *tt_os2;
void *os2_context;
UINT32 size;
BOOL exists;
HRESULT hr;
memset(panose, 0, sizeof(*panose));
hr = IDWriteFont1_CreateFontFace(font, &fontface);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IDWriteFontFace_TryGetFontTable(fontface, MS_0S2_TAG, (const void **)&tt_os2, &size, &os2_context, &exists);
ok(hr == S_OK, "got 0x%08x\n", hr);
if (tt_os2) {
memcpy(panose, &tt_os2->panose, sizeof(*panose));
IDWriteFontFace_ReleaseFontTable(fontface, os2_context);
}
IDWriteFontFace_Release(fontface);
}
static void test_GetPanose(void)
{
IDWriteFontCollection *syscollection;
IDWriteFactory *factory;
IDWriteFont1 *font1;
IDWriteFont *font;
UINT count, i;
HRESULT hr;
factory = create_factory();
......@@ -5090,56 +5117,83 @@ static void test_GetPanose(void)
hr = IDWriteFont_QueryInterface(font, &IID_IDWriteFont1, (void**)&font1);
IDWriteFont_Release(font);
if (hr == S_OK) {
if (FAILED(hr)) {
IDWriteFactory_Release(factory);
win_skip("GetPanose() is not supported.\n");
return;
}
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++) {
DWRITE_PANOSE panose, expected_panose;
IDWriteLocalizedStrings *names;
IDWriteFontFace3 *fontface3;
IDWriteFontFace *fontface;
DWRITE_PANOSE panose;
IDWriteFontFamily *family;
IDWriteFont1 *font1;
IDWriteFont *font;
WCHAR nameW[256];
if (0) /* crashes on native */
IDWriteFont1_GetPanose(font1, NULL);
hr = IDWriteFontCollection_GetFontFamily(syscollection, i, &family);
ok(hr == S_OK, "got 0x%08x\n", hr);
memset(&panose, 0, sizeof(panose));
IDWriteFont1_GetPanose(font1, &panose);
ok(panose.familyKind == DWRITE_PANOSE_FAMILY_TEXT_DISPLAY,
"got %u\n", panose.familyKind);
ok(panose.text.serifStyle == DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS,
"got %u\n", panose.text.serifStyle);
ok(panose.text.weight == DWRITE_PANOSE_WEIGHT_MEDIUM,
"got %u\n", panose.text.weight);
ok(panose.text.proportion == DWRITE_PANOSE_PROPORTION_EVEN_WIDTH,
"got %u\n", panose.text.proportion);
ok(panose.text.contrast == DWRITE_PANOSE_CONTRAST_VERY_LOW,
"got %u\n", panose.text.contrast);
ok(panose.text.strokeVariation == DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL,
"got %u\n", panose.text.strokeVariation);
ok(panose.text.armStyle == DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,
"got %u\n", panose.text.armStyle);
ok(panose.text.letterform == DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED,
"got %u\n", panose.text.letterform);
ok(panose.text.midline == DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED,
"got %u\n", panose.text.midline);
ok(panose.text.xHeight == DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE,
"got %u\n", panose.text.xHeight);
hr = IDWriteFontFamily_GetFirstMatchingFont(family, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STRETCH_NORMAL,
DWRITE_FONT_STYLE_NORMAL, &font);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IDWriteFont1_CreateFontFace(font1, &fontface);
hr = IDWriteFont_QueryInterface(font, &IID_IDWriteFont1, (void **)&font1);
ok(hr == S_OK, "got 0x%08x\n", hr);
IDWriteFont_Release(font);
hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace3, (void**)&fontface3);
IDWriteFontFace_Release(fontface);
if (hr == S_OK) {
DWRITE_PANOSE panose2;
hr = IDWriteFontFamily_GetFamilyNames(family, &names);
ok(hr == S_OK, "got 0x%08x\n", hr);
get_enus_string(names, nameW, sizeof(nameW)/sizeof(nameW[0]));
IDWriteLocalizedStrings_Release(names);
IDWriteFontFace3_GetPanose(fontface3, &panose2);
ok(!memcmp(&panose, &panose2, sizeof(panose)), "wrong panose data\n");
IDWriteFont1_GetPanose(font1, &panose);
get_expected_panose(font1, &expected_panose);
ok(panose.values[0] == expected_panose.values[0], "%s: values[0] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[0], expected_panose.values[0]);
ok(panose.values[1] == expected_panose.values[1], "%s: values[1] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[1], expected_panose.values[1]);
ok(panose.values[2] == expected_panose.values[2], "%s: values[2] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[2], expected_panose.values[2]);
ok(panose.values[3] == expected_panose.values[3], "%s: values[3] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[3], expected_panose.values[3]);
ok(panose.values[4] == expected_panose.values[4], "%s: values[4] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[4], expected_panose.values[4]);
ok(panose.values[5] == expected_panose.values[5], "%s: values[5] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[5], expected_panose.values[5]);
ok(panose.values[6] == expected_panose.values[6], "%s: values[6] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[6], expected_panose.values[6]);
ok(panose.values[7] == expected_panose.values[7], "%s: values[7] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[7], expected_panose.values[7]);
ok(panose.values[8] == expected_panose.values[8], "%s: values[8] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[8], expected_panose.values[8]);
ok(panose.values[9] == expected_panose.values[9], "%s: values[9] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
panose.values[9], expected_panose.values[9]);
hr = IDWriteFont1_CreateFontFace(font1, &fontface);
ok(hr == S_OK, "Failed to create a font face, %#x.\n", hr);
if (IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace3, (void **)&fontface3) == S_OK) {
ok(!memcmp(&panose, &expected_panose, sizeof(panose)), "%s: Unexpected panose from font face.\n",
wine_dbgstr_w(nameW));
IDWriteFontFace3_Release(fontface3);
}
IDWriteFontFace_Release(fontface);
IDWriteFont1_Release(font1);
IDWriteFontFamily_Release(family);
}
else
win_skip("GetPanose() is not supported.\n");
IDWriteFontCollection_Release(syscollection);
IDWriteFactory_Release(factory);
}
......
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