Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,8 @@ default IWidget flexBuilder(Consumer<Flex> builder) {
/**
* @return resizer of this widget
*/
@NotNull
@Override
IResizeable resizer();

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}

Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/cleanroommc/modularui/widget/Widget.java
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,7 @@ public Flex flex() {
return this.flex;
}

@NotNull
@Override
public IResizeable resizer() {
return this.resizer;
Expand Down
29 changes: 10 additions & 19 deletions src/main/java/com/cleanroommc/modularui/widget/WidgetTree.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}

Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down