[dali_2.1.31] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / dali-toolkit-test-utils / toolkit-text-utils.h
1 #ifndef DALI_TOOLKIT_TEXT_UTILS_H
2 #define DALI_TOOLKIT_TEXT_UTILS_H
3
4 /*
5  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // INTERNAL INCLUDES
22 #include <dali-toolkit/internal/text/metrics.h>
23 #include <dali-toolkit/internal/text/controller/text-controller.h>
24 #include <dali-toolkit/internal/text/text-model.h>
25
26 namespace Dali
27 {
28 namespace Toolkit
29 {
30 namespace Text
31 {
32 /**
33  * @brief Some layout options.
34  */
35 struct LayoutOptions
36 {
37   LayoutOptions()
38   : align{true}
39   {
40   }
41
42   bool align : 1; ///< Whether to align the lines.
43 };
44
45 /**
46  * @brief Creates and fills all the vectors of a text model: characters in utf32, segmentation info,
47  * scripts, fonts, bidi info, glyphs, conversion tables, etc.
48  *
49  * @param[in] text The given text.
50  * @param[in] textArea The area where to layout the text.
51  * @param[in] fontDescriptions The fonts to be used.
52  * @param[in] options Layout options.
53  * @param[out] layoutSize The laid-out size.
54  * @param[out] textModel Pointer to a text model instance.
55  * @param[out] metrics Pointer to a wrapper around FontClient used to get metrics.
56  * @param[in] markupProcessorEnabled Enable markup processor to use markup text.
57  * @param[in] wrapMode Line wrap mode.
58  * @param[in] ellipsisEnabled Whether the ellipsis layout option is enabled.
59  * @param[in] ellipsisPosition Where is the location the text elide.
60  * @param[in] lineSpacing The height of the line in points.
61  * @param[in] characterSpacing The spacing between the characters.
62  */
63 void CreateTextModel(const std::string&                text,
64                      const Size&                       textArea,
65                      const Vector<FontDescriptionRun>& fontDescriptions,
66                      const LayoutOptions&              options,
67                      Size&                             layoutSize,
68                      ModelPtr&                         textModel,
69                      MetricsPtr&                       metrics,
70                      bool                              markupProcessorEnabled,
71                      LineWrap::Mode                    wrapMode,
72                      bool                              ellipsisEnabled,
73                      DevelText::EllipsisPosition::Type ellipsisPosition,
74                      float                             lineSpacing,
75                      float                             characterSpacing);
76
77 /**
78  * @brief Configures the text @p controller similarly to the one configured by the text-label.
79  *
80  * @param[in,out] The text controller to configure.
81  */
82 void ConfigureTextLabel(ControllerPtr controller);
83
84 /**
85  * @brief Configures the text @p controller similarly to the one configured by the text-field.
86  *
87  * @param[in,out] The text controller to configure.
88  */
89 void ConfigureTextField(ControllerPtr controller);
90
91 /**
92  * @brief Configures the text @p controller similarly to the one configured by the text-editor.
93  *
94  * @param[in,out] The text controller to configure.
95  */
96 void ConfigureTextEditor(ControllerPtr controller);
97
98 /**
99  * @brief Creates one FontDescriptionRun then add it to FontDescription list.
100  *
101  * @param[in] characterRun The initial character index and the number of characters of the run.
102  * @param[in] fontFamilyName The font's family name.
103  * @param[in] weight The font's weight.
104  * @param[in] width The font's width.
105  * @param[in] slant The font's slant.
106  * @param[in] size Whether the font's family is defined.
107  * @param[in] familyDefined Whether the font's weight is defined.
108  * @param[in] weightDefined Whether the font's width is defined.
109  * @param[in] widthDefined Whether the ellipsis layout option is enabled.
110  * @param[in] slantDefined Whether the font's slant is defined.
111  * @param[in] sizeDefined Whether the font's size is defined.
112
113 * @return vector contains one FontDescriptionRun.
114  */
115 Vector<FontDescriptionRun> CreateSingleFontDescription(
116   const CharacterRun&   characterRun,
117   const std::string     fontFamilyName,
118   const FontWeight      weight,
119   const FontWidth       width,
120   const FontSlant       slant,
121   const PointSize26Dot6 size,
122   const bool            familyDefined,
123   const bool            weightDefined,
124   const bool            widthDefined,
125   const bool            slantDefined,
126   const bool            sizeDefined);
127
128 } // namespace Text
129
130 } // namespace Toolkit
131
132 } // namespace Dali
133
134 #endif // DALI_TOOLKIT_TEXT_UTILS_H