Create basic GUI components
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,8 @@ public interface GUI extends Renderable, Disposable {
|
|||||||
|
|
||||||
void setRoot(Widget root);
|
void setRoot(Widget root);
|
||||||
|
|
||||||
|
void beginPath();
|
||||||
|
|
||||||
void drawRectangle(float x, float y, float w, float h);
|
void drawRectangle(float x, float y, float w, float h);
|
||||||
|
|
||||||
void fillColor(Color color);
|
void fillColor(Color color);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,5 +5,69 @@ import com.bartlomiejpluta.base.api.game.screen.Screen;
|
|||||||
public interface Widget {
|
public interface Widget {
|
||||||
Widget getParent();
|
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);
|
void draw(Screen screen, GUI gui);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,11 @@ public class NanoVGGUI implements GUI {
|
|||||||
nvgEndFrame(context);
|
nvgEndFrame(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beginPath() {
|
||||||
|
nvgBeginPath(context);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawRectangle(float x, float y, float w, float h) {
|
public void drawRectangle(float x, float y, float w, float h) {
|
||||||
nvgRect(context, x, y, w, h);
|
nvgRect(context, x, y, w, h);
|
||||||
|
|||||||
Reference in New Issue
Block a user