Skip to content

Commit

Permalink
explicitly differentiate stretching modes for layouts in gui builder
Browse files Browse the repository at this point in the history
  • Loading branch information
malytomas committed Feb 25, 2024
1 parent ae9ba14 commit 77414b3
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 24 deletions.
24 changes: 16 additions & 8 deletions sources/include/cage-engine/guiBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,22 @@ namespace cage
public:
[[nodiscard]] GuiBuilder &setNextName(uint32 name);

[[nodiscard]] BuilderItem row(bool spaced = false, Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem leftRow(bool flexibleRight = false, Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem rightRow(bool flexibleLeft = false, Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem centerRow(bool flexibleEdges = false, Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem column(bool spaced = false, Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem topColumn(bool flexibleBottom = false, Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem bottomColumn(bool flexibleTop = false, Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem middleColumn(bool flexibleEdges = false, Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem row(Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem spacedRow(Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem leftRow(Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem leftRowStretchRight(Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem rightRow(Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem rightRowStretchLeft(Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem centerRow(Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem centerRowStretchBoth(Real verticalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem column(Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem spacedColumn(Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem topColumn(Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem topColumnStretchBottom(Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem bottomColumn(Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem bottomColumnStretchTop(Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem middleColumn(Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem middleColumnStretchBoth(Real horizontalAlign = GuiLayoutLineComponent().crossAlign);
[[nodiscard]] BuilderItem horizontalSplit(Real verticalAlign = GuiLayoutSplitComponent().crossAlign);
[[nodiscard]] BuilderItem verticalSplit(Real horizontalAlign = GuiLayoutSplitComponent().crossAlign);
[[nodiscard]] BuilderItem horizontalTable(uint32 rows = GuiLayoutTableComponent().sections, bool grid = GuiLayoutTableComponent().grid);
Expand Down
108 changes: 92 additions & 16 deletions sources/libengine/gui/guiBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -200,78 +200,154 @@ namespace cage
return *this;
}

BuilderItem GuiBuilder::row(bool spaced, Real verticalAlign)
BuilderItem GuiBuilder::row(Real verticalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = verticalAlign;
l.first = l.last = spaced ? LineEdgeModeEnum::Spaced : LineEdgeModeEnum::None;
l.first = l.last = LineEdgeModeEnum::None;
return c;
}

BuilderItem GuiBuilder::leftRow(bool flexibleRight, Real verticalAlign)
BuilderItem GuiBuilder::spacedRow(Real verticalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = verticalAlign;
l.last = flexibleRight ? LineEdgeModeEnum::Flexible : LineEdgeModeEnum::Empty;
l.first = l.last = LineEdgeModeEnum::Spaced;
return c;
}

BuilderItem GuiBuilder::rightRow(bool flexibleLeft, Real verticalAlign)
BuilderItem GuiBuilder::leftRow(Real verticalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = verticalAlign;
l.first = flexibleLeft ? LineEdgeModeEnum::Flexible : LineEdgeModeEnum::Empty;
l.last = LineEdgeModeEnum::Empty;
return c;
}

BuilderItem GuiBuilder::centerRow(bool flexibleEdges, Real verticalAlign)
BuilderItem GuiBuilder::leftRowStretchRight(Real verticalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = verticalAlign;
l.first = l.last = flexibleEdges ? LineEdgeModeEnum::Flexible : LineEdgeModeEnum::Empty;
l.last = LineEdgeModeEnum::Flexible;
return c;
}

BuilderItem GuiBuilder::column(bool spaced, Real horizontalAlign)
BuilderItem GuiBuilder::rightRow(Real verticalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = verticalAlign;
l.first = LineEdgeModeEnum::Empty;
return c;
}

BuilderItem GuiBuilder::rightRowStretchLeft(Real verticalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = verticalAlign;
l.first = LineEdgeModeEnum::Flexible;
return c;
}

BuilderItem GuiBuilder::centerRow(Real verticalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = verticalAlign;
l.first = l.last = LineEdgeModeEnum::Empty;
return c;
}

BuilderItem GuiBuilder::centerRowStretchBoth(Real verticalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = verticalAlign;
l.first = l.last = LineEdgeModeEnum::Flexible;
return c;
}

BuilderItem GuiBuilder::column(Real horizontalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = horizontalAlign;
l.first = l.last = LineEdgeModeEnum::None;
l.vertical = true;
return c;
}

BuilderItem GuiBuilder::spacedColumn(Real horizontalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = horizontalAlign;
l.first = l.last = LineEdgeModeEnum::Spaced;
l.vertical = true;
return c;
}

BuilderItem GuiBuilder::topColumn(Real horizontalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = horizontalAlign;
l.last = LineEdgeModeEnum::Empty;
l.vertical = true;
return c;
}

BuilderItem GuiBuilder::topColumnStretchBottom(Real horizontalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = horizontalAlign;
l.last = LineEdgeModeEnum::Flexible;
l.vertical = true;
return c;
}

BuilderItem GuiBuilder::bottomColumn(Real horizontalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = horizontalAlign;
l.first = l.last = spaced ? LineEdgeModeEnum::Spaced : LineEdgeModeEnum::None;
l.first = LineEdgeModeEnum::Empty;
l.vertical = true;
return c;
}

BuilderItem GuiBuilder::topColumn(bool flexibleBottom, Real horizontalAlign)
BuilderItem GuiBuilder::bottomColumnStretchTop(Real horizontalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = horizontalAlign;
l.last = flexibleBottom ? LineEdgeModeEnum::Flexible : LineEdgeModeEnum::Empty;
l.first = LineEdgeModeEnum::Flexible;
l.vertical = true;
return c;
}

BuilderItem GuiBuilder::bottomColumn(bool flexibleTop, Real horizontalAlign)
BuilderItem GuiBuilder::middleColumn(Real horizontalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = horizontalAlign;
l.first = flexibleTop ? LineEdgeModeEnum::Flexible : LineEdgeModeEnum::Empty;
l.first = l.last = LineEdgeModeEnum::Empty;
l.vertical = true;
return c;
}

BuilderItem GuiBuilder::middleColumn(bool flexibleEdges, Real horizontalAlign)
BuilderItem GuiBuilder::middleColumnStretchBoth(Real horizontalAlign)
{
BuilderItem c(this);
GuiLayoutLineComponent &l = c->value<GuiLayoutLineComponent>();
l.crossAlign = horizontalAlign;
l.first = l.last = flexibleEdges ? LineEdgeModeEnum::Flexible : LineEdgeModeEnum::Empty;
l.first = l.last = LineEdgeModeEnum::Flexible;
l.vertical = true;
return c;
}
Expand Down

0 comments on commit 77414b3

Please sign in to comment.