Add async line count to text label
authorBowon Ryu <bowon.ryu@samsung.com>
Mon, 15 Jul 2024 11:33:25 +0000 (20:33 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Mon, 15 Jul 2024 11:33:25 +0000 (20:33 +0900)
Number of lines after latest asynchronous computing or rendering of text.

Change-Id: I68ce2d2096dec07d1e96bfd9fbc6805dcf07cb5d
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
dali-toolkit/devel-api/controls/text-controls/text-label-devel.h
dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
dali-toolkit/internal/controls/text-controls/text-label-impl.h
dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp
dali-toolkit/internal/text/async-text/async-text-loader.h
dali-toolkit/internal/text/async-text/text-loading-task.cpp
dali-toolkit/internal/visuals/text/text-visual.cpp

index ee303e8..652cac9 100644 (file)
@@ -269,6 +269,13 @@ enum Type
    * @note If it's false, the render result was automatically requested by OnRelayout.
    */
   MANUAL_RENDERED,
+
+  /**
+   * @brief Number of lines after latest asynchronous computing or rendering of text.
+   * @details Name "asyncLineCount", type Property::INTERGER.
+   * @note This property is read-only.
+   */
+  ASYNC_LINE_COUNT,
 };
 
 } // namespace Property
index b348f4e..9841106 100644 (file)
@@ -150,6 +150,7 @@ DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit,           TextLabel, "removeBackInset"
 DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit,           TextLabel, "cutout",                       BOOLEAN, CUTOUT                         )
 DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit,           TextLabel, "renderMode",                   INTEGER, RENDER_MODE                    )
 DALI_DEVEL_PROPERTY_REGISTRATION_READ_ONLY(Toolkit, TextLabel, "manualRendered",               BOOLEAN, MANUAL_RENDERED                )
+DALI_DEVEL_PROPERTY_REGISTRATION_READ_ONLY(Toolkit, TextLabel, "asyncLineCount",               INTEGER, ASYNC_LINE_COUNT               )
 
 DALI_ANIMATABLE_PROPERTY_REGISTRATION_WITH_DEFAULT(Toolkit, TextLabel, "textColor",      Color::BLACK,     TEXT_COLOR   )
 DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION(Toolkit,    TextLabel, "textColorRed",   TEXT_COLOR_RED,   TEXT_COLOR, 0)
@@ -965,6 +966,11 @@ Property::Value TextLabel::GetProperty(BaseObject* object, Property::Index index
         value = impl.mManualRendered;
         break;
       }
+      case Toolkit::DevelTextLabel::Property::ASYNC_LINE_COUNT:
+      {
+        value = impl.mAsyncLineCount;
+        break;
+      }
     }
   }
 
