From: Jiangyi Chen <chenjiangyi@uniontech.com> Signed-off-by: Jiangyi Chen <chenjiangyi@uniontech.com> --- dlls/dwrite/font.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index f207bade10e..73e9af20c78 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -1950,12 +1950,38 @@ static HRESULT WINAPI dwritefontface5_GetFontAxisValues(IDWriteFontFace5 *iface, static BOOL WINAPI dwritefontface5_HasVariations(IDWriteFontFace5 *iface) { - static int once; + struct dwrite_fontface *fontface = impl_from_IDWriteFontFace5(iface); + IDWriteFontResource *resource; + DWRITE_FONT_AXIS_RANGE *ranges; + UINT32 axis_count, i; + BOOL ret = FALSE; + HRESULT hr; - if (!once++) - FIXME("%p: stub\n", iface); + TRACE("%p.\n", iface); - return FALSE; + hr = IDWriteFactory7_CreateFontResource(fontface->factory, fontface->file, fontface->index, &resource); + if (FAILED(hr)) + return FALSE; + + axis_count = IDWriteFontResource_GetFontAxisCount(resource); + if (axis_count && (ranges = malloc(axis_count * sizeof(*ranges)))) + { + if (SUCCEEDED(IDWriteFontResource_GetFontAxisRanges(resource, ranges, axis_count))) + { + for (i = 0; i < axis_count; i++) + { + if (ranges[i].minValue != ranges[i].maxValue) + { + ret = TRUE; + break; + } + } + } + free(ranges); + } + + IDWriteFontResource_Release(resource); + return ret; } static HRESULT WINAPI dwritefontface5_GetFontResource(IDWriteFontFace5 *iface, IDWriteFontResource **resource) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11396