Fix the problem that Autoscroll does not work properly 60/317360/2
authorANZ1217 <chihun.jeong@samsung.com>
Mon, 9 Sep 2024 10:44:12 +0000 (19:44 +0900)
committerANZ1217 <chihun.jeong@samsung.com>
Mon, 9 Sep 2024 11:05:51 +0000 (20:05 +0900)
when there are only RTL Marker and LTR Text in Text.

Change-Id: I2d25db75b29b51089f423655c00e11895719cd98

dali-toolkit/internal/text/multi-language-support-impl.cpp

index b6968d0ed6f8e394fe79355bfcffe0a4f81ed98d..c5a823adb47be01053ad30ea171b7e7a3cae7b71 100644 (file)
@@ -371,6 +371,10 @@ void MultilanguageSupport::SetScripts(const Vector<Character>& text,
   // Whether the first valid script is a right to left script.
   bool isParagraphRTL = false;
 
+  // Whether there is an RTL marker in the invalid script.
+  // This variable was added to solve the problem that autoscroll does not work properly when there are only RTL Marker and LTR Text.
+  bool hasRTLMarker = false;
+
   // Count the number of characters which are valid for all scripts. i.e. white spaces or '\n'.
   Length numberOfAllScriptCharacters = 0u;
 
@@ -433,6 +437,7 @@ void MultilanguageSupport::SetScripts(const Vector<Character>& 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);
+      hasRTLMarker = hasRTLMarker || TextAbstraction::IsRightToLeftMark(character);
 
       // Count all these characters to be added into a script.
       ++numberOfAllScriptCharacters;
@@ -532,12 +537,14 @@ void MultilanguageSupport::SetScripts(const Vector<Character>& text,
       // Adds the white spaces which are at the begining of the script.
       numberOfAllScriptCharacters++;
       AddCurrentScriptAndCreatNewScript(script,
-                                        TextAbstraction::IsRightToLeftScript(script),
+                                        hasRTLMarker ? true : TextAbstraction::IsRightToLeftScript(script),
                                         true,
                                         currentScriptRun,
                                         numberOfAllScriptCharacters,
                                         scripts,
                                         scriptIndex);
+
+      hasRTLMarker = false;
     }
     else
     {