@@ -1651,24 +1657,20 @@ void TextLabel::AsyncSizeComputed(Text::AsyncTextRenderInfo renderInfo)
   {
     case Async::COMPUTE_NATURAL_SIZE:
     {
-      DALI_LOG_RELEASE_INFO("Natural size : %f, %f\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height);
+      DALI_LOG_RELEASE_INFO("Natural size : %f, %f, line count : %d\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height, renderInfo.lineCount);
+      mAsyncLineCount = renderInfo.lineCount;
       EmitAsyncNaturalSizeComputedSignal(renderInfo.renderedSize.width, renderInfo.renderedSize.height);
     }
     break;
   
     case Async::COMPUTE_HEIGHT_FOR_WIDTH:
     {
-      DALI_LOG_RELEASE_INFO("Height for width : %f, %f\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height);
+      DALI_LOG_RELEASE_INFO("Height for width : %f, %f, line count : %d\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height, renderInfo.lineCount);
+      mAsyncLineCount = renderInfo.lineCount;
       EmitAsyncHeightForWidthComputedSignal(renderInfo.renderedSize.width, renderInfo.renderedSize.height);
     }
     break;
 
-    case Async::COMPUTE_LINE_COUNT:
-    {
-      // TODO
-    }
-    break;
-
     default:
     {
       DALI_LOG_ERROR("Unexpected request type recieved : %d\n", renderInfo.requestType);
@@ -1680,7 +1682,7 @@ void TextLabel::AsyncSizeComputed(Text::AsyncTextRenderInfo renderInfo)
 void TextLabel::AsyncLoadComplete(Text::AsyncTextRenderInfo renderInfo)
 {
   // Pure Virtual from AsyncTextInterface
-  DALI_LOG_RELEASE_INFO("Rendered size : %f, %f\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height);
+  DALI_LOG_RELEASE_INFO("Rendered size : %f, %f, line count : %d\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height, renderInfo.lineCount);
 
   // To avoid flickering issues, enable/disable the background visual when async load is completed.
   EnableControlBackground(!mController->IsTextCutout());
@@ -1697,6 +1699,7 @@ void TextLabel::AsyncLoadComplete(Text::AsyncTextRenderInfo renderInfo)
   }
 
   mManualRendered = renderInfo.manualRendered;
+  mAsyncLineCount = renderInfo.lineCount;
 
   EmitAsyncTextRenderedSignal(renderInfo.renderedSize.width + (padding.start + padding.end), renderInfo.renderedSize.height + (padding.top + padding.bottom));
 }
@@ -1758,6 +1761,7 @@ TextLabel::TextLabel(ControlBehaviour additionalBehaviour)
   mLocale(std::string()),
   mSize(),
   mRenderingBackend(DEFAULT_RENDERING_BACKEND),
+  mAsyncLineCount(0),
   mTextUpdateNeeded(false),
   mLastAutoScrollEnabled(false),
   mControlBackgroundEnabeld(true),
index 9cb16c4..3a82155 100644 (file)
@@ -488,6 +488,7 @@ private: // Data
   Vector2     mSize;
 
   int  mRenderingBackend;
+  int  mAsyncLineCount;
   bool mTextUpdateNeeded         : 1;
   bool mLastAutoScrollEnabled    : 1;
   bool mControlBackgroundEnabeld : 1;
index 14aaff2..3bda360 100644 (file)
@@ -1054,6 +1054,7 @@ AsyncTextRenderInfo AsyncTextLoader::Render(AsyncTextParameters& parameters)
   renderInfo.styleEnabled          = styleEnabled;
   renderInfo.isOverlayStyle        = isOverlayStyle;
   renderInfo.manualRendered        = parameters.manualRender;
+  renderInfo.lineCount             = mTextModel->GetNumberOfLines();
 
   if(cutoutEnabled)
   {
@@ -1172,7 +1173,8 @@ AsyncTextRenderInfo AsyncTextLoader::GetHeightForWidth(AsyncTextParameters& para
   AsyncTextRenderInfo renderInfo;
   renderInfo.renderedSize.width  = parameters.textWidth;
   renderInfo.renderedSize.height = height;
-  renderInfo.requestType  = Async::COMPUTE_HEIGHT_FOR_WIDTH;
+  renderInfo.requestType         = Async::COMPUTE_HEIGHT_FOR_WIDTH;
+  renderInfo.lineCount           = mTextModel->GetNumberOfLines();
 
   return renderInfo;
 }
@@ -1183,6 +1185,7 @@ AsyncTextRenderInfo AsyncTextLoader::GetNaturalSize(AsyncTextParameters& paramet
   AsyncTextRenderInfo renderInfo;
   renderInfo.renderedSize = textNaturalSize;
   renderInfo.requestType  = Async::COMPUTE_NATURAL_SIZE;
+  renderInfo.lineCount    = mTextModel->GetNumberOfLines();
 
   return renderInfo;
 }
index 4935b9b..4f8974b 100644 (file)
@@ -52,7 +52,6 @@ namespace Async
     RENDER_CONSTRAINT,
     COMPUTE_NATURAL_SIZE,
     COMPUTE_HEIGHT_FOR_WIDTH,
-    COMPUTE_LINE_COUNT
   };
 } // namespace Async
 
@@ -228,6 +227,7 @@ struct AsyncTextRenderInfo
     isTextDirectionRTL(false),
     isCutout(false),
     manualRendered(false),
+    lineCount(0),
     requestType(Async::RENDER_FIXED_SIZE)
   {
   }
@@ -253,6 +253,7 @@ struct AsyncTextRenderInfo
   bool          isTextDirectionRTL;
   bool          isCutout;
   bool          manualRendered;
+  int           lineCount;
   Async::RequestType requestType;
 };
 
index ef62f33..5c74869 100644 (file)
@@ -127,12 +127,6 @@ void TextLoadingTask::Load()
     }
     break;
 
-    case Text::Async::COMPUTE_LINE_COUNT:
-    {
-      // TODO
-    }
-    break;
-
     default:
     {
       DALI_LOG_ERROR("Unexpected request type recieved : %d\n", mParameters.requestType);
index c4c3c77..82b3c67 100644 (file)
@@ -729,9 +729,7 @@ void TextVisual::LoadComplete(bool loadingSuccess, TextInformation textInformati
     Text::AsyncTextRenderInfo renderInfo = textInformation.renderInfo;
     Text::AsyncTextParameters parameters = textInformation.parameters;
 
-    if(parameters.requestType == Text::Async::COMPUTE_NATURAL_SIZE ||
-       parameters.requestType == Text::Async::COMPUTE_HEIGHT_FOR_WIDTH ||
-       parameters.requestType == Text::Async::COMPUTE_LINE_COUNT)
+    if(parameters.requestType == Text::Async::COMPUTE_NATURAL_SIZE || parameters.requestType == Text::Async::COMPUTE_HEIGHT_FOR_WIDTH)
     {
       if(mAsyncTextInterface)
       {