[Tizen] When TextFit operates, it operates based on the initially set LineSize. 94/289894/2
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:36:37 +0000 (16:36 +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 d9e413f..96dc6af 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 c956187..560c502 100644 (file)
@@ -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<float> 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();
index f22783e..1759095 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 09305d2..83b2090 100644 (file)
@@ -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.