dwrite/tests: Add some tests for CreateFontCollectionFromFontSet().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
2c77f717c8
commit
ff983fe75f
@ -587,6 +587,20 @@ static BOOL has_face_variations(IDWriteFontFace *fontface)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define check_familymodel(a,b) _check_familymodel(a,b,__LINE__)
|
||||
static void _check_familymodel(void *iface_ptr, DWRITE_FONT_FAMILY_MODEL expected_model, unsigned int line)
|
||||
{
|
||||
IDWriteFontCollection2 *collection;
|
||||
DWRITE_FONT_FAMILY_MODEL model;
|
||||
|
||||
if (SUCCEEDED(IUnknown_QueryInterface((IUnknown *)iface_ptr, &IID_IDWriteFontCollection2, (void **)&collection)))
|
||||
{
|
||||
model = IDWriteFontCollection2_GetFontFamilyModel(collection);
|
||||
ok_(__FILE__,line)(model == expected_model, "Unexpected family model %d, expected %d.\n", model, expected_model);
|
||||
IDWriteFontCollection2_Release(collection);
|
||||
}
|
||||
}
|
||||
|
||||
struct test_fontenumerator
|
||||
{
|
||||
IDWriteFontFileEnumerator IDWriteFontFileEnumerator_iface;
|
||||
@ -2441,7 +2455,6 @@ static void test_system_fontcollection(void)
|
||||
IDWriteFontCollection2 *collection2;
|
||||
IDWriteFontCollection3 *collection3;
|
||||
IDWriteFactory *factory, *factory2;
|
||||
DWRITE_FONT_FAMILY_MODEL model;
|
||||
IDWriteFontFileLoader *loader;
|
||||
IDWriteFontFamily *family;
|
||||
IDWriteFontFace *fontface;
|
||||
@ -2621,8 +2634,7 @@ static void test_system_fontcollection(void)
|
||||
todo_wine
|
||||
ok(!!event, "Expected event handle.\n");
|
||||
|
||||
model = IDWriteFontCollection3_GetFontFamilyModel(collection3);
|
||||
ok(model == DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE, "Unexpected model.\n");
|
||||
check_familymodel(collection3, DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE);
|
||||
|
||||
IDWriteFontCollection3_Release(collection3);
|
||||
}
|
||||
@ -9423,8 +9435,8 @@ static void test_AnalyzeContainerType(void)
|
||||
static void test_fontsetbuilder(void)
|
||||
{
|
||||
IDWriteFontFaceReference *ref, *ref2, *ref3;
|
||||
IDWriteFontFaceReference1 *ref1;
|
||||
IDWriteFontCollection1 *collection;
|
||||
IDWriteFontFaceReference1 *ref1;
|
||||
IDWriteFontSetBuilder1 *builder1;
|
||||
IDWriteFontSetBuilder *builder;
|
||||
DWRITE_FONT_AXIS_VALUE axis_values[4];
|
||||
@ -9457,12 +9469,36 @@ static void test_fontsetbuilder(void)
|
||||
hr = IDWriteFontSetBuilder1_AddFontFile(builder1, file);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
|
||||
hr = IDWriteFontSetBuilder1_CreateFontSet(builder1, &fontset);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
hr = IDWriteFactory3_CreateFontCollectionFromFontSet(factory, fontset, &collection);
|
||||
todo_wine
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
count = IDWriteFontCollection1_GetFontFamilyCount(collection);
|
||||
ok(count == 1, "Unexpected family count %u.\n", count);
|
||||
IDWriteFontCollection1_Release(collection);
|
||||
}
|
||||
IDWriteFontSet_Release(fontset);
|
||||
|
||||
hr = IDWriteFontSetBuilder1_AddFontFile(builder1, file);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
|
||||
hr = IDWriteFontSetBuilder1_CreateFontSet(builder1, &fontset);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
|
||||
hr = IDWriteFactory3_CreateFontCollectionFromFontSet(factory, fontset, &collection);
|
||||
todo_wine
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
check_familymodel(collection, DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE);
|
||||
count = IDWriteFontCollection1_GetFontFamilyCount(collection);
|
||||
ok(count == 1, "Unexpected family count %u.\n", count);
|
||||
IDWriteFontCollection1_Release(collection);
|
||||
}
|
||||
|
||||
/* No attempt to eliminate duplicates. */
|
||||
count = IDWriteFontSet_GetFontCount(fontset);
|
||||
ok(count == 2, "Unexpected font count %u.\n", count);
|
||||
@ -10139,6 +10175,78 @@ static void test_system_font_set(void)
|
||||
IDWriteFactory3_Release(factory);
|
||||
}
|
||||
|
||||
static void test_CreateFontCollectionFromFontSet(void)
|
||||
{
|
||||
unsigned int index, count, refcount;
|
||||
IDWriteFontCollection1 *collection;
|
||||
IDWriteFontSetBuilder1 *builder;
|
||||
DWRITE_FONT_PROPERTY props[1];
|
||||
IDWriteFontFaceReference *ref;
|
||||
IDWriteFactory5 *factory;
|
||||
IDWriteFontSet *fontset;
|
||||
IDWriteFontFile *file;
|
||||
WCHAR *path;
|
||||
BOOL exists;
|
||||
HRESULT hr;
|
||||
|
||||
if (!(factory = create_factory_iid(&IID_IDWriteFactory5)))
|
||||
{
|
||||
win_skip("_CreateFontCollectionFromFontSet() is not available.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
hr = IDWriteFactory5_CreateFontSetBuilder(factory, &builder);
|
||||
ok(hr == S_OK, "Failed to create font set builder, hr %#x.\n", hr);
|
||||
|
||||
path = create_testfontfile(test_fontfile);
|
||||
|
||||
hr = IDWriteFactory5_CreateFontFileReference(factory, path, NULL, &file);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
|
||||
hr = IDWriteFontSetBuilder1_AddFontFile(builder, file);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
|
||||
/* Add same file, with explicit properties. */
|
||||
hr = IDWriteFactory5_CreateFontFaceReference_(factory, file, 0, DWRITE_FONT_SIMULATIONS_NONE, &ref);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
props[0].propertyId = DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FAMILY_NAME;
|
||||
props[0].propertyValue = L"Another Font";
|
||||
props[0].localeName = L"en-US";
|
||||
hr = IDWriteFontSetBuilder1_AddFontFaceReference_(builder, ref, props, 1);
|
||||
todo_wine
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
IDWriteFontFaceReference_Release(ref);
|
||||
|
||||
hr = IDWriteFontSetBuilder1_CreateFontSet(builder, &fontset);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
|
||||
hr = IDWriteFactory5_CreateFontCollectionFromFontSet(factory, fontset, &collection);
|
||||
todo_wine
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
count = IDWriteFontCollection1_GetFontFamilyCount(collection);
|
||||
ok(count == 2, "Unexpected family count %u.\n", count);
|
||||
|
||||
/* Explicit fontset properties are prioritized and not replaced by actual properties from a file. */
|
||||
exists = FALSE;
|
||||
hr = IDWriteFontCollection1_FindFamilyName(collection, L"Another Font", &index, &exists);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||
ok(!!exists, "Unexpected return value %d.\n", exists);
|
||||
|
||||
IDWriteFontCollection1_Release(collection);
|
||||
}
|
||||
IDWriteFontSet_Release(fontset);
|
||||
|
||||
IDWriteFontSetBuilder1_Release(builder);
|
||||
|
||||
IDWriteFontFile_Release(file);
|
||||
refcount = IDWriteFactory5_Release(factory);
|
||||
ok(!refcount, "Unexpected factory refcount %u.\n", refcount);
|
||||
DELETE_FONTFILE(path);
|
||||
}
|
||||
|
||||
START_TEST(font)
|
||||
{
|
||||
IDWriteFactory *factory;
|
||||
@ -10212,6 +10320,7 @@ START_TEST(font)
|
||||
test_expiration_event();
|
||||
test_family_font_set();
|
||||
test_system_font_set();
|
||||
test_CreateFontCollectionFromFontSet();
|
||||
|
||||
IDWriteFactory_Release(factory);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user