added scrolling (need to add scissor)
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class RenderScope {
|
|||||||
public MatrixStack matrices;
|
public MatrixStack matrices;
|
||||||
public VertexConsumerProvider.Immediate vertexConsumers;
|
public VertexConsumerProvider.Immediate vertexConsumers;
|
||||||
private Function<Identifier, RenderLayer> renderLayers;
|
private Function<Identifier, RenderLayer> renderLayers;
|
||||||
private int opacity = 255 << 24;
|
private int opacity = 255 << 24;
|
||||||
|
|
||||||
public RenderScope(MatrixStack matrices, VertexConsumerProvider.Immediate vertexConsumers) {
|
public RenderScope(MatrixStack matrices, VertexConsumerProvider.Immediate vertexConsumers) {
|
||||||
this.matrices = matrices;
|
this.matrices = matrices;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user