X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Fcommon-text-utils.h;h=a0d0ad48c6e0fc10e8ca46e753e388ed5b925a53;hb=ff6ce970724ccc8bee65f7c93411b274907c09d7;hp=f2eaba7c6d4cce0740e7bf9e76783a05d70ad611;hpb=e8a0d6cffda02a66a542fe89240fb41bc7c08215;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/text-controls/common-text-utils.h b/dali-toolkit/internal/controls/text-controls/common-text-utils.h index f2eaba7..a0d0ad4 100644 --- a/dali-toolkit/internal/controls/text-controls/common-text-utils.h +++ b/dali-toolkit/internal/controls/text-controls/common-text-utils.h @@ -17,14 +17,21 @@ * limitations under the License. */ +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include + +// INTERNAL INCLUDES +#include +#include #include #include #include #include #include -#include - -#include namespace Dali::Toolkit::Internal { @@ -37,11 +44,12 @@ public: * @param[in] renderer pointer to the text renderer * @param[in] controller pointer to the text controller * @param[in] decorator pointer to the text decorator - * @param[in] alignmentOffset Alignment offset + * @param[in,out] alignmentOffset Alignment offset * @param[in,out] renderableActor Actor for rendering text * @param[in,out] backgroundActor Actor for rendering background * @param[in,out] stencil Clipping actor * @param[in,out] clippingDecorationActors Clipping decoration actors + * @param[in,out] anchorActors Anchor actors * @param[in] updateTextType How the text has been updated */ static void RenderText( @@ -49,12 +57,200 @@ public: Text::RendererPtr renderer, Text::ControllerPtr controller, Text::DecoratorPtr decorator, - float alignmentOffset, + float& alignmentOffset, Actor& renderableActor, Actor& backgroundActor, + Actor& cursorLayerActor, Toolkit::Control& stencil, std::vector& clippingDecorationActors, + std::vector& anchorActors, Text::Controller::UpdateTextType updateTextType); + + /** + * Common method to synchronize TextAnchor actors with Anchor objects in text's logical model. + * @param[in] parent The actor that is a parent of anchor actors + * @param[in] controller pointer to the text controller + * @param[in,out] anchorActors Anchor actors + */ + static void SynchronizeTextAnchorsInParent( + Actor parent, + Text::ControllerPtr controller, + std::vector& anchorActors); +}; + +class TextControlAccessible : public DevelControl::ControlAccessible, + public virtual Dali::Accessibility::Text, + public virtual Dali::Accessibility::Hypertext +{ +public: + using DevelControl::ControlAccessible::ControlAccessible; + + // Text + + /** + * @copydoc Dali::Accessibility::Text::GetCharacterCount() + */ + std::size_t GetCharacterCount() const override; + + /** + * @copydoc Dali::Accessibility::Text::GetCursorOffset() + */ + std::size_t GetCursorOffset() const override; + + /** + * @copydoc Dali::Accessibility::Text::GetRangeExtents() + */ + Rect<> GetRangeExtents(std::size_t startOffset, std::size_t endOffset, Accessibility::CoordinateType type) override; + + /** + * @copydoc Dali::Accessibility::Text::GetRangeOfSelection() + */ + Accessibility::Range GetRangeOfSelection(std::size_t selectionIndex) const override; + + /** + * @copydoc Dali::Accessibility::Text::GetText() + */ + std::string GetText(std::size_t startOffset, std::size_t endOffset) const override; + + /** + * @copydoc Dali::Accessibility::Text::GetTextAtOffset() + */ + Accessibility::Range GetTextAtOffset(std::size_t offset, Accessibility::TextBoundary boundary) const override; + + /** + * @copydoc Dali::Accessibility::Text::RemoveSelection() + */ + bool RemoveSelection(std::size_t selectionIndex) override; + + /** + * @copydoc Dali::Accessibility::Text::SetCursorOffset() + */ + bool SetCursorOffset(std::size_t offset) override; + + /** + * @copydoc Dali::Accessibility::Text::SetRangeOfSelection() + */ + bool SetRangeOfSelection(std::size_t selectionIndex, std::size_t startOffset, std::size_t endOffset) override; + + // Hypertext + + /** + * @copydoc Dali::Accessibility::Hypertext::GetLink() + */ + Accessibility::Hyperlink* GetLink(std::int32_t linkIndex) const override; + + /** + * @copydoc Dali::Accessibility::Hypertext::GetLinkCount() + */ + std::int32_t GetLinkCount() const override; + + /** + * @copydoc Dali::Accessibility::Hypertext::GetLinkIndex() + */ + std::int32_t GetLinkIndex(std::int32_t characterOffset) const override; + +protected: + /** + * @brief Gets whole text. + * + * @return The text + */ + std::string GetWholeText() const; + + /** + * @brief Gets text anchors. + * + * @return Text anchors + */ + virtual const std::vector& GetTextAnchors() const = 0; + + /** + * @brief Gets text controller. + * + * @return The text controller + */ + virtual Toolkit::Text::ControllerPtr GetTextController() const = 0; + + /** + * @brief Get substitute character for hidden text. + * + * @return The substitute character (Unicode codepoint) + */ + virtual std::uint32_t GetSubstituteCharacter() const; + + /** + * @brief Checks whether text should be hidden (replaced with substitute characters). + * + * @return True if text should be hidden, false otherwise + */ + virtual bool IsHiddenInput() const; + + /** + * @brief Checks whether [startPosition, endPosition) is a valid, non-empty range within a given string. + * + * @param string Source string + * @param begin Start index (inclusive) + * @param end End index (exclusive) + * @return true if the range is valid, false otherwise + */ + static bool ValidateRange(const std::string& string, std::size_t begin, std::size_t end); +}; + +class EditableTextControlAccessible : public TextControlAccessible, + public virtual Dali::Accessibility::EditableText +{ +public: + using TextControlAccessible::TextControlAccessible; + + /** + * @copydoc Dali::Toolkit::DevelControl::ControlAccessible::CalculateStates() + */ + Accessibility::States CalculateStates() override; + + // Text + + /** + * @copydoc Dali::Accessibility::Text::GetCursorOffset() + */ + std::size_t GetCursorOffset() const override; + + /** + * @copydoc Dali::Accessibility::Text::SetCursorOffset() + */ + bool SetCursorOffset(std::size_t offset) override; + + // EditableText + + /** + * @copydoc Dali::Accessibility::EditableText::CopyText() + */ + bool CopyText(size_t startPosition, size_t endPosition) override; + + /** + * @copydoc Dali::Accessibility::EditableText::CutText() + */ + bool CutText(size_t startPosition, size_t endPosition) override; + + /** + * @copydoc Dali::Accessibility::EditableText::DeleteText() + */ + bool DeleteText(size_t startPosition, size_t endPosition) override; + + /** + * @copydoc Dali::Accessibility::EditableText::InsertText() + */ + bool InsertText(size_t startPosition, std::string text) override; + + /** + * @copydoc Dali::Accessibility::EditableText::SetTextContents() + */ + bool SetTextContents(std::string newContents) override; + +protected: + /** + * @brief Requests text relayout. + */ + virtual void RequestTextRelayout() = 0; }; } // namespace Dali::Toolkit::Internal