summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarko Kenttala <ext-marko.r.kenttala@nokia.com>2012-01-31 11:19:02 (GMT)
committerQt by Nokia <qt-info@nokia.com>2012-02-07 15:53:14 (GMT)
commitd7c7bf721c93fe7629f725c181b52ad9ca645a7a (patch)
tree751da2458604ee79eaf2c52f2c48a96bbed36a13
parent9a2573dc13b3e8df6cd15bef64370ea407480fc7 (diff)
downloadQt-d7c7bf721c93fe7629f725c181b52ad9ca645a7a.zip
Qt-d7c7bf721c93fe7629f725c181b52ad9ca645a7a.tar.gz
Qt-d7c7bf721c93fe7629f725c181b52ad9ca645a7a.tar.bz2
Fix height of some Thai characters
Some Thai characters with two above glyphs were higher than fonts ascent. This caused them to be clipped in for example qtcomponents buttons. Added checking for this and calculation of new lower offset between glyphs if needed. Task-Number: ou1cimx1#898104 Change-Id: I6eff058cbe5fe92a01ac1ad10ee351fe8ed78e67 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Sami Merilä <sami.merila@nokia.com> Reviewed-by: Pasi Pentikäinen <ext-pasi.a.pentikainen@nokia.com>
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
index 0734442..af0ee52 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
@@ -265,6 +265,34 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast)
//qreal offsetBase = (size - 4) / 4 + qMin<qreal>(size, 4) + 1;
// qDebug("offset = %f", offsetBase);
+ // To fix some Thai character heights check for two above glyphs
+ if (nmarks == 2 && (attributes[gfrom+1].combiningClass == HB_Combining_AboveRight ||
+ attributes[gfrom+1].combiningClass == HB_Combining_AboveLeft ||
+ attributes[gfrom+1].combiningClass == HB_Combining_Above))
+ if (attributes[gfrom+2].combiningClass == 23 ||
+ attributes[gfrom+2].combiningClass == 24 ||
+ attributes[gfrom+2].combiningClass == 25 ||
+ attributes[gfrom+2].combiningClass == 27 ||
+ attributes[gfrom+2].combiningClass == 28 ||
+ attributes[gfrom+2].combiningClass == 30 ||
+ attributes[gfrom+2].combiningClass == 31 ||
+ attributes[gfrom+2].combiningClass == 33 ||
+ attributes[gfrom+2].combiningClass == 34 ||
+ attributes[gfrom+2].combiningClass == 35 ||
+ attributes[gfrom+2].combiningClass == 36 ||
+ attributes[gfrom+2].combiningClass == 107 ||
+ attributes[gfrom+2].combiningClass == 122) {
+ // Two above glyphs, check total height
+ int markTotalHeight = baseMetrics.height;
+ HB_GlyphMetrics markMetrics;
+ item->font->klass->getGlyphMetrics(item->font, glyphs[gfrom+1], &markMetrics);
+ markTotalHeight += markMetrics.height;
+ item->font->klass->getGlyphMetrics(item->font, glyphs[gfrom+2], &markMetrics);
+ markTotalHeight += markMetrics.height;
+ if ((markTotalHeight + 2 * offsetBase) > (size * 10))
+ offsetBase = ((size * 10) - markTotalHeight) / 2; // Use offset that just fits
+ }
+
bool rightToLeft = item->item.bidiLevel % 2;
int i;