42 GUILayoutNode::GUILayoutNode(
52 const string& backgroundImage,
54 const GUIColor& backgroundImageEffectColorMul,
55 const GUIColor& backgroundImageEffectColorAdd,
60 const string& tooltip,
63 GUIParentNode(screenNode, parentNode, id, flow, overflowX, overflowY, alignments, requestedConstraints, backgroundColor, backgroundImage, backgroundImageScale9Grid, backgroundImageEffectColorMul, backgroundImageEffectColorAdd, border, padding, showOn, hideOn, tooltip)
82 for (
auto i = 0; i <
subNodes.size(); i++) {
84 if (guiSubNode->conditionsMet ==
false)
continue;
88 width += guiSubNode->getAutoWidth();
91 for (
auto i = 0; i <
subNodes.size(); i++) {
93 if (guiSubNode->conditionsMet ==
false)
continue;
97 auto contentWidth = guiSubNode->getAutoWidth();
98 if (contentWidth > width) {
112 for (
auto i = 0; i <
subNodes.size(); i++) {
114 if (guiSubNode->conditionsMet ==
false)
continue;
118 height += guiSubNode->getAutoHeight();
121 for (
auto i = 0; i <
subNodes.size(); i++) {
123 if (guiSubNode->conditionsMet ==
false)
continue;
127 auto contentHeight = guiSubNode->getAutoHeight();
128 if (contentHeight > height) {
129 height = contentHeight;
148 auto nodesHeight = 0;
149 auto finalNodesHeight = 0;
150 for (
auto i = 0; i <
subNodes.size(); i++) {
152 if (guiSubNode->conditionsMet ==
false)
continue;
159 nodesHeight += guiSubNode->computedConstraints.height;
160 finalNodesHeight += guiSubNode->computedConstraints.height;
163 auto verticalStarPixelRest = 0.0f;
164 for (
auto i = 0; i <
subNodes.size(); i++) {
166 if (guiSubNode->conditionsMet ==
false)
continue;
168 guiSubNode->requestedConstraints.width = width;
169 guiSubNode->computedConstraints.width = width;
172 auto nodeStarHeight = (
static_cast<float>(height) -
static_cast<float>(nodesHeight)) /
static_cast<float>(starCount);
173 auto nodeStarHeightInt =
static_cast<int>(nodeStarHeight);
174 verticalStarPixelRest += nodeStarHeight - nodeStarHeightInt;
175 if (
static_cast<int>(verticalStarPixelRest) > 0) {
176 nodeStarHeightInt +=
static_cast<int>(verticalStarPixelRest);
177 verticalStarPixelRest -=
static_cast<int>(verticalStarPixelRest);
179 guiSubNode->requestedConstraints.height = nodeStarHeightInt;
180 guiSubNode->computedConstraints.height = nodeStarHeightInt;
181 if (guiSubNode->computedConstraints.height < 0) {
182 guiSubNode->computedConstraints.height = 0;
184 finalNodesHeight += guiSubNode->computedConstraints.height;
186 required_dynamic_cast<GUIParentNode*>(guiSubNode)->layoutSubNodes();
191 for (
auto i = 0; i <
subNodes.size(); i++) {
193 if (guiSubNode->conditionsMet ==
false)
continue;
198 for (
auto i = 0; i <
subNodes.size(); i++) {
200 if (guiSubNode->conditionsMet ==
false)
continue;
201 guiSubNode->computedConstraints.alignmentTop = Math::max(0,
border.
top +
padding.
top + ((height - finalNodesHeight) / 2));
205 for (
auto i = 0; i <
subNodes.size(); i++) {
207 if (guiSubNode->conditionsMet ==
false)
continue;
208 guiSubNode->computedConstraints.alignmentTop = Math::max(0, height - finalNodesHeight);
219 auto finalNodesWidth = 0;
220 for (
auto i = 0; i <
subNodes.size(); i++) {
222 if (guiSubNode->conditionsMet ==
false)
continue;
229 nodesWidth += guiSubNode->computedConstraints.width;
230 finalNodesWidth += guiSubNode->computedConstraints.width;
233 auto horizontalStarPixelRest = 0.0f;
234 for (
auto i = 0; i <
subNodes.size(); i++) {
236 if (guiSubNode->conditionsMet ==
false)
continue;
238 guiSubNode->requestedConstraints.height = height;
239 guiSubNode->computedConstraints.height = height;
242 auto nodeStarWidth = (
static_cast<float>(width) -
static_cast<float>(nodesWidth)) /
static_cast<float>(starCount);
243 auto nodeStarWidthInt =
static_cast<int>(nodeStarWidth);
244 horizontalStarPixelRest += nodeStarWidth - nodeStarWidthInt;
245 if (
static_cast<int>(horizontalStarPixelRest) > 0) {
246 nodeStarWidthInt +=
static_cast<int>(horizontalStarPixelRest);
247 horizontalStarPixelRest -=
static_cast<int>(horizontalStarPixelRest);
249 guiSubNode->requestedConstraints.width = nodeStarWidthInt;
250 guiSubNode->computedConstraints.width = nodeStarWidthInt;
251 if (guiSubNode->computedConstraints.width < 0) {
252 guiSubNode->computedConstraints.width = 0;
254 finalNodesWidth += guiSubNode->computedConstraints.width;
256 required_dynamic_cast<GUIParentNode*>(guiSubNode)->layoutSubNodes();
262 for (
auto i = 0; i <
subNodes.size(); i++) {
264 if (guiSubNode->conditionsMet ==
false)
continue;
269 for (
auto i = 0; i <
subNodes.size(); i++) {
271 if (guiSubNode->conditionsMet ==
false)
continue;
272 guiSubNode->computedConstraints.alignmentLeft = Math::max(0,
border.
left +
padding.
left + ((width - finalNodesWidth) / 2));
276 for (
auto i = 0; i <
subNodes.size(); i++) {
278 if (guiSubNode->conditionsMet ==
false)
continue;
279 guiSubNode->computedConstraints.alignmentLeft = Math::max(0, width - finalNodesWidth);
289 for (
auto i = 0; i <
subNodes.size(); i++) {
291 guiSubNode->computeContentAlignment();
302 for (
auto i = 0; i <
subNodes.size(); i++) {
304 if (guiSubNode->conditionsMet ==
false)
continue;
305 guiSubNode->setTop(top);
309 top += guiSubNode->computedConstraints.height;
318 for (
auto i = 0; i <
subNodes.size(); i++) {
320 if (guiSubNode->conditionsMet ==
false)
continue;
321 guiSubNode->setLeft(left);
325 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.