X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fdecorator%2Ftext-decorator.h;h=ab0153ac03a2ed4bc622cf86a04b4f2e59a20fd2;hp=ae90e90f2c5b3bbe26754b3e6042f5e114ebe7a0;hb=HEAD;hpb=678abc1612bf792741f9018c0cb5210738b61113 diff --git a/dali-toolkit/internal/text/decorator/text-decorator.h b/dali-toolkit/internal/text/decorator/text-decorator.h index ae90e90..ab0153a 100644 --- a/dali-toolkit/internal/text/decorator/text-decorator.h +++ b/dali-toolkit/internal/text/decorator/text-decorator.h @@ -1,8 +1,8 @@ -#ifndef __DALI_TOOLKIT_TEXT_DECORATOR_H__ -#define __DALI_TOOLKIT_TEXT_DECORATOR_H__ +#ifndef DALI_TOOLKIT_TEXT_DECORATOR_H +#define DALI_TOOLKIT_TEXT_DECORATOR_H /* - * Copyright (c) 2015 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,24 +20,22 @@ // EXTERNAL INCLUDES #include -#include #include +#include +#include // INTERNAL INCLUDES #include namespace Dali { - struct Vector2; struct Vector4; namespace Toolkit { - namespace Text { - class Decorator; typedef IntrusivePtr DecoratorPtr; @@ -86,6 +84,14 @@ enum HandleType HANDLE_TYPE_COUNT }; +// Types of decoration. +enum DecorationType +{ + NONE_LAYER, + ACTIVE_LAYER, + CURSOR_LAYER +}; + /** * @brief A Text Decorator is used to display cursors, handles, selection highlights and pop-ups. * @@ -102,34 +108,34 @@ enum HandleType class Decorator : public RefObject { public: - class ControllerInterface { public: - /** * @brief Constructor. */ - ControllerInterface() {}; + ControllerInterface(){}; /** * @brief Virtual destructor. */ - virtual ~ControllerInterface() {}; + virtual ~ControllerInterface(){}; /** * @brief Query the target size of the UI control. * * @param[out] targetSize The size of the UI control the decorator is adding it's decorations to. */ - virtual void GetTargetSize( Vector2& targetSize ) = 0; + virtual void GetTargetSize(Vector2& targetSize) = 0; /** * @brief Add a decoration to the parent UI control. * - * @param[in] decoration The actor displaying a decoration. + * @param[in] actor The actor displaying a decoration. + * @param[in] type Whether this decoration is a layer or not, which layer it is. + * @param[in] needsClipping Whether the actor needs clipping. */ - virtual void AddDecoration( Actor& actor, bool needsClipping ) = 0; + virtual void AddDecoration(Actor& actor, DecorationType type, bool needsClipping) = 0; /** * @brief An input event from one of the handles. @@ -139,7 +145,7 @@ public: * @param[in] x The x position relative to the top-left of the parent control. * @param[in] y The y position relative to the top-left of the parent control. */ - virtual void DecorationEvent( HandleType handleType, HandleState state, float x, float y ) = 0; + virtual void DecorationEvent(HandleType handleType, HandleState state, float x, float y) = 0; }; /** @@ -150,8 +156,8 @@ public: * * @return A pointer to a new Decorator. */ - static DecoratorPtr New( ControllerInterface& controller, - TextSelectionPopupCallbackInterface& callbackInterface ); + static DecoratorPtr New(ControllerInterface& controller, + TextSelectionPopupCallbackInterface& callbackInterface); /** * @brief Set the bounding box which handles, popup and similar decorations will not exceed. @@ -173,29 +179,31 @@ public: * * @param[in] boundingBox Vector( x coordinate, y coordinate, width, height ) */ - void SetBoundingBox( const Rect& boundingBox ); + void SetBoundingBox(const Rect& boundingBox); /** * @brief Retrieve the bounding box origin and dimensions. * * default is set once control is added to stage, before this the return vector will be Vector4:ZERO - * @return Rect the bounding box origin, width and height + * @param[out] boundingBox The bounding box origin, width and height. */ - const Rect& GetBoundingBox() const; + void GetBoundingBox(Rect& boundingBox) const; /** * @brief The decorator waits until a relayout before creating actors etc. * * @param[in] size The size of the parent control after size-negotiation. + * @param[in,out] container The control should add actors to this container that it is not able + * to allocate a size for. */ - void Relayout( const Dali::Vector2& size ); + void Relayout(const Dali::Vector2& size, RelayoutContainer& container); /** * @brief Updates the decorator's actor positions after scrolling. * * @param[in] scrollOffset The scroll offset. */ - void UpdatePositions( const Vector2& scrollOffset ); + void UpdatePositions(const Vector2& scrollOffset); /** * @brief Sets which of the cursors are active. @@ -203,7 +211,7 @@ public: * @note Cursor will only be visible if within the parent area. * @param[in] activeCursor Which of the cursors should be active (if any). */ - void SetActiveCursor( ActiveCursor activeCursor ); + void SetActiveCursor(ActiveCursor activeCursor); /** * @brief Query which of the cursors are active. @@ -221,7 +229,7 @@ public: * @param[in] cursorHeight The logical height of the cursor. * @param[in] lineHeight The logical height of the line. */ - void SetPosition( Cursor cursor, float x, float y, float cursorHeight, float lineHeight ); + void SetPosition(Cursor cursor, float x, float y, float cursorHeight, float lineHeight); /** * @brief Retrieves the position, height and lineHeight of a cursor. @@ -232,7 +240,7 @@ public: * @param[out] cursorHeight The logical height of the cursor. * @param[out] lineHeight The logical height of the line. */ - void GetPosition( Cursor cursor, float& x, float& y, float& cursorHeight, float& lineHeight ) const; + void GetPosition(Cursor cursor, float& x, float& y, float& cursorHeight, float& lineHeight) const; /** * @brief Retrieves the position of a cursor. @@ -241,7 +249,24 @@ public: * * @return The position. */ - const Vector2& GetPosition( Cursor cursor ) const; + const Vector2& GetPosition(Cursor cursor) const; + + /** + * @brief Sets the glyph offset of a cursor. + * + * @param[in] cursor The cursor to set. + * @param[in] glyphoffset The difference of line ascender and glyph ascender. + */ + void SetGlyphOffset(Cursor cursor, float glyphOffset); + + /** + * @brief Retrieves the glyph offset of a cursor. + * + * @param[in] cursor The cursor to get. + * + * @return The glyph offset. glyph offset means difference of line ascender and glyph ascender. + */ + const float GetGlyphOffset(Cursor cursor) const; /** * @brief Sets the color for a cursor. @@ -249,7 +274,7 @@ public: * @param[in] cursor Whether this color is for the primary or secondary cursor. * @param[in] color The color to use. */ - void SetCursorColor( Cursor cursor, const Dali::Vector4& color ); + void SetCursorColor(Cursor cursor, const Dali::Vector4& color); /** * @brief Retrieves the color for a cursor. @@ -257,7 +282,7 @@ public: * @param[in] cursor Whether this color is for the primary or secondary cursor. * @return The cursor color. */ - const Dali::Vector4& GetColor( Cursor cursor ) const; + const Dali::Vector4& GetColor(Cursor cursor) const; /** * @brief Start blinking the cursor; see also SetCursorBlinkDuration(). @@ -270,16 +295,21 @@ public: void StopCursorBlink(); /** + * @brief Temporarily stops the cursor from blinking. + */ + void DelayCursorBlink(); + + /** * @brief Set the interval between cursor blinks. * * @param[in] seconds The interval in seconds. */ - void SetCursorBlinkInterval( float seconds ); + void SetCursorBlinkInterval(float seconds); /** * @brief Retrieves the blink-interval for a cursor. * - * @return The cursor blink-interval. + * @return The cursor blink-interval in seconds. */ float GetCursorBlinkInterval() const; @@ -288,12 +318,12 @@ public: * * @param[in] seconds The duration in seconds. */ - void SetCursorBlinkDuration( float seconds ); + void SetCursorBlinkDuration(float seconds); /** * @brief Retrieves the blink-duration for a cursor. * - * @return The cursor blink-duration. + * @return The cursor blink-duration in seconds. */ float GetCursorBlinkDuration() const; @@ -302,7 +332,7 @@ public: * * @param[in] width The width of the cursor in pixels. */ - void SetCursorWidth( int width ); + void SetCursorWidth(int width); /** * @brief Retrieves the width of the cursors. @@ -317,8 +347,8 @@ public: * @param[in] handleType One of the handles. * @param[in] active True if the handle should be active. */ - void SetHandleActive( HandleType handleType, - bool active ); + void SetHandleActive(HandleType handleType, + bool active); /** * @brief Query whether a handle is active. @@ -327,33 +357,33 @@ public: * * @return True if the handle is active. */ - bool IsHandleActive( HandleType handleType ) const; + bool IsHandleActive(HandleType handleType) const; /** - * @brief Sets the image for one of the handles. + * @brief Sets the image file name for one of the handles. * * @param[in] handleType One of the handles. * @param[in] handleImageType A different image can be set for the pressed/released states. - * @param[in] image The image to use. + * @param[in] imageFileName The image filename to use. */ - void SetHandleImage( HandleType handleType, HandleImageType handleImageType, Dali::Image image ); + void SetHandleImage(HandleType handleType, HandleImageType handleImageType, const std::string& imageFileName); /** - * @brief Retrieves the image for one of the handles. + * @brief Retrieves the file name of the image for one of the handles. * * @param[in] handleType One of the handles. * @param[in] handleImageType A different image can be set for the pressed/released states. * - * @return The grab handle image. + * @return The grab handle image string. */ - Dali::Image GetHandleImage( HandleType handleType, HandleImageType handleImageType ) const; + const std::string& GetHandleImage(HandleType handleType, HandleImageType handleImageType) const; /** * @brief Sets the color of the handles * * @param[in] color The color to use. */ - void SetHandleColor( const Vector4& color ); + void SetHandleColor(const Vector4& color); /** * @brief Retrieves the handles color. @@ -370,7 +400,7 @@ public: * @param[in] y The y position relative to the top-left of the parent control. * @param[in] lineHeight The logical line height at this position. */ - void SetPosition( HandleType handleType, float x, float y, float lineHeight ); + void SetPosition(HandleType handleType, float x, float y, float lineHeight); /** * @brief Retrieves the position of a selection handle. @@ -380,7 +410,7 @@ public: * @param[out] y The y position relative to the top-left of the parent control. * @param[out] lineHeight The logical line height at this position. */ - void GetPosition( HandleType handleType, float& x, float& y, float& lineHeight ) const; + void GetPosition(HandleType handleType, float& x, float& y, float& lineHeight) const; /** * @brief Retrieves the position of a selection handle. @@ -389,25 +419,67 @@ public: * * @return The position of the selection handle relative to the top-left of the parent control. */ - const Vector2& GetPosition( HandleType handleType ) const; + const Vector2& GetPosition(HandleType handleType) const; /** - * @brief Swaps the selection handle's images. + * @brief Whether to flip vertically a handle. * - * This method is called by the text controller to swap the handles - * when the start index is bigger than the end one. + * @param[in] handleType The handle to flip vertically. + * @param[in] flip Whether to flip vertically. */ - void SwapSelectionHandlesEnabled( bool enable ); + void FlipHandleVertically(HandleType handleType, bool flip); /** - * @brief Adds a quad to the existing selection highlights. + * @brief Retrieves whether the handle is vertically flipped. * - * @param[in] x1 The top-left x position. - * @param[in] y1 The top-left y position. - * @param[in] x2 The bottom-right x position. - * @param[in] y3 The bottom-right y position. + * @param[in] handleType The handle to query. + * + * @return @e ture if the handle is vertically flipped. + */ + bool IsHandleVerticallyFlipped(HandleType handleType) const; + + /** + * @brief Whether to flip the selection handles as soon as they are crossed. + * + * By default they flip when the handle is released. + * + * @param[in] enable If @e true the selection handles will flip as soon as they are crossed. */ - void AddHighlight( float x1, float y1, float x2, float y2 ); + void FlipSelectionHandlesOnCrossEnabled(bool enable); + + /** + * @brief Sets info to calculate the handle flip state. + * + * Sets the character's direction where the handles are pointing. + * It resets the decorator internal flip state when there is a new selection. + * + * @param[in] indicesSwapped Whether the selection handle indices are swapped (start > end). + * @param[in] left The direction of the character pointed by the primary selection handle. + * @param[in] right The direction of the character pointed by the secondary selection handle. + */ + void SetSelectionHandleFlipState(bool indicesSwapped, bool left, bool right); + + /** + * @brief Adds a quad to the existing selection highlights. Vertices are in decorator's coordinates. + * + * @param[in] index Position in the vector where to add the quad. + * @param[in] quad The quad. The 'x' and 'y' coordinates store the min 'x' and min 'y'. The 'z' and 'w' coordinates store the max 'x' and max 'y'. + */ + void AddHighlight(unsigned int index, const Vector4& quad); + + /** + * @brief Sets the min 'x,y' coordinates and the size of the highlighted box. + * + * It's used to set the size and position of the highlight's actor and to translate each highlight quad from + * decorator's coordinates to the local coords of the highlight's actor. + * + * @param[in] position The position of the highlighted text in decorator's coords. + * @param[in] size The size of the highlighted text. + * @param[in] outlineOffset The outline's offset. + */ + void SetHighLightBox(const Vector2& position, + const Size& size, + float outlineOffset); /** * @brief Removes all of the previously added highlights. @@ -415,11 +487,18 @@ public: void ClearHighlights(); /** + * @brief Reserves space for the highlight quads. + * + * @param[in] numberOfQuads The expected number of quads. + */ + void ResizeHighlightQuads(unsigned int numberOfQuads); + + /** * @brief Sets the selection highlight color. * * @param[in] color The color to use. */ - void SetHighlightColor( const Vector4& color ); + void SetHighlightColor(const Vector4& color); /** * @brief Retrieves the selection highlight color. @@ -429,17 +508,38 @@ public: const Vector4& GetHighlightColor() const; /** + * @brief Sets whether the highlight is active. + * + * @param[in] active Whether the highlight is active. + */ + void SetHighlightActive(bool active); + + /** + * @brief Retrieves whether the highlight is active. + * + * @return @e true if the highlight is active, @e false otherwise. + */ + bool IsHighlightActive() const; + + /** + * @brief Retreives whether the highlight is shown or not. + * + * @return true if the highlight is visible, false otherwise. + */ + bool IsHighlightVisible() const; + + /** * @brief Sets into the decorator the depth used to render the text. * * @param[in] depth The text's depth. */ - void SetTextDepth( int textDepth ); + void SetTextDepth(int textDepth); /** * @brief Set the Selection Popup to show or hide via the active flaf * @param[in] active true to show, false to hide */ - void SetPopupActive( bool active ); + void SetPopupActive(bool active); /** * @brief Query whether the Selection Popup is active. @@ -452,7 +552,7 @@ public: * @brief Set a bit mask of the buttons to be shown by Popup * @param[in] enabledButtonsBitMask from TextSelectionPopup::Buttons enum */ - void SetEnabledPopupButtons( TextSelectionPopup::Buttons& enabledButtonsBitMask ); + void SetEnabledPopupButtons(TextSelectionPopup::Buttons& enabledButtonsBitMask); /** * @brief Get the current bit mask of buttons to be shown by Popup @@ -461,19 +561,33 @@ public: TextSelectionPopup::Buttons& GetEnabledPopupButtons(); /** + * @brief Used to set the selection popup options + * + * @param[in] options The property map of selection popup options + */ + void SetSelectionPopupStyle(const Property::Map& options); + + /** + * @brief Used to get the selection popup options + * + * @param[out] options The property map of selection popup options + */ + void GetSelectionPopupStyle(Property::Map& options); + + /** * @brief Sets the scroll threshold. * * It defines a square area inside the control, close to the edge. * When the cursor enters this area, the decorator starts to send scroll events. * - * @param[in] threshold The scroll threshold. + * @param[in] threshold The scroll threshold in pixels. */ - void SetScrollThreshold( float threshold ); + void SetScrollThreshold(float threshold); /** * @brief Retrieves the scroll threshold. * - * @retunr The scroll threshold. + * @retunr The scroll threshold in pixels. */ float GetScrollThreshold() const; @@ -482,14 +596,23 @@ public: * * Is the distance the text is going to be scrolled during a scroll interval. * - * @param[in] speed The scroll speed. + * @param[in] speed The scroll speed in pixels/second. */ - void SetScrollSpeed( float speed ); + void SetScrollSpeed(float speed); + + /** + * @brief Sets Editable mode decoration. + * + * If this set to false, Primary cursor and grab will always be hidden. + * + * @param[in] isEditable enable or disable Editing. + */ + void SetEditable(bool isEditable); /** * @brief Retrieves the scroll speed. * - * @return The scroll speed. + * @return The scroll speed in pixels/second. */ float GetScrollSpeed() const; @@ -498,31 +621,58 @@ public: */ void NotifyEndOfScroll(); -protected: + /** + * @copydoc Text::Controller::SetHorizontalScrollEnabled() + */ + void SetHorizontalScrollEnabled(bool enable); + + /** + * @copydoc Text::Controller::IsHorizontalScrollEnabled() + */ + bool IsHorizontalScrollEnabled() const; + + /** + * @copydoc Text::Controller::SetVerticalScrollEnabled() + */ + void SetVerticalScrollEnabled(bool enable); /** + * @copydoc Text::Controller::IsVerticalScrollEnabled() + */ + bool IsVerticalScrollEnabled() const; + + /** + * @copydoc Text::Controller::SetSmoothHandlePanEnabled() + */ + void SetSmoothHandlePanEnabled(bool enable); + + /** + * @copydoc Text::Controller::IsSmoothHandlePanEnabled() + */ + bool IsSmoothHandlePanEnabled() const; + +protected: + /** * @brief A reference counted object may only be deleted by calling Unreference(). */ virtual ~Decorator(); private: - /** * @brief Private constructor. * @param[in] controller The controller which receives input events from Decorator components. * @param[in] callbackInterface The text popup callback interface which receives the button click callbacks. */ - Decorator( ControllerInterface& controller, - TextSelectionPopupCallbackInterface& callbackInterface ); + Decorator(ControllerInterface& controller, + TextSelectionPopupCallbackInterface& callbackInterface); // Undefined - Decorator( const Decorator& handle ); + Decorator(const Decorator& handle); // Undefined - Decorator& operator=( const Decorator& handle ); + Decorator& operator=(const Decorator& handle); private: - struct Impl; Impl* mImpl; }; @@ -532,4 +682,4 @@ private: } // namespace Dali -#endif // __DALI_TOOLKIT_TEXT_DECORATOR_H__ +#endif // DALI_TOOLKIT_TEXT_DECORATOR_H