42GUILayoutNode::GUILayoutNode(
52 const string& backgroundImage,
54 const GUIColor& backgroundImageEffectColorMul,
55 const GUIColor& backgroundImageEffectColorAdd,
62 GUIParentNode(screenNode, parentNode, id, flow, overflowX, overflowY, alignments, requestedConstraints, backgroundColor, backgroundImage, backgroundImageScale9Grid, backgroundImageEffectColorMul, backgroundImageEffectColorAdd, border, padding, showOn, hideOn)
81 for (
auto i = 0; i <
subNodes.size(); i++) {
83 if (guiSubNode->conditionsMet ==
false)
continue;
87 width += guiSubNode->getAutoWidth();
90 for (
auto i = 0; i <
subNodes.size(); i++) {
92 if (guiSubNode->conditionsMet ==
false)
continue;
96 auto contentWidth = guiSubNode->getAutoWidth();
97 if (contentWidth > width) {
111 for (
auto i = 0; i <
subNodes.size(); i++) {
113 if (guiSubNode->conditionsMet ==
false)
continue;
117 height += guiSubNode->getAutoHeight();
120 for (
auto i = 0; i <
subNodes.size(); i++) {
122 if (guiSubNode->conditionsMet ==
false)
continue;
126 auto contentHeight = guiSubNode->getAutoHeight();
127 if (contentHeight > height) {
128 height = contentHeight;
146 auto nodesHeight = 0;
147 auto finalNodesHeight = 0;
148 for (
auto i = 0; i <
subNodes.size(); i++) {
150 if (guiSubNode->conditionsMet ==
false)
continue;
157 nodesHeight += guiSubNode->computedConstraints.height;
158 finalNodesHeight += guiSubNode->computedConstraints.height;
161 auto verticalStarPixelRest = 0.0f;
162 for (
auto i = 0; i <
subNodes.size(); i++) {
164 if (guiSubNode->conditionsMet ==
false)
continue;
166 guiSubNode->requestedConstraints.width = width;
167 guiSubNode->computedConstraints.width = width;
170 auto nodeStarHeight = (
static_cast<float>(height) -
static_cast<float>(nodesHeight)) /
static_cast<float>(starCount);
171 auto nodeStarHeightInt =
static_cast<int>(nodeStarHeight);
172 verticalStarPixelRest += nodeStarHeight - nodeStarHeightInt;
173 if (
static_cast<int>(verticalStarPixelRest) > 0) {
174 nodeStarHeightInt +=
static_cast<int>(verticalStarPixelRest);
175 verticalStarPixelRest -=
static_cast<int>(verticalStarPixelRest);
177 guiSubNode->requestedConstraints.height = nodeStarHeightInt;
178 guiSubNode->computedConstraints.height = nodeStarHeightInt;
179 if (guiSubNode->computedConstraints.height < 0) {
180 guiSubNode->computedConstraints.height = 0;
182 finalNodesHeight += guiSubNode->computedConstraints.height;
184 required_dynamic_cast<GUIParentNode*>(guiSubNode)->layoutSubNodes();
189 for (
auto i = 0; i <
subNodes.size(); i++) {
191 if (guiSubNode->conditionsMet ==
false)
continue;
196 for (
auto i = 0; i <
subNodes.size(); i++) {
198 if (guiSubNode->conditionsMet ==
false)
continue;
199 guiSubNode->computedConstraints.alignmentTop = Math::max(0,
border.
top +
padding.
top + ((height - finalNodesHeight) / 2));
203 for (
auto i = 0; i <
subNodes.size(); i++) {
205 if (guiSubNode->conditionsMet ==
false)
continue;
206 guiSubNode->computedConstraints.alignmentTop = Math::max(0, height - finalNodesHeight);
217 auto finalNodesWidth = 0;
218 for (
auto i = 0; i <
subNodes.size(); i++) {
220 if (guiSubNode->conditionsMet ==
false)
continue;
227 nodesWidth += guiSubNode->computedConstraints.width;
228 finalNodesWidth += guiSubNode->computedConstraints.width;
231 auto horizontalStarPixelRest = 0.0f;
232 for (
auto i = 0; i <
subNodes.size(); i++) {
234 if (guiSubNode->conditionsMet ==
false)
continue;
236 guiSubNode->requestedConstraints.height = height;
237 guiSubNode->computedConstraints.height = height;
240 auto nodeStarWidth = (
static_cast<float>(width) -
static_cast<float>(nodesWidth)) /
static_cast<float>(starCount);
241 auto nodeStarWidthInt =
static_cast<int>(nodeStarWidth);
242 horizontalStarPixelRest += nodeStarWidth - nodeStarWidthInt;
243 if (
static_cast<int>(horizontalStarPixelRest) > 0) {
244 nodeStarWidthInt +=
static_cast<int>(horizontalStarPixelRest);
245 horizontalStarPixelRest -=
static_cast<int>(horizontalStarPixelRest);
247 guiSubNode->requestedConstraints.width = nodeStarWidthInt;
248 guiSubNode->computedConstraints.width = nodeStarWidthInt;
249 if (guiSubNode->computedConstraints.width < 0) {
250 guiSubNode->computedConstraints.width = 0;
252 finalNodesWidth += guiSubNode->computedConstraints.width;
254 required_dynamic_cast<GUIParentNode*>(guiSubNode)->layoutSubNodes();
260 for (
auto i = 0; i <
subNodes.size(); i++) {
262 if (guiSubNode->conditionsMet ==
false)
continue;
267 for (
auto i = 0; i <
subNodes.size(); i++) {
269 if (guiSubNode->conditionsMet ==
false)
continue;
270 guiSubNode->computedConstraints.alignmentLeft = Math::max(0,
border.
left +
padding.
left + ((width - finalNodesWidth) / 2));
274 for (
auto i = 0; i <
subNodes.size(); i++) {
276 if (guiSubNode->conditionsMet ==
false)
continue;
277 guiSubNode->computedConstraints.alignmentLeft = Math::max(0, width - finalNodesWidth);
288 for (
auto i = 0; i <
subNodes.size(); i++) {
290 guiSubNode->computeContentAlignment();
301 for (
auto i = 0; i <
subNodes.size(); i++) {
303 if (guiSubNode->conditionsMet ==
false)
continue;
304 guiSubNode->setTop(top);
308 top += guiSubNode->computedConstraints.height;
317 for (
auto i = 0; i <
subNodes.size(); i++) {
319 if (guiSubNode->conditionsMet ==
false)
continue;
320 guiSubNode->setLeft(left);
324 left += guiSubNode->computedConstraints.width;
GUI layout node alignment enum.
static STATIC_DLL_IMPEXT GUILayoutNode_Alignment * VERTICAL
static GUILayoutNode_Alignment * valueOf(const string &name)
Returns enum object given by name.
static STATIC_DLL_IMPEXT GUILayoutNode_Alignment * HORIZONTAL
const string getNodeType() override
int getContentWidth() override
int getContentHeight() override
void setTop(int top) override
Set computed top.
static GUILayoutNode_Alignment * createAlignment(const string &alignment)
Create alignment.
void setLeft(int left) override
Set computed left.
bool isContentNode() override
GUILayoutNode_Alignment * alignment
void layoutSubNodes() override
Layout sub nodes.
GUI element node conditions.
GUI node horizontal alignment enum.
static STATIC_DLL_IMPEXT GUINode_AlignmentHorizontal * RIGHT
static STATIC_DLL_IMPEXT GUINode_AlignmentHorizontal * CENTER
static STATIC_DLL_IMPEXT GUINode_AlignmentHorizontal * LEFT
GUI node vertical alignment enum.
static STATIC_DLL_IMPEXT GUINode_AlignmentVertical * BOTTOM
static STATIC_DLL_IMPEXT GUINode_AlignmentVertical * CENTER
static STATIC_DLL_IMPEXT GUINode_AlignmentVertical * TOP
static STATIC_DLL_IMPEXT GUINode_Flow * FLOATING
GUI node requested constraints requested constraints type enum.
static STATIC_DLL_IMPEXT GUINode_RequestedConstraints_RequestedConstraintsType * STAR
static STATIC_DLL_IMPEXT GUINode_RequestedConstraints_RequestedConstraintsType * PIXEL
virtual void setLeft(int left)
Set computed left.
GUINode_ComputedConstraints computedConstraints
virtual void setTop(int top)
Set computed top.
GUINode_RequestedConstraints requestedConstraints
GUINode_Alignments alignments
GUI parent node overflow enum.
GUI parent node base class thats supporting child nodes.
virtual void computeHorizontalChildrenAlignment()
Compute horizontal children alignment.
virtual void layoutSubNodes()
Layout sub nodes.
vector< GUINode * > subNodes
virtual void computeVerticalChildrenAlignment()
Compute vertical children alignment.
GUI screen node that represents a screen that can be rendered via GUI system.
GUINode_AlignmentVertical * vertical
GUINode_AlignmentHorizontal * horizontal
GUI node computed constraints.
GUI node requested constraints entity.
GUINode_RequestedConstraints_RequestedConstraintsType * topType
GUINode_RequestedConstraints_RequestedConstraintsType * leftType
GUI node scale 9 grid entity.