Nikolay Sivov : dwrite: Added GetTrimming()/SetTrimming() for text format.

Alexandre Julliard julliard at winehq.org
Tue Apr 8 14:02:50 CDT 2014


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Apr  8 07:42:06 2014 +0400

dwrite: Added GetTrimming()/SetTrimming() for text format.

---

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

diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index 8fea3ad..ff246ff 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -53,6 +53,9 @@ struct dwrite_textformat_data {
     FLOAT baseline;
     FLOAT size;
 
+    DWRITE_TRIMMING trimming;
+    IDWriteInlineObject *trimmingsign;
+
     IDWriteFontCollection *collection;
 };
 
@@ -76,6 +79,7 @@ static const IDWriteTextFormatVtbl dwritetextformatvtbl;
 static void release_format_data(struct dwrite_textformat_data *data)
 {
     if (data->collection) IDWriteFontCollection_Release(data->collection);
+    if (data->trimmingsign) IDWriteInlineObject_Release(data->trimmingsign);
     heap_free(data->family_name);
     heap_free(data->locale);
 }
@@ -699,6 +703,8 @@ static void layout_format_from_textformat(struct dwrite_textlayout *layout, IDWr
         layout->format = f->format;
         layout->format.locale = heap_strdupW(f->format.locale);
         layout->format.family_name = heap_strdupW(f->format.family_name);
+        if (layout->format.trimmingsign)
+            IDWriteInlineObject_AddRef(layout->format.trimmingsign);
     }
     else
     {
@@ -718,6 +724,7 @@ static void layout_format_from_textformat(struct dwrite_textlayout *layout, IDWr
             &layout->format.spacing,
             &layout->format.baseline
         );
+        IDWriteTextFormat_GetTrimming(format, &layout->format.trimming, &layout->format.trimmingsign);
 
         /* locale name and length */
         locale_len = IDWriteTextFormat_GetLocaleNameLength(format);
@@ -849,8 +856,15 @@ static HRESULT WINAPI dwritetextformat_SetTrimming(IDWriteTextFormat *iface, DWR
     IDWriteInlineObject *trimming_sign)
 {
     struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
-    FIXME("(%p)->(%p %p): stub\n", This, trimming, trimming_sign);
-    return E_NOTIMPL;
+    TRACE("(%p)->(%p %p)\n", This, trimming, trimming_sign);
+
+    This->format.trimming = *trimming;
+    if (This->format.trimmingsign)
+        IDWriteInlineObject_Release(This->format.trimmingsign);
+    This->format.trimmingsign = trimming_sign;
+    if (This->format.trimmingsign)
+        IDWriteInlineObject_AddRef(This->format.trimmingsign);
+    return S_OK;
 }
 
 static HRESULT WINAPI dwritetextformat_SetLineSpacing(IDWriteTextFormat *iface, DWRITE_LINE_SPACING_METHOD method,
@@ -910,8 +924,13 @@ static HRESULT WINAPI dwritetextformat_GetTrimming(IDWriteTextFormat *iface, DWR
     IDWriteInlineObject **trimming_sign)
 {
     struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
-    FIXME("(%p)->(%p %p): stub\n", This, options, trimming_sign);
-    return E_NOTIMPL;
+    TRACE("(%p)->(%p %p)\n", This, options, trimming_sign);
+
+    *options = This->format.trimming;
+    if ((*trimming_sign = This->format.trimmingsign))
+        IDWriteInlineObject_AddRef(*trimming_sign);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI dwritetextformat_GetLineSpacing(IDWriteTextFormat *iface, DWRITE_LINE_SPACING_METHOD *method,
@@ -1061,6 +1080,10 @@ HRESULT create_textformat(const WCHAR *family_name, IDWriteFontCollection *colle
     This->format.spacingmethod = DWRITE_LINE_SPACING_METHOD_DEFAULT;
     This->format.spacing = 0.0;
     This->format.baseline = 0.0;
+    This->format.trimming.granularity = DWRITE_TRIMMING_GRANULARITY_NONE;
+    This->format.trimming.delimiter = 0;
+    This->format.trimming.delimiterCount = 0;
+    This->format.trimmingsign = NULL;
 
     if (collection)
     {
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index 5699ff7..a340741 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -116,8 +116,10 @@ static void test_CreateTextFormat(void)
     DWRITE_TEXT_ALIGNMENT align;
     DWRITE_FLOW_DIRECTION flow;
     DWRITE_LINE_SPACING_METHOD method;
+    DWRITE_TRIMMING trimming;
     IDWriteTextFormat *format;
     FLOAT spacing, baseline;
+    IDWriteInlineObject *trimmingsign;
     HRESULT hr;
 
     hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
@@ -160,6 +162,17 @@ if (0) /* crashes on native */
     ok(baseline == 0.0, "got %f\n", baseline);
     ok(method == DWRITE_LINE_SPACING_METHOD_DEFAULT, "got %d\n", method);
 
+    trimming.granularity = DWRITE_TRIMMING_GRANULARITY_WORD;
+    trimming.delimiter = 10;
+    trimming.delimiterCount = 10;
+    trimmingsign = (void*)0xdeadbeef;
+    hr = IDWriteTextFormat_GetTrimming(format, &trimming, &trimmingsign);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(trimming.granularity == DWRITE_TRIMMING_GRANULARITY_NONE, "got %d\n", trimming.granularity);
+    ok(trimming.delimiter == 0, "got %d\n", trimming.delimiter);
+    ok(trimming.delimiterCount == 0, "got %d\n", trimming.delimiterCount);
+    ok(trimmingsign == NULL, "got %p\n", trimmingsign);
+
     /* setters */
     hr = IDWriteTextFormat_SetTextAlignment(format, DWRITE_TEXT_ALIGNMENT_LEADING);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -179,6 +192,9 @@ if (0) /* crashes on native */
     hr = IDWriteTextFormat_SetLineSpacing(format, DWRITE_LINE_SPACING_METHOD_DEFAULT, 0.0, 0.0);
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
+    hr = IDWriteTextFormat_SetTrimming(format, &trimming, NULL);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
     IDWriteTextFormat_Release(format);
 }
 




More information about the wine-cvs mailing list