From 361f30f7d913dbda7e3ff8863793d2fc513c8d17 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Wed, 26 Mar 2025 15:10:03 +0100 Subject: [PATCH] scroll issue fixed --- .../saturnclient/menus/ModMenu.java | 65 +++++++++++------ .../saturnclient/ui/widgets/SaturnScroll.java | 69 +++++++++---------- 2 files changed, 74 insertions(+), 60 deletions(-) diff --git a/src/main/java/org/saturnclient/saturnclient/menus/ModMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/ModMenu.java index b42e49f..2214084 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/ModMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/ModMenu.java @@ -1,5 +1,7 @@ package org.saturnclient.saturnclient.menus; +import net.minecraft.text.Text; +import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.config.ConfigManager; import org.saturnclient.saturnmods.ModManager; import org.saturnclient.saturnmods.SaturnMod; @@ -11,9 +13,9 @@ import org.saturnclient.ui.components.SaturnModComp; import org.saturnclient.ui.widgets.SaturnClickableImage; import org.saturnclient.ui.widgets.SaturnScroll; import org.saturnclient.ui.widgets.SaturnSprite; -import net.minecraft.text.Text; public class ModMenu extends SaturnUi { + public ModMenu() { super(Text.literal("Mods")); } @@ -25,54 +27,64 @@ public class ModMenu extends SaturnUi { int modsX = (width - rectWidth) / 2; int modsY = (height - rectHeight + 15) / 2; - draw(new SaturnSprite(Textures.SETTINGS_BG) + draw( + new SaturnSprite(Textures.SETTINGS_BG) .setX(modsX) .setY(modsY) .setWidth(rectWidth) .setHeight(rectHeight) - .setAnimations(new Slide(1, 10))); + .setAnimations(new Slide(1, 10)) + ); int tabsX = (width - 43) / 2; int tabsY = modsY - 17; - draw(new SaturnSprite(Textures.TABS) + draw( + new SaturnSprite(Textures.TABS) .setX(tabsX) .setY(tabsY) .setWidth(43) .setHeight(15) - .setAnimations(new Slide(1, 10))); + .setAnimations(new Slide(1, 10)) + ); int tabSize = 9; tabsX = (width - tabSize) / 2; - draw(new SaturnClickableImage(Textures.SETTINGS, () -> { - System.out.println("Pressed"); - }) + draw( + new SaturnClickableImage(Textures.SETTINGS, () -> { + System.out.println("Pressed"); + }) .setX(tabsX) .setY(tabsY + 3) .setWidth(tabSize) .setHeight(tabSize) .setAnimations(new FadeIn(2)) - .setAnimations(new Slide(1, 10))); + .setAnimations(new Slide(1, 10)) + ); - draw(new SaturnClickableImage(Textures.MODS_TAB, () -> { - System.out.println("Pressed"); - }) + draw( + new SaturnClickableImage(Textures.MODS_TAB, () -> { + System.out.println("Pressed"); + }) .setX(tabsX - 12) .setY(tabsY + 3) .setWidth(tabSize) .setHeight(tabSize) .setAnimations(new FadeIn(2)) - .setAnimations(new Slide(1, 10))); + .setAnimations(new Slide(1, 10)) + ); - draw(new SaturnClickableImage(Textures.SEARCH, () -> { - System.out.println("Pressed"); - }) + draw( + new SaturnClickableImage(Textures.SEARCH, () -> { + System.out.println("Pressed"); + }) .setX(tabsX + 12) .setY(tabsY + 3) .setWidth(tabSize) .setHeight(tabSize) .setAnimations(new FadeIn(2)) - .setAnimations(new Slide(1, 10))); + .setAnimations(new Slide(1, 10)) + ); int modX = 0; int modY = 0; @@ -81,11 +93,14 @@ public class ModMenu extends SaturnUi { SaturnScroll modsScroll = new SaturnScroll(); for (SaturnMod mod : ModManager.MODS) { - modsScroll.draw(new SaturnModComp(mod) + SaturnClient.LOGGER.info(mod.getName()); + modsScroll.draw( + new SaturnModComp(mod) .setX(modX) .setY(modY) .setWidth(86) - .setHeight(20)); + .setHeight(20) + ); col++; @@ -98,8 +113,14 @@ public class ModMenu extends SaturnUi { } } - draw(modsScroll.setX(modsX + 17).setY(modsY + 10).setWidth(rectWidth - 17).setHeight(rectHeight - 10) - .setAnimations(new Slide(1, 10))); + draw( + modsScroll + .setX(modsX + 17) + .setY(modsY + 10) + .setWidth(rectWidth - 17) + .setHeight(rectHeight - 20) + .setAnimations(new Slide(1, 10)) + ); super.init(); } @@ -109,4 +130,4 @@ public class ModMenu extends SaturnUi { ConfigManager.save(); super.close(); } -} \ No newline at end of file +} diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnScroll.java b/src/main/java/org/saturnclient/ui/widgets/SaturnScroll.java index d8fad9f..99616b2 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnScroll.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnScroll.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; -import org.saturnclient.saturnclient.SaturnClient; +import net.minecraft.network.packet.s2c.custom.DebugRedstoneUpdateOrderCustomPayload.Wire; import org.saturnclient.ui.SaturnWidget; public class SaturnScroll extends SaturnWidget { @@ -40,26 +40,30 @@ public class SaturnScroll extends SaturnWidget { ) { context.enableScissor(0, 0, width, height); - for (SaturnWidget child : children) { - if (!child.visible) continue; + for (SaturnWidget widget : children) { + if (!widget.visible) continue; + double adjustedMouseX = (mouseX - widget.x) * scale; + double adjustedMouseY = (mouseY - widget.y + scroll) * scale; boolean isMouseInside = - child.x < mouseX && - child.x + child.width > mouseX && - child.y < mouseY && - child.y + child.height > mouseY; + adjustedMouseX >= 0 && + adjustedMouseX <= widget.width && + adjustedMouseY >= 0 && + adjustedMouseY <= widget.height; - if (child.y - scroll < height && child.y + child.height > scroll) { + if ( + widget.y - scroll < height && widget.y + widget.height > scroll + ) { MatrixStack matrices = context.getMatrices(); matrices.push(); - matrices.translate(child.x, child.y - scroll, 0); - matrices.scale(child.scale, child.scale, 1.0f); + matrices.translate(widget.x, widget.y - scroll, 0); + matrices.scale(widget.scale, widget.scale, 1.0f); - child.render( + widget.render( context, isMouseInside, - mouseX - child.x, - mouseY - (child.y - scroll) + (int) adjustedMouseX, + (int) adjustedMouseY ); matrices.pop(); } @@ -69,10 +73,9 @@ public class SaturnScroll extends SaturnWidget { @Override public void init() { - if (isScrollable()) { - for (SaturnWidget child : children) { - maxScroll = Math.max(maxScroll, child.y - height); - } + maxScroll = 0; + for (SaturnWidget child : children) { + maxScroll = Math.max(maxScroll, child.y + child.height - height); } } @@ -84,8 +87,8 @@ public class SaturnScroll extends SaturnWidget { } public boolean isScrollable() { - for (SaturnWidget child : children) { - if (child.y + child.height > height) { + for (SaturnWidget widget : children) { + if (widget.y + widget.height > height) { return true; } } @@ -94,55 +97,45 @@ public class SaturnScroll extends SaturnWidget { @Override public void keyPressed(int keyCode, int scanCode, int modifiers) { - for (SaturnWidget child : children) { - if (!child.visible || !child.focused) { + for (SaturnWidget widget : children) { + if (!widget.visible || !widget.focused) { continue; } - child.keyPressed(keyCode, scanCode, modifiers); + widget.keyPressed(keyCode, scanCode, modifiers); break; } } @Override public void charTyped(char typedChar) { - for (SaturnWidget child : children) { - if (!child.visible || !child.focused) { + for (SaturnWidget widget : children) { + if (!widget.visible || !widget.focused) { continue; } - child.charTyped(typedChar); + widget.charTyped(typedChar); break; } } @Override public void click(int mouseX, int mouseY) { - System.out.println( - "[SaturnScroll] Click at: x=" + mouseX + ", y=" + mouseY - ); - for (SaturnWidget widget : children) { widget.focused = false; if (!widget.visible) { continue; } - double adjustedMouseX = (mouseX - widget.x); - double adjustedMouseY = (mouseY - widget.y); + double adjustedMouseX = (mouseX - widget.x) * scale; + double adjustedMouseY = + (mouseY - (widget.y - scroll)) * widget.scale; boolean isMouseInside = adjustedMouseX >= 0 && adjustedMouseX <= widget.width && adjustedMouseY >= 0 && adjustedMouseY <= widget.height; - System.out.println( - widget.getClass().getName() + - " Adjusted at: x=" + - adjustedMouseX + - ", y=" + - adjustedMouseY - ); if (isMouseInside) { widget.focused = true; widget.click((int) adjustedMouseX, (int) adjustedMouseY);