void UIHBoxLayout::layout (UINode* parent) { float currentSize = 2.0f * parent->getPadding(); float minHeight = 0.0f; for (UINodeListIter i = _nodes.begin(); i != _nodes.end(); ++i) { UINode* node = *i; currentSize += node->getWidth() + _spacing; minHeight = std::max(node->getHeight() + 2.0f * parent->getPadding(), minHeight); } float size = currentSize - _spacing; parent->setSize(size, minHeight); // the size might change the alignment and thus the position of the parent float currentPos = parent->getPadding(); for (UINodeListIter i = _nodes.begin(); i != _nodes.end(); ++i) { UINode* node = *i; if (_expandChildren) node->setSize(node->getWidth(), parent->getHeight() - 2.0f * parent->getPadding()); if (_align & NODE_ALIGN_MIDDLE) { node->setPos(currentPos, parent->getHeight() / 2.0f - node->getHeight() / 2.0f); } else if (_align & NODE_ALIGN_BOTTOM) { node->setPos(currentPos, parent->getHeight() - node->getHeight()); } else { node->setPos(currentPos, node->getY()); } currentPos += node->getWidth() + _spacing; } }
void UIMapWindow::initHudNodes () { UINode* panel = new UINode(_frontend); panel->setImage("bones"); panel->setStandardPadding(); panel->setAlignment(NODE_ALIGN_TOP | NODE_ALIGN_CENTER); add(panel); UINode *innerPanel = new UINode(_frontend); innerPanel->setLayout(new UIHBoxLayout(0.01f)); innerPanel->setPos(panel->getX() + 0.07f, panel->getY()); _points = new UICavePackerNodePoint(_frontend, 30); _points->setFont(HUGE_FONT); _points->setId(UINODE_POINTS); innerPanel->add(_points); add(innerPanel); }