From 42611d4aedc1a806dcd4e91d6d4cc2ee9856ad4f Mon Sep 17 00:00:00 2001 From: Leo dev Date: Mon, 5 May 2025 11:20:17 -0500 Subject: [PATCH] added scrolling (need to add scissor) --- .../java/org/saturnclient/ui2/Element.java | 3 ++ .../org/saturnclient/ui2/RenderScope.java | 2 +- .../org/saturnclient/ui2/SaturnScreen.java | 35 +++++++++++++++ .../ui2/components/ElementRenderer.java | 10 +++++ .../ui2/components/SaturnModule.java | 5 +++ .../org/saturnclient/ui2/elements/Scroll.java | 43 +++++++++++++++++++ .../org/saturnclient/ui2/screens/ModMenu.java | 23 ++++++++++ .../saturnclient/ui2/screens/ShiftMenu.java | 1 - 8 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/saturnclient/ui2/components/ElementRenderer.java create mode 100644 src/main/java/org/saturnclient/ui2/components/SaturnModule.java create mode 100644 src/main/java/org/saturnclient/ui2/elements/Scroll.java create mode 100644 src/main/java/org/saturnclient/ui2/screens/ModMenu.java diff --git a/src/main/java/org/saturnclient/ui2/Element.java b/src/main/java/org/saturnclient/ui2/Element.java index 781a67d..e3ddaee 100644 --- a/src/main/java/org/saturnclient/ui2/Element.java +++ b/src/main/java/org/saturnclient/ui2/Element.java @@ -22,6 +22,9 @@ public class Element { public void click(int mouseX, int mouseY) { } + public void scroll(int mouseX, int mouseY, double horizontalAmount, double verticalAmount) { + } + public final Element dimensions(int width, int height) { this.width = width; this.height = height; diff --git a/src/main/java/org/saturnclient/ui2/RenderScope.java b/src/main/java/org/saturnclient/ui2/RenderScope.java index b51721b..5b81d21 100644 --- a/src/main/java/org/saturnclient/ui2/RenderScope.java +++ b/src/main/java/org/saturnclient/ui2/RenderScope.java @@ -20,7 +20,7 @@ public class RenderScope { public MatrixStack matrices; public VertexConsumerProvider.Immediate vertexConsumers; private Function renderLayers; - private int opacity = 255 << 24; + private int opacity = 255 << 24; public RenderScope(MatrixStack matrices, VertexConsumerProvider.Immediate vertexConsumers) { this.matrices = matrices; diff --git a/src/main/java/org/saturnclient/ui2/SaturnScreen.java b/src/main/java/org/saturnclient/ui2/SaturnScreen.java index 1615d6c..2407806 100644 --- a/src/main/java/org/saturnclient/ui2/SaturnScreen.java +++ b/src/main/java/org/saturnclient/ui2/SaturnScreen.java @@ -6,6 +6,7 @@ import java.util.List; import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.saturnclient.mixin.DrawContextAccessor; import org.saturnclient.ui2.anim.Animation; +import org.saturnclient.ui2.components.ElementRenderer; import net.minecraft.client.gl.PostEffectProcessor; import net.minecraft.client.gui.CubeMapRenderer; @@ -40,6 +41,10 @@ public abstract class SaturnScreen extends Screen { public void draw(Element element) { synchronized (elements) { elements.add(element); + + if (element instanceof ElementRenderer) { + elements.addAll(((ElementRenderer) element).getChildren()); + } } if (element.animation != null) { @@ -125,4 +130,34 @@ public abstract class SaturnScreen extends Screen { return false; } + + @Override + public boolean mouseScrolled( + double mouseX, + double mouseY, + double horizontalAmount, + double verticalAmount) { + for (Element element : new ArrayList<>(elements)) { + double adjustedMouseX = mouseX - element.x; + double adjustedMouseY = mouseY - element.y; + boolean isMouseInside = adjustedMouseX >= 0 && + adjustedMouseX <= (element.width * element.scale) && + adjustedMouseY >= 0 && + adjustedMouseY <= (element.height * element.scale); + + if (isMouseInside) { + element.scroll( + (int) (adjustedMouseX / element.scale), + (int) (adjustedMouseY / element.scale), + horizontalAmount, + verticalAmount); + } + } + + return super.mouseScrolled( + mouseX, + mouseY, + horizontalAmount, + verticalAmount); + } } diff --git a/src/main/java/org/saturnclient/ui2/components/ElementRenderer.java b/src/main/java/org/saturnclient/ui2/components/ElementRenderer.java new file mode 100644 index 0000000..ad4f36d --- /dev/null +++ b/src/main/java/org/saturnclient/ui2/components/ElementRenderer.java @@ -0,0 +1,10 @@ +package org.saturnclient.ui2.components; + +import java.util.List; + +import org.saturnclient.ui2.Element; + +public interface ElementRenderer { + List getChildren(); + void draw(Element element); +} diff --git a/src/main/java/org/saturnclient/ui2/components/SaturnModule.java b/src/main/java/org/saturnclient/ui2/components/SaturnModule.java new file mode 100644 index 0000000..902ffec --- /dev/null +++ b/src/main/java/org/saturnclient/ui2/components/SaturnModule.java @@ -0,0 +1,5 @@ +package org.saturnclient.ui2.components; + +public class SaturnModule { + +} diff --git a/src/main/java/org/saturnclient/ui2/elements/Scroll.java b/src/main/java/org/saturnclient/ui2/elements/Scroll.java new file mode 100644 index 0000000..cb6aeed --- /dev/null +++ b/src/main/java/org/saturnclient/ui2/elements/Scroll.java @@ -0,0 +1,43 @@ +package org.saturnclient.ui2.elements; + +import java.util.ArrayList; +import java.util.List; + +import org.saturnclient.ui2.Element; +import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.RenderScope; +import org.saturnclient.ui2.components.ElementRenderer; + +public class Scroll extends Element implements ElementRenderer { + protected List children = new ArrayList<>(); + + @Override + public void render(RenderScope renderScope, RenderContext ctx) { + } + + @Override + public void draw(Element element) { + children.add(element); + + if (element.width > width) { + width = element.width; + } + + if (element.height > height) { + height = element.height; + } + } + + @Override + public void scroll(int mouseX, int mouseY, double horizontalAmount, double verticalAmount) { + for (Element child : children) { + child.y -= verticalAmount; + } + } + + + @Override + public List getChildren() { + return children; + } +} diff --git a/src/main/java/org/saturnclient/ui2/screens/ModMenu.java b/src/main/java/org/saturnclient/ui2/screens/ModMenu.java new file mode 100644 index 0000000..ccd9c4e --- /dev/null +++ b/src/main/java/org/saturnclient/ui2/screens/ModMenu.java @@ -0,0 +1,23 @@ +package org.saturnclient.ui2.screens; + +import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.ui2.SaturnScreen; +import org.saturnclient.ui2.elements.Button; +import org.saturnclient.ui2.elements.Scroll; + +public class ModMenu extends SaturnScreen { + public ModMenu() { + super("Mod Menu"); + } + + @Override + public void ui() { + Scroll scroll = new Scroll(); + + scroll.draw(new Button("Hello World!", () -> { + SaturnClient.LOGGER.info("Clicked Hello World!"); + })); + + draw(scroll); + } +} diff --git a/src/main/java/org/saturnclient/ui2/screens/ShiftMenu.java b/src/main/java/org/saturnclient/ui2/screens/ShiftMenu.java index d12ceaf..181bd90 100644 --- a/src/main/java/org/saturnclient/ui2/screens/ShiftMenu.java +++ b/src/main/java/org/saturnclient/ui2/screens/ShiftMenu.java @@ -4,7 +4,6 @@ import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.SaturnClientConfig; import org.saturnclient.saturnclient.menus.CloaksMenu; import org.saturnclient.saturnclient.menus.HudEditor; -import org.saturnclient.saturnclient.menus.ModMenu; import org.saturnclient.ui.Textures; import org.saturnclient.ui2.Element; import org.saturnclient.ui2.SaturnScreen;