From: joogab.yun Date: Tue, 14 Mar 2023 01:01:34 +0000 (+0900) Subject: When TextFit operates, it operates based on the initially set LineSize. X-Git-Tag: dali_2.2.18~2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=2bc50ed8e8e9bf20d1b3134286ed46ff23b81721 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 --- 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 fad19cf..e713486 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 d323bd8..572d830 100644 --- a/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp +++ b/dali-toolkit/internal/text/controller/text-controller-relayouter.cpp @@ -259,11 +259,14 @@ void Controller::Relayouter::FitPointSizeforLayout(Controller& controller, const DALI_TRACE_SCOPE(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; @@ -324,6 +327,8 @@ void Controller::Relayouter::FitPointSizeforLayout(Controller& controller, const { impl.mTextFitChanged = true; } + // Revert back to the original TextLabel LineSize. + impl.SetDefaultLineSize(currentDefaultLineSize); impl.mFontDefaults->mFitPointSize = bestPointSize; 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 810cd1a..30adc23 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 55953f4..98f0ee7 100644 --- a/dali-toolkit/internal/text/controller/text-controller.h +++ b/dali-toolkit/internal/text/controller/text-controller.h @@ -514,6 +514,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.