diff options
author | Martin Hosken <martin_hosken@sil.org> | 2015-11-30 08:20:51 +0700 |
---|---|---|
committer | Martin Hosken <martin_hosken@sil.org> | 2015-11-30 03:45:51 +0000 |
commit | fbad13e4c0d66e5a0e65cbd2f1c5ae88bc02f2ba (patch) | |
tree | fe9bb0e7ad06ae26c32b14076f13ed270b85e137 /vcl/source | |
parent | 4ee9cfecf1800394881f5015199cd6e4af14bc92 (diff) |
Fix tdf95222, graphite justification
Change-Id: I9ea7167ca21bc18db6ed7f82fc54f3824468db4e
Reviewed-on: https://gerrit.libreoffice.org/20276
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Martin Hosken <martin_hosken@sil.org>
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/glyphs/graphite_layout.cxx | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx index d10538abcd9a..cb9a9629d11c 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 |