Nikolay Sivov : dwrite: Implement HasCharacter().

Alexandre Julliard julliard at wine.codeweavers.com
Thu Oct 16 09:44:21 CDT 2014


Module: wine
Branch: master
Commit: 9b46e19aa43f4cab48329438051206e1013f961c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9b46e19aa43f4cab48329438051206e1013f961c

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Oct 16 07:30:40 2014 +0400

dwrite: Implement HasCharacter().

---

 dlls/dwrite/font.c       | 22 ++++++++++++++++++++--
 dlls/dwrite/tests/font.c | 11 +++++++++++
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index a220501..69b7746 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -835,8 +835,26 @@ static void WINAPI dwritefont_GetMetrics(IDWriteFont2 *iface, DWRITE_FONT_METRIC
 static HRESULT WINAPI dwritefont_HasCharacter(IDWriteFont2 *iface, UINT32 value, BOOL *exists)
 {
     struct dwrite_font *This = impl_from_IDWriteFont2(iface);
-    FIXME("(%p)->(0x%08x %p): stub\n", This, value, exists);
-    return E_NOTIMPL;
+    IDWriteFontFace *fontface;
+    UINT16 index;
+    HRESULT hr;
+
+    TRACE("(%p)->(0x%08x %p)\n", This, value, exists);
+
+    *exists = FALSE;
+
+    hr = IDWriteFont2_CreateFontFace(iface, &fontface);
+    if (FAILED(hr))
+        return hr;
+
+    index = 0;
+    hr = IDWriteFontFace_GetGlyphIndices(fontface, &value, 1, &index);
+    IDWriteFontFace_Release(fontface);
+    if (FAILED(hr))
+        return hr;
+
+    *exists = index != 0;
+    return S_OK;
 }
 
 static HRESULT WINAPI dwritefont_CreateFontFace(IDWriteFont2 *iface, IDWriteFontFace **face)
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 33c47bd..5e269c3 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -218,6 +218,7 @@ static void test_CreateFontFromLOGFONT(void)
     BOOL ret;
     HDC hdc;
     HFONT hfont;
+    BOOL exists;
     int i;
     UINT r;
 
@@ -251,6 +252,16 @@ if (0)
     DeleteDC(hdc);
     DeleteObject(hfont);
 
+    exists = TRUE;
+    hr = IDWriteFont_HasCharacter(font, 0xd800, &exists);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(exists == FALSE, "got %d\n", exists);
+
+    exists = FALSE;
+    hr = IDWriteFont_HasCharacter(font, 0x20, &exists);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(exists == TRUE, "got %d\n", exists);
+
     /* now check properties */
     weight = IDWriteFont_GetWeight(font);
     ok(weight == DWRITE_FONT_WEIGHT_NORMAL, "got %d\n", weight);




More information about the wine-cvs mailing list