From: Konstantin Ritt Date: Mon, 2 Jul 2012 15:15:56 +0000 (+0300) Subject: shapeTextWithHarfbuzz() minor optimization X-Git-Tag: 071012110112~145 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fa00407acf2a87ecf920ab620ade31102287092a;p=profile%2Fivi%2Fqtbase.git shapeTextWithHarfbuzz() minor optimization If the used font engine is of type QFontEngine::Multi, then we already have both the "font engine runs" and the stripped glyph indicies for the kerning -> just call the actual font engine's doKerning() method. If the font engine is not of type QFontEngine::Multi, then we could safely avoid the glyph indicies extra manipulations. Change-Id: Ia8899e6d7beecfd391b050683ac41c21465336e4 Reviewed-by: Jiang Jiang --- diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index df1e153..6c290e2 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1123,7 +1123,7 @@ void QTextEngine::shapeTextWithHarfbuzz(int item) const shaper_item.advances = reinterpret_cast(g.advances_x); shaper_item.offsets = reinterpret_cast(g.offsets); - if (shaper_item.glyphIndicesPresent) { + if (engineIdx != 0 && shaper_item.glyphIndicesPresent) { for (hb_uint32 i = 0; i < shaper_item.initialGlyphCount; ++i) shaper_item.glyphs[i] &= 0x00ffffff; } @@ -1136,14 +1136,16 @@ void QTextEngine::shapeTextWithHarfbuzz(int item) const QGlyphLayout g = availableGlyphs(&si).mid(glyph_pos, shaper_item.num_glyphs); moveGlyphData(g.mid(shaper_item.num_glyphs), g.mid(shaper_item.initialGlyphCount), remaining_glyphs); - for (hb_uint32 i = 0; i < shaper_item.num_glyphs; ++i) - g.glyphs[i] = g.glyphs[i] | (engineIdx << 24); - for (hb_uint32 i = 0; i < shaper_item.item.length; ++i) shaper_item.log_clusters[i] += glyph_pos; if (kerningEnabled && !shaper_item.kerning_applied) - font->doKerning(&g, option.useDesignMetrics() ? QFlag(QTextEngine::DesignMetrics) : QFlag(0)); + actualFontEngine->doKerning(&g, option.useDesignMetrics() ? QFlag(QTextEngine::DesignMetrics) : QFlag(0)); + + if (engineIdx != 0) { + for (hb_uint32 i = 0; i < shaper_item.num_glyphs; ++i) + g.glyphs[i] |= (engineIdx << 24); + } glyph_pos += shaper_item.num_glyphs; }