dwrite/tests: Some tests for TranslateColorGlyphRun()

Nikolay Sivov nsivov at codeweavers.com
Wed Sep 9 09:48:12 CDT 2015


---
-------------- next part --------------
From b1089fcf4a6d3fb6e7711efc0a6ae77bf155d007 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed, 9 Sep 2015 17:47:11 +0300
Subject: [PATCH] dwrite/tests: Some tests for TranslateColorGlyphRun()

---
 dlls/dwrite/tests/font.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++-
 include/winerror.h       |   1 +
 2 files changed, 124 insertions(+), 1 deletion(-)

diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index dfe782d..468a5c0 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -98,6 +98,7 @@ static const WCHAR arialW[] = {'A','r','i','a','l',0};
 static const WCHAR tahomaUppercaseW[] = {'T','A','H','O','M','A',0};
 static const WCHAR tahomaStrangecaseW[] = {'t','A','h','O','m','A',0};
 static const WCHAR blahW[]  = {'B','l','a','h','!',0};
+static const WCHAR emojiW[] = {'S','e','g','o','e',' ','U','I',' ','E','m','o','j','i',0};
 
 static IDWriteFactory *create_factory(void)
 {
@@ -4793,7 +4794,6 @@ struct CPAL_Header_0
 
 static void test_GetPaletteEntries(void)
 {
-    static const WCHAR emojiW[] = {'S','e','g','o','e',' ','U','I',' ','E','m','o','j','i',0};
     IDWriteFontFace2 *fontface2;
     IDWriteFontFace *fontface;
     IDWriteFactory *factory;
@@ -4880,6 +4880,127 @@ static void test_GetPaletteEntries(void)
     IDWriteFactory_Release(factory);
 }
 
+static void test_TranslateColorGlyphRun(void)
+{
+    IDWriteColorGlyphRunEnumerator *layers;
+    const DWRITE_COLOR_GLYPH_RUN *colorrun;
+    IDWriteFontFace *fontface;
+    IDWriteFactory2 *factory2;
+    IDWriteFactory *factory;
+    DWRITE_GLYPH_RUN run;
+    UINT32 codepoints[2];
+    IDWriteFont *font;
+    UINT16 glyphs[2];
+    BOOL hasrun;
+    HRESULT hr;
+
+    factory = create_factory();
+
+    hr = IDWriteFactory_QueryInterface(factory, &IID_IDWriteFactory2, (void**)&factory2);
+    IDWriteFactory_Release(factory);
+    if (hr != S_OK) {
+        win_skip("TranslateColorGlyphRun() is not supported.\n");
+        return;
+    }
+
+    /* Tahoma, no color support */
+    fontface = create_fontface((IDWriteFactory*)factory2);
+
+    codepoints[0] = 'A';
+    hr = IDWriteFontFace_GetGlyphIndices(fontface, codepoints, 1, glyphs);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    run.fontFace = fontface;
+    run.fontEmSize = 20.0f;
+    run.glyphCount = 1;
+    run.glyphIndices = glyphs;
+    run.glyphAdvances = NULL;
+    run.glyphOffsets = NULL;
+    run.isSideways = FALSE;
+    run.bidiLevel = 0;
+
+    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 */
+    font = get_font((IDWriteFactory*)factory2, emojiW, DWRITE_FONT_STYLE_NORMAL);
+    if (!font) {
+        IDWriteFactory2_Release(factory2);
+        skip("Segoe UI Emoji font not found.\n");
+        return;
+    }
+
+    hr = IDWriteFont_CreateFontFace(font, &fontface);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    IDWriteFont_Release(font);
+
+    codepoints[0] = 0x26c4;
+    hr = IDWriteFontFace_GetGlyphIndices(fontface, codepoints, 1, glyphs);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    run.fontFace = fontface;
+
+    layers = NULL;
+    hr = IDWriteFactory2_TranslateColorGlyphRun(factory2, 0.0, 0.0, &run, NULL,
+        DWRITE_MEASURING_MODE_NATURAL, NULL, 0, &layers);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(layers != NULL, "got %p\n", layers);
+
+    while (1) {
+        hasrun = FALSE;
+        hr = IDWriteColorGlyphRunEnumerator_MoveNext(layers, &hasrun);
+    todo_wine
+        ok(hr == S_OK, "got 0x%08x\n", hr);
+
+        if (!hasrun)
+            break;
+    }
+
+    /* iterated all way through */
+    hr = IDWriteColorGlyphRunEnumerator_GetCurrentRun(layers, &colorrun);
+todo_wine
+    ok(hr == E_NOT_VALID_STATE, "got 0x%08x\n", hr);
+
+    IDWriteColorGlyphRunEnumerator_Release(layers);
+
+    /* color font, glyph without color info */
+    codepoints[0] = 'A';
+    hr = IDWriteFontFace_GetGlyphIndices(fontface, codepoints, 1, glyphs);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    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);
+}
+    /* one glyph with, one without */
+    codepoints[0] = 'A';
+    codepoints[1] = 0x26c4;
+
+    hr = IDWriteFontFace_GetGlyphIndices(fontface, codepoints, 2, glyphs);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    run.glyphCount = 2;
+
+    layers = NULL;
+    hr = IDWriteFactory2_TranslateColorGlyphRun(factory2, 0.0, 0.0, &run, NULL,
+        DWRITE_MEASURING_MODE_NATURAL, NULL, 0, &layers);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(layers != NULL, "got %p\n", layers);
+    IDWriteColorGlyphRunEnumerator_Release(layers);
+
+    IDWriteFontFace_Release(fontface);
+    IDWriteFactory2_Release(factory2);
+}
+
 START_TEST(font)
 {
     IDWriteFactory *factory;
@@ -4931,6 +5052,7 @@ START_TEST(font)
     test_CreateAlphaTexture();
     test_IsSymbolFont();
     test_GetPaletteEntries();
+    test_TranslateColorGlyphRun();
 
     IDWriteFactory_Release(factory);
 }
diff --git a/include/winerror.h b/include/winerror.h
index 1c9df07..87419d1 100644
--- a/include/winerror.h
+++ b/include/winerror.h
@@ -2077,6 +2077,7 @@ static inline HRESULT HRESULT_FROM_WIN32(unsigned int x)
 #undef NOERROR  /* arpa/nameser_compat.h defines this */
 
 #define E_NOT_SUFFICIENT_BUFFER                            HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
+#define E_NOT_VALID_STATE                                  HRESULT_FROM_WIN32(ERROR_INVALID_STATE)
 
 #ifdef RC_INVOKED
 #define _HRESULT_TYPEDEF_(x) (x)
-- 
2.1.4



More information about the wine-patches mailing list