Module: wine Branch: master Commit: 9441b26dc5829a3b4e24ac051a5e444e42ebff0b URL: http://source.winehq.org/git/wine.git/?a=commit;h=9441b26dc5829a3b4e24ac051a...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Oct 29 10:20:54 2015 +0300
dwrite: Fail earlier in TranslateColorGlyphRun() for fonts without color info.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dwrite/font.c | 15 +++++++++++++++ dlls/dwrite/tests/font.c | 2 -- 2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index 0e3c09a..97ea039 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -4556,8 +4556,23 @@ HRESULT create_colorglyphenum(FLOAT originX, FLOAT originY, const DWRITE_GLYPH_R DWRITE_MEASURING_MODE mode, const DWRITE_MATRIX *transform, UINT32 palette, IDWriteColorGlyphRunEnumerator **ret) { struct dwrite_colorglyphenum *colorglyphenum; + IDWriteFontFace2 *fontface2; + BOOL colorfont; + HRESULT hr;
*ret = NULL; + + hr = IDWriteFontFace_QueryInterface(run->fontFace, &IID_IDWriteFontFace2, (void**)&fontface2); + if (FAILED(hr)) { + WARN("failed to get IDWriteFontFace2, 0x%08x\n", hr); + return hr; + } + + colorfont = IDWriteFontFace2_IsColorFont(fontface2); + IDWriteFontFace2_Release(fontface2); + if (!colorfont) + return DWRITE_E_NOCOLOR; + colorglyphenum = heap_alloc(sizeof(*colorglyphenum)); if (!colorglyphenum) return E_OUTOFMEMORY; diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index e03c819..41d848e 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -5074,10 +5074,8 @@ static void test_TranslateColorGlyphRun(void) layers = (void*)0xdeadbeef; hr = IDWriteFactory2_TranslateColorGlyphRun(factory2, 0.0, 0.0, &run, NULL, DWRITE_MEASURING_MODE_NATURAL, NULL, 0, &layers); -todo_wine { ok(hr == DWRITE_E_NOCOLOR, "got 0x%08x\n", hr); ok(layers == NULL, "got %p\n", layers); -} IDWriteFontFace_Release(fontface);
/* Segoe UI Emoji, with color support */