diff --git a/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java b/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java index 53c77e5..80c6955 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java +++ b/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java @@ -26,7 +26,7 @@ public abstract class AnimatedScreen extends Screen { Matrix3x2fStack stack = context.getMatrices().pushMatrix(); stack.translate((float) -translation, 0, stack); - parent.render(context, (int) (mouseX + translation), mouseY, delta); + parent.render(context, -67, -67, delta); stack.translate(this.width, 0, stack); mouseX -= (int) translation; } diff --git a/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java b/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java index 209d706..3af9a6e 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java +++ b/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java @@ -2,28 +2,26 @@ package de.shiewk.widgets.client.screen; import de.shiewk.widgets.ModWidget; import de.shiewk.widgets.client.WidgetManager; +import de.shiewk.widgets.client.screen.components.ScaledTextWidget; import de.shiewk.widgets.client.screen.components.WidgetListWidget; import de.shiewk.widgets.utils.WidgetUtils; -import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.AxisGridWidget; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.GridWidget; +import net.minecraft.client.gui.widget.SimplePositioningWidget; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.text.Text; import net.minecraft.util.Util; import org.joml.Matrix3x2fStack; import java.util.ArrayList; -import java.util.Objects; import java.util.function.Consumer; public class WidgetConfigScreen extends Screen { private final Screen parent; private final long creationTime = Util.getMeasuringTimeNano(); - private String search = ""; - private WidgetListWidget widgetList = null; private final ArrayList widgetsEdited = new ArrayList<>(); private final Consumer onWidgetEdit = this::changedSettings; @@ -46,38 +44,42 @@ public class WidgetConfigScreen extends Screen { client.setScreen(parent); } + int widgetListWidth; + @Override protected void init() { super.init(); - AxisGridWidget agw = new AxisGridWidget(3, height - 22, width - 6, 20, AxisGridWidget.DisplayAxis.HORIZONTAL); - final TextFieldWidget searchField = new TextFieldWidget(textRenderer, this.width - 160, 20, Text.empty()); + + int widgetColumns = WidgetListWidget.getColumns(width / 2); + widgetListWidth = widgetColumns * WidgetListWidget.COLUMN_SIZE; + + // Right side + final WidgetListWidget widgetList = new WidgetListWidget(width - widgetListWidth - 4, 0, widgetListWidth, height - 24, client, textRenderer, onWidgetEdit); + + final TextFieldWidget searchField = new TextFieldWidget(textRenderer, widgetListWidth, 20, Text.empty()); searchField.setPlaceholder(Text.translatable("widgets.ui.search")); - searchField.setChangedListener(this::search); - if (this.widgetList != null){ - searchField.setText(this.getSearchQuery()); + searchField.setChangedListener(widgetList::search); + searchField.setX(width - widgetListWidth - 4); + searchField.setY(height - 24); + + this.addDrawableChild(widgetList); + this.addDrawableChild(searchField); + + // Left side + GridWidget gw = new GridWidget(0, 0); + gw.getMainPositioner().margin(4, 4, 4, 4); + GridWidget.Adder adder = gw.createAdder(1); + { + ScaledTextWidget title = new ScaledTextWidget(0, 0, Text.literal("ᴡɪᴅɢᴇᴛѕ"), textRenderer, width < 600 ? 4 : 6); + adder.add(title); + + ButtonWidget editPosButton = ButtonWidget.builder(Text.translatable("widgets.ui.editPositions"), this::switchToEditPositions).build(); + adder.add(editPosButton); } - agw.add(searchField); - agw.add(new ButtonWidget.Builder(Text.translatable("widgets.ui.editPositions"), this::switchToEditPositions).build()); - - agw.refreshPositions(); - agw.forEachChild(this::addDrawableChild); - - if (Objects.equals(search, "")){ - search(""); - } - } - - private String getSearchQuery() { - return search; - } - - public void setSearchQuery(String search) { - this.search = search; - } - - private void search(String query) { - this.setSearchQuery(query); - widgetList = new WidgetListWidget(0, 0, width-4, height-24, Text.translatable("widgets.ui.config"), client, WidgetManager.getAllWidgets().stream().filter(this::searchQueryMatches).toList(), textRenderer, this.onWidgetEdit); + gw.refreshPositions(); + SimplePositioningWidget.setPos(gw, 0, 0, width - widgetListWidth, height, .5f, .5f); + gw.forEachChild(c -> c.setX((width - widgetListWidth) / 2 - (c.getWidth() / 2))); + gw.forEachChild(this::addDrawableChild); } private void switchToEditPositions(ButtonWidget widget) { @@ -86,20 +88,6 @@ public class WidgetConfigScreen extends Screen { client.setScreen(new EditWidgetPositionsScreen(this, this.onWidgetEdit)); } - @Override - public boolean mouseClicked(Click click, boolean doubled) { - if (super.mouseClicked(click, doubled)){ - return true; - } else return widgetList.mouseClicked(click, doubled); - } - - @Override - public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) { - if (super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount)){ - return true; - } else return widgetList.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount); - } - @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { assert client != null; @@ -111,18 +99,12 @@ public class WidgetConfigScreen extends Screen { stack.scale(v, v, stack); } super.render(context, mouseX, mouseY, delta); - if (widgetList != null){ - widgetList.render(context, mouseX, mouseY, delta); - } + if (time < 400){ context.getMatrices().popMatrix(); } } - private boolean searchQueryMatches(ModWidget widget) { - return widget.getName().getString().contains(search) || widget.getDescription().getString().contains(search) || widget.getId().toString().contains(search); - } - public void changedSettings(ModWidget widget) { if (!widgetsEdited.contains(widget)){ widgetsEdited.add(widget); diff --git a/src/main/java/de/shiewk/widgets/client/screen/components/ScaledTextWidget.java b/src/main/java/de/shiewk/widgets/client/screen/components/ScaledTextWidget.java new file mode 100644 index 0000000..ff0615b --- /dev/null +++ b/src/main/java/de/shiewk/widgets/client/screen/components/ScaledTextWidget.java @@ -0,0 +1,42 @@ +package de.shiewk.widgets.client.screen.components; + +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.Click; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; +import net.minecraft.client.gui.widget.ClickableWidget; +import net.minecraft.text.Text; +import org.joml.Matrix3x2fStack; + +public class ScaledTextWidget extends ClickableWidget { + + private final TextRenderer textRenderer; + private final float scale; + + public ScaledTextWidget(int x, int y, Text message, TextRenderer textRenderer, float scale) { + super(x, y, 0, (int) (textRenderer.fontHeight * scale), message); + this.textRenderer = textRenderer; + this.scale = scale; + } + + @Override + public int getWidth() { + return (int) (textRenderer.getWidth(getMessage()) * scale); + } + + @Override + protected void renderWidget(DrawContext context, int mouseX, int mouseY, float deltaTicks) { + Matrix3x2fStack stack = context.getMatrices().pushMatrix(); + stack.scale(scale); + context.drawText(textRenderer, getMessage(), (int) (getX() / scale), (int) (getY() / scale), 0xffffffff, true); + stack.popMatrix(); + } + + @Override + protected void appendClickableNarrations(NarrationMessageBuilder builder) {} + + @Override + public boolean mouseClicked(Click click, boolean doubled) { + return false; + } +} diff --git a/src/main/java/de/shiewk/widgets/client/screen/components/WidgetListWidget.java b/src/main/java/de/shiewk/widgets/client/screen/components/WidgetListWidget.java index 7ca1187..3463299 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/components/WidgetListWidget.java +++ b/src/main/java/de/shiewk/widgets/client/screen/components/WidgetListWidget.java @@ -1,6 +1,7 @@ package de.shiewk.widgets.client.screen.components; import de.shiewk.widgets.ModWidget; +import de.shiewk.widgets.client.WidgetManager; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.Click; @@ -22,31 +23,44 @@ import java.util.function.Consumer; public class WidgetListWidget extends ScrollableWidget { + public static final int COLUMN_SIZE = 208; private final MinecraftClient client; - private final List widgets; + private List widgets; private final List elements = new ArrayList<>(); private final TextRenderer textRenderer; private final Consumer onEdit; + public static boolean searchQueryMatches(String search, ModWidget widget) { + return widget.getName().getString().contains(search) || widget.getDescription().getString().contains(search) || widget.getId().toString().contains(search); + } - public WidgetListWidget(int x, int y, int width, int height, Text message, MinecraftClient client, List widgets, TextRenderer textRenderer, Consumer onEdit) { - super(x, y, width, height, message); + public WidgetListWidget(int x, int y, int width, int height, MinecraftClient client, TextRenderer textRenderer, Consumer onEdit) { + super(x, y, width, height, Text.empty()); this.client = client; - this.widgets = widgets; + this.widgets = loadWidgets(null); this.textRenderer = textRenderer; this.onEdit = onEdit; init(); } + private List loadWidgets(String search) { + if (search == null) { + return WidgetManager.getAllWidgets(); + } else { + return WidgetManager.getAllWidgets().stream().filter(w -> searchQueryMatches(search, w)).toList(); + } + } + private void init(){ GridWidget gw = new GridWidget(); gw.getMainPositioner().margin(4, 4, 4, 4); - final GridWidget.Adder adder = gw.createAdder(this.width / 208); + final GridWidget.Adder adder = gw.createAdder(getColumns()); for (ModWidget widget : widgets) { adder.add(new WidgetWidget(0, 0, 200, 100, client, widget, textRenderer, onEdit)); } + SimplePositioningWidget.setPos(gw, getX(), getY(), this.getWidth(), this.getContentsHeightWithPadding(), 0, 0); gw.refreshPositions(); - SimplePositioningWidget.setPos(gw, 0, 0, this.width, this.getContentsHeightWithPadding(), 0.5F, 0.5F); + this.elements.clear(); gw.forEachChild(w -> this.addWidget((WidgetWidget) w)); } @@ -56,11 +70,19 @@ public class WidgetListWidget extends ScrollableWidget { @Override protected int getContentsHeightWithPadding() { - final int rowSize = this.width / 208; - final int rows = widgets.size() % rowSize == 0 ? widgets.size() / rowSize : widgets.size() / rowSize + 1; + final int columns = getColumns(); + final int rows = widgets.size() / columns; return 10 + (rows * 108); } + public int getColumns() { + return getColumns(this.width); + } + + public static int getColumns(int width){ + return Math.max(1, width / COLUMN_SIZE); + } + @Override protected double getDeltaYPerScroll() { return 35; @@ -99,4 +121,10 @@ public class WidgetListWidget extends ScrollableWidget { builder.put(NarrationPart.HINT, widget.getName()); } } + + public void search(String query) { + widgets = this.loadWidgets(query); + setScrollY(0); + init(); + } }