From: Bowon Ryu Date: Tue, 9 Jul 2024 07:48:40 +0000 (+0900) Subject: Add AsyncTextRendered signal to async text X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f8605bfbc613e0cc5228b8cc3caef574a1f8c719;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Add AsyncTextRendered signal to async text Signal is emitted along with the size information once the async text rendering is complete. Change-Id: I654dafdc46c810ad14b4713ab11a9bbe9dc8e01a Signed-off-by: Bowon Ryu --- diff --git a/dali-toolkit/devel-api/controls/text-controls/text-label-devel.cpp b/dali-toolkit/devel-api/controls/text-controls/text-label-devel.cpp index 7db74f9..79c44d0 100644 --- a/dali-toolkit/devel-api/controls/text-controls/text-label-devel.cpp +++ b/dali-toolkit/devel-api/controls/text-controls/text-label-devel.cpp @@ -35,6 +35,11 @@ TextFitChangedSignalType& TextFitChangedSignal(TextLabel textLabel) return GetImpl(textLabel).TextFitChangedSignal(); } +AsyncTextRenderedSignalType& AsyncTextRenderedSignal(TextLabel textLabel) +{ + return GetImpl(textLabel).AsyncTextRenderedSignal(); +} + Vector GetTextSize(TextLabel textLabel, const uint32_t startIndex, const uint32_t endIndex) { return GetImpl(textLabel).GetTextSize(startIndex, endIndex); diff --git a/dali-toolkit/devel-api/controls/text-controls/text-label-devel.h b/dali-toolkit/devel-api/controls/text-controls/text-label-devel.h index 2eebd35..df8d7f4 100644 --- a/dali-toolkit/devel-api/controls/text-controls/text-label-devel.h +++ b/dali-toolkit/devel-api/controls/text-controls/text-label-devel.h @@ -405,6 +405,15 @@ using AnchorClickedSignalType = Signal; using TextFitChangedSignalType = Signal; /** + * @brief Async text rendered signal type. + * + * @note Signal + * - float : rendered width. + * - float : rendered height. + */ +using AsyncTextRenderedSignalType = Signal; + +/** * @brief This signal is emitted when the anchor is clicked. * * A callback of the following type may be connected: @@ -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 diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp index 6260fad..8df21c7 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -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); diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.h b/dali-toolkit/internal/controls/text-controls/text-label-impl.h index a6b11ae..8c1a198 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -87,6 +87,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. * @param[in] tracker Used to disconnect 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;