From d2a62bc197b6f9989382c457a80d4075ca7ba79f Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Mon, 17 Feb 2025 10:11:47 +0900 Subject: [PATCH] Fix bidirectional info clear issue 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 --- .../text/async-text/async-text-loader-impl.cpp | 2 +- .../controller/text-controller-impl-data-clearer.cpp | 2 ++ .../text/controller/text-controller-text-updater.cpp | 3 --- dali-toolkit/internal/text/logical-model-impl.cpp | 10 ++++++---- dali-toolkit/internal/text/logical-model-impl.h | 4 +++- 5 files changed, 12 insertions(+), 9 deletions(-) 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 3023b9af50..5beeca2202 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 @@ -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::Iterator it = mTextModel->mLogicalModel->mBidirectionalLineInfo.Begin(), diff --git a/dali-toolkit/internal/text/controller/text-controller-impl-data-clearer.cpp b/dali-toolkit/internal/text/controller/text-controller-impl-data-clearer.cpp index a5de333e8d..4165425e34 100644 --- a/dali-toolkit/internal/text/controller/text-controller-impl-data-clearer.cpp +++ b/dali-toolkit/internal/text/controller/text-controller-impl-data-clearer.cpp @@ -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(); } 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 0cb702a6ca..d475e80b0f 100644 --- a/dali-toolkit/internal/text/controller/text-controller-text-updater.cpp +++ b/dali-toolkit/internal/text/controller/text-controller-text-updater.cpp @@ -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(); diff --git a/dali-toolkit/internal/text/logical-model-impl.cpp b/dali-toolkit/internal/text/logical-model-impl.cpp index c279c475ae..c77cb35cf5 100644 --- a/dali-toolkit/internal/text/logical-model-impl.cpp +++ b/dali-toolkit/internal/text/logical-model-impl.cpp @@ -19,7 +19,6 @@ #include // INTERNAL INCLUDES -#include #include #include #include @@ -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() diff --git a/dali-toolkit/internal/text/logical-model-impl.h b/dali-toolkit/internal/text/logical-model-impl.h index d9585276b9..dd6de0dfce 100644 --- a/dali-toolkit/internal/text/logical-model-impl.h +++ b/dali-toolkit/internal/text/logical-model-impl.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -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: /** -- 2.34.1