fix issue when strikethrough used without ending tag 70/270670/2
authorabdullah <abdullahhasan10@gmail.com>
Mon, 7 Feb 2022 14:20:03 +0000 (16:20 +0200)
committerabdulleh ghujeh <abdullahhasan10@gmail.com>
Mon, 7 Feb 2022 14:22:54 +0000 (14:22 +0000)
when we use <s> without ending tag, only one character get strike through,
other tags do not apply the tag at all.
fixed the behavior to be like the other tags.

Change-Id: I94419b923772401af0f0c3e17524521bf2ade892

automated-tests/src/dali-toolkit-internal/utc-Dali-TextEditor-internal.cpp
automated-tests/src/dali-toolkit-internal/utc-Dali-TextField-internal.cpp
automated-tests/src/dali-toolkit-internal/utc-Dali-TextLabel-internal.cpp
dali-toolkit/internal/text/logical-model-impl.cpp
dali-toolkit/internal/text/logical-model-impl.h
dali-toolkit/internal/text/text-controller-impl.cpp

index 0c55d97..c52141b 100644 (file)
@@ -376,3 +376,28 @@ int UtcDaliTextEditorMarkupStrikethrough(void)
 
   END_TEST;
 }
+
+int UtcDaliTextEditorMarkupStrikethroughNoEndTag(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline(" UtcDaliTextEditorMarkupStrikethroughNoEndTag ");
+
+  TextEditor textEditor = TextEditor::New();
+
+  application.GetScene().Add(textEditor);
+
+  textEditor.SetProperty(TextEditor::Property::TEXT, "<s>ABC");
+  textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
+
+  application.SendNotification();
+  application.Render();
+
+  uint32_t expectedNumberOfStrikethroughGlyphs = 0u;
+
+  Toolkit::Internal::TextEditor& textEditorImpl            = GetImpl(textEditor);
+  Text::Length                   numberOfStrikethroughRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns();
+
+  DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION);
+
+  END_TEST;
+}
\ No newline at end of file
index 57fb32b..ae1c1fc 100644 (file)
@@ -450,3 +450,28 @@ int UtcDaliTextFieldMarkupStrikethrough(void)
 
   END_TEST;
 }
+
+int UtcDaliTextFieldMarkupStrikethroughNoEndTag(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline(" UtcDaliTextFieldMarkupStrikethroughNoEndTag ");
+
+  TextField textField = TextField::New();
+
+  application.GetScene().Add(textField);
+
+  textField.SetProperty(TextField::Property::TEXT, "<s>ABC");
+  textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true);
+
+  application.SendNotification();
+  application.Render();
+
+  uint32_t expectedNumberOfStrikethroughGlyphs = 0u;
+
+  Toolkit::Internal::TextField& textFieldImpl             = GetImpl(textField);
+  Text::Length                  numberOfStrikethroughRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns();
+
+  DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION);
+
+  END_TEST;
+}
\ No newline at end of file
index ba067f6..81519c2 100644 (file)
@@ -262,3 +262,28 @@ int UtcDaliTextLabelMarkupStrikethrough(void)
 
   END_TEST;
 }
+
+int UtcDaliTextLabelMarkupStrikethroughNoEndTag(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline(" UtcDaliTextLabelMarkupStrikethroughNoEndTag ");
+
+  TextLabel textLabel = TextLabel::New();
+
+  application.GetScene().Add(textLabel);
+
+  textLabel.SetProperty(TextLabel::Property::TEXT, "<s>ABC");
+  textLabel.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true);
+
+  application.SendNotification();
+  application.Render();
+
+  uint32_t expectedNumberOfStrikethroughGlyphs = 0u;
+
+  Toolkit::Internal::TextLabel& textLabelImpl             = GetImpl(textLabel);
+  Text::Length                  numberOfStrikethroughRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns();
+
+  DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION);
+
+  END_TEST;
+}
\ No newline at end of file
index f1fd1f5..4516662 100644 (file)
@@ -471,6 +471,11 @@ void LogicalModel::ClearFontDescriptionRuns()
   FreeFontFamilyNames(mFontDescriptionRuns);
 }
 
+void LogicalModel::ClearStrikethroughRuns()
+{
+  mStrikethroughCharacterRuns.Clear();
+}
+
 void LogicalModel::CreateParagraphInfo(CharacterIndex startIndex,
                                        Length         numberOfCharacters)
 {
index 1bed342..08c636d 100644 (file)
@@ -153,6 +153,11 @@ public:
    */
   void ClearFontDescriptionRuns();
 
+  /**
+   * @brief Clears the strikethrough runs.
+   */
+  void ClearStrikethroughRuns();
+
   // Paragraphs
 
   /**
index db6fde1..1b66665 100644 (file)
@@ -1639,8 +1639,14 @@ void Controller::Impl::CopyStrikethroughFromLogicalToVisualModels()
 
   for(Vector<StrikethroughCharacterRun>::ConstIterator it = strikethroughCharacterRuns.Begin(), endIt = strikethroughCharacterRuns.End(); it != endIt; ++it)
   {
-    CharacterIndex        characterIndex     = it->characterRun.characterIndex;
-    Length                numberOfCharacters = it->characterRun.numberOfCharacters;
+    CharacterIndex characterIndex     = it->characterRun.characterIndex;
+    Length         numberOfCharacters = it->characterRun.numberOfCharacters;
+
+    if(numberOfCharacters == 0)
+    {
+      continue;
+    }
+
     StrikethroughGlyphRun strikethroughGlyphRun;
     strikethroughGlyphRun.color                   = it->color;
     strikethroughGlyphRun.isColorSet              = it->isColorSet;
@@ -1836,6 +1842,7 @@ void Controller::Impl::ClearStyleData()
 {
   mModel->mLogicalModel->mColorRuns.Clear();
   mModel->mLogicalModel->ClearFontDescriptionRuns();
+  mModel->mLogicalModel->ClearStrikethroughRuns();
 }
 
 void Controller::Impl::ResetScrollPosition()