Aric Stewart : usp10: If a feature changes a glyph reapply the feature to the new glyph.

Alexandre Julliard julliard at winehq.org
Fri May 20 12:44:28 CDT 2011


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

Author: Aric Stewart <aric at codeweavers.com>
Date:   Thu May 19 11:15:43 2011 -0500

usp10: If a feature changes a glyph reapply the feature to the new glyph.

---

 dlls/usp10/shape.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/dlls/usp10/shape.c b/dlls/usp10/shape.c
index 9263e19..0afb7aa 100644
--- a/dlls/usp10/shape.c
+++ b/dlls/usp10/shape.c
@@ -516,6 +516,9 @@ static INT GSUB_apply_SingleSubst(const GSUB_LookupTable *look, WORD *glyphs, IN
             TRACE("  Coverage index %i\n",index);
             if (index != -1)
             {
+                if (glyphs[glyph_index] == GET_BE_WORD(ssf2->Substitute[index]))
+                    return GSUB_E_NOGLYPH;
+
                 TRACE("    Glyph is 0x%x ->",glyphs[glyph_index]);
                 glyphs[glyph_index] = GET_BE_WORD(ssf2->Substitute[index]);
                 TRACE("0x%x\n",glyphs[glyph_index]);
@@ -548,6 +551,8 @@ static INT GSUB_apply_AlternateSubst(const GSUB_LookupTable *look, WORD *glyphs,
             offset =  GET_BE_WORD(asf1->AlternateSet[index]);
             as = (const GSUB_AlternateSet*)((const BYTE*)asf1+offset);
             FIXME("%i alternates, picking index 0\n",GET_BE_WORD(as->GlyphCount));
+            if (glyphs[glyph_index] == GET_BE_WORD(as->Alternate[0]))
+                return GSUB_E_NOGLYPH;
 
             TRACE("  Glyph 0x%x ->",glyphs[glyph_index]);
             glyphs[glyph_index] = GET_BE_WORD(as->Alternate[0]);
@@ -759,6 +764,13 @@ static INT GSUB_apply_feature(const GSUB_Header * header, const GSUB_Feature* fe
     }
     if (out_index == GSUB_E_NOGLYPH)
         TRACE("lookups found no glyphs\n");
+    else
+    {
+        int out2;
+        out2 = GSUB_apply_feature(header, feature, glyphs, glyph_index, write_dir, glyph_count);
+        if (out2!=GSUB_E_NOGLYPH)
+            out_index = out2;
+    }
     return out_index;
 }
 




More information about the wine-cvs mailing list