When TextFit operates, it operates based on the initially set LineSize. 10/289710/4
authorjoogab.yun <joogab.yun@samsung.com>
Tue, 14 Mar 2023 01:01:34 +0000 (10:01 +0900)
committerjoogab.yun <joogab.yun@samsung.com>
Wed, 15 Mar 2023 07:35:11 +0000 (16:35 +0900)
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

dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
dali-toolkit/internal/text/controller/text-controller-impl.h
dali-toolkit/internal/text/controller/text-controller-relayouter.cpp
dali-toolkit/internal/text/controller/text-controller.cpp
dali-toolkit/internal/text/controller/text-controller.h

index fad19cf..e713486 100644 (file)
@@ -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);
index ba67b39..5f78b8f 100644 (file)
@@ -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.
index d323bd8..572d830 100644 (file)
@@ -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();
index 810cd1a..30adc23 100644 (file)
@@ -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);
index 55953f4..98f0ee7 100644 (file)
@@ -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.