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-editor-impl.h;h=ba36ad9dcfa262f5253586ba57d55bf705a72fae;hp=8a96a1372483c872c6d1f8fa8e84020a472d80fc;hb=HEAD;hpb=f0379552a8e3342b6606f5b64558cd24a7198b6c diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h index 8a96a13..982a159 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_INTERNAL_TEXT_EDITOR_H /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 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. @@ -20,7 +20,6 @@ // EXTERNAL INCLUDES #include -#include #include #include #include @@ -32,11 +31,12 @@ #include #include #include +#include +#include #include #include #include #include -#include #include #include #include @@ -57,8 +57,9 @@ class TextEditor : public Control, public Text::ControlInterface, public Text::E public: /** * @copydoc Dali::Toollkit::TextEditor::New() + * @param[in] additionalBehaviour custom behavior flags for this TextEditor. Default is CONTROL_BEHAVIOUR_DEFAULT */ - static Toolkit::TextEditor New(); + static Toolkit::TextEditor New(ControlBehaviour additionalBehaviour = ControlBehaviour::CONTROL_BEHAVIOUR_DEFAULT); // Properties @@ -160,6 +161,11 @@ private: // From Control void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Control::OnStyleChange() */ void OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) override; @@ -215,6 +221,11 @@ private: // From Control void OnSceneConnection(int depth) override; /** + * @copydoc Control::OnPropertySet() + */ + void OnPropertySet(Property::Index index, const Property::Value& propertyValue) override; + + /** * @copydoc Dali::CustomActorImpl::OnKeyEvent(const KeyEvent&) */ bool OnKeyEvent(const KeyEvent& event) override; @@ -347,6 +358,52 @@ public: Vector GetTextPosition(const uint32_t startIndex, const uint32_t endIndex) const; /** + * @brief Get the line bounding rectangle. + * if the requested index is out of range or the line is not yet rendered, a rect of {0, 0, 0, 0} is returned. + * + * @param[in] lineIndex line index to which we want to calculate the geometry for. + * @return bounding rectangle. + */ + Rect GetLineBoundingRectangle(const uint32_t lineIndex) const; + + /** + * @brief Get the character bounding rectangle. + * If the text is not yet rendered or the index > text.Count(); a rect of {0, 0, 0, 0} is returned. + * + * @param[in] charIndex character index to which we want to calculate the geometry for. + * @return bounding rectangle. + */ + Rect GetCharacterBoundingRectangle(const uint32_t charIndex) const; + + /** + * @brief Get the character index. + * If the text is not yet rendered or the text is empty, -1 is returned. + * + * @param[in] visualX visual x position. + * @param[in] visualY visual y position. + * @return character index. + */ + int GetCharacterIndexAtPosition(float visualX, float visualY) const; + + /** + * @brief Gets the bounding box of a specific text range. + * + * @param[in] startIndex start index of the text requested to get bounding box to. + * @param[in] endIndex end index(included) of the text requested to get bounding box to. + * @return bounding box of the requested text. + */ + Rect<> GetTextBoundingRectangle(uint32_t startIndex, uint32_t endIndex) const; + + /** + * @brief Set the @p spannedText into current textEditor + * the spanned text contains content (text) and format (spans with ranges) + * the text is copied into text-controller and the spans are applied on ranges + * + * @param[in] spannedText the text with spans. + */ + void SetSpannedText(const Text::Spanned& spannedText); + + /** * @copydoc Text::SelectableControlInterface::GetSelectedText() */ string GetSelectedText() const override; @@ -383,17 +440,39 @@ public: */ void AnchorClicked(const std::string& href) override; -private: // Implementation /** - * @copydoc Dali::Toolkit::Text::Controller::(InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent) + * @brief Set removing front inset to TextEditor. + * + * @param[in] remove Whether front inset of TextEditor has to be removed or not. */ - InputMethodContext::CallbackData OnInputMethodContextEvent(InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent); + void SetRemoveFrontInset(const bool remove); + + /** + * @brief Whether front inset of TextEditor is removed or not. + * + * @return True if the front inset of TextEditor is removed. + */ + bool IsRemoveFrontInset() const; /** - * @brief Callback when Clipboard signals an item should be pasted - * @param[in] clipboard handle to Clipboard Event Notifier + * @brief Set removing back inset to TextEditor. + * + * @param[in] remove Whether back inset of TextEditor has to be removed or not. */ - void OnClipboardTextSelected(ClipboardEventNotifier& clipboard); + void SetRemoveBackInset(const bool remove); + + /** + * @brief Whether back inset of TextEditor is removed or not. + * + * @return True if the back inset of TextEditor is removed. + */ + bool IsRemoveBackInset() const; + +private: // Implementation + /** + * @copydoc Dali::Toolkit::Text::Controller::(InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent) + */ + InputMethodContext::CallbackData OnInputMethodContextEvent(InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent); /** * @brief Get a Property Map for the image used for the required Handle Image @@ -487,8 +566,10 @@ private: // Implementation /** * Construct a new TextEditor. + * + * @param[in] additionalBehaviour additional behaviour flags for this TextEditor */ - TextEditor(); + TextEditor(ControlBehaviour additionalBehaviour); /** * A reference counted object may only be deleted by calling Unreference() @@ -544,11 +625,10 @@ private: // Data std::vector mAnchorActors; Dali::InputMethodOptions mInputMethodOptions; - Actor mRenderableActor; - Actor mActiveLayer; - Actor mCursorLayer; - Actor mBackgroundActor; - CallbackBase* mIdleCallback; + Actor mRenderableActor; + Actor mActiveLayer; + Actor mCursorLayer; + Actor mBackgroundActor; float mAlignmentOffset; float mScrollAnimationDuration; @@ -577,106 +657,31 @@ private: // Data /** * @brief This structure is to connect TextEditor with Accessible functions. */ - struct AccessibleImpl : public DevelControl::ControlAccessible, - public virtual Dali::Accessibility::EditableText, - public virtual Dali::Accessibility::Hypertext + class TextEditorAccessible : public EditableTextControlAccessible { - using DevelControl::ControlAccessible::ControlAccessible; + public: + using EditableTextControlAccessible::EditableTextControlAccessible; /** * @copydoc Dali::Accessibility::Accessible::GetName() */ std::string GetName() const override; + protected: /** - * @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::GetRangeExtents() - */ - Rect<> GetRangeExtents(size_t startOffset, size_t endOffset, Accessibility::CoordinateType type) override; - - /** - * @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::Accessible::GetStates() - */ - Accessibility::States CalculateStates() 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; - - /** - * @copydoc Dali::Accessibility::EditableText::DeleteText() - */ - bool DeleteText(size_t startPosition, size_t endPosition) override; - - /** - * @copydoc Dali::Accessibility::Hypertext::GetLink() + * @copydoc Dali::Toolkit::Internal::TextControlAccessible::GetTextAnchors() */ - Accessibility::Hyperlink* GetLink(int32_t linkIndex) const override; + const std::vector& GetTextAnchors() const override; /** - * @copydoc Dali::Accessibility::Hypertext::GetLinkIndex() + * @copydoc Dali::Toolkit::Internal::TextControlAccessible::GetTextController() */ - int32_t GetLinkIndex(int32_t characterOffset) const override; + Toolkit::Text::ControllerPtr GetTextController() const override; /** - * @copydoc Dali::Accessibility::Hypertext::GetLinkCount() + * @copydoc Dali::Toolkit::Internal::EditableTextControlAccessible::RequestTextRelayout() */ - int32_t GetLinkCount() const override; + void RequestTextRelayout() override; }; };