From 387cc2319877c065451035759781d75fa33d2377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 1 Sep 2022 15:07:09 +0200 Subject: [PATCH] Fix BorderLayout positioning issue --- .../base/api/gui/WindowManager.java | 20 ++++++++++ .../base/lib/gui/BorderLayout.java | 37 +++++++++++++++---- .../base/lib/gui/ComponentWrapper.java | 2 +- 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/gui/WindowManager.java b/api/src/main/java/com/bartlomiejpluta/base/api/gui/WindowManager.java index 17c1c172..8a6dedac 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/gui/WindowManager.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/gui/WindowManager.java @@ -62,6 +62,26 @@ public final class WindowManager extends BaseWidget { throw new UnsupportedOperationException("Window Manager is hardcoded to be of MATCH_PARENT mode"); } + @Override + @Attribute("width") + public void setWidth(String width) { + super.setWidth(width); + + if (widthMode == SizeMode.AUTO) { + throw new IllegalStateException("Border layout does not support AUTO sizing mode"); + } + } + + @Override + @Attribute("height") + public void setHeight(String height) { + super.setHeight(height); + + if (heightMode == SizeMode.AUTO) { + throw new IllegalStateException("Border layout does not support AUTO sizing mode"); + } + } + public CompletableFuture open(@NonNull Window window, Object... args) { if (windows.isEmpty()) { input.addKeyEventHandler(this::forwardKeyEventToTopWindow); diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/gui/BorderLayout.java b/api/src/main/java/com/bartlomiejpluta/base/lib/gui/BorderLayout.java index 5082c652..9614b1c4 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/gui/BorderLayout.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/gui/BorderLayout.java @@ -1,6 +1,7 @@ package com.bartlomiejpluta.base.lib.gui; import com.bartlomiejpluta.base.api.context.Context; +import com.bartlomiejpluta.base.api.gui.Attribute; import com.bartlomiejpluta.base.api.gui.Component; import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.gui.SizeMode; @@ -25,6 +26,26 @@ public class BorderLayout extends BaseContainer { super.add(component); } + @Override + @Attribute("width") + public void setWidth(String width) { + super.setWidth(width); + + if (widthMode == SizeMode.AUTO) { + throw new IllegalStateException("Border layout does not support AUTO sizing mode"); + } + } + + @Override + @Attribute("height") + public void setHeight(String height) { + super.setHeight(height); + + if (heightMode == SizeMode.AUTO) { + throw new IllegalStateException("Border layout does not support AUTO sizing mode"); + } + } + @Override public final void setSizeMode(SizeMode widthMode, SizeMode heightMode) { if (widthMode == SizeMode.AUTO || heightMode == SizeMode.AUTO) { @@ -86,7 +107,7 @@ public class BorderLayout extends BaseContainer { @Override protected void setPosition(BorderLayout layout) { - setPosition((layout.getWidth() - getWidth()) / 2, layout.getMarginTop()); + setPosition((layout.getWidth() - getWidth()) / 2, layout.getMarginTop() + layout.getPaddingTop()); } } @@ -98,7 +119,7 @@ public class BorderLayout extends BaseContainer { @Override protected void setPosition(BorderLayout layout) { - setPosition(layout.getWidth() - getWidth() - getMarginRight(), getMarginTop()); + setPosition(layout.getWidth() - getWidth() - getMarginRight() - layout.getPaddingRight(), getMarginTop() + layout.getPaddingTop()); } } @@ -110,7 +131,7 @@ public class BorderLayout extends BaseContainer { @Override protected void setPosition(BorderLayout layout) { - setPosition(layout.getWidth() - getWidth() - getMarginRight(), (layout.getHeight() - getHeight()) / 2); + setPosition(layout.getWidth() - getWidth() - getMarginRight() - layout.getPaddingRight(), (layout.getHeight() - getHeight()) / 2); } } @@ -122,7 +143,7 @@ public class BorderLayout extends BaseContainer { @Override protected void setPosition(BorderLayout layout) { - setPosition(layout.getWidth() - getWidth() - getMarginRight(), layout.getHeight() - getHeight() - getMarginBottom()); + setPosition(layout.getWidth() - getWidth() - getMarginRight() - layout.getPaddingRight(), layout.getHeight() - getHeight() - getMarginBottom() - layout.getPaddingBottom()); } } @@ -134,7 +155,7 @@ public class BorderLayout extends BaseContainer { @Override protected void setPosition(BorderLayout layout) { - setPosition((layout.getWidth() - getWidth()) / 2, layout.getHeight() - getHeight() - getMarginBottom()); + setPosition((layout.getWidth() - getWidth()) / 2, layout.getHeight() - getHeight() - getMarginBottom() - layout.getPaddingBottom()); } } @@ -146,7 +167,7 @@ public class BorderLayout extends BaseContainer { @Override protected void setPosition(BorderLayout layout) { - setPosition(getMarginLeft(), layout.getHeight() - getHeight() - getMarginBottom()); + setPosition(getMarginLeft() + layout.getPaddingLeft(), layout.getHeight() - getHeight() - getMarginBottom() - layout.getPaddingBottom()); } } @@ -158,7 +179,7 @@ public class BorderLayout extends BaseContainer { @Override protected void setPosition(BorderLayout layout) { - setPosition(getMarginLeft(), (layout.getHeight() - getHeight()) / 2); + setPosition(getMarginLeft() + layout.getPaddingLeft(), (layout.getHeight() - getHeight()) / 2); } } @@ -170,7 +191,7 @@ public class BorderLayout extends BaseContainer { @Override protected void setPosition(BorderLayout layout) { - setPosition(getMarginLeft(), getMarginTop()); + setPosition(getMarginLeft() + layout.getPaddingLeft(), getMarginTop() + layout.getPaddingTop()); } } diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/gui/ComponentWrapper.java b/api/src/main/java/com/bartlomiejpluta/base/lib/gui/ComponentWrapper.java index 70232a42..8d149fbb 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/gui/ComponentWrapper.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/gui/ComponentWrapper.java @@ -34,7 +34,7 @@ public abstract class ComponentWrapper extends BaseComponent { @Override public void draw(Screen screen, GUI gui) { - component.setPosition(x + component.getMarginLeft(), y + component.getMarginTop()); + component.setPosition(x + paddingLeft + component.getMarginLeft(), y + paddingTop + component.getMarginTop()); component.draw(screen, gui); } }