Enable programmatically referencing Component's components

This commit is contained in:
2022-08-25 18:37:12 +02:00
parent 7d8848c6e5
commit 54b0c9b4b9
21 changed files with 192 additions and 153 deletions

View File

@@ -1,14 +1,17 @@
package com.bartlomiejpluta.base.lib.gui; package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.gui.SizeMode; import com.bartlomiejpluta.base.api.gui.SizeMode;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import java.util.Map;
public class AbsoluteLayout extends BaseContainer { public class AbsoluteLayout extends BaseContainer {
public AbsoluteLayout(Context context, GUI gui) { public AbsoluteLayout(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
super.setSizeMode(SizeMode.ABSOLUTE, SizeMode.ABSOLUTE); super.setSizeMode(SizeMode.ABSOLUTE, SizeMode.ABSOLUTE);
super.setSize(0f, 0f); super.setSize(0f, 0f);
} }

View File

@@ -5,17 +5,20 @@ import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import java.util.List; import java.util.List;
import java.util.Map;
import static java.util.Collections.emptyList; import static java.util.Collections.emptyList;
public abstract class BaseComponent extends BaseWidget implements Component { public abstract class BaseComponent extends BaseWidget implements Component {
protected boolean focused;
protected final Context context; protected final Context context;
protected final GUI gui; protected final GUI gui;
protected final Map<String, Component> refs;
protected boolean focused;
protected BaseComponent(Context context, GUI gui) { protected BaseComponent(Context context, GUI gui, Map<String, Component> refs) {
this.context = context; this.context = context;
this.gui = gui; this.gui = gui;
this.refs = refs;
} }
@Override @Override

View File

@@ -7,6 +7,7 @@ import com.bartlomiejpluta.base.api.gui.GUI;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import static java.util.Collections.unmodifiableList; import static java.util.Collections.unmodifiableList;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
@@ -15,8 +16,8 @@ public abstract class BaseContainer extends BaseComponent {
protected final List<Component> children = new LinkedList<>(); protected final List<Component> children = new LinkedList<>();
private final List<Component> readOnlyChildren = unmodifiableList(children); private final List<Component> readOnlyChildren = unmodifiableList(children);
public BaseContainer(Context context, GUI gui) { public BaseContainer(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override

View File

@@ -11,6 +11,8 @@ import java.util.Locale;
import java.util.function.Consumer; import java.util.function.Consumer;
public abstract class BaseWidget implements Widget { public abstract class BaseWidget implements Widget {
protected final EventHandler eventHandler = new EventHandler();
protected Widget parent; protected Widget parent;
protected SizeMode widthMode = SizeMode.AUTO; protected SizeMode widthMode = SizeMode.AUTO;
@@ -32,7 +34,6 @@ public abstract class BaseWidget implements Widget {
protected float paddingBottom; protected float paddingBottom;
protected float paddingLeft; protected float paddingLeft;
protected final EventHandler eventHandler = new EventHandler();
protected abstract float getContentWidth(); protected abstract float getContentWidth();
@@ -45,6 +46,26 @@ public abstract class BaseWidget implements Widget {
: getActualWidth(); : getActualWidth();
} }
@Override
public void setWidth(Float width) {
this.width = width;
}
@Attribute("width")
public void setWidth(String width) {
var widthLowerCased = width.toLowerCase(Locale.ROOT);
if (widthLowerCased.equals("auto")) {
this.widthMode = SizeMode.AUTO;
} else if (widthLowerCased.equals("relative")) {
this.widthMode = SizeMode.RELATIVE;
this.width = 1f;
} else {
this.widthMode = SizeMode.ABSOLUTE;
this.width = Float.parseFloat(width);
}
}
@Override @Override
public float getActualWidth() { public float getActualWidth() {
return paddingLeft + (widthMode == SizeMode.ABSOLUTE ? width : getContentWidth()) + paddingRight; return paddingLeft + (widthMode == SizeMode.ABSOLUTE ? width : getContentWidth()) + paddingRight;
@@ -57,16 +78,6 @@ public abstract class BaseWidget implements Widget {
: getActualHeight(); : getActualHeight();
} }
@Override
public float getActualHeight() {
return paddingTop + (heightMode == SizeMode.ABSOLUTE ? height : getContentHeight()) + paddingBottom;
}
@Override
public void setWidth(Float width) {
this.width = width;
}
@Override @Override
public void setHeight(Float height) { public void setHeight(Float height) {
this.height = height; this.height = height;
@@ -87,19 +98,9 @@ public abstract class BaseWidget implements Widget {
} }
} }
@Attribute("width") @Override
public void setWidth(String width) { public float getActualHeight() {
var widthLowerCased = width.toLowerCase(Locale.ROOT); return paddingTop + (heightMode == SizeMode.ABSOLUTE ? height : getContentHeight()) + paddingBottom;
if (widthLowerCased.equals("auto")) {
this.widthMode = SizeMode.AUTO;
} else if (widthLowerCased.equals("relative")) {
this.widthMode = SizeMode.RELATIVE;
this.width = 1f;
} else {
this.widthMode = SizeMode.ABSOLUTE;
this.width = Float.parseFloat(width);
}
} }
@Override @Override
@@ -152,13 +153,13 @@ public abstract class BaseWidget implements Widget {
} }
@Override @Override
public float getY() { public void setX(Float x) {
return y; this.x = x;
} }
@Override @Override
public void setX(Float x) { public float getY() {
this.x = x; return y;
} }
@Override @Override
@@ -204,46 +205,46 @@ public abstract class BaseWidget implements Widget {
this.marginLeft = all; this.marginLeft = all;
} }
@Override
public void setMarginTop(Float margin) {
this.marginTop = margin;
}
@Override
public void setMarginRight(Float margin) {
this.marginRight = margin;
}
@Override
public void setMarginBottom(Float margin) {
this.marginBottom = margin;
}
@Override
public void setMarginLeft(Float margin) {
this.marginLeft = margin;
}
@Override @Override
public float getMarginTop() { public float getMarginTop() {
return marginTop; return marginTop;
} }
@Override
public void setMarginTop(Float margin) {
this.marginTop = margin;
}
@Override @Override
public float getMarginRight() { public float getMarginRight() {
return marginRight; return marginRight;
} }
@Override
public void setMarginRight(Float margin) {
this.marginRight = margin;
}
@Override @Override
public float getMarginBottom() { public float getMarginBottom() {
return marginBottom; return marginBottom;
} }
@Override
public void setMarginBottom(Float margin) {
this.marginBottom = margin;
}
@Override @Override
public float getMarginLeft() { public float getMarginLeft() {
return marginLeft; return marginLeft;
} }
@Override
public void setMarginLeft(Float margin) {
this.marginLeft = margin;
}
@Override @Override
public void setPadding(Float top, Float right, Float bottom, Float left) { public void setPadding(Float top, Float right, Float bottom, Float left) {
this.paddingTop = top; this.paddingTop = top;
@@ -276,46 +277,46 @@ public abstract class BaseWidget implements Widget {
this.paddingLeft = all; this.paddingLeft = all;
} }
@Override
public void setPaddingTop(Float padding) {
this.paddingTop = padding;
}
@Override
public void setPaddingRight(Float padding) {
this.paddingRight = padding;
}
@Override
public void setPaddingBottom(Float padding) {
this.paddingBottom = padding;
}
@Override
public void setPaddingLeft(Float padding) {
this.paddingLeft = padding;
}
@Override @Override
public float getPaddingTop() { public float getPaddingTop() {
return paddingTop; return paddingTop;
} }
@Override
public void setPaddingTop(Float padding) {
this.paddingTop = padding;
}
@Override @Override
public float getPaddingRight() { public float getPaddingRight() {
return paddingRight; return paddingRight;
} }
@Override
public void setPaddingRight(Float padding) {
this.paddingRight = padding;
}
@Override @Override
public float getPaddingBottom() { public float getPaddingBottom() {
return paddingBottom; return paddingBottom;
} }
@Override
public void setPaddingBottom(Float padding) {
this.paddingBottom = padding;
}
@Override @Override
public float getPaddingLeft() { public float getPaddingLeft() {
return paddingLeft; return paddingLeft;
} }
@Override
public void setPaddingLeft(Float padding) {
this.paddingLeft = padding;
}
@Override @Override
public <E extends Event> void handleEvent(E event) { public <E extends Event> void handleEvent(E event) {
eventHandler.handleEvent(event); eventHandler.handleEvent(event);

View File

@@ -13,14 +13,12 @@ import static java.lang.String.format;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
public abstract class BaseWindow extends BaseWidget implements Window { public abstract class BaseWindow extends BaseWidget implements Window {
@Getter
private final Map<String, Component> refs;
protected Context context; protected Context context;
protected GUI gui; protected GUI gui;
protected WindowManager manager; protected WindowManager manager;
protected Component content; protected Component content;
@Getter
private final Map<String, Component> refs;
protected WindowPosition windowPosition = WindowPosition.CENTER; protected WindowPosition windowPosition = WindowPosition.CENTER;
protected BaseWindow(Context context, GUI gui, Map<String, Component> refs) { protected BaseWindow(Context context, GUI gui, Map<String, Component> refs) {

View File

@@ -6,10 +6,12 @@ import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.gui.SizeMode; import com.bartlomiejpluta.base.api.gui.SizeMode;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import java.util.Map;
public class BorderLayout extends BaseContainer { public class BorderLayout extends BaseContainer {
public BorderLayout(Context context, GUI gui) { public BorderLayout(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
super.setSizeMode(SizeMode.RELATIVE, SizeMode.RELATIVE); super.setSizeMode(SizeMode.RELATIVE, SizeMode.RELATIVE);
super.setSize(1f, 1f); super.setSize(1f, 1f);
} }
@@ -69,8 +71,8 @@ public class BorderLayout extends BaseContainer {
} }
public static abstract class Slot extends ComponentWrapper { public static abstract class Slot extends ComponentWrapper {
protected Slot(Context context, GUI gui) { protected Slot(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
protected abstract void setPosition(BorderLayout layout); protected abstract void setPosition(BorderLayout layout);
@@ -78,8 +80,8 @@ public class BorderLayout extends BaseContainer {
public static class Top extends Slot { public static class Top extends Slot {
public Top(Context context, GUI gui) { public Top(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override
@@ -90,8 +92,8 @@ public class BorderLayout extends BaseContainer {
public static class TopRight extends Slot { public static class TopRight extends Slot {
public TopRight(Context context, GUI gui) { public TopRight(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override
@@ -102,8 +104,8 @@ public class BorderLayout extends BaseContainer {
public static class Right extends Slot { public static class Right extends Slot {
public Right(Context context, GUI gui) { public Right(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override
@@ -114,8 +116,8 @@ public class BorderLayout extends BaseContainer {
public static class BottomRight extends Slot { public static class BottomRight extends Slot {
public BottomRight(Context context, GUI gui) { public BottomRight(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override
@@ -126,8 +128,8 @@ public class BorderLayout extends BaseContainer {
public static class Bottom extends Slot { public static class Bottom extends Slot {
public Bottom(Context context, GUI gui) { public Bottom(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override
@@ -138,8 +140,8 @@ public class BorderLayout extends BaseContainer {
public static class BottomLeft extends Slot { public static class BottomLeft extends Slot {
public BottomLeft(Context context, GUI gui) { public BottomLeft(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override
@@ -150,8 +152,8 @@ public class BorderLayout extends BaseContainer {
public static class Left extends Slot { public static class Left extends Slot {
public Left(Context context, GUI gui) { public Left(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override
@@ -162,8 +164,8 @@ public class BorderLayout extends BaseContainer {
public static class TopLeft extends Slot { public static class TopLeft extends Slot {
public TopLeft(Context context, GUI gui) { public TopLeft(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override
@@ -174,8 +176,8 @@ public class BorderLayout extends BaseContainer {
public static class Center extends Slot { public static class Center extends Slot {
public Center(Context context, GUI gui) { public Center(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override

View File

@@ -5,13 +5,15 @@ import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import java.util.Map;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
public abstract class ComponentWrapper extends BaseComponent { public abstract class ComponentWrapper extends BaseComponent {
protected Component component; protected Component component;
protected ComponentWrapper(Context context, GUI gui) { protected ComponentWrapper(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override

View File

@@ -1,18 +1,21 @@
package com.bartlomiejpluta.base.lib.gui; package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import lombok.NonNull; import lombok.NonNull;
import java.util.Map;
public class HGridLayout extends BaseContainer { public class HGridLayout extends BaseContainer {
protected float offsetX = 0.0f; protected float offsetX = 0.0f;
protected float offsetY = 0.0f; protected float offsetY = 0.0f;
protected int rows = 2; protected int rows = 2;
private float[] heights = new float[rows]; private float[] heights = new float[rows];
public HGridLayout(Context context, GUI gui) { public HGridLayout(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
public void setRows(@NonNull Integer rows) { public void setRows(@NonNull Integer rows) {

View File

@@ -13,6 +13,7 @@ import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Map;
public class HGridOptionChoice extends HGridLayout { public class HGridOptionChoice extends HGridLayout {
private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT); private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT);
@@ -26,8 +27,8 @@ public class HGridOptionChoice extends HGridLayout {
@Getter @Getter
private Component selectedComponent = null; private Component selectedComponent = null;
public HGridOptionChoice(Context context, GUI gui) { public HGridOptionChoice(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
addEventListener(KeyEvent.TYPE, this::switchOption); addEventListener(KeyEvent.TYPE, this::switchOption);
} }

View File

@@ -1,15 +1,18 @@
package com.bartlomiejpluta.base.lib.gui; package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import java.util.Map;
public class HLayout extends BaseContainer { public class HLayout extends BaseContainer {
protected float offsetX = 0.0f; protected float offsetX = 0.0f;
protected float offsetY = 0.0f; protected float offsetY = 0.0f;
public HLayout(Context context, GUI gui) { public HLayout(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override

View File

@@ -13,6 +13,7 @@ import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Map;
public class HOptionChoice extends HLayout { public class HOptionChoice extends HLayout {
private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT); private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT);
@@ -23,8 +24,8 @@ public class HOptionChoice extends HLayout {
@Getter @Getter
private Component selectedComponent = null; private Component selectedComponent = null;
public HOptionChoice(Context context, GUI gui) { public HOptionChoice(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
addEventListener(KeyEvent.TYPE, this::switchOption); addEventListener(KeyEvent.TYPE, this::switchOption);
} }

View File

@@ -1,6 +1,7 @@
package com.bartlomiejpluta.base.lib.gui; package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.gui.SizeMode; import com.bartlomiejpluta.base.api.gui.SizeMode;
import com.bartlomiejpluta.base.api.input.Key; import com.bartlomiejpluta.base.api.input.Key;
@@ -8,6 +9,8 @@ import com.bartlomiejpluta.base.api.input.KeyAction;
import com.bartlomiejpluta.base.api.input.KeyEvent; import com.bartlomiejpluta.base.api.input.KeyEvent;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import java.util.Map;
import static com.bartlomiejpluta.base.util.math.MathUtil.clamp; import static com.bartlomiejpluta.base.util.math.MathUtil.clamp;
import static java.lang.Math.*; import static java.lang.Math.*;
@@ -16,8 +19,8 @@ public class HScrollableLayout extends HLayout {
private float scrollStep = 0.25f; private float scrollStep = 0.25f;
private float scrollSpeed = 0.1f; private float scrollSpeed = 0.1f;
public HScrollableLayout(Context context, GUI gui) { public HScrollableLayout(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
addEventListener(KeyEvent.TYPE, this::handleKeyEvent); addEventListener(KeyEvent.TYPE, this::handleKeyEvent);
} }

View File

@@ -1,6 +1,7 @@
package com.bartlomiejpluta.base.lib.gui; package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.gui.IconSet; import com.bartlomiejpluta.base.api.gui.IconSet;
import com.bartlomiejpluta.base.api.gui.Paint; import com.bartlomiejpluta.base.api.gui.Paint;
@@ -9,6 +10,8 @@ import com.bartlomiejpluta.base.api.screen.Screen;
import lombok.NonNull; import lombok.NonNull;
import lombok.Setter; import lombok.Setter;
import java.util.Map;
public class IconView extends BaseComponent { public class IconView extends BaseComponent {
private final GUI gui; private final GUI gui;
private final Paint paint; private final Paint paint;
@@ -40,8 +43,8 @@ public class IconView extends BaseComponent {
private Integer iconSetColumn = 0; private Integer iconSetColumn = 0;
public IconView(Context context, GUI gui) { public IconView(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
this.gui = gui; this.gui = gui;
this.paint = gui.createPaint(); this.paint = gui.createPaint();
} }

View File

@@ -1,11 +1,14 @@
package com.bartlomiejpluta.base.lib.gui; package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.gui.Image; import com.bartlomiejpluta.base.api.gui.Image;
import com.bartlomiejpluta.base.api.gui.Paint; import com.bartlomiejpluta.base.api.gui.Paint;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import java.util.Map;
public class ImageView extends BaseComponent { public class ImageView extends BaseComponent {
private final Paint paint; private final Paint paint;
@@ -15,31 +18,11 @@ public class ImageView extends BaseComponent {
private float scaleX = 1; private float scaleX = 1;
private float scaleY = 1; private float scaleY = 1;
public ImageView(Context context, GUI gui) { public ImageView(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
this.paint = gui.createPaint(); this.paint = gui.createPaint();
} }
public void setImage(String imageUid) {
this.image = gui.getImage(imageUid);
}
public void setAngle(float angle) {
this.angle = angle;
}
public void setOpacity(float opacity) {
this.opacity = opacity;
}
public void setScaleX(float scaleX) {
this.scaleX = scaleX;
}
public void setScaleY(float scaleY) {
this.scaleY = scaleY;
}
public void setScale(float scaleX, float scaleY) { public void setScale(float scaleX, float scaleY) {
this.scaleX = scaleX; this.scaleX = scaleX;
this.scaleY = scaleY; this.scaleY = scaleY;
@@ -54,22 +37,42 @@ public class ImageView extends BaseComponent {
return image; return image;
} }
public void setImage(String imageUid) {
this.image = gui.getImage(imageUid);
}
public float getAngle() { public float getAngle() {
return angle; return angle;
} }
public void setAngle(float angle) {
this.angle = angle;
}
public float getOpacity() { public float getOpacity() {
return opacity; return opacity;
} }
public void setOpacity(float opacity) {
this.opacity = opacity;
}
public float getScaleX() { public float getScaleX() {
return scaleX; return scaleX;
} }
public void setScaleX(float scaleX) {
this.scaleX = scaleX;
}
public float getScaleY() { public float getScaleY() {
return scaleY; return scaleY;
} }
public void setScaleY(float scaleY) {
this.scaleY = scaleY;
}
@Override @Override
protected float getContentWidth() { protected float getContentWidth() {
return image.getWidth() * scaleX; return image.getWidth() * scaleX;

View File

@@ -3,22 +3,24 @@ package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Attribute; import com.bartlomiejpluta.base.api.gui.Attribute;
import com.bartlomiejpluta.base.api.gui.Color; import com.bartlomiejpluta.base.api.gui.Color;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import java.util.Map;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
public class Label extends BaseComponent { public class Label extends BaseComponent {
private final float[] bounds = new float[4];
private String text = ""; private String text = "";
private String font; private String font;
private float fontSize; private float fontSize;
private int alignment = GUI.ALIGN_LEFT; private int alignment = GUI.ALIGN_LEFT;
private Color color; private final Color color;
private final float[] bounds = new float[4]; public Label(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui, refs);
public Label(Context context, GUI gui) {
super(context, gui);
this.color = gui.createColor(); this.color = gui.createColor();
this.color.setRGBA(0xFFFFFFFF); this.color.setRGBA(0xFFFFFFFF);
} }

View File

@@ -1,19 +1,21 @@
package com.bartlomiejpluta.base.lib.gui; package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import java.util.Map;
public class VGridLayout extends BaseContainer { public class VGridLayout extends BaseContainer {
protected float offsetX = 0.0f; protected float offsetX = 0.0f;
protected float offsetY = 0.0f; protected float offsetY = 0.0f;
protected int columns = 2; protected int columns = 2;
private float[] widths = new float[columns]; private float[] widths = new float[columns];
public VGridLayout(Context context, GUI gui) { public VGridLayout(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
public void setColumns(@NonNull Integer columns) { public void setColumns(@NonNull Integer columns) {

View File

@@ -13,6 +13,7 @@ import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Map;
public class VGridOptionChoice extends VGridLayout { public class VGridOptionChoice extends VGridLayout {
private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT); private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT);
@@ -26,8 +27,8 @@ public class VGridOptionChoice extends VGridLayout {
@Getter @Getter
private Component selectedComponent = null; private Component selectedComponent = null;
public VGridOptionChoice(Context context, GUI gui) { public VGridOptionChoice(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
addEventListener(KeyEvent.TYPE, this::switchOption); addEventListener(KeyEvent.TYPE, this::switchOption);
} }

View File

@@ -1,15 +1,18 @@
package com.bartlomiejpluta.base.lib.gui; package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import java.util.Map;
public class VLayout extends BaseContainer { public class VLayout extends BaseContainer {
protected float offsetX = 0.0f; protected float offsetX = 0.0f;
protected float offsetY = 0.0f; protected float offsetY = 0.0f;
public VLayout(Context context, GUI gui) { public VLayout(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
} }
@Override @Override

View File

@@ -13,6 +13,7 @@ import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Map;
public class VOptionChoice extends VLayout { public class VOptionChoice extends VLayout {
private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT); private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT);
@@ -23,8 +24,8 @@ public class VOptionChoice extends VLayout {
@Getter @Getter
private Component selectedComponent = null; private Component selectedComponent = null;
public VOptionChoice(Context context, GUI gui) { public VOptionChoice(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
addEventListener(KeyEvent.TYPE, this::switchOption); addEventListener(KeyEvent.TYPE, this::switchOption);
} }

View File

@@ -1,6 +1,7 @@
package com.bartlomiejpluta.base.lib.gui; package com.bartlomiejpluta.base.lib.gui;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.gui.Component;
import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.gui.SizeMode; import com.bartlomiejpluta.base.api.gui.SizeMode;
import com.bartlomiejpluta.base.api.input.Key; import com.bartlomiejpluta.base.api.input.Key;
@@ -8,6 +9,8 @@ import com.bartlomiejpluta.base.api.input.KeyAction;
import com.bartlomiejpluta.base.api.input.KeyEvent; import com.bartlomiejpluta.base.api.input.KeyEvent;
import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.api.screen.Screen;
import java.util.Map;
import static com.bartlomiejpluta.base.util.math.MathUtil.clamp; import static com.bartlomiejpluta.base.util.math.MathUtil.clamp;
import static java.lang.Math.*; import static java.lang.Math.*;
@@ -16,8 +19,8 @@ public class VScrollableLayout extends VLayout {
private float scrollStep = 0.25f; private float scrollStep = 0.25f;
private float scrollSpeed = 0.1f; private float scrollSpeed = 0.1f;
public VScrollableLayout(Context context, GUI gui) { public VScrollableLayout(Context context, GUI gui, Map<String, Component> refs) {
super(context, gui); super(context, gui, refs);
addEventListener(KeyEvent.TYPE, this::scroll); addEventListener(KeyEvent.TYPE, this::scroll);
} }

View File

@@ -233,7 +233,7 @@ public class DefaultInflater implements Inflater {
@SneakyThrows @SneakyThrows
private Component createComponent(Class<? extends Widget> componentClass, NamedNodeMap attributes, Map<String, Component> refs, Context context, GUI gui) { private Component createComponent(Class<? extends Widget> componentClass, NamedNodeMap attributes, Map<String, Component> refs, Context context, GUI gui) {
var component = (Component) componentClass.getConstructor(Context.class, GUI.class).newInstance(context, gui); var component = (Component) componentClass.getConstructor(Context.class, GUI.class, Map.class).newInstance(context, gui, refs);
// Set attributes via setter methods // Set attributes via setter methods
for (int i = 0; i < attributes.getLength(); ++i) { for (int i = 0; i < attributes.getLength(); ++i) {