From d58166d47c9894bbec88225957232c18878cc697 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Thu, 24 Aug 2017 14:25:06 +0300 Subject: [PATCH] dwrite: Don't use drawing effect for trimming signs. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/dwrite/layout.c | 7 +------ dlls/dwrite/tests/layout.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index 1acf134bc11..ff09c78e138 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -5030,20 +5030,15 @@ static HRESULT WINAPI dwritetrimmingsign_Draw(IDWriteInlineObject *iface, void * FLOAT originX, FLOAT originY, BOOL is_sideways, BOOL is_rtl, IUnknown *effect) { struct dwrite_trimmingsign *This = impl_from_IDWriteInlineObject(iface); - DWRITE_TEXT_RANGE range = { 0, ~0u }; DWRITE_TEXT_METRICS metrics; DWRITE_LINE_METRICS line; UINT32 line_count; - HRESULT hr; TRACE("(%p)->(%p %p %.2f %.2f %d %d %p)\n", This, context, renderer, originX, originY, is_sideways, is_rtl, effect); - IDWriteTextLayout_SetDrawingEffect(This->layout, effect, range); IDWriteTextLayout_GetLineMetrics(This->layout, &line, 1, &line_count); IDWriteTextLayout_GetMetrics(This->layout, &metrics); - hr = IDWriteTextLayout_Draw(This->layout, context, renderer, originX, originY - line.baseline); - IDWriteTextLayout_SetDrawingEffect(This->layout, NULL, range); - return hr; + return IDWriteTextLayout_Draw(This->layout, context, renderer, originX, originY - line.baseline); } static HRESULT WINAPI dwritetrimmingsign_GetMetrics(IDWriteInlineObject *iface, DWRITE_INLINE_OBJECT_METRICS *ret) diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c index c4034a125dd..c03d6840544 100644 --- a/dlls/dwrite/tests/layout.c +++ b/dlls/dwrite/tests/layout.c @@ -1228,12 +1228,13 @@ static void test_GetLocaleName(void) } static const struct drawcall_entry drawellipsis_seq[] = { - { DRAW_GLYPHRUN, {0x2026, 0}, {'e','n','-','u','s',0}, 1 }, + { DRAW_GLYPHRUN, {0x2026, 0}, {'e','n','-','g','b',0}, 1 }, { DRAW_LAST_KIND } }; static void test_CreateEllipsisTrimmingSign(void) { + static const WCHAR engbW[] = {'e','n','-','G','B',0}; DWRITE_INLINE_OBJECT_METRICS metrics; DWRITE_BREAK_CONDITION before, after; IDWriteTextFormat *format; @@ -1245,7 +1246,7 @@ static void test_CreateEllipsisTrimmingSign(void) factory = create_factory(); hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, - DWRITE_FONT_STRETCH_NORMAL, 10.0, enusW, &format); + DWRITE_FONT_STRETCH_NORMAL, 10.0, engbW, &format); ok(hr == S_OK, "got 0x%08x\n", hr); EXPECT_REF(format, 1); @@ -1286,12 +1287,19 @@ if (0) {/* crashes on native */ effect = create_test_effect(); EXPECT_REF(effect, 1); + flush_sequence(sequences, RENDERER_ID); hr = IDWriteInlineObject_Draw(sign, NULL, &testrenderer, 0.0f, 0.0f, FALSE, FALSE, effect); ok(hr == S_OK, "Failed to draw trimming sign, hr %#x.\n", hr); + ok_sequence(sequences, RENDERER_ID, drawellipsis_seq, "ellipsis sign draw with effect test", FALSE); EXPECT_REF(effect, 1); IUnknown_Release(effect); + flush_sequence(sequences, RENDERER_ID); + hr = IDWriteInlineObject_Draw(sign, NULL, &testrenderer, 0.0f, 0.0f, FALSE, FALSE, (void *)0xdeadbeef); + ok(hr == S_OK, "Failed to draw trimming sign, hr %#x.\n", hr); + ok_sequence(sequences, RENDERER_ID, drawellipsis_seq, "ellipsis sign draw with effect test", FALSE); + IDWriteInlineObject_Release(sign); /* non-orthogonal flow/reading combination */ -- 2.11.4.GIT