[PATCH] dwrite/tests: Some tests for GetRecommendedRenderingMode() with different ppdip values
Nikolay Sivov
nsivov at codeweavers.com
Mon Oct 26 12:38:56 CDT 2015
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/dwrite/tests/font.c | 46 +++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 41 insertions(+), 5 deletions(-)
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 56572f9..ae45e8b 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -4278,7 +4278,7 @@ static void test_GetGdiCompatibleGlyphAdvances(void)
IDWriteFactory_Release(factory);
}
-static WORD get_gasp_flags(IDWriteFontFace *fontface, FLOAT emsize)
+static WORD get_gasp_flags(IDWriteFontFace *fontface, FLOAT emsize, FLOAT ppdip)
{
WORD num_recs, version;
const WORD *ptr;
@@ -4288,6 +4288,8 @@ static WORD get_gasp_flags(IDWriteFontFace *fontface, FLOAT emsize)
void *ctxt;
HRESULT hr;
+ emsize *= ppdip;
+
exists = FALSE;
hr = IDWriteFontFace_TryGetFontTable(fontface, MS_GASP_TAG,
(const void**)&ptr, &size, &ctxt, &exists);
@@ -4436,18 +4438,52 @@ if (0) /* crashes on native */
g_is_vista = fontface1 == NULL;
for (emsize = 1.0; emsize < 500.0; emsize += 1.0) {
- WORD gasp = get_gasp_flags(fontface, emsize);
DWRITE_RENDERING_MODE expected;
+ WORD gasp;
int i;
for (i = 0; i < sizeof(recmode_tests)/sizeof(recmode_tests[0]); i++) {
+ FLOAT ppdip;
+
+ ppdip = 1.0f;
+ mode = 10;
+ gasp = get_gasp_flags(fontface, emsize, ppdip);
+ expected = get_expected_rendering_mode(emsize * ppdip, gasp, recmode_tests[i].measuring, recmode_tests[i].threshold);
+ hr = IDWriteFontFace_GetRecommendedRenderingMode(fontface, emsize, ppdip, recmode_tests[i].measuring, params, &mode);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(mode == expected, "%.2f/%d: got %d, ppdip %f, flags 0x%04x, expected %d\n", emsize, i, mode, ppdip, gasp, expected);
+
+ /* some ppdip variants */
+ ppdip = 0.5f;
mode = 10;
- expected = get_expected_rendering_mode(emsize, gasp, recmode_tests[i].measuring, recmode_tests[i].threshold);
- hr = IDWriteFontFace_GetRecommendedRenderingMode(fontface, emsize, 1.0, recmode_tests[i].measuring, params, &mode);
+ gasp = get_gasp_flags(fontface, emsize, ppdip);
+ expected = get_expected_rendering_mode(emsize * ppdip, gasp, recmode_tests[i].measuring, recmode_tests[i].threshold);
+ hr = IDWriteFontFace_GetRecommendedRenderingMode(fontface, emsize, ppdip, recmode_tests[i].measuring, params, &mode);
ok(hr == S_OK, "got 0x%08x\n", hr);
- ok(mode == expected, "%.2f/%d: got %d, flags 0x%04x, expected %d\n", emsize, i, mode, gasp, expected);
+ ok(mode == expected, "%.2f/%d: got %d, ppdip %f, flags 0x%04x, expected %d\n", emsize, i, mode, ppdip, gasp, expected);
+
+ /* Only test larger sizes to workaround Win7 differences, where unscaled natural emsize threshold is used;
+ Win8 and Win10 handle this as expected. */
+ if (emsize > 20.0f) {
+ ppdip = 1.5f;
+ mode = 10;
+ gasp = get_gasp_flags(fontface, emsize, ppdip);
+ expected = get_expected_rendering_mode(emsize * ppdip, gasp, recmode_tests[i].measuring, recmode_tests[i].threshold);
+ hr = IDWriteFontFace_GetRecommendedRenderingMode(fontface, emsize, ppdip, recmode_tests[i].measuring, params, &mode);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(mode == expected, "%.2f/%d: got %d, ppdip %f, flags 0x%04x, expected %d\n", emsize, i, mode, ppdip, gasp, expected);
+
+ ppdip = 2.0f;
+ mode = 10;
+ gasp = get_gasp_flags(fontface, emsize, ppdip);
+ expected = get_expected_rendering_mode(emsize * ppdip, gasp, recmode_tests[i].measuring, recmode_tests[i].threshold);
+ hr = IDWriteFontFace_GetRecommendedRenderingMode(fontface, emsize, ppdip, recmode_tests[i].measuring, params, &mode);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(mode == expected, "%.2f/%d: got %d, ppdip %f, flags 0x%04x, expected %d\n", emsize, i, mode, ppdip, gasp, expected);
+ }
}
+ gasp = get_gasp_flags(fontface, emsize, 1.0f);
/* IDWriteFontFace1 offers another variant of this method */
if (fontface1) {
for (i = 0; i < sizeof(recmode_tests1)/sizeof(recmode_tests1[0]); i++) {
--
2.6.1
More information about the wine-patches
mailing list