vcl/source/glyphs/graphite_layout.cxx | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-)
New commits: commit fbad13e4c0d66e5a0e65cbd2f1c5ae88bc02f2ba Author: Martin Hosken <martin_hos...@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 <c...@libreoffice.org> Reviewed-by: Martin Hosken <martin_hos...@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 _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits