Nikolay Sivov : dwrite: Implement InvalidateLayout().

Alexandre Julliard julliard at wine.codeweavers.com
Wed Feb 17 11:15:03 CST 2016


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Feb 17 00:19:39 2016 +0300

dwrite: Implement InvalidateLayout().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dwrite/layout.c         |  7 +++++--
 dlls/dwrite/tests/analyzer.c |  2 +-
 dlls/dwrite/tests/layout.c   | 35 ++++++++++++++++++++++++++++++++++-
 3 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index aa77d91..a2e1308 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -3586,8 +3586,11 @@ static HRESULT WINAPI dwritetextlayout2_GetFontFallback(IDWriteTextLayout3 *ifac
 static HRESULT WINAPI dwritetextlayout3_InvalidateLayout(IDWriteTextLayout3 *iface)
 {
     struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
-    FIXME("(%p): stub\n", This);
-    return E_NOTIMPL;
+
+    TRACE("(%p)\n", This);
+
+    This->recompute = RECOMPUTE_EVERYTHING;
+    return S_OK;
 }
 
 static HRESULT WINAPI dwritetextlayout3_SetLineSpacing(IDWriteTextLayout3 *iface, DWRITE_LINE_SPACING const *spacing)
diff --git a/dlls/dwrite/tests/analyzer.c b/dlls/dwrite/tests/analyzer.c
index 07e00af..043d7a1 100644
--- a/dlls/dwrite/tests/analyzer.c
+++ b/dlls/dwrite/tests/analyzer.c
@@ -27,7 +27,7 @@
 
 #include "initguid.h"
 #include "windows.h"
-#include "dwrite_2.h"
+#include "dwrite_3.h"
 
 #include "wine/test.h"
 
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index 0fe9151..c8fe6d2 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -25,7 +25,7 @@
 #include <limits.h>
 
 #include "windows.h"
-#include "dwrite_2.h"
+#include "dwrite_3.h"
 
 #include "wine/test.h"
 
@@ -4853,6 +4853,38 @@ todo_wine
     IDWriteFactory_Release(factory);
 }
 
+static void test_InvalidateLayout(void)
+{
+    static const WCHAR strW[] = {'a',0};
+    IDWriteTextLayout3 *layout3;
+    IDWriteTextLayout *layout;
+    IDWriteTextFormat *format;
+    IDWriteFactory *factory;
+    HRESULT hr;
+
+    factory = create_factory();
+
+    hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
+        DWRITE_FONT_STRETCH_NORMAL, 10.0f, enusW, &format);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    hr = IDWriteFactory_CreateTextLayout(factory, strW, 1, format, 1000.0f, 1000.0f, &layout);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    hr = IDWriteTextLayout_QueryInterface(layout, &IID_IDWriteTextLayout3, (void**)&layout3);
+    if (hr == S_OK) {
+        hr = IDWriteTextLayout3_InvalidateLayout(layout3);
+        ok(hr == S_OK, "got 0x%08x\n", hr);
+        IDWriteTextLayout3_Release(layout3);
+    }
+    else
+        win_skip("IDWriteTextLayout3::InvalidateLayout() is not supported.\n");
+
+    IDWriteTextLayout_Release(layout);
+    IDWriteTextFormat_Release(format);
+    IDWriteFactory_Release(factory);
+}
+
 START_TEST(layout)
 {
     IDWriteFactory *factory;
@@ -4900,6 +4932,7 @@ START_TEST(layout)
     test_SetLastLineWrapping();
     test_SetOpticalAlignment();
     test_SetUnderline();
+    test_InvalidateLayout();
 
     IDWriteFactory_Release(factory);
 }




More information about the wine-cvs mailing list