Add AsyncTextRendered signal to async text
authorBowon Ryu <bowon.ryu@samsung.com>
Tue, 9 Jul 2024 07:48:40 +0000 (16:48 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Tue, 9 Jul 2024 07:51:51 +0000 (16:51 +0900)
Signal is emitted along with the size information
once the async text rendering is complete.

Change-Id: I654dafdc46c810ad14b4713ab11a9bbe9dc8e01a
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
dali-toolkit/devel-api/controls/text-controls/text-label-devel.cpp
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

index 7db74f9ba2a1571b98b70e3795eb66e7896eac8f..79c44d08b5cbcdd52573214d14ccf90dc962a2b6 100644 (file)
@@ -35,6 +35,11 @@ TextFitChangedSignalType& TextFitChangedSignal(TextLabel textLabel)
   return GetImpl(textLabel).TextFitChangedSignal();
 }
 
+AsyncTextRenderedSignalType& AsyncTextRenderedSignal(TextLabel textLabel)
+{
+  return GetImpl(textLabel).AsyncTextRenderedSignal();
+}
+
 Vector<Vector2> GetTextSize(TextLabel textLabel, const uint32_t startIndex, const uint32_t endIndex)
 {
   return GetImpl(textLabel).GetTextSize(startIndex, endIndex);
index 2eebd350c2a2696a56b100bc6dd252c2d85466b7..df8d7f42dbc85ff7a69b73fb2db06989df686ff5 100644 (file)
@@ -404,6 +404,15 @@ using AnchorClickedSignalType = Signal<void(TextLabel, const char*, uint32_t)>;
  */
 using TextFitChangedSignalType = Signal<void(TextLabel)>;
 
+/**
+ * @brief Async text rendered signal type.
+ *
+ * @note Signal
+ *  - float : rendered width.
+ *  - float : rendered height.
+ */
+using AsyncTextRenderedSignalType = Signal<void(TextLabel, float, float)>;
+
 /**
  * @brief This signal is emitted when the anchor is clicked.
  *
@@ -428,6 +437,18 @@ DALI_TOOLKIT_API AnchorClickedSignalType& AnchorClickedSignal(TextLabel textLabe
  */
 DALI_TOOLKIT_API TextFitChangedSignalType& TextFitChangedSignal(TextLabel textLabel);
 
+/**
+ * @brief This signal is emitted when the async text rendered.
+ *
+ * A callback of the following type may be connected:
+ * @code
+ *   void YourCallbackName(TextLabel textLabel);
+ * @endcode
+ * @param[in] textLabel The instance of TextLabel.
+ * @return The signal to connect to.
+ */
+DALI_TOOLKIT_API AsyncTextRenderedSignalType& AsyncTextRenderedSignal(TextLabel textLabel);
+
 } // namespace DevelTextLabel
 
 } // namespace Toolkit
index 6260fad14956a84b55921bb3220ae936d52b502c..8df21c7a3ca102cb56774c7bfc31f88d27cc793b 100644 (file)
@@ -160,6 +160,7 @@ DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION(Toolkit,    TextLabel, "textColo
 
 DALI_SIGNAL_REGISTRATION(Toolkit, TextLabel, "anchorClicked", SIGNAL_ANCHOR_CLICKED)
 DALI_SIGNAL_REGISTRATION(Toolkit, TextLabel, "textFitChanged", SIGNAL_TEXT_FIT_CHANGED)
+DALI_SIGNAL_REGISTRATION(Toolkit, TextLabel, "asyncTextRendered", SIGNAL_ASYNC_TEXT_RENDERED)
 
 DALI_TYPE_REGISTRATION_END()
 // clang-format on
@@ -1002,6 +1003,14 @@ bool TextLabel::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface*
       labelImpl.TextFitChangedSignal().Connect(tracker, functor);
     }
   }
+  else if(0 == strcmp(signalName.c_str(), SIGNAL_ASYNC_TEXT_RENDERED))
+  {
+    if(label)
+    {
+      Internal::TextLabel& labelImpl(GetImpl(label));
+      labelImpl.AsyncTextRenderedSignal().Connect(tracker, functor);
+    }
+  }
   else
   {
     // signalName does not match any signal
@@ -1021,6 +1030,11 @@ DevelTextLabel::TextFitChangedSignalType& TextLabel::TextFitChangedSignal()
   return mTextFitChangedSignal;
 }
 
+DevelTextLabel::AsyncTextRenderedSignalType& TextLabel::AsyncTextRenderedSignal()
+{
+  return mAsyncTextRenderedSignal;
+}
+
 void TextLabel::OnInitialize()
 {
   Actor self = Self();
@@ -1580,6 +1594,8 @@ void TextLabel::AsyncLoadComplete(Text::AsyncTextRenderInfo renderInfo)
 
   // To avoid flickering issues, enable/disable the background visual when async load is completed.
   EnableControlBackground(!mController->IsTextCutout());
+
+  EmitAsyncTextRenderedSignal(renderInfo.renderedSize.width, renderInfo.renderedSize.height);
 }
 
 void TextLabel::OnLayoutDirectionChanged(Actor actor, LayoutDirection::Type type)
@@ -1607,6 +1623,12 @@ void TextLabel::EmitTextFitChangedSignal()
   mTextFitChangedSignal.Emit(handle);
 }
 
+void TextLabel::EmitAsyncTextRenderedSignal(float width, float height)
+{
+  Dali::Toolkit::TextLabel handle(GetOwner());
+  mAsyncTextRenderedSignal.Emit(handle, width, height);
+}
+
 void TextLabel::OnAccessibilityStatusChanged()
 {
   CommonTextUtils::SynchronizeTextAnchorsInParent(Self(), mController, mAnchorActors);
index a6b11ae939cf4a6a1ae129405c1d01b71ad3cf89..8c1a19800db4f6958a3bc4f1a2feec17d86d98ff 100644 (file)
@@ -86,6 +86,11 @@ public:
    */
   DevelTextLabel::TextFitChangedSignalType& TextFitChangedSignal();
 
+  /**
+   * @copydoc Dali::Toollkit::TextLabel::AsyncTextRenderedSignal()
+   */
+  DevelTextLabel::AsyncTextRenderedSignalType& AsyncTextRenderedSignal();
+
   /**
    * Connects a callback function with the object's signals.
    * @param[in] object The object providing the signal.
@@ -394,6 +399,12 @@ private:
    * @brief Emits TextFitChanged signal.
    */
   void EmitTextFitChangedSignal();
+
+  /**
+   * @brief Emits AsyncTextRendered signal.
+   */
+  void EmitAsyncTextRenderedSignal(float width, float height);
+
   void OnAccessibilityStatusChanged();
 
 private: // Data
@@ -407,6 +418,7 @@ private: // Data
   // Signals
   Toolkit::DevelTextLabel::AnchorClickedSignalType  mAnchorClickedSignal;
   Toolkit::DevelTextLabel::TextFitChangedSignalType mTextFitChangedSignal;
+  Toolkit::DevelTextLabel::AsyncTextRenderedSignalType mAsyncTextRenderedSignal;
 
   std::string mLocale;