diff options
author | Marko Kenttala <ext-marko.r.kenttala@nokia.com> | 2012-01-31 11:19:02 (GMT) |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-07 15:53:14 (GMT) |
commit | d7c7bf721c93fe7629f725c181b52ad9ca645a7a (patch) | |
tree | 751da2458604ee79eaf2c52f2c48a96bbed36a13 | |
parent | 9a2573dc13b3e8df6cd15bef64370ea407480fc7 (diff) | |
download | Qt-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.cpp | 28 |
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; |