Rogue: Savage Rats, a retro-themed dungeon crawler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
rogue-savage-rats/src/mightypork/gamecore/gui/components/layout/linear/LinearLayout.java

90 lines
2.0 KiB

package mightypork.gamecore.gui.components.layout.linear;
import mightypork.dynmath.num.Num;
import mightypork.dynmath.num.NumSum;
import mightypork.dynmath.rect.proxy.RectBound;
import mightypork.dynmath.vect.Vect;
import mightypork.dynmath.vect.proxy.VectAdapter;
import mightypork.gamecore.core.modules.AppAccess;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.DynamicWidthComponent;
import mightypork.gamecore.gui.components.LayoutComponent;
import mightypork.gamecore.gui.components.LinearComponent;
public class LinearLayout extends LayoutComponent {
public LinearLayout(AppAccess app, AlignX align)
{
super(app);
this.align = align;
}
public LinearLayout(AppAccess app, RectBound context, AlignX align)
{
super(app, context);
this.align = align;
}
private final NumSum totalWidth = new NumSum();
private final Vect leftAlignOrigin = LinearLayout.this.origin();
private final Vect centerAlignOrigin = LinearLayout.this.topCenter().sub(totalWidth.half(), Num.ZERO);
private final Vect rightAlignOrigin = LinearLayout.this.topRight().sub(totalWidth, Num.ZERO);
private final Vect leftMostOrigin = new VectAdapter() {
@Override
protected Vect getSource()
{
switch (align) {
default:
case LEFT:
return leftAlignOrigin;
case CENTER:
return centerAlignOrigin;
case RIGHT:
return rightAlignOrigin;
}
}
};
private Vect nextOrigin = leftMostOrigin;
private AlignX align = AlignX.LEFT;
public void add(DynamicWidthComponent dwcomp)
{
add(new LinearWrapper(dwcomp));
}
public void add(LinearComponent lincomp)
{
lincomp.setHeight(height());
lincomp.setOrigin(nextOrigin);
nextOrigin = nextOrigin.add(lincomp.width(), Num.ZERO);
totalWidth.addSummand(lincomp.width());
attach(lincomp);
}
public void setAlign(AlignX align)
{
this.align = align;
}
/**
* Add a gap.
*
* @param heightPercent percent of height for gap width
*/
public void gap(double heightPercent)
{
add(new LinearGap(heightPercent));
}
}