[2/2] dwrite: Added IDWriteTextFormat stub implementation

Nikolay Sivov nsivov at codeweavers.com
Wed Oct 10 07:03:36 CDT 2012


Added IDWriteTextFormat stub implementation
-------------- next part --------------
>From 0f31851e09459a41bffb90baf8d2843f41275b05 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed, 10 Oct 2012 14:58:20 -0400
Subject: [PATCH 2/2] Added IDWriteTextFormat stub implementation

---
 dlls/dwrite/dwrite_private.h |    1 +
 dlls/dwrite/layout.c         |  275 ++++++++++++++++++++++++++++++++++++++++++
 dlls/dwrite/main.c           |    4 +-
 3 files changed, 278 insertions(+), 2 deletions(-)

diff --git a/dlls/dwrite/dwrite_private.h b/dlls/dwrite/dwrite_private.h
index a754f42..c569495 100644
--- a/dlls/dwrite/dwrite_private.h
+++ b/dlls/dwrite/dwrite_private.h
@@ -54,6 +54,7 @@ static inline LPWSTR heap_strdupW(LPCWSTR str)
 }
 
 extern HRESULT create_font_from_logfont(const LOGFONTW*, IDWriteFont**) DECLSPEC_HIDDEN;
+extern HRESULT create_textformat(IDWriteTextFormat**) DECLSPEC_HIDDEN;
 extern HRESULT create_textlayout(IDWriteTextLayout**) DECLSPEC_HIDDEN;
 extern HRESULT create_gdiinterop(IDWriteGdiInterop**) DECLSPEC_HIDDEN;
 extern HRESULT create_localizedstrings(IDWriteLocalizedStrings**) DECLSPEC_HIDDEN;
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index 31fe99e..bb48a51 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -37,11 +37,21 @@ struct dwrite_textlayout {
     LONG ref;
 };
 
+struct dwrite_textformat {
+    IDWriteTextFormat IDWriteTextFormat_iface;
+    LONG ref;
+};
+
 static inline struct dwrite_textlayout *impl_from_IDWriteTextLayout(IDWriteTextLayout *iface)
 {
     return CONTAINING_RECORD(iface, struct dwrite_textlayout, IDWriteTextLayout_iface);
 }
 
+static inline struct dwrite_textformat *impl_from_IDWriteTextFormat(IDWriteTextFormat *iface)
+{
+    return CONTAINING_RECORD(iface, struct dwrite_textformat, IDWriteTextFormat_iface);
+}
+
 static HRESULT WINAPI dwritetextlayout_QueryInterface(IDWriteTextLayout *iface, REFIID riid, void **obj)
 {
     struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
@@ -643,3 +653,268 @@ HRESULT create_textlayout(IDWriteTextLayout **layout)
 
     return S_OK;
 }
