X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-label-impl.h;h=9cba1c48286614281215220ab46c8eea93137528;hp=01e003b231161eb2e14f8458e4c7192ec8ab991e;hb=8cf6ed1255128c422ebe51a090cb3df76c1e05d9;hpb=fa3f750c6878eb126034d7958458dc3a1f67924f 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 01e003b..9cba1c4 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_INTERNAL_TEXT_LABEL_H /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,8 @@ */ // EXTERNAL INCLUDES +#include +#include #include // INTERNAL INCLUDES @@ -47,8 +49,9 @@ class TextLabel : public Control, public Text::ControlInterface, public Text::Sc public: /** * @copydoc Dali::Toollkit::TextLabel::New() + * @param[in] additionalBehaviour custom behavior flags for this TextLabel. Default is CONTROL_BEHAVIOUR_DEFAULT */ - static Toolkit::TextLabel New(); + static Toolkit::TextLabel New(ControlBehaviour additionalBehaviour = ControlBehaviour::CONTROL_BEHAVIOUR_DEFAULT); // Properties @@ -76,6 +79,11 @@ public: 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. @@ -93,6 +101,28 @@ public: */ 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 /** * @copydoc Control::OnInitialize() @@ -151,8 +181,10 @@ public: // From AnchorControlInterface private: // Implementation /** * Construct a new TextLabel. + * + * @param[in] additionalBehaviour additional behaviour flags for this TextLabel */ - TextLabel(); + TextLabel(ControlBehaviour additionalBehaviour); /** * A reference counted object may only be deleted by calling Unreference() @@ -189,14 +221,23 @@ private: */ 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::AnchorClickedSignalType mAnchorClickedSignal; + Toolkit::DevelTextLabel::TextFitChangedSignalType mTextFitChangedSignal; int mRenderingBackend; bool mTextUpdateNeeded : 1; @@ -205,25 +246,26 @@ protected: /** * @brief This structure is to connect TextLabel with Accessible functions. */ - struct AccessibleImpl : public DevelControl::AccessibleImpl, - public virtual Dali::Accessibility::Text + struct AccessibleImpl : public DevelControl::ControlAccessible, + public virtual Dali::Accessibility::Text, + public virtual Dali::Accessibility::Hypertext { - using DevelControl::AccessibleImpl::AccessibleImpl; + using DevelControl::ControlAccessible::ControlAccessible; /** * @copydoc Dali::Accessibility::Text::GetText() */ - std::string GetText(size_t startOffset, size_t endOffset) override; + std::string GetText(size_t startOffset, size_t endOffset) const override; /** * @copydoc Dali::Accessibility::Text::GetCharacterCount() */ - size_t GetCharacterCount() override; + size_t GetCharacterCount() const override; /** * @copydoc Dali::Accessibility::Text::GetCursorOffset() */ - size_t GetCursorOffset() override; + size_t GetCursorOffset() const override; /** * @copydoc Dali::Accessibility::Text::SetCursorOffset() @@ -233,12 +275,12 @@ protected: /** * @copydoc Dali::Accessibility::Text::GetTextAtOffset() */ - Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; + Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) const override; /** * @copydoc Dali::Accessibility::Text::GetRangeOfSelection() */ - Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override; + Accessibility::Range GetRangeOfSelection(size_t selectionIndex) const override; /** * @copydoc Dali::Accessibility::Text::RemoveSelection() @@ -251,14 +293,34 @@ protected: bool SetRangeOfSelection(size_t selectionIndex, size_t startOffset, size_t endOffset) override; /** + * @copydoc Dali::Accessibility::Text::GetRangeExtents() + */ + Rect<> GetRangeExtents(size_t startOffset, size_t endOffset, Accessibility::CoordinateType type) override; + + /** * @copydoc Dali::Accessibility::Text::GetNameRaw() */ - std::string GetNameRaw() override; + 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; }; };