SimpleJavaEngine/src/main/java/speiger/src/coreengine/rendering/gui/helper/constrains/Constrains.java

113 lines
6.8 KiB
Java

package speiger.src.coreengine.rendering.gui.helper.constrains;
import java.util.function.BooleanSupplier;
import speiger.src.coreengine.rendering.gui.GuiComponent;
import speiger.src.coreengine.rendering.gui.helper.constrains.Constrain.Target;
import speiger.src.coreengine.utils.functions.FloatSupplier;
public class Constrains
{
Constrain[] constrains = new Constrain[4];
private Constrains(Constrain[] array)
{
System.arraycopy(array, 0, constrains, 0, 4);
}
public Constrains(Constrain xPos, Constrain yPos, Constrain width, Constrain height)
{
constrains[0] = xPos;
constrains[1] = yPos;
constrains[2] = width;
constrains[3] = height;
}
public void setOwner(GuiComponent owner, GuiComponent parent)
{
for(int i = 0;i<4;i++) {
if(constrains[i] != null) {
constrains[i].setComponents(owner, parent, Target.by(i));
}
}
}
public void onComponentChanged()
{
for(int i = 0;i<4;i++) {
if(constrains[i] != null) constrains[i].apply();
}
}
public static Constrains parent() { return new Constrains(new ParentConstrain(), new ParentConstrain(), new ParentConstrain(), new ParentConstrain()); }
public static Constrains parent(float padding) { return new Constrains(new ParentConstrain(padding), new ParentConstrain(padding), new ParentConstrain(padding), new ParentConstrain(padding)); }
public static Constrains parent(float xPadding, float yPadding) { return new Constrains(new ParentConstrain(xPadding), new ParentConstrain(yPadding), new ParentConstrain(xPadding), new ParentConstrain(yPadding)); }
public static Constrains parent(float x, float y, float width, float height) { return new Constrains(new ParentConstrain(x), new ParentConstrain(y), new ParentConstrain(width), new ParentConstrain(height)); }
public static Constrains scrollBar(BooleanSupplier supply, boolean horizontal, float barSize) {
Constrain bounds = new ConditionalConstraint(supply, new ParentConstrain(), new ParentConstrain(barSize / 2F));
return horizontal ? new Constrains(new PixelConstrain(), new ParentConstrain(barSize).invert(), bounds, new PixelConstrain(barSize)) : new Constrains(new ParentConstrain(barSize).invert(), new PixelConstrain(), new PixelConstrain(barSize), bounds);
}
public static Constrains verticalScrollBar(BooleanSupplier supply, float offset, float barSize) { return invParent(barSize, Target.X).yPos(offset).width(barSize).height(new ConditionalConstraint(supply, new ParentConstrain(offset * 0.5F), new ParentConstrain((barSize + offset) * 0.5F))).build(); }
public static ConstrainBuilder xPos(Constrain xPos) { return new ConstrainBuilder().set(xPos, Target.X); }
public static ConstrainBuilder yPos(Constrain yPos) { return new ConstrainBuilder().set(yPos, Target.Y); }
public static ConstrainBuilder width(Constrain width) { return new ConstrainBuilder().set(width, Target.WIDTH); }
public static ConstrainBuilder height(Constrain height) { return new ConstrainBuilder().set(height, Target.HEIGHT); }
public static ConstrainBuilder xPos(float xPos) { return new ConstrainBuilder().set(new PixelConstrain(xPos), Target.X); }
public static ConstrainBuilder yPos(float yPos) { return new ConstrainBuilder().set(new PixelConstrain(yPos), Target.Y); }
public static ConstrainBuilder width(float width) { return new ConstrainBuilder().set(new PixelConstrain(width), Target.WIDTH); }
public static ConstrainBuilder height(float height) { return new ConstrainBuilder().set(new PixelConstrain(height), Target.HEIGHT); }
public static ConstrainBuilder xPosR(float xPos) { return new ConstrainBuilder().set(new RelativeConstrain(xPos), Target.X); }
public static ConstrainBuilder yPosR(float yPos) { return new ConstrainBuilder().set(new RelativeConstrain(yPos), Target.Y); }
public static ConstrainBuilder widthR(float width) { return new ConstrainBuilder().set(new RelativeConstrain(width), Target.WIDTH); }
public static ConstrainBuilder heightR(float height) { return new ConstrainBuilder().set(new RelativeConstrain(height), Target.HEIGHT); }
public static ConstrainBuilder parent(Target target) { return new ConstrainBuilder().set(new ParentConstrain(), target); }
public static ConstrainBuilder invParent(Target target) { return new ConstrainBuilder().set(new ParentConstrain().invert(), target); }
public static ConstrainBuilder parent(float padding, Target target) { return new ConstrainBuilder().set(new ParentConstrain(padding), target); }
public static ConstrainBuilder invParent(float padding, Target target) { return new ConstrainBuilder().set(new ParentConstrain(padding).invert(), target); }
public static ConstrainBuilder center(Target target) { return new ConstrainBuilder().set(new CenterConstrain(), target); }
public static ConstrainBuilder dynamic(FloatSupplier provider, Target target) { return new ConstrainBuilder().set(new DynamicConstrain(provider), target); }
public static class ConstrainBuilder
{
Constrain[] constrains = new Constrain[4];
public ConstrainBuilder set(Constrain value, Target target) {
constrains[target.ordinal()] = value;
return this;
}
public ConstrainBuilder xPos(Constrain xPos) { return set(xPos, Target.X); }
public ConstrainBuilder yPos(Constrain yPos) { return set(yPos, Target.Y); }
public ConstrainBuilder width(Constrain width) { return set(width, Target.WIDTH); }
public ConstrainBuilder height(Constrain height) { return set(height, Target.HEIGHT); }
public ConstrainBuilder xPos(float xPos) { return set(new PixelConstrain(xPos), Target.X); }
public ConstrainBuilder yPos(float yPos) { return set(new PixelConstrain(yPos), Target.Y); }
public ConstrainBuilder width(float width) { return set(new PixelConstrain(width), Target.WIDTH); }
public ConstrainBuilder height(float height) { return set(new PixelConstrain(height), Target.HEIGHT); }
public ConstrainBuilder xPosR(float xPos) { return set(new RelativeConstrain(xPos), Target.X); }
public ConstrainBuilder yPosR(float yPos) { return set(new RelativeConstrain(yPos), Target.Y); }
public ConstrainBuilder widthR(float width) { return set(new RelativeConstrain(width), Target.WIDTH); }
public ConstrainBuilder heightR(float height) { return set(new RelativeConstrain(height), Target.HEIGHT); }
public ConstrainBuilder parent(Target target) { return set(new ParentConstrain(), target); }
public ConstrainBuilder invParent(Target target) { return set(new ParentConstrain().invert(), target); }
public ConstrainBuilder parent(float padding, Target target) { return set(new ParentConstrain(padding), target); }
public ConstrainBuilder invParent(float padding, Target target) { return set(new ParentConstrain(padding).invert(), target); }
public ConstrainBuilder center(Target target) { return set(new CenterConstrain(), target); }
public ConstrainBuilder dynamic(FloatSupplier provider, Target target) { return set(new DynamicConstrain(provider), target); }
public Constrains build()
{
return new Constrains(constrains);
}
}
}