Nikolay Sivov : dwrite: Implement GetMetrics() for trimming sign.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jul 13 09:30:03 CDT 2015


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Jul 12 23:36:15 2015 +0300

dwrite: Implement GetMetrics() for trimming sign.

---

 dlls/dwrite/layout.c       | 19 ++++++++++++++++---
 dlls/dwrite/tests/layout.c | 16 +++++++++++++++-
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index 398c4ee..5e26b7c 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -4042,11 +4042,24 @@ static HRESULT WINAPI dwritetrimmingsign_Draw(IDWriteInlineObject *iface, void *
     return IDWriteTextLayout_Draw(This->layout, context, renderer, originX, originY);
 }
 
-static HRESULT WINAPI dwritetrimmingsign_GetMetrics(IDWriteInlineObject *iface, DWRITE_INLINE_OBJECT_METRICS *metrics)
+static HRESULT WINAPI dwritetrimmingsign_GetMetrics(IDWriteInlineObject *iface, DWRITE_INLINE_OBJECT_METRICS *ret)
 {
     struct dwrite_trimmingsign *This = impl_from_IDWriteInlineObject(iface);
-    FIXME("(%p)->(%p): stub\n", This, metrics);
-    memset(metrics, 0, sizeof(*metrics));
+    DWRITE_TEXT_METRICS metrics;
+    HRESULT hr;
+
+    TRACE("(%p)->(%p)\n", This, ret);
+
+    hr = IDWriteTextLayout_GetMetrics(This->layout, &metrics);
+    if (FAILED(hr)) {
+        memset(ret, 0, sizeof(*ret));
+        return hr;
+    }
+
+    ret->width = metrics.width;
+    ret->height = 0.0;
+    ret->baseline = 0.0;
+    ret->supportsSideways = FALSE;
     return S_OK;
 }
 
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index fa8d03a..a2150d9 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -980,6 +980,7 @@ static const struct drawcall_entry drawellipsis_seq[] = {
 
 static void test_CreateEllipsisTrimmingSign(void)
 {
+    DWRITE_INLINE_OBJECT_METRICS metrics;
     DWRITE_BREAK_CONDITION before, after;
     IDWriteTextFormat *format;
     IDWriteInlineObject *sign;
@@ -1001,8 +1002,21 @@ static void test_CreateEllipsisTrimmingSign(void)
     hr = IDWriteInlineObject_QueryInterface(sign, &IID_IDWriteTextLayout, (void**)&unk);
     ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr);
 
-if (0) /* crashes on native */
+if (0) {/* crashes on native */
     hr = IDWriteInlineObject_GetBreakConditions(sign, NULL, NULL);
+    hr = IDWriteInlineObject_GetMetrics(sign, NULL);
+}
+    metrics.width = 0.0;
+    metrics.height = 123.0;
+    metrics.baseline = 123.0;
+    metrics.supportsSideways = TRUE;
+    hr = IDWriteInlineObject_GetMetrics(sign, &metrics);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+todo_wine
+    ok(metrics.width > 0.0, "got %.2f\n", metrics.width);
+    ok(metrics.height == 0.0, "got %.2f\n", metrics.height);
+    ok(metrics.baseline == 0.0, "got %.2f\n", metrics.baseline);
+    ok(!metrics.supportsSideways, "got %d\n", metrics.supportsSideways);
 
     before = after = DWRITE_BREAK_CONDITION_CAN_BREAK;
     hr = IDWriteInlineObject_GetBreakConditions(sign, &before, &after);




More information about the wine-cvs mailing list