Esempio n. 1
0
void Background::Layout()
{
	if (!GetInnerWidget()) return;
	const Skin::BorderedRectElement &elem(GetContext()->GetSkin().BackgroundNormal());
	SetWidgetDimensions(GetInnerWidget(), Point(elem.paddingX, elem.paddingY), GetSize()-Point(elem.paddingX*2, elem.paddingY*2));
	return GetInnerWidget()->Layout();
}
Esempio n. 2
0
Point Background::PreferredSize()
{
	const Skin::BorderedRectElement &elem(GetContext()->GetSkin().BackgroundNormal());
	const Point borderSize(elem.borderWidth*2, elem.borderHeight*2);
	if (!GetInnerWidget()) return borderSize;
	Point preferredSize = SizeAdd(GetInnerWidget()->PreferredSize(), Point(elem.paddingX*2, elem.paddingY*2));
	preferredSize.x = std::max(preferredSize.x, borderSize.x);
	preferredSize.y = std::max(preferredSize.y, borderSize.y);
	return preferredSize;
}
Esempio n. 3
0
void Align::Layout()
{
	if (!GetInnerWidget()) return;

	const Point &size = GetSize();
	const Point &preferred = GetInnerWidget()->PreferredSize();

	Point pos;

	switch (m_direction) {
		case TOP_LEFT:
		case LEFT:
		case BOTTOM_LEFT:
			pos.x = 0.0f;
			break;

		case TOP:
		case MIDDLE:
		case BOTTOM:
			pos.x = std::max(0, (size.x-preferred.x)/2);
			break;

		case TOP_RIGHT:
		case RIGHT:
		case BOTTOM_RIGHT:
			pos.x = std::max(0, size.x-preferred.x);
			break;
	}

	switch (m_direction) {
		case TOP_LEFT:
		case TOP:
		case TOP_RIGHT:
			pos.y = 0.0f;
			break;

		case LEFT:
		case MIDDLE:
		case RIGHT:
			pos.y = std::max(0, (size.y-preferred.y)/2);
			break;

		case BOTTOM_LEFT:
		case BOTTOM:
		case BOTTOM_RIGHT:
			pos.y = std::max(0, size.y-preferred.y);
			break;
	}

	SetWidgetDimensions(GetInnerWidget(), pos, Point(std::min(size.x, preferred.x), std::min(size.y, preferred.y)));
	GetInnerWidget()->Layout();
}
Esempio n. 4
0
void Margin::Layout()
{
	if (!GetInnerWidget()) return;

	const Point size = GetSize();

	Point innerPos, innerSize;
	switch (m_direction) {
		case ALL:
			innerPos = Point(m_margin);
			innerSize = Point(std::max(size.x-m_margin*2,0), std::max(size.y-m_margin*2,0));
			break;

		case HORIZONTAL:
			innerPos = Point(m_margin,0);
			innerSize = Point(std::max(size.x-m_margin*2,0), size.y);
			break;

		case VERTICAL:
			innerPos = Point(0,m_margin);
			innerSize = Point(size.x, std::max(size.y-m_margin*2,0));
			break;

		case LEFT:
			innerPos = Point(m_margin,0);
			innerSize = Point(std::max(size.x-m_margin,0), size.y);
			break;

		case RIGHT:
			innerPos = Point(0,0);
			innerSize = Point(std::max(size.x-m_margin,0), size.y);
			break;

		case TOP:
			innerPos = Point(0,m_margin);
			innerSize = Point(size.x, std::max(size.y-m_margin,0));
			break;

		case BOTTOM:
			innerPos = Point(0,0);
			innerSize = Point(size.x, std::max(size.y-m_margin,0));
			break;
	}


	SetWidgetDimensions(GetInnerWidget(), innerPos, GetInnerWidget()->CalcSize(innerSize));

	GetInnerWidget()->Layout();
}
Esempio n. 5
0
Point Expand::PreferredSize()
{
	const Point innerPreferredSize(GetInnerWidget() ? GetInnerWidget()->CalcLayoutContribution() : Point());

	switch (m_direction) {
		case BOTH:
			SetSizeControlFlags(EXPAND_WIDTH | EXPAND_HEIGHT);
			break;
		case HORIZONTAL:
			SetSizeControlFlags(EXPAND_WIDTH);
			break;
		case VERTICAL:
			SetSizeControlFlags(EXPAND_HEIGHT);
			break;
	}

	return innerPreferredSize;
}
Esempio n. 6
0
void Face::Layout()
{
	Point size(GetSize());
	Point activeArea(std::min(size.x, size.y));
	Point activeOffset(std::max(0, (size.x-activeArea.x)/2), std::max(0, (size.y-activeArea.y)/2));
	SetActiveArea(activeArea, activeOffset);

	Widget *innerWidget = GetInnerWidget();
	if (!innerWidget) return;
	SetWidgetDimensions(innerWidget, activeOffset, activeArea);
	innerWidget->Layout();
}
Esempio n. 7
0
Point Margin::PreferredSize()
{
	Point extra;
	switch (m_direction) {
		case ALL:
			extra = Point(m_margin*2, m_margin*2);
			break;
		case HORIZONTAL:
			extra = Point(m_margin*2, 0);
			break;
		case VERTICAL:
			extra = Point(0, m_margin*2);
			break;
		case LEFT: case RIGHT:
			extra = Point(m_margin, 0);
			break;
		case TOP: case BOTTOM:
			extra = Point(0, m_margin);
			break;
	}
	if (!GetInnerWidget()) return extra;
	return SizeAdd(GetInnerWidget()->CalcLayoutContribution(), extra);
}
Esempio n. 8
0
void Button::Layout()
{
	Widget *innerWidget = GetInnerWidget();

	if (!innerWidget) {
		SetActiveArea(Point(GetContext()->GetSkin().ButtonMinInnerSize()) + Point(GetContext()->GetSkin().ButtonNormal().borderWidth*2));
		return;
	}

	const Point innerSize = GetSize() - Point(GetContext()->GetSkin().ButtonNormal().borderWidth*2);
	SetWidgetDimensions(innerWidget, Point(GetContext()->GetSkin().ButtonNormal().borderWidth), CalcSize(innerWidget, innerSize));
	innerWidget->Layout();

	Point innerActiveArea(innerWidget->GetActiveArea());
	growToMinimum(innerActiveArea, GetContext()->GetSkin().ButtonMinInnerSize());

	SetActiveArea(innerActiveArea + Point(GetContext()->GetSkin().ButtonNormal().borderWidth*2));
}
Esempio n. 9
0
void Button::Layout()
{
	Widget *innerWidget = GetInnerWidget();

	const Skin::BorderedRectElement &elem(GetContext()->GetSkin().ButtonNormal());

	if (!innerWidget) {
		SetActiveArea(PreferredSize());
		return;
	}

	const Point innerSize = GetSize() - Point(elem.paddingX*2, elem.paddingY*2);
	SetWidgetDimensions(innerWidget, Point(elem.paddingX, elem.paddingY), innerWidget->CalcSize(innerSize));
	innerWidget->Layout();

	Point innerActiveArea(innerWidget->GetActiveArea());
	growToMinimum(innerActiveArea, GetContext()->GetSkin().ButtonMinInnerSize());

	SetActiveArea(innerActiveArea + Point(elem.paddingX*2, elem.paddingY*2));
}
Esempio n. 10
0
Point Align::PreferredSize()
{
	if (!GetInnerWidget()) return Point();
	return GetInnerWidget()->PreferredSize();
}
Esempio n. 11
0
Point Margin::PreferredSize()
{
	if (!GetInnerWidget()) return Point(m_margin*2.0f);
	return SizeAdd(GetInnerWidget()->CalcLayoutContribution(), Point(m_margin*2.0f));
}