1 #ifndef __DALI_TOOLKIT_INTERNAL_TEXT_HIGHLIGHT_H__
2 #define __DALI_TOOLKIT_INTERNAL_TEXT_HIGHLIGHT_H__
5 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 // Licensed under the Flora License, Version 1.0 (the License);
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://floralicense.org/license/
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an AS IS BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
21 #include <dali/dali.h>
22 #include <dali-toolkit/internal/controls/text-input/textview-character-positions-impl.h>
24 #include <dali-toolkit/public-api/controls/text-view/text-view.h>
36 * @brief TextHighlight is a decoration which highlights selected text.
38 * The class creates a highlight mesh used to show selected text between handles.
39 * Not responsible for positioning.
44 * structure to hold coordinates of each quad, which will make up the mesh.
46 struct QuadCoordinates
57 * @param[in] x1 left co-ordinate
58 * @param[in] y1 top co-ordinate
59 * @param[in] x2 right co-ordinate
60 * @param[in] y2 bottom co-ordinate
62 QuadCoordinates(float x1, float y1, float x2, float y2)
68 Vector2 min; ///< top-left (minimum) position of quad
69 Vector2 max; ///< bottom-right (maximum) position of quad
72 typedef std::vector<QuadCoordinates> QuadContainer;
77 * structure for information required to build the highlight mesh
82 * Adds a Quad (2D rectangular sub-selection)
83 * @param[in] x1 left co-ordinate
84 * @param[in] y1 top co-ordinate
85 * @param[in] x2 right co-ordinate
86 * @param[in] y2 bottom co-ordinate
88 void AddQuad( float x1, float y1, float x2, float y2 ){};
91 * Clamps all quads to fit within a min -> max 2D boundary.
93 void Clamp2D(const Vector2& min, const Vector2& max){};
95 QuadContainer mQuadList; ///< List of quads (sub-selections that form to create complete selection)
100 * @param[in] textViewCharacterPositioning TextViewCharacterPositioning to be used for positioning information.
102 TextHighlight( TextViewCharacterPositioning& textViewCharacterPositioning ):mTextViewCharacterPositioning( textViewCharacterPositioning ){};
110 * Gets the table of the visual text positions which has a flag
111 * for each Character. The flag is either true (character selected)
112 * or false (character de-selected)
113 * @note startSelection can be greater or less than endSelection
115 * @param[in,out] selectedVisualText The vector to be resized and populated with the selected flags
116 * @param[in] startSelection The start selection point for the text
117 * @param[in] endSelection The end selection point for the text
118 * @param[in] endSelection The end selection point for the text
119 * @param[in] textLayoutInfo TextView character layout information
121 void GetVisualTextSelection(std::vector<bool>& selectedVisualText, std::size_t startSelection, std::size_t endSelection,
122 Toolkit::TextView::TextLayoutInfo& textLayoutInfo){};
125 * Iterates between selection handles and computes the info required to build the highlight mesh
126 * @param[in] handlePositionStart starting handle position
127 * @param[in] handlePositionEnd ending handle position
128 * @return textHighlight target TextHighlight
130 TextHighlight::HighlightInfo CalculateHighlightInfo( std::size_t handlePositionStart, std::size_t handlePositionEnd, Toolkit::TextView::TextLayoutInfo& textLayoutInfo )
131 { return HighlightInfo();};
134 * Calculates new Mesh data so highlight moves with selection handles.
135 * @param[in] newHighlightInfo HighlightInfo calculated by CalculateHighlightInfo
137 void UpdateHighlight( TextHighlight::HighlightInfo& newHighlightInfo ){};
140 * Creates the Mesh data needed by the Mesh Actor
142 Mesh CreateHighLightMesh(){return Mesh();};
147 * @brief Copy Constructor
148 * @param[in] textHight
151 TextHighlight(const TextHighlight& textHight );
154 * @Assignment Constructor
158 TextHighlight& operator=(const TextHighlight& rhs);
162 TextViewCharacterPositioning& mTextViewCharacterPositioning;
164 Mesh mHighlightMesh; ///< Mesh Data for highlight
165 MeshData mMeshData; ///< Container to hold meshData for highlight
166 Material mCustomMaterial; ///< Custom material used for highlight
167 HighlightInfo mNewHighlightInfo; ///< Geometry info to create highlight.
172 } // namespace Internal
175 } // namespace Toolkit
179 #endif // __DALI_TOOLKIT_INTERNAL_TEXT_HIGHLIGHT_H__