From 1e151c2a5d27d060c72758e599da22d7e88999b8 Mon Sep 17 00:00:00 2001 From: "joogab.yun" Date: Tue, 14 Mar 2023 10:01:34 +0900 Subject: [PATCH] [Tizen] When TextFit operates, it operates based on the initially set LineSize. You may need to add LineSize to TextFit items. It is currently based on the TextLabel LineSize at the time the TextFit property is set. Change-Id: I0d4661da7b653e8e765c2b029ce06749e01c8bd4 --- .../internal/controls/text-controls/text-label-impl.cpp | 4 ++++ .../internal/text/controller/text-controller-impl.h | 2 ++ .../text/controller/text-controller-relayouter.cpp | 15 ++++++++++----- dali-toolkit/internal/text/controller/text-controller.cpp | 5 +++++ dali-toolkit/internal/text/controller/text-controller.h | 7 +++++++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp index d9e413f..96dc6af 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -206,6 +206,10 @@ void ParseTextFitProperty(Text::ControllerPtr& controller, const Property::Map* } controller->SetTextFitEnabled(enabled); + // The TextFit operation is performed based on the MinLineSize set in the TextLabel at the moment when the TextFit property is set. + // So, if you change the TextLabel's MinLineSize after setting the TextFit property, it does not affect the operation of TextFit. + // This may require a new LineSize item in TextFit. + controller->SetTextFitLineSize(controller->GetDefaultLineSize()); if(isMinSizeSet) { controller->SetTextFitMinSize(minSize, type); diff --git a/dali-toolkit/internal/text/controller/text-controller-impl.h b/dali-toolkit/internal/text/controller/text-controller-impl.h index ba67b39..5f78b8f 100644 --- a/dali-toolkit/internal/text/controller/text-controller-impl.h +++ b/dali-toolkit/internal/text/controller/text-controller-impl.h @@ -359,6 +359,7 @@ struct Controller::Impl mTextFitMinSize(DEFAULT_TEXTFIT_MIN), mTextFitMaxSize(DEFAULT_TEXTFIT_MAX), mTextFitStepSize(DEFAULT_TEXTFIT_STEP), + mTextFitLineSize(0.f), mFontSizeScale(DEFAULT_FONT_SIZE_SCALE), mDisabledColorOpacity(DEFAULT_DISABLED_COLOR_OPACITY), mFontSizeScaleEnabled(true), @@ -1040,6 +1041,7 @@ public: float mTextFitMinSize; ///< Minimum Font Size for text fit. Default 10 float mTextFitMaxSize; ///< Maximum Font Size for text fit. Default 100 float mTextFitStepSize; ///< Step Size for font intervalse. Default 1 + float mTextFitLineSize; ///< This is the LineSize that is the standard when performing TextFit. float mFontSizeScale; ///< Scale value for Font Size. Default 1.0 float mDisabledColorOpacity; ///< Color opacity when disabled. bool mFontSizeScaleEnabled : 1; ///< Whether the font size scale is enabled. diff --git a/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp b/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp index c956187..560c502 100644 --- a/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp +++ b/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp @@ -261,11 +261,14 @@ void Controller::Relayouter::FitPointSizeforLayout(Controller& controller, const DALI_TRACE_BEGIN(gTraceFilter, "DALI_TEXT_FIT_LAYOUT"); ModelPtr& model = impl.mModel; - bool actualellipsis = model->mElideEnabled; - float minPointSize = impl.mTextFitMinSize; - float maxPointSize = impl.mTextFitMaxSize; - float pointInterval = impl.mTextFitStepSize; - float currentFitPointSize = impl.mFontDefaults->mFitPointSize; + bool actualellipsis = model->mElideEnabled; + float minPointSize = impl.mTextFitMinSize; + float maxPointSize = impl.mTextFitMaxSize; + float pointInterval = impl.mTextFitStepSize; + float currentFitPointSize = impl.mFontDefaults->mFitPointSize; + float currentDefaultLineSize = impl.mLayoutEngine.GetDefaultLineSize(); + // Instead of using the LineSize of the current TextLabel, the LineSize set in TextFit is used. + impl.SetDefaultLineSize(impl.mTextFitLineSize); model->mElideEnabled = false; Vector pointSizeArray; @@ -309,6 +312,8 @@ void Controller::Relayouter::FitPointSizeforLayout(Controller& controller, const { impl.mTextFitChanged = true; } + // Revert back to the original TextLabel LineSize. + impl.SetDefaultLineSize(currentDefaultLineSize); impl.mFontDefaults->mFitPointSize = pointSizeArray[bestSizeIndex]; impl.mFontDefaults->sizeDefined = true; impl.ClearFontData(); diff --git a/dali-toolkit/internal/text/controller/text-controller.cpp b/dali-toolkit/internal/text/controller/text-controller.cpp index f22783e..1759095 100644 --- a/dali-toolkit/internal/text/controller/text-controller.cpp +++ b/dali-toolkit/internal/text/controller/text-controller.cpp @@ -413,6 +413,11 @@ float Controller::GetTextFitPointSize() const return mImpl->mFontDefaults ? mImpl->mFontDefaults->mFitPointSize : 0.0f; } +void Controller::SetTextFitLineSize(float lineSize) +{ + mImpl->mTextFitLineSize = lineSize; +} + void Controller::SetPlaceholderTextElideEnabled(bool enabled) { PlaceholderHandler::SetPlaceholderTextElideEnabled(*this, enabled); diff --git a/dali-toolkit/internal/text/controller/text-controller.h b/dali-toolkit/internal/text/controller/text-controller.h index 09305d2..83b2090 100644 --- a/dali-toolkit/internal/text/controller/text-controller.h +++ b/dali-toolkit/internal/text/controller/text-controller.h @@ -513,6 +513,13 @@ public: // Configure the text controller. bool IsTextFitChanged() const; /** + * @brief Sets line size valid for text fit. + * + * @param[in] lineSize line size value + */ + void SetTextFitLineSize(float lineSize); + + /** * @brief Sets disabled color opacity. * * @param[in] opacity The color opacity value in disabled state. -- 2.7.4