[PATCH 1/5] dwrite: Update callback analysis interfaces used by layout internally

Nikolay Sivov nsivov at codeweavers.com
Mon Feb 1 05:59:10 CST 2016


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/dwrite/layout.c | 104 ++++++++++++++++++++++++++++++---------------------
 1 file changed, 62 insertions(+), 42 deletions(-)

diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index b34ee4c..33a1e5c 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -234,8 +234,8 @@ enum layout_recompute_mask {
 struct dwrite_textlayout {
     IDWriteTextLayout2 IDWriteTextLayout2_iface;
     IDWriteTextFormat1 IDWriteTextFormat1_iface;
-    IDWriteTextAnalysisSink IDWriteTextAnalysisSink_iface;
-    IDWriteTextAnalysisSource IDWriteTextAnalysisSource_iface;
+    IDWriteTextAnalysisSink1 IDWriteTextAnalysisSink1_iface;
+    IDWriteTextAnalysisSource1 IDWriteTextAnalysisSource1_iface;
     LONG ref;
 
     WCHAR *str;
@@ -323,14 +323,14 @@ static inline struct dwrite_textlayout *impl_layout_form_IDWriteTextFormat1(IDWr
     return CONTAINING_RECORD(iface, struct dwrite_textlayout, IDWriteTextFormat1_iface);
 }
 
-static inline struct dwrite_textlayout *impl_from_IDWriteTextAnalysisSink(IDWriteTextAnalysisSink *iface)
+static inline struct dwrite_textlayout *impl_from_IDWriteTextAnalysisSink1(IDWriteTextAnalysisSink1 *iface)
 {
-    return CONTAINING_RECORD(iface, struct dwrite_textlayout, IDWriteTextAnalysisSink_iface);
+    return CONTAINING_RECORD(iface, struct dwrite_textlayout, IDWriteTextAnalysisSink1_iface);
 }
 
-static inline struct dwrite_textlayout *impl_from_IDWriteTextAnalysisSource(IDWriteTextAnalysisSource *iface)
+static inline struct dwrite_textlayout *impl_from_IDWriteTextAnalysisSource1(IDWriteTextAnalysisSource1 *iface)
 {
-    return CONTAINING_RECORD(iface, struct dwrite_textlayout, IDWriteTextAnalysisSource_iface);
+    return CONTAINING_RECORD(iface, struct dwrite_textlayout, IDWriteTextAnalysisSource1_iface);
 }
 
 static inline struct dwrite_textformat *impl_from_IDWriteTextFormat1(IDWriteTextFormat1 *iface)
@@ -769,14 +769,14 @@ static HRESULT layout_compute_runs(struct dwrite_textlayout *layout)
         }
 
         /* initial splitting by script */
-        hr = IDWriteTextAnalyzer_AnalyzeScript(analyzer, &layout->IDWriteTextAnalysisSource_iface,
-            range->h.range.startPosition, get_clipped_range_length(layout, range), &layout->IDWriteTextAnalysisSink_iface);
+        hr = IDWriteTextAnalyzer_AnalyzeScript(analyzer, (IDWriteTextAnalysisSource*)&layout->IDWriteTextAnalysisSource1_iface,
+            range->h.range.startPosition, get_clipped_range_length(layout, range), (IDWriteTextAnalysisSink*)&layout->IDWriteTextAnalysisSink1_iface);
         if (FAILED(hr))
             break;
 
         /* this splits it further */
-        hr = IDWriteTextAnalyzer_AnalyzeBidi(analyzer, &layout->IDWriteTextAnalysisSource_iface,
-            range->h.range.startPosition, get_clipped_range_length(layout, range), &layout->IDWriteTextAnalysisSink_iface);
+        hr = IDWriteTextAnalyzer_AnalyzeBidi(analyzer, (IDWriteTextAnalysisSource*)&layout->IDWriteTextAnalysisSource1_iface,
+            range->h.range.startPosition, get_clipped_range_length(layout, range), (IDWriteTextAnalysisSink*)&layout->IDWriteTextAnalysisSink1_iface);
         if (FAILED(hr))
             break;
     }
@@ -958,8 +958,8 @@ static HRESULT layout_compute(struct dwrite_textlayout *layout)
         if (FAILED(hr))
             return hr;
 
