Fix text relayouter update issue 24/267224/1
authorBowon Ryu <bowon.ryu@samsung.com>
Tue, 30 Nov 2021 03:07:36 +0000 (12:07 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Tue, 30 Nov 2021 03:07:36 +0000 (12:07 +0900)
When the size of the text control is 0,
there is a issue that the mRequestedNumberOfCharacters becomes 0
even if the actural text exists.

This patch avoids this issue by updating mNumberOfCharactersToAdd
in textUpdateInfo in that situation.

Change-Id: I440b39f846aa7c9c410a1d121dae7b8a63b811ae
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
dali-toolkit/internal/text/text-controller-relayouter.cpp

index 3013b73..ce40c60 100644 (file)
@@ -79,7 +79,13 @@ Size Controller::Relayouter::CalculateLayoutSizeOnRequiredControllerSize(Control
                                                                         GET_GLYPH_METRICS);
 
   // Set the update info to relayout the whole text.
-  TextUpdateInfo& textUpdateInfo              = impl.mTextUpdateInfo;
+  TextUpdateInfo& textUpdateInfo = impl.mTextUpdateInfo;
+  if((0 == textUpdateInfo.mNumberOfCharactersToAdd) &&
+     (0 == textUpdateInfo.mPreviousNumberOfCharacters) &&
+     ((visualModel->mControlSize.width < Math::MACHINE_EPSILON_1000) || (visualModel->mControlSize.height < Math::MACHINE_EPSILON_1000)))
+  {
+    textUpdateInfo.mNumberOfCharactersToAdd = model->mLogicalModel->mText.Count();
+  }
   textUpdateInfo.mParagraphCharacterIndex     = 0u;
   textUpdateInfo.mRequestedNumberOfCharacters = model->mLogicalModel->mText.Count();
 
@@ -213,10 +219,10 @@ void Controller::Relayouter::FitPointSizeforLayout(Controller& controller, const
   {
     ModelPtr& model = impl.mModel;
 
-    bool  actualellipsis = model->mElideEnabled;
-    float minPointSize   = impl.mTextFitMinSize;
-    float maxPointSize   = impl.mTextFitMaxSize;
-    float pointInterval  = impl.mTextFitStepSize;
+    bool  actualellipsis      = model->mElideEnabled;
+    float minPointSize        = impl.mTextFitMinSize;
+    float maxPointSize        = impl.mTextFitMaxSize;
+    float pointInterval       = impl.mTextFitStepSize;
     float currentFitPointSize = impl.mFontDefaults->mFitPointSize;
 
     model->mElideEnabled = false;
@@ -256,7 +262,7 @@ void Controller::Relayouter::FitPointSizeforLayout(Controller& controller, const
       }
     }
 
-    model->mElideEnabled              = actualellipsis;
+    model->mElideEnabled = actualellipsis;
     if(currentFitPointSize != pointSizeArray[bestSizeIndex])
     {
       impl.mTextFitChanged = true;