added scrolling (need to add scissor)

This commit is contained in:
2025-05-05 11:20:17 -05:00
parent cf9fd50e4b
commit 42611d4aed
8 changed files with 120 additions and 2 deletions
@@ -22,6 +22,9 @@ public class Element {
public void click(int mouseX, int mouseY) { 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) { public final Element dimensions(int width, int height) {
this.width = width; this.width = width;
this.height = height; this.height = height;
@@ -6,6 +6,7 @@ import java.util.List;
import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.saturnclient.config.ThemeManager;
import org.saturnclient.saturnclient.mixin.DrawContextAccessor; import org.saturnclient.saturnclient.mixin.DrawContextAccessor;
import org.saturnclient.ui2.anim.Animation; import org.saturnclient.ui2.anim.Animation;
import org.saturnclient.ui2.components.ElementRenderer;
import net.minecraft.client.gl.PostEffectProcessor; import net.minecraft.client.gl.PostEffectProcessor;
import net.minecraft.client.gui.CubeMapRenderer; import net.minecraft.client.gui.CubeMapRenderer;
@@ -40,6 +41,10 @@ public abstract class SaturnScreen extends Screen {
public void draw(Element element) { public void draw(Element element) {
synchronized (elements) { synchronized (elements) {
elements.add(element); elements.add(element);
if (element instanceof ElementRenderer) {
elements.addAll(((ElementRenderer) element).getChildren());
}
} }
if (element.animation != null) { if (element.animation != null) {
@@ -125,4 +130,34 @@ public abstract class SaturnScreen extends Screen {
return false; 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);
}
} }
@@ -0,0 +1,10 @@
package org.saturnclient.ui2.components;
import java.util.List;
import org.saturnclient.ui2.Element;
public interface ElementRenderer {
List<Element> getChildren();
void draw(Element element);
}
@@ -0,0 +1,5 @@
package org.saturnclient.ui2.components;
public class SaturnModule {
}
@@ -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<Element> 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<Element> getChildren() {
return children;
}
}
@@ -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);
}
}
@@ -4,7 +4,6 @@ import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.SaturnClientConfig; import org.saturnclient.saturnclient.SaturnClientConfig;
import org.saturnclient.saturnclient.menus.CloaksMenu; import org.saturnclient.saturnclient.menus.CloaksMenu;
import org.saturnclient.saturnclient.menus.HudEditor; import org.saturnclient.saturnclient.menus.HudEditor;
import org.saturnclient.saturnclient.menus.ModMenu;
import org.saturnclient.ui.Textures; import org.saturnclient.ui.Textures;
import org.saturnclient.ui2.Element; import org.saturnclient.ui2.Element;
import org.saturnclient.ui2.SaturnScreen; import org.saturnclient.ui2.SaturnScreen;