scrollable thingy
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package org.saturnclient.saturnclient;
|
package org.saturnclient.saturnclient;
|
||||||
|
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.util.math.ColorHelper;
|
import net.minecraft.util.math.ColorHelper;
|
||||||
|
|
||||||
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
||||||
@@ -17,6 +18,7 @@ public class SaturnClient implements ModInitializer {
|
|||||||
public static final String MOD_ID = "saturnclient";
|
public static final String MOD_ID = "saturnclient";
|
||||||
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
|
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
|
||||||
public static int COLOR = ColorHelper.getArgb(255, 251, 60, 79);
|
public static int COLOR = ColorHelper.getArgb(255, 251, 60, 79);
|
||||||
|
public static TextRenderer textRenderer = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.saturnclient.saturnclient.menus;
|
package org.saturnclient.saturnclient.menus;
|
||||||
|
|
||||||
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.ui.SaturnUi;
|
import org.saturnclient.ui.SaturnUi;
|
||||||
import org.saturnclient.ui.Textures;
|
import org.saturnclient.ui.Textures;
|
||||||
import org.saturnclient.ui.animations.FadeIn;
|
import org.saturnclient.ui.animations.FadeIn;
|
||||||
@@ -8,6 +9,7 @@ import org.saturnclient.ui.widgets.SaturnButton;
|
|||||||
import org.saturnclient.ui.widgets.SaturnImageButton;
|
import org.saturnclient.ui.widgets.SaturnImageButton;
|
||||||
import org.saturnclient.ui.widgets.SaturnImage;
|
import org.saturnclient.ui.widgets.SaturnImage;
|
||||||
|
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
public class MainMenu extends SaturnUi {
|
public class MainMenu extends SaturnUi {
|
||||||
@@ -17,6 +19,8 @@ public class MainMenu extends SaturnUi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
|
SaturnClient.textRenderer = MinecraftClient.getInstance().textRenderer;
|
||||||
|
|
||||||
int buttonWidth = 96;
|
int buttonWidth = 96;
|
||||||
int buttonHeight = 25;
|
int buttonHeight = 25;
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import org.saturnclient.ui.SaturnUi;
|
|||||||
import org.saturnclient.ui.Textures;
|
import org.saturnclient.ui.Textures;
|
||||||
import org.saturnclient.ui.animations.FadeIn;
|
import org.saturnclient.ui.animations.FadeIn;
|
||||||
import org.saturnclient.ui.widgets.SaturnClickableImage;
|
import org.saturnclient.ui.widgets.SaturnClickableImage;
|
||||||
|
import org.saturnclient.ui.widgets.SaturnScroll;
|
||||||
import org.saturnclient.ui.widgets.SaturnSprite;
|
import org.saturnclient.ui.widgets.SaturnSprite;
|
||||||
|
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
@@ -66,12 +67,14 @@ public class SettingsMenu extends SaturnUi {
|
|||||||
.setHeight(tabSize)
|
.setHeight(tabSize)
|
||||||
.setAnimations(new FadeIn(1)));
|
.setAnimations(new FadeIn(1)));
|
||||||
|
|
||||||
int modX = modsX + 15;
|
int modX = 0;
|
||||||
int modY = modsY + 10;
|
int modY = 0;
|
||||||
int col = 0;
|
int col = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 20; i++) {
|
SaturnScroll modsScroll = new SaturnScroll();
|
||||||
draw(new SaturnClickableImage(Textures.MOD, (m) -> {
|
|
||||||
|
for (int i = 0; i < 30; i++) {
|
||||||
|
modsScroll.draw(new SaturnClickableImage(Textures.MOD, (m) -> {
|
||||||
})
|
})
|
||||||
.setX(modX)
|
.setX(modX)
|
||||||
.setY(modY)
|
.setY(modY)
|
||||||
@@ -81,12 +84,14 @@ public class SettingsMenu extends SaturnUi {
|
|||||||
col++;
|
col++;
|
||||||
|
|
||||||
if (col < 3) {
|
if (col < 3) {
|
||||||
modX += 86 + 15;
|
modX += 86 + 18;
|
||||||
} else {
|
} else {
|
||||||
modX = modsX + 15;
|
modX = 0;
|
||||||
modY += 20 + 20;
|
modY += 20 + 20;
|
||||||
col = 0;
|
col = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
draw(modsScroll.setX(modsX + 17).setY(modsY + 10).setWidth(rectWidth - 17).setHeight(rectHeight - 10));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -19,6 +19,7 @@ public class SaturnUi extends Screen {
|
|||||||
|
|
||||||
public void draw(SaturnWidget widget) {
|
public void draw(SaturnWidget widget) {
|
||||||
synchronized (widgets) {
|
synchronized (widgets) {
|
||||||
|
widget.init();
|
||||||
widgets.add(widget);
|
widgets.add(widget);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -63,7 +64,7 @@ public class SaturnUi extends Screen {
|
|||||||
boolean isMouseInside = widget.x < mouseX && widget.x + widget.width > mouseX
|
boolean isMouseInside = widget.x < mouseX && widget.x + widget.width > mouseX
|
||||||
&& widget.y < mouseY && widget.y + widget.height > mouseY;
|
&& widget.y < mouseY && widget.y + widget.height > mouseY;
|
||||||
if (isMouseInside) {
|
if (isMouseInside) {
|
||||||
widget.click();
|
widget.click((int) mouseX, (int) mouseY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -88,6 +89,20 @@ public class SaturnUi extends Screen {
|
|||||||
return super.keyPressed(keyCode, scanCode, modifiers);
|
return super.keyPressed(keyCode, scanCode, modifiers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) {
|
||||||
|
for (SaturnWidget widget : new ArrayList<>(widgets)) {
|
||||||
|
boolean isMouseInside = widget.x < mouseX && widget.x + widget.width > mouseX
|
||||||
|
&& widget.y < mouseY && widget.y + widget.height > mouseY;
|
||||||
|
|
||||||
|
if (isMouseInside) {
|
||||||
|
widget.mouseScrolled((int) mouseX, (int) mouseY, horizontalAmount, verticalAmount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount);
|
||||||
|
}
|
||||||
|
|
||||||
private char getCharFromKey(int keyCode, int modifiers) {
|
private char getCharFromKey(int keyCode, int modifiers) {
|
||||||
boolean shift = (modifiers & GLFW.GLFW_MOD_SHIFT) != 0;
|
boolean shift = (modifiers & GLFW.GLFW_MOD_SHIFT) != 0;
|
||||||
|
|
||||||
|
|||||||
@@ -11,10 +11,13 @@ public class SaturnWidget {
|
|||||||
public SaturnAnimation[] animations = null;
|
public SaturnAnimation[] animations = null;
|
||||||
public boolean visible = true;
|
public boolean visible = true;
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
}
|
||||||
|
|
||||||
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) {
|
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void click() {
|
public void click(int mouseX, int mouseY) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void keyPressed(int keyCode, int scanCode, int modifiers) {
|
public void keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||||
@@ -23,6 +26,10 @@ public class SaturnWidget {
|
|||||||
public void charTyped(char typedChar) {
|
public void charTyped(char typedChar) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void mouseScrolled(int mouseX, int mouseY, double horizontalAmount,
|
||||||
|
double verticalAmount) {
|
||||||
|
}
|
||||||
|
|
||||||
public SaturnWidget setX(int x) {
|
public SaturnWidget setX(int x) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class SaturnButton extends SaturnWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click() {
|
public void click(int mouseX, int mouseY) {
|
||||||
this.onPress.accept(this);
|
this.onPress.accept(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class SaturnClickableImage extends SaturnWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click() {
|
public void click(int mouseX, int mouseY) {
|
||||||
this.onPress.accept(this);
|
this.onPress.accept(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class SaturnClickableSprite extends SaturnWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click() {
|
public void click(int mouseX, int mouseY) {
|
||||||
this.onPress.accept(this);
|
this.onPress.accept(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class SaturnImageButton extends SaturnButton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click() {
|
public void click(int mouseX, int mouseY) {
|
||||||
this.onPress.accept(this);
|
this.onPress.accept(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class SaturnInputBox extends SaturnWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click() {
|
public void click(int mouseX, int mouseY) {
|
||||||
focused = true;
|
focused = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
package org.saturnclient.ui.widgets;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.saturnclient.ui.SaturnWidget;
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
|
public class SaturnScroll extends SaturnWidget {
|
||||||
|
private int scroll = 0;
|
||||||
|
private int maxScroll = 0;
|
||||||
|
private List<SaturnWidget> children = new ArrayList<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseScrolled(int mouseX, int mouseY, double horizontalAmount,
|
||||||
|
double verticalAmount) {
|
||||||
|
if (scroll - verticalAmount <= 0) {
|
||||||
|
scroll = 0;
|
||||||
|
} else if (scroll - verticalAmount >= maxScroll) {
|
||||||
|
scroll = maxScroll;
|
||||||
|
} else {
|
||||||
|
scroll -= verticalAmount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) {
|
||||||
|
context.enableScissor(x, y, x + width, y + height);
|
||||||
|
|
||||||
|
for (SaturnWidget child : children) {
|
||||||
|
int xx = child.x;
|
||||||
|
int yy = child.y;
|
||||||
|
|
||||||
|
child.x += x;
|
||||||
|
child.y += y - scroll;
|
||||||
|
|
||||||
|
boolean isMouseInside = child.x < mouseX && child.x + child.width > mouseX
|
||||||
|
&& child.y < mouseY && child.y + child.height > mouseY;
|
||||||
|
|
||||||
|
if (child.y < y + height && child.y + child.height > y) {
|
||||||
|
child.render(context, isMouseInside, mouseX, mouseY);
|
||||||
|
}
|
||||||
|
|
||||||
|
child.x = xx;
|
||||||
|
child.y = yy;
|
||||||
|
}
|
||||||
|
|
||||||
|
context.disableScissor();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void click(int mouseX, int mouseY) {
|
||||||
|
for (SaturnWidget child : children) {
|
||||||
|
boolean isMouseInside = child.x < mouseX && child.x + child.width > mouseX
|
||||||
|
&& child.y < mouseY && child.y + child.height > mouseY;
|
||||||
|
|
||||||
|
if (isMouseInside) {
|
||||||
|
child.click(mouseX, mouseY);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init() {
|
||||||
|
if (isScrollable()) {
|
||||||
|
for (SaturnWidget child : children) {
|
||||||
|
maxScroll = Math.max(maxScroll, child.y - height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void draw(SaturnWidget widget) {
|
||||||
|
synchronized (children) {
|
||||||
|
widget.init();
|
||||||
|
children.add(widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isScrollable() {
|
||||||
|
for (SaturnWidget child : children) {
|
||||||
|
if (child.y + child.height > height) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.saturnclient.ui.widgets;
|
package org.saturnclient.ui.widgets;
|
||||||
|
|
||||||
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.ui.SaturnWidget;
|
import org.saturnclient.ui.SaturnWidget;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
@@ -10,6 +11,8 @@ public class SaturnText extends SaturnWidget {
|
|||||||
|
|
||||||
public SaturnText(String text) {
|
public SaturnText(String text) {
|
||||||
this.text = text;
|
this.text = text;
|
||||||
|
this.width = SaturnClient.textRenderer.getWidth(text);
|
||||||
|
this.height = SaturnClient.textRenderer.fontHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user