1 #ifndef DALI_TOOLKIT_TEXT_CONTROLLER_RELAYOUTER_H
2 #define DALI_TOOLKIT_TEXT_CONTROLLER_RELAYOUTER_H
5 * Copyright (c) 2021 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/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 Called by the Controller to get the height for a particular width.
69 * @param[in] controller A reference to the controller class
70 * @param[in] width The width we want the height for
73 static float GetHeightForWidth(Controller& controller, float width);
76 * @brief Called by the Controller to do the relayout itself.
78 * @param[in] controller A reference to the controller class
79 * @param[in] size The size to set
80 * @param[in] layoutDirection The layout direction
83 static Controller::UpdateTextType Relayout(Controller& controller, const Size& size, Dali::LayoutDirection::Type layoutDirection);
86 * @brief Called by the Controller to do certain operations when relayouting.
88 * @param[in] impl A reference to the controller impl class
89 * @param[in] size The size to set
90 * @param[in] operationsRequired The operations we need to do
91 * @param[in/out] layoutSize The Layout size which can be updated depending on the result of the performed operations
95 static bool DoRelayout(Controller::Impl& impl, const Size& size, OperationsMask operationsRequired, Size& layoutSize);
98 * @brief Called by the Controller to calculate the veritcal offset give the control size.
100 * @param[in] controller A reference to the controller class
101 * @param[in] controlSize The control size
103 static void CalculateVerticalOffset(Controller& controller, const Size& controlSize);
106 * @brief Calculates the layout size of control according to @p requestedControllerSize and @p requestedOperationsMask
108 * GetNaturalSize() and GetHeightForWidth() calls this method.
110 * @param[in] controller The controller to calcualte size on it.
111 * @param[in] requestedControllerSize The requested size of controller to calcualte layout size on it.
112 * @param[in] requestedOperationsMask The requested operations-mask to calcualte layout size according to it.
114 * @return The calculated layout-size.
116 static Size CalculateLayoutSizeOnRequiredControllerSize(Controller& controller, const Size& requestedControllerSize, const OperationsMask& requestedOperationsMask);
120 * @brief Called by the DoRelayout to do HorizontalAlignment operation when relayouting.
122 * @param[in] impl A reference to the controller impl class
123 * @param[in] size The size to set
124 * @param[in] startIndex The start index for relayouting
125 * @param[in] requestedNumberOfCharacters The number Of characters for relayouting
128 static void DoRelayoutHorizontalAlignment(Controller::Impl& impl, const Size& size, const CharacterIndex startIndex, const Length requestedNumberOfCharacters);
133 } // namespace Toolkit
137 #endif // DALI_TOOLKIT_TEXT_CONTROLLER_RELAYOUTER_H