X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fmulti-language-support-impl.cpp;h=6553c51ef702bd8685304173da20ce07d0af84a9;hb=08563381e540b243e31b03c45d74ce49258cd730;hp=6e41ae3482ba115e805dcbd7daecadbea412c26a;hpb=bfefee3c58b0844b12b07030094a8508cb5448e8;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/multi-language-support-impl.cpp b/dali-toolkit/internal/text/multi-language-support-impl.cpp index 6e41ae3..6553c51 100644 --- a/dali-toolkit/internal/text/multi-language-support-impl.cpp +++ b/dali-toolkit/internal/text/multi-language-support-impl.cpp @@ -26,9 +26,10 @@ #include // INTERNAL INCLUDES -#include +#include #include #include +#include namespace Dali { @@ -449,12 +450,30 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, { // Check in the valid fonts cache. ValidateFontsPerScript* validateFontsPerScript = *( validFontsPerScriptCacheBuffer + script ); + + if( NULL == validateFontsPerScript ) + { + validateFontsPerScript = new ValidateFontsPerScript(); + } + if( NULL != validateFontsPerScript ) { if( !validateFontsPerScript->FindValidFont( fontId ) ) { // Use the font client to validate the font. - const GlyphIndex glyphIndex = fontClient.GetGlyphIndex( fontId, character ); + GlyphIndex glyphIndex = fontClient.GetGlyphIndex( fontId, character ); + + // Emojis are present in many monochrome fonts; prefer color by default. + if( TextAbstraction::EMOJI == script && + 0u != glyphIndex ) + { + BufferImage bitmap = fontClient.CreateBitmap( fontId, glyphIndex ); + if( bitmap && + Pixel::BGRA8888 != bitmap.GetPixelFormat() ) + { + glyphIndex = 0; + } + } if( 0u == glyphIndex ) { @@ -471,30 +490,8 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, } } } - else - { - // Use the font client to validate the font. - const GlyphIndex glyphIndex = fontClient.GetGlyphIndex( fontId, character ); - - if( 0u == glyphIndex ) - { - // Get the point size of the current font. It will be used to get a default font id. - pointSize = fontClient.GetPointSize( fontId ); - - // The font is not valid. Set to zero and a default one will be set. - fontId = 0u; - } - else - { - // Add the font to the valid font cache. - validateFontsPerScript = new ValidateFontsPerScript(); - *( validFontsPerScriptCacheBuffer + script ) = validateFontsPerScript; - - validateFontsPerScript->mValidFonts.PushBack( fontId ); - } - } } - } + } // !isDefault // The font has not been validated. Find a default one. if( 0u == fontId ) @@ -505,8 +502,11 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, // If the cache has not a default font, get one from the font client. if( 0u == fontId ) { + // Emojis are present in many monochrome fonts; prefer color by default. + bool preferColor = ( TextAbstraction::EMOJI == script ); + // Find a default font. - fontId = fontClient.FindDefaultFont( character, pointSize ); + fontId = fontClient.FindDefaultFont( character, pointSize, preferColor ); // If the system does not support a suitable font, fallback to Latin if( 0u == fontId )