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