dwrite: Implement CreateTextFormat() for IDWriteFactory6.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2022-04-26 09:15:25 +03:00 committed by Alexandre Julliard
parent 46a2f3e42f
commit cecf7d55a9
4 changed files with 40 additions and 17 deletions

View file

@ -286,8 +286,9 @@ struct dwrite_fontface
};
extern HRESULT create_numbersubstitution(DWRITE_NUMBER_SUBSTITUTION_METHOD,const WCHAR *locale,BOOL,IDWriteNumberSubstitution**) DECLSPEC_HIDDEN;
extern HRESULT create_textformat(const WCHAR*,IDWriteFontCollection*,DWRITE_FONT_WEIGHT,DWRITE_FONT_STYLE,DWRITE_FONT_STRETCH,
FLOAT,const WCHAR*,IDWriteTextFormat**) DECLSPEC_HIDDEN;
extern HRESULT create_text_format(const WCHAR *family_name, IDWriteFontCollection *collection, DWRITE_FONT_WEIGHT weight,
DWRITE_FONT_STYLE style, DWRITE_FONT_STRETCH stretch, float size, const WCHAR *locale, REFIID riid,
void **out) DECLSPEC_HIDDEN;
extern HRESULT create_textlayout(const struct textlayout_desc*,IDWriteTextLayout**) DECLSPEC_HIDDEN;
extern HRESULT create_trimmingsign(IDWriteFactory7 *factory, IDWriteTextFormat *format,
IDWriteInlineObject **sign) DECLSPEC_HIDDEN;

View file

@ -711,12 +711,14 @@ struct dwrite_textformat *unsafe_impl_from_IDWriteTextFormat(IDWriteTextFormat *
CONTAINING_RECORD(iface, struct dwrite_textformat, IDWriteTextFormat3_iface) : NULL;
}
HRESULT create_textformat(const WCHAR *family_name, IDWriteFontCollection *collection, DWRITE_FONT_WEIGHT weight,
DWRITE_FONT_STYLE style, DWRITE_FONT_STRETCH stretch, float size, const WCHAR *locale, IDWriteTextFormat **format)
HRESULT create_text_format(const WCHAR *family_name, IDWriteFontCollection *collection, DWRITE_FONT_WEIGHT weight,
DWRITE_FONT_STYLE style, DWRITE_FONT_STRETCH stretch, float size, const WCHAR *locale,
REFIID riid, void **out)
{
struct dwrite_textformat *object;
HRESULT hr;
*format = NULL;
*out = NULL;
if (size <= 0.0f)
return E_INVALIDARG;
@ -746,9 +748,10 @@ HRESULT create_textformat(const WCHAR *family_name, IDWriteFontCollection *colle
object->format.collection = collection;
IDWriteFontCollection_AddRef(object->format.collection);
*format = (IDWriteTextFormat *)&object->IDWriteTextFormat3_iface;
hr = IDWriteTextFormat3_QueryInterface(&object->IDWriteTextFormat3_iface, riid, out);
IDWriteTextFormat3_Release(&object->IDWriteTextFormat3_iface);
return S_OK;
return hr;
}
static HRESULT WINAPI dwritetrimmingsign_QueryInterface(IDWriteInlineObject *iface, REFIID riid, void **obj)

View file

@ -1199,7 +1199,8 @@ static HRESULT WINAPI dwritefactory_CreateTextFormat(IDWriteFactory7 *iface, WCH
return hr;
}
hr = create_textformat(family_name, collection, weight, style, stretch, size, locale, format);
hr = create_text_format(family_name, collection, weight, style, stretch, size, locale,
&IID_IDWriteTextFormat, (void **)format);
IDWriteFontCollection_Release(collection);
return hr;
}
@ -1895,14 +1896,35 @@ static HRESULT WINAPI dwritefactory6_CreateFontSetBuilder(IDWriteFactory7 *iface
return create_fontset_builder(iface, builder);
}
static HRESULT WINAPI dwritefactory6_CreateTextFormat(IDWriteFactory7 *iface, const WCHAR *familyname,
static HRESULT WINAPI dwritefactory6_CreateTextFormat(IDWriteFactory7 *iface, const WCHAR *family_name,
IDWriteFontCollection *collection, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_axis,
FLOAT fontsize, const WCHAR *localename, IDWriteTextFormat3 **format)
float size, const WCHAR *locale, IDWriteTextFormat3 **format)
{
FIXME("%p, %s, %p, %p, %u, %.8e, %s, %p.\n", iface, debugstr_w(familyname), collection, axis_values, num_axis,
fontsize, debugstr_w(localename), format);
struct dwritefactory *factory = impl_from_IDWriteFactory7(iface);
HRESULT hr;
return E_NOTIMPL;
TRACE("%p, %s, %p, %p, %u, %.8e, %s, %p.\n", iface, debugstr_w(family_name), collection, axis_values, num_axis,
size, debugstr_w(locale), format);
*format = NULL;
if (axis_values)
FIXME("Axis values are ignored.\n");
if (collection)
{
IDWriteFontCollection_AddRef(collection);
}
else if (FAILED(hr = factory_get_system_collection(factory, DWRITE_FONT_FAMILY_MODEL_TYPOGRAPHIC,
&IID_IDWriteFontCollection, (void **)&collection)))
{
return hr;
}
hr = create_text_format(family_name, collection, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL, size, locale, &IID_IDWriteTextFormat3, (void **)format);
IDWriteFontCollection_Release(collection);
return hr;
}
static HRESULT WINAPI dwritefactory7_GetSystemFontSet(IDWriteFactory7 *iface, BOOL include_downloadable,

View file

@ -5986,11 +5986,8 @@ static void test_text_format_axes(void)
}
hr = IDWriteFactory6_CreateTextFormat(factory, L"test_family", NULL, NULL, 0, 10.0f, L"en-us", &format3);
todo_wine
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
if (SUCCEEDED(hr))
{
hr = IDWriteTextFormat3_GetFontCollection(format3, &collection);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
@ -6025,7 +6022,7 @@ if (SUCCEEDED(hr))
ok(weight == DWRITE_FONT_WEIGHT_NORMAL, "Unexpected font weight %d.\n", weight);
IDWriteTextFormat3_Release(format3);
}
hr = IDWriteFactory_CreateTextFormat((IDWriteFactory *)factory, L"test_family", NULL,
DWRITE_FONT_WEIGHT_BOLD, DWRITE_FONT_STYLE_ITALIC, DWRITE_FONT_STRETCH_EXPANDED,
10.0f, L"en-us", &format);