[Tizen] Fix bidirectionalinfo infinitely cached. 56/318656/1 accepted/tizen/9.0/unified/20250123.015626
authorANZ1217 <chihun.jeong@samsung.com>
Fri, 17 Jan 2025 10:22:57 +0000 (19:22 +0900)
committerANZ1217 <chihun.jeong@samsung.com>
Wed, 22 Jan 2025 01:12:52 +0000 (10:12 +0900)
Change-Id: I935e011d3212fb903d0f622f77590960fa29da97

dali-toolkit/internal/text/async-text/async-text-loader-impl.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 c690d7ca9d79631c8eff9f5bb21f3fb465b46bbd..8ad19ef51d310a2785fbd84986e616ad3dba92f6 100644 (file)
@@ -135,6 +135,7 @@ 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 049682a416738e5fe5cc557cc72afcd51ef383e5..5a906a5e1c58ac8f1044d9ca47e4c7c44723dd21 100644 (file)
@@ -721,6 +721,9 @@ 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 85026297fdcf6e67c4da978c6038420d1b615817..c279c475aee64d353724f890b6e57a8d027a91df 100644 (file)
@@ -19,6 +19,7 @@
 #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>
@@ -656,10 +657,27 @@ void LogicalModel::ClearAnchors()
   FreeAnchors(mAnchors);
 }
 
+void LogicalModel::ClearBidirectionalParagraphInfo()
+{
+  TextAbstraction::BidirectionalSupport bidirectionalSupport = TextAbstraction::BidirectionalSupport::Get();
+  if(bidirectionalSupport)
+  {
+    for(auto it = mBidirectionalParagraphInfo.Begin(),
+        endIt = mBidirectionalParagraphInfo.End();
+        it != endIt;
+        ++it)
+    {
+      auto infoIndex = it->bidirectionalInfoIndex;
+      bidirectionalSupport.DestroyInfo(infoIndex);
+    }
+  }
+}
+
 LogicalModel::~LogicalModel()
 {
   ClearFontDescriptionRuns();
   ClearEmbeddedImages();
+  ClearBidirectionalParagraphInfo();
 }
 
 LogicalModel::LogicalModel()
index af4510f90f003c5f2b33242cdaa74cbea6452c7f..d9585276b99779c336bff1e97d7cdf1625896bb5 100644 (file)
@@ -229,6 +229,11 @@ public:
    */
   void ClearAnchors();
 
+  /**
+   * @brief Clears bidirectional paragraph info.
+   */
+  void ClearBidirectionalParagraphInfo();
+
 protected:
   /**
    * @brief A reference counted object may only be deleted by calling Unreference().