[PATCH] usp10: Use single path for all fonts in ScriptGetCMap().

Nikolay Sivov nsivov at codeweavers.com
Fri Feb 22 06:52:48 CST 2019


Testing tmPitchAndFamily bitmask does not tell if font has mappings defined.
Besides that, GetGlyphIndices() handles bitmap system fonts exactly the same
way alternate path did.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46678
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/usp10/usp10.c | 45 +++++++++++++++------------------------------
 1 file changed, 15 insertions(+), 30 deletions(-)

diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c
index abc2605919..0a269961b7 100644
--- a/dlls/usp10/usp10.c
+++ b/dlls/usp10/usp10.c
@@ -3544,42 +3544,27 @@ HRESULT WINAPI ScriptGetCMap(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcInChars
 
     hr = S_OK;
 
-    if ((get_cache_pitch_family(psc) & TMPF_TRUETYPE))
+    for (i = 0; i < cChars; i++)
     {
-        for (i = 0; i < cChars; i++)
+        WCHAR inChar;
+        if (dwFlags == SGCM_RTL)
+            inChar = mirror_char(pwcInChars[i]);
+        else
+            inChar = pwcInChars[i];
+        if (!(pwOutGlyphs[i] = get_cache_glyph(psc, inChar)))
         {
-            WCHAR inChar;
-            if (dwFlags == SGCM_RTL)
-                inChar = mirror_char(pwcInChars[i]);
-            else
-                inChar = pwcInChars[i];
-            if (!(pwOutGlyphs[i] = get_cache_glyph(psc, inChar)))
+            WORD glyph;
+            if (!hdc) return E_PENDING;
+            if (GetGlyphIndicesW(hdc, &inChar, 1, &glyph, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR) return S_FALSE;
+            if (glyph == 0xffff)
             {
-                WORD glyph;
-                if (!hdc) return E_PENDING;
-                if (GetGlyphIndicesW(hdc, &inChar, 1, &glyph, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR) return S_FALSE;
-                if (glyph == 0xffff)
-                {
-                    hr = S_FALSE;
-                    glyph = 0x0;
-                }
-                pwOutGlyphs[i] = set_cache_glyph(psc, inChar, glyph);
+                hr = S_FALSE;
+                glyph = 0x0;
             }
+            pwOutGlyphs[i] = set_cache_glyph(psc, inChar, glyph);
         }
     }
-    else
-    {
-        TRACE("no glyph translation\n");
-        for (i = 0; i < cChars; i++)
-        {
-            WCHAR inChar;
-            if (dwFlags == SGCM_RTL)
-                inChar = mirror_char(pwcInChars[i]);
-            else
-                inChar = pwcInChars[i];
-            pwOutGlyphs[i] = inChar;
-        }
-    }
+
     return hr;
 }
 
-- 
2.20.1




More information about the wine-devel mailing list