Nikolay Sivov : dwrite/tests: Basic test for GetPaletteEntries().
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Aug 7 10:57:42 CDT 2015
Module: wine
Branch: master
Commit: 4df29eb02f9c29df09539ab0613c58bd28089c19
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4df29eb02f9c29df09539ab0613c58bd28089c19
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Aug 6 19:43:58 2015 +0300
dwrite/tests: Basic test for GetPaletteEntries().
---
dlls/dwrite/tests/font.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 107 insertions(+)
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 9a75abc..6c5cb82 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -39,6 +39,7 @@
#define MS_CMAP_TAG MS_MAKE_TAG('c','m','a','p')
#define MS_VDMX_TAG MS_MAKE_TAG('V','D','M','X')
#define MS_GASP_TAG MS_MAKE_TAG('g','a','s','p')
+#define MS_CPAL_TAG MS_MAKE_TAG('C','P','A','L')
#define EXPECT_HR(hr,hr_exp) \
ok(hr == hr_exp, "got 0x%08x, expected 0x%08x\n", hr, hr_exp)
@@ -4754,6 +4755,111 @@ static void test_IsSymbolFont(void)
IDWriteFactory_Release(factory);
}
+struct CPAL_Header_0
+{
+ USHORT version;
+ USHORT numPaletteEntries;
+ USHORT numPalette;
+ USHORT numColorRecords;
+ ULONG offsetFirstColorRecord;
+ USHORT colorRecordIndices[1];
+};
+
+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;
+ IDWriteFont *font;
+ DWRITE_COLOR_F color;
+ UINT32 palettecount, entrycount, size, colorrecords;
+ void *ctxt;
+ const struct CPAL_Header_0 *cpal_header;
+ HRESULT hr;
+ BOOL exists;
+
+ factory = create_factory();
+
+ /* Tahoma, no color support */
+ fontface = create_fontface(factory);
+ hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace2, (void**)&fontface2);
+ IDWriteFontFace_Release(fontface);
+ if (hr != S_OK) {
+ IDWriteFactory_Release(factory);
+ win_skip("GetPaletteEntries() is not supported.\n");
+ return;
+ }
+
+ hr = IDWriteFontFace2_GetPaletteEntries(fontface2, 0, 0, 1, &color);
+todo_wine
+ ok(hr == DWRITE_E_NOCOLOR, "got 0x%08x\n", hr);
+ IDWriteFontFace2_Release(fontface2);
+
+ /* Segoe UI Emoji, with color support */
+ font = get_font(factory, emojiW, DWRITE_FONT_STYLE_NORMAL);
+ if (!font) {
+ IDWriteFactory_Release(factory);
+ 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);
+
+ hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace2, (void**)&fontface2);
+ IDWriteFontFace_Release(fontface);
+
+ palettecount = IDWriteFontFace2_GetColorPaletteCount(fontface2);
+ ok(palettecount >= 1, "got %u\n", palettecount);
+
+ entrycount = IDWriteFontFace2_GetPaletteEntryCount(fontface2);
+ ok(entrycount >= 1, "got %u\n", entrycount);
+
+ exists = FALSE;
+ hr = IDWriteFontFace2_TryGetFontTable(fontface2, MS_CPAL_TAG, (const void**)&cpal_header, &size, &ctxt, &exists);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(exists, "got %d\n", exists);
+ colorrecords = GET_BE_WORD(cpal_header->numColorRecords);
+ ok(colorrecords >= 1, "got %u\n", colorrecords);
+
+ /* invalid palette index */
+ color.r = color.g = color.b = color.a = 123.0;
+ hr = IDWriteFontFace2_GetPaletteEntries(fontface2, palettecount, 0, 1, &color);
+todo_wine
+ ok(hr == DWRITE_E_NOCOLOR, "got 0x%08x\n", hr);
+ ok(color.r == 123.0 && color.g == 123.0 && color.b == 123.0 && color.a == 123.0,
+ "got wrong color %.2fx%.2fx%.2fx%.2f\n", color.r, color.g, color.b, color.a);
+
+ /* invalid entry index */
+ color.r = color.g = color.b = color.a = 123.0;
+ hr = IDWriteFontFace2_GetPaletteEntries(fontface2, 0, entrycount, 1, &color);
+todo_wine
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+ ok(color.r == 123.0 && color.g == 123.0 && color.b == 123.0 && color.a == 123.0,
+ "got wrong color %.2fx%.2fx%.2fx%.2f\n", color.r, color.g, color.b, color.a);
+
+ color.r = color.g = color.b = color.a = 123.0;
+ hr = IDWriteFontFace2_GetPaletteEntries(fontface2, 0, entrycount - 1, 1, &color);
+todo_wine {
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(color.r != 123.0 && color.g != 123.0 && color.b != 123.0 && color.a != 123.0,
+ "got wrong color %.2fx%.2fx%.2fx%.2f\n", color.r, color.g, color.b, color.a);
+}
+
+ /* zero return length */
+ color.r = color.g = color.b = color.a = 123.0;
+ hr = IDWriteFontFace2_GetPaletteEntries(fontface2, 0, 0, 0, &color);
+todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(color.r == 123.0 && color.g == 123.0 && color.b == 123.0 && color.a == 123.0,
+ "got wrong color %.2fx%.2fx%.2fx%.2f\n", color.r, color.g, color.b, color.a);
+
+ IDWriteFontFace2_Release(fontface2);
+ IDWriteFactory_Release(factory);
+}
+
START_TEST(font)
{
IDWriteFactory *factory;
@@ -4804,6 +4910,7 @@ START_TEST(font)
test_GetAlphaBlendParams();
test_CreateAlphaTexture();
test_IsSymbolFont();
+ test_GetPaletteEntries();
IDWriteFactory_Release(factory);
}
More information about the wine-cvs
mailing list