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:
parent
4a7be92f06
commit
034ac599f6
28
src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
vendored
28
src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
vendored
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user