Create AbsoluteLayout and BorderLayout with nested Slots

This commit is contained in:
2021-03-19 14:11:06 +01:00
parent bf8f896c81
commit 93a82a6010
2 changed files with 242 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
package com.bartlomiejpluta.base.api.game.gui.component;
import com.bartlomiejpluta.base.api.game.context.Context;
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;
public class AbsoluteLayout extends BaseContainer {
public AbsoluteLayout(Context context, GUI gui) {
super(context, gui);
super.setSizeMode(SizeMode.ABSOLUTE, SizeMode.ABSOLUTE);
super.setSize(0f, 0f);
}
@Override
public final void setWidth(Float width) {
throw new UnsupportedOperationException("Absolute layout does not define a size");
}
@Override
public final void setHeight(Float height) {
throw new UnsupportedOperationException("Absolute layout does not define a size");
}
@Override
public final void setSizeMode(SizeMode widthMode, SizeMode heightMode) {
throw new UnsupportedOperationException("Absolute layout does not define a size");
}
@Override
public final void setWidthMode(SizeMode mode) {
throw new UnsupportedOperationException("Absolute layout does not define a size");
}
@Override
public final void setHeightMode(SizeMode mode) {
throw new UnsupportedOperationException("Absolute layout does not define a size");
}
@Override
protected final float getContentWidth() {
return 0;
}
@Override
protected final float getContentHeight() {
return 0;
}
@Override
public void draw(Screen screen, GUI gui) {
for (var child : children) {
child.draw(screen, gui);
}
}
}

View File

@@ -0,0 +1,185 @@
package com.bartlomiejpluta.base.api.game.gui.component;
import com.bartlomiejpluta.base.api.game.context.Context;
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;
public class BorderLayout extends BaseContainer {
public BorderLayout(Context context, GUI gui) {
super(context, gui);
super.setSizeMode(SizeMode.RELATIVE, SizeMode.RELATIVE);
super.setSize(1f, 1f);
}
@Override
public void add(Component component) {
if (!(component instanceof Slot)) {
throw new IllegalStateException("Border layout directly accepts only Slot children");
}
super.add(component);
}
@Override
public final void setSizeMode(SizeMode widthMode, SizeMode heightMode) {
if (widthMode == SizeMode.AUTO || heightMode == SizeMode.AUTO) {
throw new IllegalStateException("Border layout does not support AUTO sizing mode");
}
super.setSizeMode(widthMode, heightMode);
}
@Override
public final void setWidthMode(SizeMode mode) {
if (mode == SizeMode.AUTO) {
throw new IllegalStateException("Border layout does not support AUTO sizing mode");
}
super.setWidthMode(mode);
}
@Override
public final void setHeightMode(SizeMode mode) {
if (mode == SizeMode.AUTO) {
throw new IllegalStateException("Border layout does not support AUTO sizing mode");
}
super.setHeightMode(mode);
}
@Override
protected final float getContentWidth() {
return 0;
}
@Override
protected final float getContentHeight() {
return 0;
}
@Override
public void draw(Screen screen, GUI gui) {
for (var child : children) {
((Slot) child).setPosition(this);
child.draw(screen, gui);
}
}
public static abstract class Slot extends ComponentWrapper {
protected Slot(Context context, GUI gui) {
super(context, gui);
}
protected abstract void setPosition(BorderLayout layout);
}
public static class Top extends Slot {
public Top(Context context, GUI gui) {
super(context, gui);
}
@Override
protected void setPosition(BorderLayout layout) {
setPosition((layout.getWidth() - getWidth()) / 2, layout.getMarginTop());
}
}
public static class TopRight extends Slot {
public TopRight(Context context, GUI gui) {
super(context, gui);
}
@Override
protected void setPosition(BorderLayout layout) {
setPosition(layout.getWidth() - getWidth() - getMarginRight(), getMarginTop());
}
}
public static class Right extends Slot {
public Right(Context context, GUI gui) {
super(context, gui);
}
@Override
protected void setPosition(BorderLayout layout) {
setPosition(layout.getWidth() - getWidth() - getMarginRight(), (layout.getHeight() - getHeight()) / 2);
}
}
public static class BottomRight extends Slot {
public BottomRight(Context context, GUI gui) {
super(context, gui);
}
@Override
protected void setPosition(BorderLayout layout) {
setPosition(layout.getWidth() - getWidth() - getMarginRight(), layout.getHeight() - getHeight() - getMarginBottom());
}
}
public static class Bottom extends Slot {
public Bottom(Context context, GUI gui) {
super(context, gui);
}
@Override
protected void setPosition(BorderLayout layout) {
setPosition((layout.getWidth() - getWidth()) / 2, layout.getHeight() - getHeight() - getMarginBottom());
}
}
public static class BottomLeft extends Slot {
public BottomLeft(Context context, GUI gui) {
super(context, gui);
}
@Override
protected void setPosition(BorderLayout layout) {
setPosition(getMarginLeft(), layout.getHeight() - getHeight() - getMarginBottom());
}
}
public static class Left extends Slot {
public Left(Context context, GUI gui) {
super(context, gui);
}
@Override
protected void setPosition(BorderLayout layout) {
setPosition(getMarginLeft(), (layout.getHeight() - getHeight()) / 2);
}
}
public static class TopLeft extends Slot {
public TopLeft(Context context, GUI gui) {
super(context, gui);
}
@Override
protected void setPosition(BorderLayout layout) {
setPosition(getMarginLeft(), getMarginTop());
}
}
public static class Center extends Slot {
public Center(Context context, GUI gui) {
super(context, gui);
}
@Override
protected void setPosition(BorderLayout layout) {
setPosition((layout.getWidth() - getWidth()) / 2, (layout.getHeight() - getHeight()) / 2);
}
}
}