Create basic GUI components

This commit is contained in:
2021-03-10 21:46:33 +01:00
parent 153e3d30fb
commit 6a3ae8447e
7 changed files with 394 additions and 0 deletions

View File

@@ -0,0 +1,214 @@
package com.bartlomiejpluta.base.api.game.gui;
public abstract class Component implements Widget {
protected Widget parent;
protected float absX;
protected float absY;
protected float width;
protected float height;
protected float marginTop;
protected float marginRight;
protected float marginBottom;
protected float marginLeft;
protected float paddingTop;
protected float paddingRight;
protected float paddingBottom;
protected float paddingLeft;
@Override
public Widget getParent() {
return parent;
}
public void setParent(Widget parent) {
this.parent = parent;
}
@Override
public float getAbsoluteX() {
return absX;
}
@Override
public float getAbsoluteY() {
return absY;
}
@Override
public void setAbsoluteX(float x) {
this.absX = x;
}
@Override
public void setAbsoluteY(float y) {
this.absY = y;
}
@Override
public float getWidth() {
return width;
}
@Override
public float getHeight() {
return height;
}
@Override
public void setWidth(float width) {
this.width = width;
}
@Override
public void setHeight(float height) {
this.height = height;
}
@Override
public void setMargin(float top, float right, float bottom, float left) {
this.marginTop = top;
this.marginRight = right;
this.marginBottom = bottom;
this.marginLeft = left;
}
@Override
public void setMargin(float top, float rightLeft, float bottom) {
this.marginTop = top;
this.marginRight = rightLeft;
this.marginBottom = bottom;
this.marginLeft = rightLeft;
}
@Override
public void setMargin(float topBottom, float rightLeft) {
this.marginTop = topBottom;
this.marginRight = rightLeft;
this.marginBottom = topBottom;
this.marginLeft = rightLeft;
}
@Override
public void setMargin(float all) {
this.marginTop = all;
this.marginRight = all;
this.marginBottom = 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
public float getMarginTop() {
return marginTop;
}
@Override
public float getMarginRight() {
return marginRight;
}
@Override
public float getMarginBottom() {
return marginBottom;
}
@Override
public float getMarginLeft() {
return marginLeft;
}
@Override
public void setPadding(float top, float right, float bottom, float left) {
this.paddingTop = top;
this.paddingRight = right;
this.paddingBottom = bottom;
this.paddingLeft = left;
}
@Override
public void setPadding(float top, float rightLeft, float bottom) {
this.paddingTop = top;
this.paddingRight = rightLeft;
this.paddingBottom = bottom;
this.paddingLeft = rightLeft;
}
@Override
public void setPadding(float topBottom, float rightLeft) {
this.paddingTop = topBottom;
this.paddingRight = rightLeft;
this.paddingBottom = topBottom;
this.paddingLeft = rightLeft;
}
@Override
public void setPadding(float all) {
this.paddingTop = all;
this.paddingRight = all;
this.paddingBottom = 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
public float getPaddingTop() {
return paddingTop;
}
@Override
public float getPaddingRight() {
return paddingRight;
}
@Override
public float getPaddingBottom() {
return paddingBottom;
}
@Override
public float getPaddingLeft() {
return paddingLeft;
}
}

View File

@@ -0,0 +1,13 @@
package com.bartlomiejpluta.base.api.game.gui;
import java.util.LinkedList;
import java.util.List;
public abstract class Container extends Component {
protected final List<Component> children = new LinkedList<>();
public void addChild(Component component) {
this.children.add(component);
component.setParent(this);
}
}

View File

@@ -8,6 +8,8 @@ public interface GUI extends Renderable, Disposable {
void setRoot(Widget root);
void beginPath();
void drawRectangle(float x, float y, float w, float h);
void fillColor(Color color);

View File

@@ -0,0 +1,48 @@
package com.bartlomiejpluta.base.api.game.gui;
import com.bartlomiejpluta.base.api.game.screen.Screen;
public class HBox extends Container {
@Override
public float getWidth() {
var childrenWidth = 0.0f;
for (var child : children) {
childrenWidth += child.getMarginLeft() + child.getWidth() + child.getMarginRight();
}
return paddingLeft + childrenWidth + paddingRight;
}
@Override
public float getHeight() {
var theHighestChild = 0.0f;
for (var child : children) {
var height = child.getMarginTop() + child.getHeight() + child.getMarginBottom();
if (height > theHighestChild) {
theHighestChild = height;
}
}
return paddingTop + theHighestChild + paddingBottom;
}
@Override
public void draw(Screen screen, GUI gui) {
var currentX = absX + paddingLeft;
var currentY = absY + paddingTop;
for (var child : children) {
var childAbsX = currentX + child.getMarginLeft();
var childAbsY = currentY + child.getMarginTop();
child.setAbsoluteX(childAbsX);
child.setAbsoluteY(childAbsY);
currentX += child.getMarginLeft() + child.getWidth() + child.getMarginRight();
child.draw(screen, gui);
}
}
}

View File

@@ -0,0 +1,48 @@
package com.bartlomiejpluta.base.api.game.gui;
import com.bartlomiejpluta.base.api.game.screen.Screen;
public class VBox extends Container {
@Override
public float getWidth() {
var theWidestChild = 0.0f;
for (var child : children) {
var width = child.getMarginLeft() + child.getWidth() + child.getMarginRight();
if (width > theWidestChild) {
theWidestChild = width;
}
}
return paddingLeft + theWidestChild + paddingRight;
}
@Override
public float getHeight() {
var childrenHeight = 0.0f;
for (var child : children) {
childrenHeight += child.getMarginTop() + child.getHeight() + child.getMarginBottom();
}
return paddingTop + childrenHeight + paddingBottom;
}
@Override
public void draw(Screen screen, GUI gui) {
var currentX = absX + paddingLeft;
var currentY = absY + paddingTop;
for (var child : children) {
var childAbsX = currentX + child.getMarginLeft();
var childAbsY = currentY + child.getMarginTop();
child.setAbsoluteX(childAbsX);
child.setAbsoluteY(childAbsY);
currentY += child.getMarginTop() + child.getHeight() + child.getMarginBottom();
child.draw(screen, gui);
}
}
}

View File

@@ -5,5 +5,69 @@ import com.bartlomiejpluta.base.api.game.screen.Screen;
public interface Widget {
Widget getParent();
float getAbsoluteX();
float getAbsoluteY();
void setAbsoluteX(float x);
void setAbsoluteY(float y);
float getWidth();
float getHeight();
void setWidth(float width);
void setHeight(float height);
void setMargin(float top, float right, float bottom, float left);
void setMargin(float top, float rightLeft, float bottom);
void setMargin(float topBottom, float rightLeft);
void setMargin(float all);
void setMarginTop(float margin);
void setMarginRight(float margin);
void setMarginBottom(float margin);
void setMarginLeft(float margin);
float getMarginTop();
float getMarginRight();
float getMarginBottom();
float getMarginLeft();
void setPadding(float top, float right, float bottom, float left);
void setPadding(float top, float rightLeft, float bottom);
void setPadding(float topBottom, float rightLeft);
void setPadding(float all);
void setPaddingTop(float padding);
void setPaddingRight(float padding);
void setPaddingBottom(float padding);
void setPaddingLeft(float padding);
float getPaddingTop();
float getPaddingRight();
float getPaddingBottom();
float getPaddingLeft();
void draw(Screen screen, GUI gui);
}