[Libreoffice-commits] core.git: vcl/source

Martin Hosken martin_hosken at sil.org
Sun Nov 29 19:46:21 PST 2015


 vcl/source/glyphs/graphite_layout.cxx |   25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

New commits:
commit fbad13e4c0d66e5a0e65cbd2f1c5ae88bc02f2ba
Author: Martin Hosken <martin_hosken at sil.org>
Date:   Mon Nov 30 08:20:51 2015 +0700

    Fix tdf95222, graphite justification
    
    Change-Id: I9ea7167ca21bc18db6ed7f82fc54f3824468db4e
    Reviewed-on: https://gerrit.libreoffice.org/20276
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Martin Hosken <martin_hosken at sil.org>

diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx
index d10538a..cb9a962 100644
--- a/vcl/source/glyphs/graphite_layout.cxx
+++ b/vcl/source/glyphs/graphite_layout.cxx
@@ -27,7 +27,7 @@
 #undef NDEBUG
 #endif
 
-// #define GRLAYOUT_DEBUG 1
+//#define GRLAYOUT_DEBUG 1
 
 #include <algorithm>
 #include <cassert>
@@ -602,6 +602,9 @@ void GraphiteLayout::expandOrCondense(ImplLayoutArgs &rArgs)
                 ++nClusterCount;
             }
         }
+#ifdef GRLAYOUT_DEBUG
+            fprintf(grLog(), "Expand by width %f for %ld clusters\n", nDeltaWidth, nClusterCount);
+#endif
         if (nClusterCount > 1)
         {
             float fExtraPerCluster = static_cast<float>(nDeltaWidth) / static_cast<float>(nClusterCount - 1);
@@ -740,25 +743,26 @@ void GraphiteLayout::ApplyDXArray(ImplLayoutArgs &args, std::vector<int> & rDelt
         // calculate visual cluster widths
         if (lastChar > args.mnEndCharPos) lastChar = args.mnEndCharPos;
         if (firstChar < args.mnMinCharPos) firstChar = args.mnMinCharPos;
-        long nNewClusterWidth = args.mpDXArray[lastChar - args.mnMinCharPos];
         long nOrigClusterWidth = mvCharDxs[lastChar - mnMinCharPos];
+        long nNewClusterWidth = args.mpDXArray[lastChar - args.mnMinCharPos];
         long nDGlyphOrigin = 0;
-        if (firstChar >= args.mnMinCharPos)
+        if (firstChar > args.mnMinCharPos)
         {
-            nNewClusterWidth -= args.mpDXArray[firstChar - args.mnMinCharPos];
-            nOrigClusterWidth -= mvCharDxs[firstChar - mnMinCharPos];
-            nDGlyphOrigin = args.mpDXArray[firstChar - args.mnMinCharPos]
-                                - mvCharDxs[firstChar - mnMinCharPos];
+            //nNewClusterWidth -= args.mpDXArray[firstChar - args.mnMinCharPos];
+            //nOrigClusterWidth -= mvCharDxs[firstChar - mnMinCharPos];
+            nDGlyphOrigin = args.mpDXArray[firstChar - args.mnMinCharPos - 1]
+                                - mvCharDxs[firstChar - mnMinCharPos - 1];
         }
 
         // update visual cluster
         long nDWidth = nNewClusterWidth - nOrigClusterWidth;
         if (firstChar >= args.mnMinCharPos)
             for (int n = firstChar; n <= lastChar; ++n)
-                if (mvCharDxs[n - mnMinCharPos] != -1)
-                    mvCharDxs[n - mnMinCharPos] += nDWidth + nDGlyphOrigin;
+                if (n > mnMinCharPos && mvCharDxs[n - mnMinCharPos - 1] != -1)
+                    mvCharDxs[n - mnMinCharPos - 1] += nDGlyphOrigin; // + nDWidth;
         for (unsigned int n = i; n < nLastGlyph; n++)
-            mvGlyphs[n].maLinearPos.X() += (nDGlyphOrigin + nDWidth) * (bRtl ? -1 : 1);
+            //mvGlyphs[n].maLinearPos.X() += (nDGlyphOrigin + nDWidth) * (bRtl ? -1 : 1);
+            mvGlyphs[n].maLinearPos.X() += nDGlyphOrigin * (bRtl ? -1 : 1);
 
         rDeltaWidth[nBaseGlyph] = nDWidth;
 #ifdef GRLAYOUT_DEBUG
@@ -771,6 +775,7 @@ void GraphiteLayout::ApplyDXArray(ImplLayoutArgs &args, std::vector<int> & rDelt
     // Update the dx vector with the new values.
     std::copy(args.mpDXArray, args.mpDXArray + nChars,
       mvCharDxs.begin() + (args.mnMinCharPos - mnMinCharPos));
+    //args.mpDXArray[0] = 0;
 #ifdef GRLAYOUT_DEBUG
     fprintf(grLog(),"ApplyDx %ld(%ld)\n", args.mpDXArray[nChars - 1], mnWidth);
 #endif


More information about the Libreoffice-commits mailing list