summaryrefslogtreecommitdiff
path: root/vcl/source/glyphs/graphite_layout.cxx
diff options
context:
space:
mode:
authorMartin Hosken <martin_hosken@sil.org>2015-11-30 08:20:51 +0700
committerTor Lillqvist <tml@collabora.com>2015-11-30 08:01:22 +0200
commit2417df71811a0ccaf5e85a0cf4054ce1f5ee8c43 (patch)
tree0821fddbb51f9dd5e7627611d03a649b0ba5790d /vcl/source/glyphs/graphite_layout.cxx
parent2aca701f3289fef35cb1f95a32fffdc466929823 (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> (cherry picked from commit fbad13e4c0d66e5a0e65cbd2f1c5ae88bc02f2ba)
Diffstat (limited to 'vcl/source/glyphs/graphite_layout.cxx')
-rw-r--r--vcl/source/glyphs/graphite_layout.cxx25
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