static void test_system_fontcollection(void) { IDWriteFontCollection *collection, *coll2; IDWriteFontFamily *family; HRESULT hr; UINT32 i; BOOL ret; hr = IDWriteFactory_GetSystemFontCollection(factory, &collection, FALSE); ok(hr == S_OK, "got 0x%08x\n", hr); hr = IDWriteFactory_GetSystemFontCollection(factory, &coll2, FALSE); ok(hr == S_OK, "got 0x%08x\n", hr); ok(coll2 == collection, "got %p, was %p\n", coll2, collection); IDWriteFontCollection_Release(coll2); hr = IDWriteFactory_GetSystemFontCollection(factory, &coll2, TRUE); ok(hr == S_OK, "got 0x%08x\n", hr); ok(coll2 == collection, "got %p, was %p\n", coll2, collection); IDWriteFontCollection_Release(coll2); i = IDWriteFontCollection_GetFontFamilyCount(collection); ok(i, "got %u\n", i); /* invalid index */ family = (void*)0xdeadbeef; hr = IDWriteFontCollection_GetFontFamily(collection, i, &family); ok(hr == E_FAIL, "got 0x%08x\n", hr); ok(family == NULL, "got %p\n", family); ret = FALSE; i = (UINT32)-1; hr = IDWriteFontCollection_FindFamilyName(collection, tahomaW, &i, &ret); ok(hr == S_OK, "got 0x%08x\n", hr); ok(ret, "got %d\n", ret); ok(i != (UINT32)-1, "got %u\n", i); ret = TRUE; i = 0; hr = IDWriteFontCollection_FindFamilyName(collection, blahW, &i, &ret); ok(hr == S_OK, "got 0x%08x\n", hr); ok(!ret, "got %d\n", ret); ok(i == (UINT32)-1, "got %u\n", i); IDWriteFontCollection_Release(collection); }
static HRESULT WINAPI gdiinterop_CreateFontFromLOGFONT(IDWriteGdiInterop *iface, LOGFONTW const *logfont, IDWriteFont **font) { struct gdiinterop *This = impl_from_IDWriteGdiInterop(iface); IDWriteFontCollection *collection; IDWriteFontFamily *family; DWRITE_FONT_STYLE style; BOOL exists = FALSE; UINT32 index; HRESULT hr; TRACE("(%p)->(%p %p)\n", This, logfont, font); *font = NULL; if (!logfont) return E_INVALIDARG; hr = IDWriteFactory2_GetSystemFontCollection(This->factory, &collection, FALSE); if (FAILED(hr)) { ERR("failed to get system font collection: 0x%08x.\n", hr); return hr; } hr = IDWriteFontCollection_FindFamilyName(collection, logfont->lfFaceName, &index, &exists); if (FAILED(hr)) { IDWriteFontCollection_Release(collection); goto done; } if (!exists) { hr = DWRITE_E_NOFONT; goto done; } hr = IDWriteFontCollection_GetFontFamily(collection, index, &family); if (FAILED(hr)) goto done; style = logfont->lfItalic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL; hr = IDWriteFontFamily_GetFirstMatchingFont(family, logfont->lfWeight, DWRITE_FONT_STRETCH_NORMAL, style, font); IDWriteFontFamily_Release(family); done: IDWriteFontCollection_Release(collection); return hr; }