1 #ifndef DALI_TOOLKIT_TEXT_LAYOUT_ENGINE_H
2 #define DALI_TOOLKIT_TEXT_LAYOUT_ENGINE_H
5 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <dali/public-api/common/dali-vector.h>
23 #include <dali/public-api/math/vector2.h>
24 #include <dali/public-api/actors/actor-enumerations.h>
27 #include <dali-toolkit/public-api/text/text-enumerations.h>
28 #include <dali-toolkit/internal/text/line-run.h>
29 #include <dali-toolkit/internal/text/metrics.h>
46 * @brief LayoutEngine is responsible for calculating the visual position of glyphs in layout.
59 * @brief Create a new instance of a LayoutEngine.
64 * @brief Virtual destructor.
69 * @brief Provide the wrapper around FontClient used to get metrics
71 * @param[in] metrics Used to get metrics
73 void SetMetrics( MetricsPtr& metrics );
76 * @brief Choose the required layout.
78 * @param[in] layout The required layout.
80 void SetLayout( Type layout );
83 * @brief Query the required layout.
85 * @return The required layout.
87 Type GetLayout() const;
90 * @brief Sets the width of the cursor.
92 * @param[in] width The width of the cursor in pixels.
94 void SetCursorWidth( int width );
97 * @brief Retrieves the width of the cursor.
99 * @return The width of the cursor in pixels.
101 int GetCursorWidth() const;
104 * @brief Store the visual position of glyphs in the VisualModel.
106 * @param[in] layoutParameters The parameters needed to layout the text.
107 * @param[out] glyphPositions The positions of all the glyphs.
108 * @param[out] lines The laid-out lines.
109 * @param[out] layoutSize The size of the text after it has been laid-out.
110 * @param[in] elideTextEnabled Whether the text elide is enabled.
112 * @return \e true if the text has been re-laid-out. \e false means the given width is too small to layout even a single character.
114 bool LayoutText( const Parameters& layoutParameters,
115 Vector<Vector2>& glyphPositions,
116 Vector<LineRun>& lines,
118 bool elideTextEnabled );
121 * @brief Re-lays out those lines with right to left characters.
123 * It doesn't change the phisical position of the glyphs in the model but sets their new position.
125 * @param[in] layoutParameters The parameters needed to layout the text.
126 * @param[in] startIndex Character index of the line from where the lines are reordered.
127 * @param[in] numberOfCharacters The number of characters.
128 * @param[in,out] glyphPositions The positions of all the glyphs.
130 void ReLayoutRightToLeftLines( const Parameters& layoutParameters,
131 CharacterIndex startIndex,
132 Length numberOfCharacters,
133 Vector<Vector2>& glyphPositions );
136 * @brief Aligns the laid out lines.
138 * @param[in] size The size of the container where the text is laid-out.
139 * @param[in] startIndex Character index of the line from where the lines are aligned.
140 * @param[in] numberOfCharacters The number of characters.
141 * @param[in] horizontalAlignment The horizontal alignment.
142 * @param[in,out] lines The laid-out lines.
143 * @param[out] alignmentOffset The alignment offset.
144 * @param[in] layoutDirection The direction of the system language.
145 * @param[in] matchSystemLanguageDirection Whether match align for system language direction or not.
147 void Align( const Size& size,
148 CharacterIndex startIndex,
149 Length numberOfCharacters,
150 Text::HorizontalAlignment::Type horizontalAlignment,
151 Vector<LineRun>& lines,
152 float& alignmentOffset,
153 Dali::LayoutDirection::Type layoutDirection,
154 bool matchSystemLanguageDirection );
157 * @brief Sets the default line spacing.
159 * @param[in] lineSpacing The line spacing.
161 void SetDefaultLineSpacing( float lineSpacing );
164 * @brief Retrieves the default line spacing.
166 * @return The line spacing.
168 float GetDefaultLineSpacing() const;
173 Engine( const Engine& handle );
176 Engine& operator=( const Engine& handle );
184 } // namespace Layout
188 } // namespace Toolkit
192 #endif // DALI_TOOLKIT_TEXT_LAYOUT_ENGINE_H