-        hr = IDWriteTextAnalyzer_AnalyzeLineBreakpoints(analyzer, &layout->IDWriteTextAnalysisSource_iface,
-            0, layout->len, &layout->IDWriteTextAnalysisSink_iface);
+        hr = IDWriteTextAnalyzer_AnalyzeLineBreakpoints(analyzer, (IDWriteTextAnalysisSource*)&layout->IDWriteTextAnalysisSource1_iface,
+            0, layout->len, (IDWriteTextAnalysisSink*)&layout->IDWriteTextAnalysisSink1_iface);
         IDWriteTextAnalyzer_Release(analyzer);
     }
     if (layout->actual_breakpoints) {
@@ -3940,12 +3940,15 @@ static const IDWriteTextFormat1Vtbl dwritetextformat1_layout_vtbl = {
     dwritetextformat1_layout_GetFontFallback
 };
 
-static HRESULT WINAPI dwritetextlayout_sink_QueryInterface(IDWriteTextAnalysisSink *iface,
+static HRESULT WINAPI dwritetextlayout_sink_QueryInterface(IDWriteTextAnalysisSink1 *iface,
     REFIID riid, void **obj)
 {
-    if (IsEqualIID(riid, &IID_IDWriteTextAnalysisSink) || IsEqualIID(riid, &IID_IUnknown)) {
+    if (IsEqualIID(riid, &IID_IDWriteTextAnalysisSink1) ||
+        IsEqualIID(riid, &IID_IDWriteTextAnalysisSink) ||
+        IsEqualIID(riid, &IID_IUnknown))
+    {
         *obj = iface;
-        IDWriteTextAnalysisSink_AddRef(iface);
+        IDWriteTextAnalysisSink1_AddRef(iface);
         return S_OK;
     }
 
@@ -3953,20 +3956,20 @@ static HRESULT WINAPI dwritetextlayout_sink_QueryInterface(IDWriteTextAnalysisSi
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI dwritetextlayout_sink_AddRef(IDWriteTextAnalysisSink *iface)
+static ULONG WINAPI dwritetextlayout_sink_AddRef(IDWriteTextAnalysisSink1 *iface)
 {
     return 2;
 }
 
-static ULONG WINAPI dwritetextlayout_sink_Release(IDWriteTextAnalysisSink *iface)
+static ULONG WINAPI dwritetextlayout_sink_Release(IDWriteTextAnalysisSink1 *iface)
 {
     return 1;
 }
 
-static HRESULT WINAPI dwritetextlayout_sink_SetScriptAnalysis(IDWriteTextAnalysisSink *iface,
+static HRESULT WINAPI dwritetextlayout_sink_SetScriptAnalysis(IDWriteTextAnalysisSink1 *iface,
     UINT32 position, UINT32 length, DWRITE_SCRIPT_ANALYSIS const* sa)
 {
-    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink(iface);
+    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink1(iface);
     struct layout_run *run;
 
     TRACE("%u %u script=%d\n", position, length, sa->script);
@@ -3983,10 +3986,10 @@ static HRESULT WINAPI dwritetextlayout_sink_SetScriptAnalysis(IDWriteTextAnalysi
     return S_OK;
 }
 
-static HRESULT WINAPI dwritetextlayout_sink_SetLineBreakpoints(IDWriteTextAnalysisSink *iface,
+static HRESULT WINAPI dwritetextlayout_sink_SetLineBreakpoints(IDWriteTextAnalysisSink1 *iface,
     UINT32 position, UINT32 length, DWRITE_LINE_BREAKPOINT const* breakpoints)
 {
-    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink(iface);
+    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink1(iface);
 
     if (position + length > layout->len)
         return E_FAIL;
@@ -3995,10 +3998,10 @@ static HRESULT WINAPI dwritetextlayout_sink_SetLineBreakpoints(IDWriteTextAnalys
     return S_OK;
 }
 
-static HRESULT WINAPI dwritetextlayout_sink_SetBidiLevel(IDWriteTextAnalysisSink *iface, UINT32 position,
+static HRESULT WINAPI dwritetextlayout_sink_SetBidiLevel(IDWriteTextAnalysisSink1 *iface, UINT32 position,
     UINT32 length, UINT8 explicitLevel, UINT8 resolvedLevel)
 {
-    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink(iface);
+    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink1(iface);
     struct layout_run *cur_run;
 
     TRACE("%u %u %u %u\n", position, length, explicitLevel, resolvedLevel);
@@ -4051,30 +4054,39 @@ static HRESULT WINAPI dwritetextlayout_sink_SetBidiLevel(IDWriteTextAnalysisSink
     return S_OK;
 }
 
-static HRESULT WINAPI dwritetextlayout_sink_SetNumberSubstitution(IDWriteTextAnalysisSink *iface,
+static HRESULT WINAPI dwritetextlayout_sink_SetNumberSubstitution(IDWriteTextAnalysisSink1 *iface,
     UINT32 position, UINT32 length, IDWriteNumberSubstitution* substitution)
 {
     return E_NOTIMPL;
 }
 
-static const IDWriteTextAnalysisSinkVtbl dwritetextlayoutsinkvtbl = {
+static HRESULT WINAPI dwritetextlayout_sink_SetGlyphOrientation(IDWriteTextAnalysisSink1 *iface,
+    UINT32 position, UINT32 length, DWRITE_GLYPH_ORIENTATION_ANGLE angle, UINT8 adjusted_bidi_level,
+    BOOL is_sideways, BOOL is_rtl)
+{
+    return E_NOTIMPL;
+}
+
+static const IDWriteTextAnalysisSink1Vtbl dwritetextlayoutsinkvtbl = {
     dwritetextlayout_sink_QueryInterface,
     dwritetextlayout_sink_AddRef,
     dwritetextlayout_sink_Release,
     dwritetextlayout_sink_SetScriptAnalysis,
     dwritetextlayout_sink_SetLineBreakpoints,
     dwritetextlayout_sink_SetBidiLevel,
-    dwritetextlayout_sink_SetNumberSubstitution
+    dwritetextlayout_sink_SetNumberSubstitution,
+    dwritetextlayout_sink_SetGlyphOrientation
 };
 
-static HRESULT WINAPI dwritetextlayout_source_QueryInterface(IDWriteTextAnalysisSource *iface,
+static HRESULT WINAPI dwritetextlayout_source_QueryInterface(IDWriteTextAnalysisSource1 *iface,
     REFIID riid, void **obj)
 {
-    if (IsEqualIID(riid, &IID_IDWriteTextAnalysisSource) ||
+    if (IsEqualIID(riid, &IID_IDWriteTextAnalysisSource1) ||
+        IsEqualIID(riid, &IID_IDWriteTextAnalysisSource) ||
         IsEqualIID(riid, &IID_IUnknown))
     {
         *obj = iface;
-        IDWriteTextAnalysisSource_AddRef(iface);
+        IDWriteTextAnalysisSource1_AddRef(iface);
         return S_OK;
     }
 
@@ -4082,20 +4094,20 @@ static HRESULT WINAPI dwritetextlayout_source_QueryInterface(IDWriteTextAnalysis
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI dwritetextlayout_source_AddRef(IDWriteTextAnalysisSource *iface)
+static ULONG WINAPI dwritetextlayout_source_AddRef(IDWriteTextAnalysisSource1 *iface)
 {
     return 2;
 }
 
-static ULONG WINAPI dwritetextlayout_source_Release(IDWriteTextAnalysisSource *iface)
+static ULONG WINAPI dwritetextlayout_source_Release(IDWriteTextAnalysisSource1 *iface)
 {
     return 1;
 }
 
-static HRESULT WINAPI dwritetextlayout_source_GetTextAtPosition(IDWriteTextAnalysisSource *iface,
+static HRESULT WINAPI dwritetextlayout_source_GetTextAtPosition(IDWriteTextAnalysisSource1 *iface,
     UINT32 position, WCHAR const** text, UINT32* text_len)
 {
-    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSource(iface);
+    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSource1(iface);
 
     TRACE("(%p)->(%u %p %p)\n", layout, position, text, text_len);
 
@@ -4111,34 +4123,41 @@ static HRESULT WINAPI dwritetextlayout_source_GetTextAtPosition(IDWriteTextAnaly
     return S_OK;
 }
 
-static HRESULT WINAPI dwritetextlayout_source_GetTextBeforePosition(IDWriteTextAnalysisSource *iface,
+static HRESULT WINAPI dwritetextlayout_source_GetTextBeforePosition(IDWriteTextAnalysisSource1 *iface,
     UINT32 position, WCHAR const** text, UINT32* text_len)
 {
     FIXME("%u %p %p: stub\n", position, text, text_len);
     return E_NOTIMPL;
 }
 
-static DWRITE_READING_DIRECTION WINAPI dwritetextlayout_source_GetParagraphReadingDirection(IDWriteTextAnalysisSource *iface)
+static DWRITE_READING_DIRECTION WINAPI dwritetextlayout_source_GetParagraphReadingDirection(IDWriteTextAnalysisSource1 *iface)
 {
-    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSource(iface);
+    struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSource1(iface);
     return IDWriteTextLayout2_GetReadingDirection(&layout->IDWriteTextLayout2_iface);
 }
 
-static HRESULT WINAPI dwritetextlayout_source_GetLocaleName(IDWriteTextAnalysisSource *iface,
+static HRESULT WINAPI dwritetextlayout_source_GetLocaleName(IDWriteTextAnalysisSource1 *iface,
     UINT32 position, UINT32* text_len, WCHAR const** locale)
 {
     FIXME("%u %p %p: stub\n", position, text_len, locale);
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI dwritetextlayout_source_GetNumberSubstitution(IDWriteTextAnalysisSource *iface,
+static HRESULT WINAPI dwritetextlayout_source_GetNumberSubstitution(IDWriteTextAnalysisSource1 *iface,
     UINT32 position, UINT32* text_len, IDWriteNumberSubstitution **substitution)
 {
     FIXME("%u %p %p: stub\n", position, text_len, substitution);
     return E_NOTIMPL;
 }
 
-static const IDWriteTextAnalysisSourceVtbl dwritetextlayoutsourcevtbl = {
+static HRESULT WINAPI dwritetextlayout_source_GetVerticalGlyphOrientation(IDWriteTextAnalysisSource1 *iface,
+    UINT32 position, UINT32 *length, DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation, UINT8 *bidi_level)
+{
+    FIXME("%u %p %p %p: stub\n", position, length, orientation, bidi_level);
+    return E_NOTIMPL;
+}
+
+static const IDWriteTextAnalysisSource1Vtbl dwritetextlayoutsourcevtbl = {
     dwritetextlayout_source_QueryInterface,
     dwritetextlayout_source_AddRef,
     dwritetextlayout_source_Release,
@@ -4146,7 +4165,8 @@ static const IDWriteTextAnalysisSourceVtbl dwritetextlayoutsourcevtbl = {
     dwritetextlayout_source_GetTextBeforePosition,
     dwritetextlayout_source_GetParagraphReadingDirection,
     dwritetextlayout_source_GetLocaleName,
-    dwritetextlayout_source_GetNumberSubstitution
+    dwritetextlayout_source_GetNumberSubstitution,
+    dwritetextlayout_source_GetVerticalGlyphOrientation
 };
 
 static HRESULT layout_format_from_textformat(struct dwrite_textlayout *layout, IDWriteTextFormat *format)
@@ -4242,8 +4262,8 @@ static HRESULT init_textlayout(const WCHAR *str, UINT32 len, IDWriteTextFormat *
 
     layout->IDWriteTextLayout2_iface.lpVtbl = &dwritetextlayoutvtbl;
     layout->IDWriteTextFormat1_iface.lpVtbl = &dwritetextformat1_layout_vtbl;
-    layout->IDWriteTextAnalysisSink_iface.lpVtbl = &dwritetextlayoutsinkvtbl;
-    layout->IDWriteTextAnalysisSource_iface.lpVtbl = &dwritetextlayoutsourcevtbl;
+    layout->IDWriteTextAnalysisSink1_iface.lpVtbl = &dwritetextlayoutsinkvtbl;
+    layout->IDWriteTextAnalysisSource1_iface.lpVtbl = &dwritetextlayoutsourcevtbl;
     layout->ref = 1;
     layout->len = len;
     layout->recompute = RECOMPUTE_EVERYTHING;
-- 
2.7.0




More information about the wine-patches mailing list