Fix bidirectional info clear issue 08/319708/2
authorBowon Ryu <bowon.ryu@samsung.com>
Mon, 17 Feb 2025 01:11:47 +0000 (10:11 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Mon, 17 Feb 2025 04:10:44 +0000 (13:10 +0900)
ClearBidirectionalParagraphInfo is called before mBidirectionalParagraphInfo is cleared to maintain sync so that the vector scope is valid.

Change-Id: Ib3cba9b13e28e873b0a0cd157c5cea19947652f0
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp
dali-toolkit/internal/text/controller/text-controller-impl-data-clearer.cpp
dali-toolkit/internal/text/controller/text-controller-text-updater.cpp
dali-toolkit/internal/text/logical-model-impl.cpp
dali-toolkit/internal/text/logical-model-impl.h

index 3023b9af504d83a8fcbd209e3cebfcf5d715033f..5beeca220204b7986ed32f6f5edff9dc7edae03e 100644 (file)
@@ -126,6 +126,7 @@ void AsyncTextLoader::ClearTextModelData()
   mTextModel->mLogicalModel->mBackgroundColorRuns.Clear();
   mTextModel->mLogicalModel->mLineBreakInfo.Clear();
   mTextModel->mLogicalModel->mParagraphInfo.Clear();
+  mTextModel->mLogicalModel->ClearBidirectionalParagraphInfo(mModule.GetBidirectionalSupport());
   mTextModel->mLogicalModel->mBidirectionalParagraphInfo.Clear();
   mTextModel->mLogicalModel->mCharacterDirections.Clear();
   mTextModel->mLogicalModel->mCharacterSpacingCharacterRuns.Clear();
@@ -135,7 +136,6 @@ void AsyncTextLoader::ClearTextModelData()
   mTextModel->mLogicalModel->ClearUnderlineRuns();
   mTextModel->mLogicalModel->ClearEmbeddedImages();
   mTextModel->mLogicalModel->ClearAnchors();
-  mTextModel->mLogicalModel->ClearBidirectionalParagraphInfo();
 
   // Free the allocated memory used to store the conversion table in the bidirectional line info run.
   for(Vector<BidirectionalLineInfoRun>::Iterator it    = mTextModel->mLogicalModel->mBidirectionalLineInfo.Begin(),
index a5de333e8d72f152886866a5b2a04d3676c58d63..4165425e3425227c71646bfa95cc0d3a4b5b6725 100644 (file)
@@ -49,6 +49,8 @@ void ControllerImplDataClearer::ClearFullModelData(Controller::Impl& impl, Contr
   {
     if(Controller::NO_OPERATION != (Controller::BIDI_INFO & operations))
     {
+      TextAbstraction::BidirectionalSupport bidirectionalSupport = TextAbstraction::BidirectionalSupport::Get();
+      model->mLogicalModel->ClearBidirectionalParagraphInfo(bidirectionalSupport);
       model->mLogicalModel->mBidirectionalParagraphInfo.Clear();
       model->mLogicalModel->mCharacterDirections.Clear();
     }
index 0cb702a6ca95d2b5fe8f7ee13cbc4dede6e1f6a3..d475e80b0feb74a8fbccf953c85f6adf8063e1cb 100644 (file)
@@ -731,9 +731,6 @@ void Controller::TextUpdater::ResetText(Controller& controller)
   // Reset the anchors buffer.
   logicalModel->ClearAnchors();
 
-  // Reset the bidirectional paragraph info.
-  logicalModel->ClearBidirectionalParagraphInfo();
-
   // We have cleared everything including the placeholder-text
   impl.PlaceholderCleared();
 
index c279c475aee64d353724f890b6e57a8d027a91df..c77cb35cf563e69ab878ffb1e4e20b2353b793dc 100644 (file)
@@ -19,7 +19,6 @@
 #include <dali-toolkit/internal/text/logical-model-impl.h>
 
 // INTERNAL INCLUDES
-#include <dali-toolkit/internal/text/bidirectional-support.h>
 #include <dali-toolkit/internal/text/bounded-paragraph-helper-functions.h>
 #include <dali-toolkit/internal/text/input-style.h>
 #include <dali-toolkit/internal/text/text-run-container.h>
@@ -657,9 +656,8 @@ void LogicalModel::ClearAnchors()
   FreeAnchors(mAnchors);
 }
 
-void LogicalModel::ClearBidirectionalParagraphInfo()
+void LogicalModel::ClearBidirectionalParagraphInfo(TextAbstraction::BidirectionalSupport& bidirectionalSupport)
 {
-  TextAbstraction::BidirectionalSupport bidirectionalSupport = TextAbstraction::BidirectionalSupport::Get();
   if(bidirectionalSupport)
   {
     for(auto it = mBidirectionalParagraphInfo.Begin(),
@@ -675,9 +673,13 @@ void LogicalModel::ClearBidirectionalParagraphInfo()
 
 LogicalModel::~LogicalModel()
 {
+  TextAbstraction::BidirectionalSupport bidirectionalSupport = TextAbstraction::BidirectionalSupport::Get();
+  if(bidirectionalSupport)
+  {
+    ClearBidirectionalParagraphInfo(bidirectionalSupport);
+  }
   ClearFontDescriptionRuns();
   ClearEmbeddedImages();
-  ClearBidirectionalParagraphInfo();
 }
 
 LogicalModel::LogicalModel()
index d9585276b99779c336bff1e97d7cdf1625896bb5..dd6de0dfce020a836b221e28af8ccd8962ca7eac 100644 (file)
@@ -27,6 +27,7 @@
 #include <dali-toolkit/internal/text/anchor.h>
 #include <dali-toolkit/internal/text/bidirectional-line-info-run.h>
 #include <dali-toolkit/internal/text/bidirectional-paragraph-info-run.h>
+#include <dali-toolkit/internal/text/bidirectional-support.h>
 #include <dali-toolkit/internal/text/bounded-paragraph-run.h>
 #include <dali-toolkit/internal/text/character-spacing-character-run.h>
 #include <dali-toolkit/internal/text/color-run.h>
@@ -231,8 +232,9 @@ public:
 
   /**
    * @brief Clears bidirectional paragraph info.
+   * @param[in] bidirectionalSupport BidirectionalSupport to clear information.
    */
-  void ClearBidirectionalParagraphInfo();
+  void ClearBidirectionalParagraphInfo(TextAbstraction::BidirectionalSupport& bidirectionalSupport);
 
 protected:
   /**