summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kenttala <ext-marko.r.kenttala@nokia.com>2012-01-31 13:19:02 +0200
committerPasi Pentikäinen <ext-pasi.a.pentikainen@nokia.com>2012-02-08 17:40:17 +0100
commit201116ea7f0ee6e4a80166d3ca4ac2ad41e9d5bb (patch)
tree17e5c96ae176a491b2012322f09fec52dc1ddfd4
parentbe407ef869ba7138a4e9104fc8bb95f48a76868c (diff)
downloadqt4-tools-201116ea7f0ee6e4a80166d3ca4ac2ad41e9d5bb.tar.gz
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> (cherry picked from commit d7c7bf721c93fe7629f725c181b52ad9ca645a7a)
-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 0734442fe0..af0ee52e9a 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;