Nikolay Sivov : dwrite: Use vertical variants in GetGlyphs() when appropriate.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Feb 18 09:57:19 CST 2015
Module: wine
Branch: master
Commit: 980c65f1266d4f87166d2199d302d178cc6e651c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=980c65f1266d4f87166d2199d302d178cc6e651c
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Feb 18 15:50:41 2015 +0300
dwrite: Use vertical variants in GetGlyphs() when appropriate.
---
dlls/dwrite/analyzer.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/dlls/dwrite/analyzer.c b/dlls/dwrite/analyzer.c
index b9caefd..62a6b15 100644
--- a/dlls/dwrite/analyzer.c
+++ b/dlls/dwrite/analyzer.c
@@ -864,8 +864,9 @@ static HRESULT WINAPI dwritetextanalyzer_GetGlyphs(IDWriteTextAnalyzer2 *iface,
const struct dwritescript_properties *scriptprops;
struct scriptshaping_context context;
struct scriptshaping_cache *cache = NULL;
+ BOOL update_cluster, need_vertical;
+ IDWriteFontFace1 *fontface1;
WCHAR *string;
- BOOL update_cluster;
UINT32 i, g;
HRESULT hr = S_OK;
UINT16 script;
@@ -909,6 +910,12 @@ static HRESULT WINAPI dwritetextanalyzer_GetGlyphs(IDWriteTextAnalyzer2 *iface,
if (!string)
return E_OUTOFMEMORY;
+ hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace1, (void**)&fontface1);
+ if (FAILED(hr))
+ WARN("failed to get IDWriteFontFace1\n");
+
+ need_vertical = is_sideways && fontface1 && IDWriteFontFace1_HasVerticalGlyphVariants(fontface1);
+
for (i = 0, g = 0, update_cluster = FALSE; i < length; i++) {
UINT32 codepoint;
@@ -928,6 +935,14 @@ static HRESULT WINAPI dwritetextanalyzer_GetGlyphs(IDWriteTextAnalyzer2 *iface,
if (FAILED(hr))
goto done;
+ if (need_vertical) {
+ UINT16 vertical;
+
+ hr = IDWriteFontFace1_GetVerticalGlyphVariants(fontface1, 1, &glyph_indices[g], &vertical);
+ if (hr == S_OK)
+ glyph_indices[g] = vertical;
+ }
+
g++;
}
else {
@@ -969,6 +984,8 @@ static HRESULT WINAPI dwritetextanalyzer_GetGlyphs(IDWriteTextAnalyzer2 *iface,
hr = default_shaping_ops.set_text_glyphs_props(&context, clustermap, glyph_indices, *actual_glyph_count, text_props, glyph_props);
done:
+ if (fontface1)
+ IDWriteFontFace1_Release(fontface1);
release_scriptshaping_cache(cache);
heap_free(string);
More information about the wine-cvs
mailing list