diff --git a/src/main/java/com/cleanroommc/modularui/api/widget/IWidget.java b/src/main/java/com/cleanroommc/modularui/api/widget/IWidget.java index 15615b3e6..81d5efe3f 100644 --- a/src/main/java/com/cleanroommc/modularui/api/widget/IWidget.java +++ b/src/main/java/com/cleanroommc/modularui/api/widget/IWidget.java @@ -215,6 +215,8 @@ default IWidget flexBuilder(Consumer builder) { /** * @return resizer of this widget */ + @NotNull + @Override IResizeable resizer(); /** diff --git a/src/main/java/com/cleanroommc/modularui/widget/EmptyWidget.java b/src/main/java/com/cleanroommc/modularui/widget/EmptyWidget.java index 64a88e8f9..bdd484138 100644 --- a/src/main/java/com/cleanroommc/modularui/widget/EmptyWidget.java +++ b/src/main/java/com/cleanroommc/modularui/widget/EmptyWidget.java @@ -16,7 +16,7 @@ public class EmptyWidget implements IWidget { private final Area area = new Area(); - private Flex flex; + private final Flex flex = new Flex(this); private IWidget parent; @Override @@ -99,14 +99,11 @@ public ModularGuiContext getContext() { @Override public Flex flex() { - if (this.flex == null) { - this.flex = new Flex(this); - } return this.flex; } @Override - public @Nullable IResizeable resizer() { + public @NotNull IResizeable resizer() { return this.flex; } diff --git a/src/main/java/com/cleanroommc/modularui/widget/Widget.java b/src/main/java/com/cleanroommc/modularui/widget/Widget.java index 846c2d28a..ce56c69e0 100644 --- a/src/main/java/com/cleanroommc/modularui/widget/Widget.java +++ b/src/main/java/com/cleanroommc/modularui/widget/Widget.java @@ -346,6 +346,7 @@ public Flex flex() { return this.flex; } + @NotNull @Override public IResizeable resizer() { return this.resizer; diff --git a/src/main/java/com/cleanroommc/modularui/widget/WidgetTree.java b/src/main/java/com/cleanroommc/modularui/widget/WidgetTree.java index 1ba6c55ef..1a6f33455 100644 --- a/src/main/java/com/cleanroommc/modularui/widget/WidgetTree.java +++ b/src/main/java/com/cleanroommc/modularui/widget/WidgetTree.java @@ -245,23 +245,17 @@ public static void resize(IWidget parent) { } private static boolean resizeWidget(IWidget widget, boolean init) { - boolean result = false, alreadyCalculated = false; + boolean alreadyCalculated = false; // first try to resize this widget IResizeable resizer = widget.resizer(); - if (resizer != null) { - if (init) { - widget.beforeResize(); - resizer.initResizing(); - } else { - // if this is not the first time check if this widget is already resized - alreadyCalculated = resizer.isFullyCalculated(); - } - result = alreadyCalculated || resizer.resize(widget); - } else if (!init) { - // weird case that is not supposed to happen - result = true; - alreadyCalculated = true; + if (init) { + widget.beforeResize(); + resizer.initResizing(); + } else { + // if this is not the first time check if this widget is already resized + alreadyCalculated = resizer.isFullyCalculated(); } + boolean result = alreadyCalculated || resizer.resize(widget); GuiAxis expandAxis = widget instanceof IExpander expander ? expander.getExpandAxis() : null; // now resize all children and collect children which could not be fully calculated @@ -282,7 +276,7 @@ private static boolean resizeWidget(IWidget widget, boolean init) { } // post resize this widget if possible - if (resizer != null && !result) { + if (!result) { result = resizer.postResize(widget); } @@ -303,10 +297,7 @@ private static boolean resizeWidget(IWidget widget, boolean init) { public static void applyPos(IWidget parent) { WidgetTree.foreachChildBFS(parent, child -> { - IResizeable resizer = child.resizer(); - if (resizer != null) { - resizer.applyPos(child); - } + child.resizer().applyPos(child); return true; }, true); } diff --git a/src/main/java/com/cleanroommc/modularui/widgets/TextWidget.java b/src/main/java/com/cleanroommc/modularui/widgets/TextWidget.java index 8b84062a4..8aca0a965 100644 --- a/src/main/java/com/cleanroommc/modularui/widgets/TextWidget.java +++ b/src/main/java/com/cleanroommc/modularui/widgets/TextWidget.java @@ -50,9 +50,9 @@ private TextRenderer simulate(float maxWidth) { @Override public int getDefaultHeight() { float maxWidth; - if (resizer() != null && resizer().isWidthCalculated()) { + if (resizer().isWidthCalculated()) { maxWidth = getArea().width + this.scale; - } else if (getParent().resizer() != null && getParent().resizer().isWidthCalculated()) { + } else if (getParent().resizer().isWidthCalculated()) { maxWidth = getParent().getArea().width + this.scale; } else { maxWidth = getScreen().getScreenArea().width; @@ -65,7 +65,7 @@ public int getDefaultHeight() { @Override public int getDefaultWidth() { float maxWidth = getScreen().getScreenArea().width; - if (getParent().resizer() != null && getParent().resizer().isWidthCalculated()) { + if (getParent().resizer().isWidthCalculated()) { maxWidth = getParent().getArea().width; } TextRenderer renderer = simulate(maxWidth);