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
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)

Change-Id: Ie4ac69de75f50b68b2ba87353d83098846f319f4
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
This commit is contained in:
Marko Kenttala 2012-01-31 13:19:02 +02:00 committed by Qt by Nokia
parent 4a7be92f06
commit 034ac599f6

View File

@ -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; //qreal offsetBase = (size - 4) / 4 + qMin<qreal>(size, 4) + 1;
// qDebug("offset = %f", offsetBase); // 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; bool rightToLeft = item->item.bidiLevel % 2;
int i; int i;