[PATCH 0/2] MR9914: dwrite/tests: Handle COLRv1 in GetGlyphImageFormats() tests.
Triggered by Segoe UI Emoji. Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9914
From: Nikolay Sivov <nsivov@codeweavers.com> Triggered by Segoe UI Emoji. Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/dwrite/tests/font.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index c7aaf8f71f7..43441b58d46 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -9513,6 +9513,30 @@ static DWORD get_cblc_formats(IDWriteFontFace4 *fontface) return ret; } +static DWORD get_colr_formats(IDWriteFontFace4 *fontface) +{ + DWORD ret = DWRITE_GLYPH_IMAGE_FORMATS_COLR; + struct dwrite_fonttable colr; + BOOL exists = FALSE; + WORD version; + HRESULT hr; + + hr = IDWriteFontFace4_TryGetFontTable(fontface, MS_COLR_TAG, (const void **)&colr.data, &colr.size, &colr.context, &exists); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!!exists, "Expected COLR table.\n"); + + if (!exists) + return 0; + + version = table_read_be_word(&colr, NULL, 0); + if (version == 1) + ret |= DWRITE_GLYPH_IMAGE_FORMATS_COLR_PAINT_TREE; + + IDWriteFontFace4_ReleaseFontTable(fontface, colr.context); + + return ret; +} + static DWORD get_face_glyph_image_formats(IDWriteFontFace4 *fontface) { DWORD ret = DWRITE_GLYPH_IMAGE_FORMATS_NONE; @@ -9525,7 +9549,7 @@ static DWORD get_face_glyph_image_formats(IDWriteFontFace4 *fontface) ret |= DWRITE_GLYPH_IMAGE_FORMATS_CFF; if (face_has_table(fontface, MS_COLR_TAG)) - ret |= DWRITE_GLYPH_IMAGE_FORMATS_COLR; + ret |= get_colr_formats(fontface); if (face_has_table(fontface, MS_SVG__TAG)) ret |= DWRITE_GLYPH_IMAGE_FORMATS_SVG; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9914
From: Nikolay Sivov <nsivov@codeweavers.com> Spotted this as a test failure on Windows 11 with Material Icons Outlined font, which has units-per-em of 512. Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/dwrite/opentype.c | 2 +- dlls/dwrite/tests/font.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/dwrite/opentype.c b/dlls/dwrite/opentype.c index 69b8bb5342d..1d9f13f8442 100644 --- a/dlls/dwrite/opentype.c +++ b/dlls/dwrite/opentype.c @@ -2067,7 +2067,7 @@ void opentype_get_font_metrics(struct file_stream_desc *stream_desc, DWRITE_FONT } if (metrics->underlineThickness == 0) - metrics->underlineThickness = metrics->designUnitsPerEm / 14; + metrics->underlineThickness = (metrics->designUnitsPerEm + 7) / 14; if (metrics->strikethroughThickness == 0) metrics->strikethroughThickness = metrics->underlineThickness; diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index 43441b58d46..fafb040aaed 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -2110,7 +2110,7 @@ static void get_expected_font_metrics(IDWriteFontFace *fontface, DWRITE_FONT_MET } if (metrics->underlineThickness == 0) - metrics->underlineThickness = metrics->designUnitsPerEm / 14; + metrics->underlineThickness = (metrics->designUnitsPerEm + 7) / 14; if (metrics->strikethroughThickness == 0) metrics->strikethroughThickness = metrics->underlineThickness; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9914
participants (2)
-
Nikolay Sivov -
Nikolay Sivov (@nsivov)