Module: wine Branch: master Commit: a23b395e879f135fcf40d89320a32db45522b42e URL: http://source.winehq.org/git/wine.git/?a=commit;h=a23b395e879f135fcf40d89320...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Oct 16 13:21:53 2015 +0300
dwrite: Use given ppdip factor in GetAlphaTextureBounds().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dwrite/main.c | 7 ++++++- dlls/dwrite/tests/font.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c index c996827..fc9d313 100644 --- a/dlls/dwrite/main.c +++ b/dlls/dwrite/main.c @@ -1097,7 +1097,12 @@ static HRESULT WINAPI dwritefactory_CreateGlyphRunAnalysis(IDWriteFactory2 *ifac TRACE("(%p)->(%p %.2f %p %d %d %.2f %.2f %p)\n", This, run, ppdip, transform, rendering_mode, measuring_mode, originX, originY, analysis);
- return create_glyphrunanalysis(rendering_mode, measuring_mode, run, 1.0f, DWRITE_GRID_FIT_MODE_DEFAULT, + if (ppdip <= 0.0f) { + *analysis = NULL; + return E_INVALIDARG; + } + + return create_glyphrunanalysis(rendering_mode, measuring_mode, run, ppdip, DWRITE_GRID_FIT_MODE_DEFAULT, DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE, originX, originY, analysis); }
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index 468a5c0..a2af967 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -3531,17 +3531,37 @@ static void test_CreateGlyphRunAnalysis(void) run.isSideways = FALSE; run.bidiLevel = 0;
+ /* zero ppdip */ + analysis = (void*)0xdeadbeef; + hr = IDWriteFactory_CreateGlyphRunAnalysis(factory, &run, 0.0, NULL, + DWRITE_RENDERING_MODE_ALIASED, DWRITE_MEASURING_MODE_NATURAL, + 0.0, 0.0, &analysis); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + ok(analysis == NULL, "got %p\n", analysis); + + /* negative ppdip */ + analysis = (void*)0xdeadbeef; + hr = IDWriteFactory_CreateGlyphRunAnalysis(factory, &run, -1.0, NULL, + DWRITE_RENDERING_MODE_ALIASED, DWRITE_MEASURING_MODE_NATURAL, + 0.0, 0.0, &analysis); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + ok(analysis == NULL, "got %p\n", analysis); + /* default mode is not allowed */ + analysis = (void*)0xdeadbeef; hr = IDWriteFactory_CreateGlyphRunAnalysis(factory, &run, 1.0, NULL, DWRITE_RENDERING_MODE_DEFAULT, DWRITE_MEASURING_MODE_NATURAL, 0.0, 0.0, &analysis); ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + ok(analysis == NULL, "got %p\n", analysis);
/* outline too */ + analysis = (void*)0xdeadbeef; hr = IDWriteFactory_CreateGlyphRunAnalysis(factory, &run, 1.0, NULL, DWRITE_RENDERING_MODE_OUTLINE, DWRITE_MEASURING_MODE_NATURAL, 0.0, 0.0, &analysis); ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + ok(analysis == NULL, "got %p\n", analysis);
hr = IDWriteFactory_CreateGlyphRunAnalysis(factory, &run, 1.0, NULL, DWRITE_RENDERING_MODE_ALIASED, DWRITE_MEASURING_MODE_NATURAL, @@ -3562,6 +3582,18 @@ static void test_CreateGlyphRunAnalysis(void) ok(!IsRectEmpty(&rect), "got empty rect\n"); IDWriteGlyphRunAnalysis_Release(analysis);
+ /* doubled ppdip */ + hr = IDWriteFactory_CreateGlyphRunAnalysis(factory, &run, 2.0, NULL, + DWRITE_RENDERING_MODE_ALIASED, DWRITE_MEASURING_MODE_NATURAL, + 0.0, 0.0, &analysis); + ok(hr == S_OK, "got 0x%08x\n", hr); + memset(&rect2, 0, sizeof(rect2)); + hr = IDWriteGlyphRunAnalysis_GetAlphaTextureBounds(analysis, DWRITE_TEXTURE_ALIASED_1x1, &rect2); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(rect.right - rect.left < rect2.right - rect2.left, "expected wider rect\n"); + ok(rect.bottom - rect.top < rect2.bottom - rect2.top, "expected taller rect\n"); + IDWriteGlyphRunAnalysis_Release(analysis); + hr = IDWriteFactory_CreateGlyphRunAnalysis(factory, &run, 1.0, NULL, DWRITE_RENDERING_MODE_ALIASED, DWRITE_MEASURING_MODE_NATURAL, 10.0, -5.0, &analysis);