X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fmulti-language-support-impl.cpp;h=a8834b993e2ec95cef2c5044e9ac4997239c8b0e;hp=607d1594ee258d673bb1d7984ee35dc1bd03acf0;hb=fd31db0942835fccbf5d2ae21a764e73150e6870;hpb=064ac5ba5074bfcf62c9ccb95b760b75c44b6318 diff --git a/dali-toolkit/internal/text/multi-language-support-impl.cpp b/dali-toolkit/internal/text/multi-language-support-impl.cpp index 607d159..a8834b9 100755 --- a/dali-toolkit/internal/text/multi-language-support-impl.cpp +++ b/dali-toolkit/internal/text/multi-language-support-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2019 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -435,6 +435,8 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, currentFontRun.characterRun.characterIndex = startIndex; currentFontRun.characterRun.numberOfCharacters = 0u; currentFontRun.fontId = 0u; + currentFontRun.isBoldRequired = false; + currentFontRun.isItalicRequired = false; // Get the font client. TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); @@ -448,16 +450,13 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, bool isPreviousEmojiScript = false; - // Description of fallback font which is selected at current iteration. - TextAbstraction::FontDescription selectedFontDescription; - CharacterIndex lastCharacter = startIndex + numberOfCharacters; for( Length index = startIndex; index < lastCharacter; ++index ) { // Get the current character. const Character character = *( textBuffer + index ); - bool needSoftwareBoldening = false; - bool needSoftwareItalic = false; + bool isItalicRequired = false; + bool isBoldRequired = false; // new description for current character TextAbstraction::FontDescription currentFontDescription; @@ -536,6 +535,8 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, currentFontRun.characterRun.characterIndex = currentFontRun.characterRun.characterIndex + currentFontRun.characterRun.numberOfCharacters; currentFontRun.characterRun.numberOfCharacters = 0u; currentFontRun.fontId = fontId; + currentFontRun.isItalicRequired = false; + currentFontRun.isBoldRequired = false; } // If the given font is not valid, it means either: @@ -584,16 +585,6 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, // Checks if the current character is supported by the selected font. isValidFont = fontClient.IsCharacterSupportedByFont( fontId, character ); - // Emojis are present in many monochrome fonts; prefer color by default. - if( isValidFont && - isEmojiScript ) - { - const GlyphIndex glyphIndex = fontClient.GetGlyphIndex( fontId, character ); - - // For color emojis, the font is valid if the glyph is a color glyph (the bitmap is RGBA). - isValidFont = fontClient.IsColorGlyph( fontId, glyphIndex ); - } - // If there is a valid font, cache it. if( isValidFont && !isCommonScript ) { @@ -629,14 +620,11 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, DefaultFonts* defaultFontsPerScript = NULL; - // Emojis are present in many monochrome fonts; prefer color by default. - const bool preferColor = ( TextAbstraction::EMOJI == script ); - // Find a fallback-font. fontId = fontClient.FindFallbackFont( character, currentFontDescription, currentFontPointSize, - preferColor ); + false ); if( 0u == fontId ) { @@ -676,22 +664,17 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, } #endif - if( fontId != currentFontRun.fontId ) - { - fontClient.GetDescription(fontId,selectedFontDescription); - } - - // Developer sets bold to character but selected font cannot support it - needSoftwareBoldening = ( currentFontDescription.weight >= TextAbstraction::FontWeight::BOLD ) && ( selectedFontDescription.weight < TextAbstraction::FontWeight::BOLD ); + // Whether bols style is required. + isBoldRequired = ( currentFontDescription.weight >= TextAbstraction::FontWeight::BOLD ); - // Developer sets italic to character but selected font cannot support it - needSoftwareItalic = ( currentFontDescription.slant == TextAbstraction::FontSlant::ITALIC ) && ( selectedFontDescription.slant < TextAbstraction::FontSlant::ITALIC ); + // Whether italic style is required. + isItalicRequired = ( currentFontDescription.slant >= TextAbstraction::FontSlant::ITALIC ); // The font is now validated. if( ( fontId != currentFontRun.fontId ) || isNewParagraphCharacter || // If font id is same as previous but style is diffrent, initialize new one - ( ( fontId == currentFontRun.fontId ) && ( ( needSoftwareBoldening != currentFontRun.softwareBold ) || ( needSoftwareItalic != currentFontRun.softwareItalic ) ) ) ) + ( ( fontId == currentFontRun.fontId ) && ( ( isBoldRequired != currentFontRun.isBoldRequired ) || ( isItalicRequired != currentFontRun.isItalicRequired ) ) ) ) { // Current run needs to be stored and a new one initialized. @@ -706,8 +689,8 @@ void MultilanguageSupport::ValidateFonts( const Vector& text, currentFontRun.characterRun.characterIndex = currentFontRun.characterRun.characterIndex + currentFontRun.characterRun.numberOfCharacters; currentFontRun.characterRun.numberOfCharacters = 0u; currentFontRun.fontId = fontId; - currentFontRun.softwareItalic = needSoftwareItalic; - currentFontRun.softwareBold = needSoftwareBoldening; + currentFontRun.isBoldRequired = isBoldRequired; + currentFontRun.isItalicRequired = isItalicRequired; } // Add one more character to the run.