1 #ifndef DALI_TOOLKIT_TEXT_CONTROLLER_RELAYOUTER_H
2 #define DALI_TOOLKIT_TEXT_CONTROLLER_RELAYOUTER_H
5 * Copyright (c) 2022 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/actors/actor-enumerations.h>
23 #include <dali/public-api/math/vector2.h>
24 #include <dali/public-api/math/vector3.h>
27 #include <dali-toolkit/internal/text/controller/text-controller.h>
36 * Contains all the relayouting related methods for Text::Controller
38 struct Controller::Relayouter
41 * @brief Called by the Controller to retrieve the natural size.
43 * @param[in] controller A reference to the controller class
46 static Vector3 GetNaturalSize(Controller& controller);
49 * @brief Called by the Controller to check if the text fits.
51 * @param[in] controller A reference to the controller class
52 * @param[in] pointSize The point size
53 * @param[in] layoutSize The layout size
56 static bool CheckForTextFit(Controller& controller, float pointSize, const Size& layoutSize);
59 * @brief Calculates the point size for text for given layout()
61 * @param[in] controller A reference to the controller class
62 * @param[in] layoutSize The layout size
64 static void FitPointSizeforLayout(Controller& controller, const Size& layoutSize);
67 * @brief Calculates the point size for text for given layout() using text fit array.
69 * @param[in] controller A reference to the controller class
70 * @param[in] layoutSize The layout size
72 static void FitArrayPointSizeforLayout(Controller& controller, const Size& layoutSize);
75 * @brief Called by the Controller to get the height for a particular width.
77 * @param[in] controller A reference to the controller class
78 * @param[in] width The width we want the height for
81 static float GetHeightForWidth(Controller& controller, float width);
84 * @brief Called by the Controller to do the relayout itself.
86 * @param[in] controller A reference to the controller class
87 * @param[in] size The size to set
88 * @param[in] layoutDirection The layout direction
91 static Controller::UpdateTextType Relayout(Controller& controller, const Size& size, Dali::LayoutDirection::Type layoutDirection);
94 * @brief Called by the Controller to do certain operations when relayouting.
96 * @param[in] impl A reference to the controller impl class
97 * @param[in] size The size to set
98 * @param[in] operationsRequired The operations we need to do
99 * @param[in/out] layoutSize The Layout size which can be updated depending on the result of the performed operations
103 static bool DoRelayout(Controller::Impl& impl, const Size& size, OperationsMask operationsRequired, Size& layoutSize);
106 * @brief Called by the Controller to calculate the veritcal offset give the control size.
108 * @param[in] impl A reference to the controller impl class
109 * @param[in] controlSize The control size
111 static void CalculateVerticalOffset(Controller::Impl& impl, const Size& controlSize);
114 * @brief Calculates the layout size of control according to @p requestedControllerSize and @p requestedOperationsMask
116 * GetNaturalSize() and GetHeightForWidth() calls this method.
118 * @param[in] controller The controller to calcualte size on it.
119 * @param[in] requestedControllerSize The requested size of controller to calcualte layout size on it.
120 * @param[in] requestedOperationsMask The requested operations-mask to calcualte layout size according to it.
122 * @return The calculated layout-size.
124 static Size CalculateLayoutSizeOnRequiredControllerSize(Controller& controller, const Size& requestedControllerSize, const OperationsMask& requestedOperationsMask);
128 * @brief Called by the DoRelayout to do HorizontalAlignment operation when relayouting.
130 * @param[in] impl A reference to the controller impl class
131 * @param[in] size The size to set
132 * @param[in] startIndex The start index for relayouting
133 * @param[in] requestedNumberOfCharacters The number Of characters for relayouting
136 static void DoRelayoutHorizontalAlignment(Controller::Impl& impl, const Size& size, const CharacterIndex startIndex, const Length requestedNumberOfCharacters);
139 inline bool compareByPointSize(Toolkit::DevelTextLabel::FitOption& lhs, Toolkit::DevelTextLabel::FitOption& rhs)
141 return lhs.GetPointSize() < rhs.GetPointSize();
146 } // namespace Toolkit
150 #endif // DALI_TOOLKIT_TEXT_CONTROLLER_RELAYOUTER_H