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(); }
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; }
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(); }
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(); }
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; }
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(); }
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); }
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)); }
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)); }
Point Align::PreferredSize() { if (!GetInnerWidget()) return Point(); return GetInnerWidget()->PreferredSize(); }
Point Margin::PreferredSize() { if (!GetInnerWidget()) return Point(m_margin*2.0f); return SizeAdd(GetInnerWidget()->CalcLayoutContribution(), Point(m_margin*2.0f)); }