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=9c7c8ec38431a64938d0a580b60c507861dc5c36;hb=6e79b1b333af799839c8e7b11a077f754132dc24;hpb=726e147d14bb18ef193b102a36d8068b62db89ed diff --git a/dali-toolkit/internal/text/glyph-metrics-helper.cpp b/dali-toolkit/internal/text/glyph-metrics-helper.cpp old mode 100644 new mode 100755 index 9c7c8ec..b47889e --- a/dali-toolkit/internal/text/glyph-metrics-helper.cpp +++ b/dali-toolkit/internal/text/glyph-metrics-helper.cpp @@ -58,7 +58,19 @@ void GetGlyphsMetrics( GlyphIndex glyphIndex, const GlyphInfo& firstGlyph = *( glyphsBuffer + glyphIndex ); Text::FontMetrics fontMetrics; - metrics->GetFontMetrics( firstGlyph.fontId, fontMetrics ); + if( 0u != firstGlyph.fontId ) + { + metrics->GetFontMetrics( firstGlyph.fontId, fontMetrics ); + } + else if( 0u != firstGlyph.index ) + { + // It may be an embedded image. + fontMetrics.ascender = firstGlyph.height; + fontMetrics.descender = 0.f; + fontMetrics.height = fontMetrics.ascender; + } + + const bool isItalicFont = metrics->HasItalicStyle( firstGlyph.fontId ); glyphMetrics.fontId = firstGlyph.fontId; glyphMetrics.fontHeight = fontMetrics.height; @@ -67,13 +79,28 @@ void GetGlyphsMetrics( GlyphIndex glyphIndex, glyphMetrics.ascender = fontMetrics.ascender; glyphMetrics.xBearing = firstGlyph.xBearing; - for( unsigned int i = 1u; i < numberOfGlyphs; ++i ) + if( 1u < numberOfGlyphs ) { - const GlyphInfo& glyphInfo = *( glyphsBuffer + glyphIndex + i ); + float maxWidthEdge = firstGlyph.xBearing + firstGlyph.width; + + for( unsigned int i = 1u; i < numberOfGlyphs; ++i ) + { + const GlyphInfo& glyphInfo = *( glyphsBuffer + glyphIndex + i ); + + // 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 += glyphInfo.width; + glyphMetrics.advance += glyphInfo.advance; + } + + glyphMetrics.width = maxWidthEdge - glyphMetrics.xBearing; } + + glyphMetrics.width += ( firstGlyph.isItalicRequired && !isItalicFont ) ? TextAbstraction::FontClient::DEFAULT_ITALIC_ANGLE * firstGlyph.height : 0.f; } } // namespace Text