From: Heeyong Song Date: Tue, 19 Oct 2021 00:50:50 +0000 (+0000) Subject: Merge "Sync test-application" into devel/master X-Git-Tag: dali_2.0.49~6 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=7a3b4a33993cd79bb5e8cb34fefb0e7ee6ce602f;hp=7ace342f1bd46209834eef608f2d5d8e11ed801c Merge "Sync test-application" into devel/master --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp b/automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp index 5495c9d..c9453e1 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp @@ -836,6 +836,13 @@ int UtcDaliToolkitTextLabelEmojisP(void) application.SendNotification(); application.Render(); + // EMOJI + ZWJ + EMOJI case for coverage. + const std::string emojiWithZWJ = "👩‍🔬"; + label.SetProperty( TextLabel::Property::TEXT, emojiWithZWJ ); + + application.SendNotification(); + application.Render(); + END_TEST; } diff --git a/dali-toolkit/internal/text/multi-language-support-impl.cpp b/dali-toolkit/internal/text/multi-language-support-impl.cpp index a0e6ae5..82470f8 100644 --- a/dali-toolkit/internal/text/multi-language-support-impl.cpp +++ b/dali-toolkit/internal/text/multi-language-support-impl.cpp @@ -228,7 +228,8 @@ void MultilanguageSupport::SetScripts(const Vector& text, // Check if whether is right to left markup and Keeps true if the previous value was true. currentScriptRun.isRightToLeft = currentScriptRun.isRightToLeft || TextAbstraction::IsRightToLeftMark(character); - if(TextAbstraction::EMOJI == currentScriptRun.script) + // ZWJ, ZWNJ between emojis should be treated as EMOJI. + if(TextAbstraction::EMOJI == currentScriptRun.script && !(TextAbstraction::IsZeroWidthJoiner(character) || TextAbstraction::IsZeroWidthNonJoiner(character))) { // Emojis doesn't mix well with characters common to all scripts. Insert the emoji run. scripts.Insert(scripts.Begin() + scriptIndex, currentScriptRun); @@ -444,7 +445,8 @@ void MultilanguageSupport::ValidateFonts(const Vector& Vector::ConstIterator scriptRunEndIt = scripts.End(); bool isNewParagraphCharacter = false; - bool isPreviousEmojiScript = false; + bool isPreviousEmojiScript = false; + FontId previousEmojiFontId = 0u; CharacterIndex lastCharacter = startIndex + numberOfCharacters; for(Length index = startIndex; index < lastCharacter; ++index) @@ -535,6 +537,16 @@ void MultilanguageSupport::ValidateFonts(const Vector& currentFontRun.isBoldRequired = false; } + // ZWJ, ZWNJ between emojis should use the previous emoji font. + if(isEmojiScript && (TextAbstraction::IsZeroWidthJoiner(character) || TextAbstraction::IsZeroWidthNonJoiner(character))) + { + if(0u != previousEmojiFontId) + { + fontId = previousEmojiFontId; + isValidFont = true; + } + } + // If the given font is not valid, it means either: // - there is no cached font for the current script yet or, // - the user has set a different font than the default one for the current script or, @@ -647,6 +659,15 @@ void MultilanguageSupport::ValidateFonts(const Vector& } // !isValidFont (2) } // !isValidFont (1) + // Store the font id when the first character is an emoji. + if(isEmojiScript && !isPreviousEmojiScript) + { + if(0u != fontId) + { + previousEmojiFontId = fontId; + } + } + #ifdef DEBUG_ENABLED { Dali::TextAbstraction::FontDescription description;