X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fglyph-metrics-helper.cpp;h=b47889e98ef062085944f04478f98ae83e2be2af;hp=ef9098c11faa5d2d11a6cced7a38923acfc2b779;hb=6e79b1b333af799839c8e7b11a077f754132dc24;hpb=87a9019904ab49c42f1e32e7ebb6a1512b0dc28c diff --git a/dali-toolkit/internal/text/glyph-metrics-helper.cpp b/dali-toolkit/internal/text/glyph-metrics-helper.cpp index ef9098c..b47889e 100755 --- a/dali-toolkit/internal/text/glyph-metrics-helper.cpp +++ b/dali-toolkit/internal/text/glyph-metrics-helper.cpp @@ -74,26 +74,33 @@ void GetGlyphsMetrics( GlyphIndex glyphIndex, glyphMetrics.fontId = firstGlyph.fontId; glyphMetrics.fontHeight = fontMetrics.height; - glyphMetrics.width = firstGlyph.width + ( ( firstGlyph.isItalicRequired && !isItalicFont ) ? static_cast( TextAbstraction::FontClient::DEFAULT_ITALIC_ANGLE * static_cast( firstGlyph.height ) ) : 0u ); + glyphMetrics.width = firstGlyph.width; glyphMetrics.advance = firstGlyph.advance; glyphMetrics.ascender = fontMetrics.ascender; glyphMetrics.xBearing = firstGlyph.xBearing; if( 1u < numberOfGlyphs ) { - const float widthInit = firstGlyph.xBearing; + float maxWidthEdge = firstGlyph.xBearing + firstGlyph.width; for( unsigned int i = 1u; i < numberOfGlyphs; ++i ) { const GlyphInfo& glyphInfo = *( glyphsBuffer + glyphIndex + i ); - glyphMetrics.width = glyphMetrics.advance + glyphInfo.xBearing + glyphInfo.width + ( ( firstGlyph.isItalicRequired && !isItalicFont ) ? static_cast( TextAbstraction::FontClient::DEFAULT_ITALIC_ANGLE * static_cast( firstGlyph.height ) ) : 0u ); - glyphMetrics.advance += glyphInfo.advance; + // update the initial xBearing if smaller. + glyphMetrics.xBearing = std::min( glyphMetrics.xBearing, glyphMetrics.advance + glyphInfo.xBearing ); + + // update the max width edge if bigger. + const float currentMaxGlyphWidthEdge = glyphMetrics.advance + glyphInfo.xBearing + glyphInfo.width; + maxWidthEdge = std::max( maxWidthEdge, currentMaxGlyphWidthEdge ); + glyphMetrics.advance += glyphInfo.advance; } - glyphMetrics.width -= widthInit; + glyphMetrics.width = maxWidthEdge - glyphMetrics.xBearing; } + + glyphMetrics.width += ( firstGlyph.isItalicRequired && !isItalicFont ) ? TextAbstraction::FontClient::DEFAULT_ITALIC_ANGLE * firstGlyph.height : 0.f; } } // namespace Text