+
+static HRESULT WINAPI dwritetextformat_QueryInterface(IDWriteTextFormat *iface, REFIID riid, void **obj)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+
+    TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
+
+    if (IsEqualIID(riid, &IID_IUnknown) ||
+        IsEqualIID(riid, &IID_IDWriteTextFormat))
+    {
+        *obj = iface;
+        IDWriteTextFormat_AddRef(iface);
+        return S_OK;
+    }
+
+    *obj = NULL;
+
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI dwritetextformat_AddRef(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    ULONG ref = InterlockedIncrement(&This->ref);
+    TRACE("(%p)->(%d)\n", This, ref);
+    return ref;
+}
+
+static ULONG WINAPI dwritetextformat_Release(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    ULONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p)->(%d)\n", This, ref);
+
+    if (!ref)
+        heap_free(This);
+
+    return S_OK;
+}
+
+static HRESULT WINAPI dwritetextformat_SetTextAlignment(IDWriteTextFormat *iface, DWRITE_TEXT_ALIGNMENT alignment)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%d): stub\n", This, alignment);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritetextformat_SetParagraphAlignment(IDWriteTextFormat *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%d): stub\n", This, alignment);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritetextformat_SetWordWrapping(IDWriteTextFormat *iface, DWRITE_WORD_WRAPPING wrapping)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%d): stub\n", This, wrapping);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritetextformat_SetReadingDirection(IDWriteTextFormat *iface, DWRITE_READING_DIRECTION direction)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%d): stub\n", This, direction);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritetextformat_SetFlowDirection(IDWriteTextFormat *iface, DWRITE_FLOW_DIRECTION direction)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%d): stub\n", This, direction);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritetextformat_SetIncrementalTabStop(IDWriteTextFormat *iface, FLOAT tabstop)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%f): stub\n", This, tabstop);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritetextformat_SetTrimming(IDWriteTextFormat *iface, DWRITE_TRIMMING const *trimming,
+    IDWriteInlineObject *trimming_sign)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%p %p): stub\n", This, trimming, trimming_sign);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritetextformat_SetLineSpacing(IDWriteTextFormat *iface, DWRITE_LINE_SPACING_METHOD spacing,
+    FLOAT line_spacing, FLOAT baseline)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%d %f %f): stub\n", This, spacing, line_spacing, baseline);
+    return E_NOTIMPL;
+}
+
+static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextformat_GetTextAlignment(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return DWRITE_TEXT_ALIGNMENT_LEADING;
+}
+
+static DWRITE_PARAGRAPH_ALIGNMENT WINAPI dwritetextformat_GetParagraphAlignment(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return DWRITE_PARAGRAPH_ALIGNMENT_NEAR;
+}
+
+static DWRITE_WORD_WRAPPING WINAPI dwritetextformat_GetWordWrapping(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return DWRITE_WORD_WRAPPING_NO_WRAP;
+}
+
+static DWRITE_READING_DIRECTION WINAPI dwritetextformat_GetReadingDirection(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return DWRITE_READING_DIRECTION_LEFT_TO_RIGHT;
+}
+
+static DWRITE_FLOW_DIRECTION WINAPI dwritetextformat_GetFlowDirection(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM;
+}
+
+static FLOAT WINAPI dwritetextformat_GetIncrementalTabStop(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return 0.0;
+}
+
+static HRESULT WINAPI dwritetextformat_GetTrimming(IDWriteTextFormat *iface, DWRITE_TRIMMING *options,
+    IDWriteInlineObject **trimming_sign)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%p %p): stub\n", This, options, trimming_sign);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritetextformat_GetLineSpacing(IDWriteTextFormat *iface, DWRITE_LINE_SPACING_METHOD *method,
+    FLOAT *spacing, FLOAT *baseline)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%p %p %p): stub\n", This, method, spacing, baseline);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritetextformat_GetFontCollection(IDWriteTextFormat *iface, IDWriteFontCollection **collection)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%p): stub\n", This, collection);
+    return E_NOTIMPL;
+}
+
+static UINT32 WINAPI dwritetextformat_GetFontFamilyNameLength(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return 0;
+}
+
+static HRESULT WINAPI dwritetextformat_GetFontFamilyName(IDWriteTextFormat *iface, WCHAR *name, UINT32 size)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%p %u): stub\n", This, name, size);
+    return E_NOTIMPL;
+}
+
+static DWRITE_FONT_WEIGHT WINAPI dwritetextformat_GetFontWeight(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return DWRITE_FONT_WEIGHT_NORMAL;
+}
+
+static DWRITE_FONT_STYLE WINAPI dwritetextformat_GetFontStyle(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return DWRITE_FONT_STYLE_NORMAL;
+}
+
+static DWRITE_FONT_STRETCH WINAPI dwritetextformat_GetFontStretch(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return DWRITE_FONT_STRETCH_NORMAL;
+}
+
+static FLOAT WINAPI dwritetextformat_GetFontSize(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return 0.0;
+}
+
+static UINT32 WINAPI dwritetextformat_GetLocaleNameLength(IDWriteTextFormat *iface)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p): stub\n", This);
+    return 0;
+}
+
+static HRESULT WINAPI dwritetextformat_GetLocaleName(IDWriteTextFormat *iface, WCHAR *name, UINT32 size)
+{
+    struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface);
+    FIXME("(%p)->(%p %u): stub\n", This, name, size);
+    return E_NOTIMPL;
+}
+
+static const IDWriteTextFormatVtbl dwritetextformatvtbl = {
+    dwritetextformat_QueryInterface,
+    dwritetextformat_AddRef,
+    dwritetextformat_Release,
+    dwritetextformat_SetTextAlignment,
+    dwritetextformat_SetParagraphAlignment,
+    dwritetextformat_SetWordWrapping,
+    dwritetextformat_SetReadingDirection,
+    dwritetextformat_SetFlowDirection,
+    dwritetextformat_SetIncrementalTabStop,
+    dwritetextformat_SetTrimming,
+    dwritetextformat_SetLineSpacing,
+    dwritetextformat_GetTextAlignment,
+    dwritetextformat_GetParagraphAlignment,
+    dwritetextformat_GetWordWrapping,
+    dwritetextformat_GetReadingDirection,
+    dwritetextformat_GetFlowDirection,
+    dwritetextformat_GetIncrementalTabStop,
+    dwritetextformat_GetTrimming,
+    dwritetextformat_GetLineSpacing,
+    dwritetextformat_GetFontCollection,
+    dwritetextformat_GetFontFamilyNameLength,
+    dwritetextformat_GetFontFamilyName,
+    dwritetextformat_GetFontWeight,
+    dwritetextformat_GetFontStyle,
+    dwritetextformat_GetFontStretch,
+    dwritetextformat_GetFontSize,
+    dwritetextformat_GetLocaleNameLength,
+    dwritetextformat_GetLocaleName
+};
+
+HRESULT create_textformat(IDWriteTextFormat **format)
+{
+    struct dwrite_textformat *This;
+
+    This = heap_alloc(sizeof(struct dwrite_textformat));
+    if (!This) return E_OUTOFMEMORY;
+
+    This->IDWriteTextFormat_iface.lpVtbl = &dwritetextformatvtbl;
+    This->ref = 1;
+
+    *format = &This->IDWriteTextFormat_iface;
+
+    return S_OK;
+}
diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c
index 67ba83c..7b54710 100644
--- a/dlls/dwrite/main.c
+++ b/dlls/dwrite/main.c
@@ -479,9 +479,9 @@ static HRESULT WINAPI dwritefactory_CreateTextFormat(IDWriteFactory *iface, WCHA
     IDWriteFontCollection *collection, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STYLE style,
     DWRITE_FONT_STRETCH stretch, FLOAT size, WCHAR const *locale, IDWriteTextFormat **format)
 {
-    FIXME("(%s %p %d %d %d %f %s %p): stub\n", debugstr_w(family_name), collection, weight, style, stretch,
+    FIXME("(%s %p %d %d %d %f %s %p): semi-stub\n", debugstr_w(family_name), collection, weight, style, stretch,
         size, debugstr_w(locale), format);
-    return E_NOTIMPL;
+    return create_textformat(format);
 }
 
 static HRESULT WINAPI dwritefactory_CreateTypography(IDWriteFactory *iface, IDWriteTypography **typography)
-- 
1.7.10.4




More information about the wine-patches mailing list