예제 #1
0
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;
	}
}
예제 #2
0
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);
}