From: ANZ1217 Date: Fri, 17 Jan 2025 10:22:57 +0000 (+0900) Subject: [Tizen] Fix bidirectionalinfo infinitely cached. X-Git-Tag: accepted/tizen/9.0/unified/20250123.015626^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e8a26878e3c8bd8413c971e82aa596e09e40b9b3;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git [Tizen] Fix bidirectionalinfo infinitely cached. Change-Id: I935e011d3212fb903d0f622f77590960fa29da97 --- diff --git a/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp b/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp index c690d7ca9d..8ad19ef51d 100644 --- a/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp +++ b/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp @@ -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::Iterator it = mTextModel->mLogicalModel->mBidirectionalLineInfo.Begin(), diff --git a/dali-toolkit/internal/text/controller/text-controller-text-updater.cpp b/dali-toolkit/internal/text/controller/text-controller-text-updater.cpp index 049682a416..5a906a5e1c 100644 --- a/dali-toolkit/internal/text/controller/text-controller-text-updater.cpp +++ b/dali-toolkit/internal/text/controller/text-controller-text-updater.cpp @@ -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(); diff --git a/dali-toolkit/internal/text/logical-model-impl.cpp b/dali-toolkit/internal/text/logical-model-impl.cpp index 85026297fd..c279c475ae 100644 --- a/dali-toolkit/internal/text/logical-model-impl.cpp +++ b/dali-toolkit/internal/text/logical-model-impl.cpp @@ -19,6 +19,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -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() diff --git a/dali-toolkit/internal/text/logical-model-impl.h b/dali-toolkit/internal/text/logical-model-impl.h index af4510f90f..d9585276b9 100644 --- a/dali-toolkit/internal/text/logical-model-impl.h +++ b/dali-toolkit/internal/text/logical-model-impl.h @@ -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().