118 lines
2.9 KiB
Java
118 lines
2.9 KiB
Java
package net.minecraft.client.gui.layouts;
|
|
|
|
import java.util.function.Consumer;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.minecraft.Util;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public class LinearLayout implements Layout {
|
|
private final GridLayout wrapped;
|
|
private final LinearLayout.Orientation orientation;
|
|
private int nextChildIndex = 0;
|
|
|
|
private LinearLayout(LinearLayout.Orientation orientation) {
|
|
this(0, 0, orientation);
|
|
}
|
|
|
|
public LinearLayout(int width, int height, LinearLayout.Orientation orientation) {
|
|
this.wrapped = new GridLayout(width, height);
|
|
this.orientation = orientation;
|
|
}
|
|
|
|
public LinearLayout spacing(int spacing) {
|
|
this.orientation.setSpacing(this.wrapped, spacing);
|
|
return this;
|
|
}
|
|
|
|
public LayoutSettings newCellSettings() {
|
|
return this.wrapped.newCellSettings();
|
|
}
|
|
|
|
public LayoutSettings defaultCellSetting() {
|
|
return this.wrapped.defaultCellSetting();
|
|
}
|
|
|
|
public <T extends LayoutElement> T addChild(T child, LayoutSettings layoutSettings) {
|
|
return this.orientation.addChild(this.wrapped, child, this.nextChildIndex++, layoutSettings);
|
|
}
|
|
|
|
public <T extends LayoutElement> T addChild(T child) {
|
|
return this.addChild(child, this.newCellSettings());
|
|
}
|
|
|
|
public <T extends LayoutElement> T addChild(T child, Consumer<LayoutSettings> layoutSettingsFactory) {
|
|
return this.orientation.addChild(this.wrapped, child, this.nextChildIndex++, Util.make(this.newCellSettings(), layoutSettingsFactory));
|
|
}
|
|
|
|
@Override
|
|
public void visitChildren(Consumer<LayoutElement> visitor) {
|
|
this.wrapped.visitChildren(visitor);
|
|
}
|
|
|
|
@Override
|
|
public void arrangeElements() {
|
|
this.wrapped.arrangeElements();
|
|
}
|
|
|
|
@Override
|
|
public int getWidth() {
|
|
return this.wrapped.getWidth();
|
|
}
|
|
|
|
@Override
|
|
public int getHeight() {
|
|
return this.wrapped.getHeight();
|
|
}
|
|
|
|
@Override
|
|
public void setX(int x) {
|
|
this.wrapped.setX(x);
|
|
}
|
|
|
|
@Override
|
|
public void setY(int y) {
|
|
this.wrapped.setY(y);
|
|
}
|
|
|
|
@Override
|
|
public int getX() {
|
|
return this.wrapped.getX();
|
|
}
|
|
|
|
@Override
|
|
public int getY() {
|
|
return this.wrapped.getY();
|
|
}
|
|
|
|
public static LinearLayout vertical() {
|
|
return new LinearLayout(LinearLayout.Orientation.VERTICAL);
|
|
}
|
|
|
|
public static LinearLayout horizontal() {
|
|
return new LinearLayout(LinearLayout.Orientation.HORIZONTAL);
|
|
}
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public static enum Orientation {
|
|
HORIZONTAL,
|
|
VERTICAL;
|
|
|
|
void setSpacing(GridLayout layout, int spacing) {
|
|
switch (this) {
|
|
case HORIZONTAL:
|
|
layout.columnSpacing(spacing);
|
|
break;
|
|
case VERTICAL:
|
|
layout.rowSpacing(spacing);
|
|
}
|
|
}
|
|
|
|
public <T extends LayoutElement> T addChild(GridLayout layout, T element, int index, LayoutSettings layoutSettings) {
|
|
return (T)(switch (this) {
|
|
case HORIZONTAL -> (LayoutElement)layout.addChild(element, 0, index, layoutSettings);
|
|
case VERTICAL -> (LayoutElement)layout.addChild(element, index, 0, layoutSettings);
|
|
});
|
|
}
|
|
}
|
|
}
|