From 0cb9c3ad5c6d497c1d53d49d05c52c695c9e0f85 Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Mon, 20 Feb 2023 15:38:25 +0900 Subject: [PATCH] Fix multiline text size issue in label When font validation in the relayout process, if text update info is initialized, font data should be cleared before UpdateModel() to ensure the number of characters removed and added. Without this condition, incorrect text updates will occur due to incorrect number of characters. Change-Id: Ic0a56dc355b746b2e718aa87ae61c507ade427b5 Signed-off-by: Bowon Ryu --- .../src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp | 13 +++++++++++++ .../internal/text/controller/text-controller-relayouter.cpp | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp index 00426ee..a8ec273 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp @@ -863,6 +863,19 @@ int UtcDaliTextControllerCheckBufferIndices(void) // Perform a relayout controller->Relayout(size); + // Set the text + controller->SetText(text); + + // Set the text size + controller->SetDefaultFontSize(10.f, Controller::POINT_SIZE); + + // Tweak some parameters to make the indices to access the text buffer invalid + mImpl.mTextUpdateInfo.Clear(); + + // Perform a relayout + controller->GetHeightForWidth(size.width / 2.f); + controller->Relayout(size); + tet_result(TET_PASS); END_TEST; diff --git a/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp b/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp index 8aba938..d323bd8 100644 --- a/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp +++ b/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp @@ -99,6 +99,13 @@ Size Controller::Relayouter::CalculateLayoutSizeOnRequiredControllerSize(Control if(!isEditable) { + if(NO_OPERATION != (VALIDATE_FONTS & operationsPending) && + textUpdateInfo.mCharacterIndex == static_cast(-1)) + { + impl.ClearFontData(); + updateInfoCharIndexBackup = textUpdateInfo.mCharacterIndex; + } + impl.UpdateModel(onlyOnceOperations); // Layout the text for the new width. -- 2.7.4