Create scaffolding for Window API | fix some positioning issues in BaseComponent
This commit is contained in:
@@ -0,0 +1,274 @@
|
||||
package com.bartlomiejpluta.base.api.game.gui.base;
|
||||
|
||||
public abstract class BaseWidget implements Widget {
|
||||
protected Widget parent;
|
||||
|
||||
protected SizeMode widthMode = SizeMode.NORMAL;
|
||||
protected SizeMode heightMode = SizeMode.NORMAL;
|
||||
|
||||
protected float x;
|
||||
protected float y;
|
||||
|
||||
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;
|
||||
|
||||
protected abstract float getContentWidth();
|
||||
|
||||
protected abstract float getContentHeight();
|
||||
|
||||
@Override
|
||||
public float getWidth() {
|
||||
return widthMode == SizeMode.MATCH_PARENT
|
||||
? (parent != null ? parent.getWidth() - parent.getPaddingLeft() - parent.getPaddingRight() - marginLeft - marginRight : 0)
|
||||
: getActualWidth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getActualWidth() {
|
||||
return paddingLeft + (widthMode == SizeMode.NORMAL ? width : getContentWidth()) + paddingRight;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getHeight() {
|
||||
return heightMode == SizeMode.MATCH_PARENT
|
||||
? (parent != null ? parent.getHeight() - parent.getPaddingTop() - parent.getPaddingBottom() - marginTop - marginBottom : 0)
|
||||
: getActualHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getActualHeight() {
|
||||
return paddingTop + (heightMode == SizeMode.NORMAL ? height : getContentHeight()) + paddingBottom;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWidth(float width) {
|
||||
this.width = width;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeight(float height) {
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float width, float height) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSizeMode(SizeMode widthMode, SizeMode heightMode) {
|
||||
this.widthMode = widthMode;
|
||||
this.heightMode = heightMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SizeMode getWidthMode() {
|
||||
return widthMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWidthMode(SizeMode mode) {
|
||||
this.widthMode = mode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SizeMode getHeightMode() {
|
||||
return heightMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeightMode(SizeMode mode) {
|
||||
this.heightMode = mode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Widget getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParent(Widget parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setX(float x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setY(float y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPosition(float x, float y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
@@ -19,8 +19,12 @@ public interface Widget {
|
||||
|
||||
float getWidth();
|
||||
|
||||
float getActualWidth();
|
||||
|
||||
float getHeight();
|
||||
|
||||
float getActualHeight();
|
||||
|
||||
void setWidth(float width);
|
||||
|
||||
void setHeight(float height);
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.bartlomiejpluta.base.api.game.gui.component;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.BaseWidget;
|
||||
|
||||
public abstract class BaseComponent extends BaseWidget implements Component {
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package com.bartlomiejpluta.base.api.game.gui.component;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class BaseContainer extends Component implements Container {
|
||||
public abstract class BaseContainer extends BaseComponent implements Container {
|
||||
protected final List<Component> children = new LinkedList<>();
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,275 +1,6 @@
|
||||
package com.bartlomiejpluta.base.api.game.gui.component;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.SizeMode;
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.Widget;
|
||||
|
||||
public abstract class Component implements Widget {
|
||||
protected Widget parent;
|
||||
|
||||
protected SizeMode widthMode = SizeMode.NORMAL;
|
||||
protected SizeMode heightMode = SizeMode.NORMAL;
|
||||
|
||||
protected float x;
|
||||
protected float y;
|
||||
|
||||
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;
|
||||
|
||||
protected abstract float getContentWidth();
|
||||
|
||||
protected abstract float getContentHeight();
|
||||
|
||||
@Override
|
||||
public float getWidth() {
|
||||
return widthMode == SizeMode.MATCH_PARENT
|
||||
? (parent != null ? parent.getWidth() : 0)
|
||||
: getActualWidth();
|
||||
}
|
||||
|
||||
protected float getActualWidth() {
|
||||
return paddingLeft + (widthMode == SizeMode.NORMAL ? width : getContentWidth()) + paddingRight;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getHeight() {
|
||||
return heightMode == SizeMode.MATCH_PARENT
|
||||
? (parent != null ? parent.getHeight() : 0)
|
||||
: getActualHeight();
|
||||
}
|
||||
|
||||
protected float getActualHeight() {
|
||||
return paddingTop + (heightMode == SizeMode.NORMAL ? height : getContentHeight()) + paddingBottom;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWidth(float width) {
|
||||
this.width = width;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeight(float height) {
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float width, float height) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSizeMode(SizeMode widthMode, SizeMode heightMode) {
|
||||
this.widthMode = widthMode;
|
||||
this.heightMode = heightMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SizeMode getWidthMode() {
|
||||
return widthMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWidthMode(SizeMode mode) {
|
||||
this.widthMode = mode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SizeMode getHeightMode() {
|
||||
return heightMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeightMode(SizeMode mode) {
|
||||
this.heightMode = mode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Widget getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParent(Widget parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setX(float x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setY(float y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPosition(float x, float y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
public interface Component extends Widget {
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.bartlomiejpluta.base.api.game.gui.component;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.Widget;
|
||||
|
||||
public interface Container extends Widget {
|
||||
public interface Container extends Component {
|
||||
void add(Component component);
|
||||
|
||||
void remove(Component component);
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.bartlomiejpluta.base.api.game.gui.window;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.BaseWidget;
|
||||
import com.bartlomiejpluta.base.api.game.gui.component.Component;
|
||||
|
||||
public abstract class BaseWindow extends BaseWidget implements Window {
|
||||
protected Component content;
|
||||
|
||||
@Override
|
||||
protected float getContentWidth() {
|
||||
return content.getMarginLeft() + content.getActualWidth() + content.getMarginRight();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getContentHeight() {
|
||||
return content.getMarginTop() + content.getActualHeight() + content.getMarginBottom();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(WindowManager manager) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(WindowManager manager) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.bartlomiejpluta.base.api.game.gui.window;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.BaseWidget;
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.GUI;
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.SizeMode;
|
||||
import com.bartlomiejpluta.base.api.game.screen.Screen;
|
||||
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import static java.util.Objects.requireNonNull;
|
||||
|
||||
public class DefaultWindowManager extends BaseWidget implements WindowManager {
|
||||
private final Deque<Window> windows = new LinkedList<>();
|
||||
private DisplayMode displayMode = DisplayMode.DISPLAY_STACK;
|
||||
|
||||
public DefaultWindowManager() {
|
||||
super.setSizeMode(SizeMode.MATCH_PARENT, SizeMode.MATCH_PARENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getContentWidth() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getContentHeight() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSizeMode(SizeMode widthMode, SizeMode heightMode) {
|
||||
throw new UnsupportedOperationException("Window Manager is hardcoded to be of MATCH_PARENT mode");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWidthMode(SizeMode mode) {
|
||||
throw new UnsupportedOperationException("Window Manager is hardcoded to be of MATCH_PARENT mode");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeightMode(SizeMode mode) {
|
||||
throw new UnsupportedOperationException("Window Manager is hardcoded to be of MATCH_PARENT mode");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDisplayMode(DisplayMode mode) {
|
||||
this.displayMode = requireNonNull(mode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(Window window) {
|
||||
requireNonNull(window, "Window cannot be null");
|
||||
|
||||
windows.push(window);
|
||||
window.setParent(this);
|
||||
window.onOpen(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
var window = windows.pop();
|
||||
window.setParent(null);
|
||||
window.onClose(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Screen screen, GUI gui) {
|
||||
switch (displayMode) {
|
||||
case DISPLAY_STACK -> {
|
||||
for (var window : windows) {
|
||||
window.draw(screen, gui);
|
||||
}
|
||||
}
|
||||
|
||||
case DISPLAY_TOP -> {
|
||||
var topWindow = windows.peekFirst();
|
||||
if (topWindow != null) {
|
||||
topWindow.draw(screen, gui);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.bartlomiejpluta.base.api.game.gui.window;
|
||||
|
||||
public enum DisplayMode {
|
||||
DISPLAY_STACK,
|
||||
DISPLAY_TOP
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.bartlomiejpluta.base.api.game.gui.window;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.Widget;
|
||||
|
||||
public interface Window extends Widget {
|
||||
void onOpen(WindowManager manager);
|
||||
|
||||
void onClose(WindowManager manager);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.bartlomiejpluta.base.api.game.gui.window;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.gui.base.Widget;
|
||||
|
||||
public interface WindowManager extends Widget {
|
||||
void setDisplayMode(DisplayMode mode);
|
||||
|
||||
void open(Window window);
|
||||
|
||||
void close();
|
||||
}
|
||||
@@ -21,11 +21,21 @@ public class ScreenWidget implements Widget {
|
||||
return screen.getWidth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getActualWidth() {
|
||||
return screen.getWidth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getHeight() {
|
||||
return screen.getHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getActualHeight() {
|
||||
return screen.getWidth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Widget getParent() {
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user