X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-label-impl.h;h=8bedc5baebc4e32e48902e1f134ab7b13e718518;hb=9a5ce98a301f74f8df8a3be6d223b525c8839b0b;hp=87a80e0241d0a81ae40209d98c5b503e97c7908c;hpb=9ddd5fea6278d06b8874988498c7c4c6508750ba;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git 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 87a80e0..8bedc5b 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -19,11 +19,14 @@ */ // EXTERNAL INCLUDES +#include +#include #include // INTERNAL INCLUDES #include #include +#include #include #include #include @@ -41,7 +44,7 @@ namespace Internal /** * @brief A control which renders a short text string. */ -class TextLabel : public Control, public Text::ControlInterface, public Text::ScrollerInterface +class TextLabel : public Control, public Text::ControlInterface, public Text::ScrollerInterface, public Text::AnchorControlInterface { public: /** @@ -69,7 +72,55 @@ public: */ static Property::Value GetProperty(BaseObject* object, Property::Index index); - Text::ControllerPtr getController(); + /** + * @copydoc Dali::Toollkit::TextLabel::AnchorClickedSignal() + */ + DevelTextLabel::AnchorClickedSignalType& AnchorClickedSignal(); + + /** + * @copydoc Dali::Toollkit::TextLabel::TextFitChangedSignal() + */ + DevelTextLabel::TextFitChangedSignalType& TextFitChangedSignal(); + + /** + * 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. + * @param[in] signalName The signal to connect to. + * @param[in] functor A newly allocated FunctorDelegate. + * @return True if the signal was connected. + * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the caller is responsible for deleting the unused functor. + */ + static bool DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor); + + /** + * @brief Gets text controller + * + * @return The text controller + */ + Text::ControllerPtr GetTextController(); + + /** + * @brief Get the rendered size of a specific text range. + * if the requested text is at multilines, multiple sizes will be returned for each text located in a separate line. + * if a line contains characters with different directions, multiple sizes will be returned for each block of contiguous characters with the same direction. + * + * @param[in] startIndex start index of the text requested to calculate size for. + * @param[in] endIndex end index(included) of the text requested to calculate size for. + * @return list of sizes of the reuested text. + */ + Vector GetTextSize(const uint32_t startIndex, const uint32_t endIndex) const; + + /** + * @brief Get the top/left rendered position of a specific text range. + * if the requested text is at multilines, multiple positions will be returned for each text located in a separate line. + * if a line contains characters with different directions, multiple positions will be returned for each block of contiguous characters with the same direction. + * + * @param[in] startIndex start index of the text requested to get position to. + * @param[in] endIndex end index(included) of the text requested to get position to. + * @return list of positions of the requested text. + */ + Vector GetTextPosition(const uint32_t startIndex, const uint32_t endIndex) const; private: // From Control /** @@ -88,6 +139,11 @@ private: // From Control void OnRelayout(const Vector2& size, RelayoutContainer& container) override; /** + * @copydoc Control::OnTap() + */ + void OnTap(const TapGesture& tap) override; + + /** * @copydoc Control::GetNaturalSize() */ Vector3 GetNaturalSize() override; @@ -115,6 +171,12 @@ private: // from TextScroller */ void ScrollingFinished() override; +public: // From AnchorControlInterface + /** + * @copydoc Text::AnchorControlInterface::AnchorClicked() + */ + void AnchorClicked(const std::string& href) override; + private: // Implementation /** * Construct a new TextLabel. @@ -149,31 +211,108 @@ private: return mTextScroller; } + /** + * @brief Callback function for when the layout is changed. + * @param[in] actor The actor whose layoutDirection is changed. + * @param[in] type The layoutDirection. + */ + void OnLayoutDirectionChanged(Actor actor, LayoutDirection::Type type); + + /** + * @brief Emits TextFitChanged signal. + */ + void EmitTextFitChangedSignal(); + void OnAccessibilityStatusChanged(); + private: // Data Text::ControllerPtr mController; Text::TextScrollerPtr mTextScroller; Toolkit::Visual::Base mVisual; + std::vector mAnchorActors; + + // Signals + Toolkit::DevelTextLabel::AnchorClickedSignalType mAnchorClickedSignal; + Toolkit::DevelTextLabel::TextFitChangedSignalType mTextFitChangedSignal; + int mRenderingBackend; bool mTextUpdateNeeded : 1; protected: - struct AccessibleImpl : public Control::Impl::AccessibleImpl, - public virtual Dali::Accessibility::Text + /** + * @brief This structure is to connect TextLabel with Accessible functions. + */ + struct AccessibleImpl : public DevelControl::ControlAccessible, + public virtual Dali::Accessibility::Text, + public virtual Dali::Accessibility::Hypertext { - using Control::Impl::AccessibleImpl::AccessibleImpl; - - std::string GetText(size_t startOffset, size_t endOffset) override; - size_t GetCharacterCount() override; - size_t GetCaretOffset() override; - bool SetCaretOffset(size_t offset) override; - Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; - Accessibility::Range GetSelection(size_t selectionNum) override; - bool RemoveSelection(size_t selectionNum) override; - bool SetSelection(size_t selectionNum, size_t startOffset, size_t endOffset) override; - std::string GetNameRaw() override; - Property::Index GetNamePropertyIndex() override; + using DevelControl::ControlAccessible::ControlAccessible; + + /** + * @copydoc Dali::Accessibility::Text::GetText() + */ + std::string GetText(size_t startOffset, size_t endOffset) const override; + + /** + * @copydoc Dali::Accessibility::Text::GetCharacterCount() + */ + size_t GetCharacterCount() const override; + + /** + * @copydoc Dali::Accessibility::Text::GetCursorOffset() + */ + size_t GetCursorOffset() const override; + + /** + * @copydoc Dali::Accessibility::Text::SetCursorOffset() + */ + bool SetCursorOffset(size_t offset) override; + + /** + * @copydoc Dali::Accessibility::Text::GetTextAtOffset() + */ + Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) const override; + + /** + * @copydoc Dali::Accessibility::Text::GetRangeOfSelection() + */ + Accessibility::Range GetRangeOfSelection(size_t selectionIndex) const override; + + /** + * @copydoc Dali::Accessibility::Text::RemoveSelection() + */ + bool RemoveSelection(size_t selectionIndex) override; + + /** + * @copydoc Dali::Accessibility::Text::SetRangeOfSelection() + */ + bool SetRangeOfSelection(size_t selectionIndex, size_t startOffset, size_t endOffset) override; + + /** + * @copydoc Dali::Accessibility::Text::GetNameRaw() + */ + std::string GetNameRaw() const override; + + /** + * @copydoc Dali::Accessibility::Text::GetNamePropertyIndex() + */ + Property::Index GetNamePropertyIndex() override; + + /** + * @copydoc Dali::Accessibility::Hypertext::GetLink() + */ + Accessibility::Hyperlink* GetLink(int32_t linkIndex) const override; + + /** + * @copydoc Dali::Accessibility::Hypertext::GetLinkIndex() + */ + int32_t GetLinkIndex(int32_t characterOffset) const override; + + /** + * @copydoc Dali::Accessibility::Hypertext::GetLinkCount() + */ + int32_t GetLinkCount() const override; }; };