scroll issue fixed

This commit is contained in:
2025-03-26 15:10:03 +01:00
parent 8f32ea36e5
commit 361f30f7d9
2 changed files with 74 additions and 60 deletions
@@ -1,5 +1,7 @@
package org.saturnclient.saturnclient.menus; package org.saturnclient.saturnclient.menus;
import net.minecraft.text.Text;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.config.ConfigManager; import org.saturnclient.saturnclient.config.ConfigManager;
import org.saturnclient.saturnmods.ModManager; import org.saturnclient.saturnmods.ModManager;
import org.saturnclient.saturnmods.SaturnMod; 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.SaturnClickableImage;
import org.saturnclient.ui.widgets.SaturnScroll; import org.saturnclient.ui.widgets.SaturnScroll;
import org.saturnclient.ui.widgets.SaturnSprite; import org.saturnclient.ui.widgets.SaturnSprite;
import net.minecraft.text.Text;
public class ModMenu extends SaturnUi { public class ModMenu extends SaturnUi {
public ModMenu() { public ModMenu() {
super(Text.literal("Mods")); super(Text.literal("Mods"));
} }
@@ -25,26 +27,31 @@ public class ModMenu extends SaturnUi {
int modsX = (width - rectWidth) / 2; int modsX = (width - rectWidth) / 2;
int modsY = (height - rectHeight + 15) / 2; int modsY = (height - rectHeight + 15) / 2;
draw(new SaturnSprite(Textures.SETTINGS_BG) draw(
new SaturnSprite(Textures.SETTINGS_BG)
.setX(modsX) .setX(modsX)
.setY(modsY) .setY(modsY)
.setWidth(rectWidth) .setWidth(rectWidth)
.setHeight(rectHeight) .setHeight(rectHeight)
.setAnimations(new Slide(1, 10))); .setAnimations(new Slide(1, 10))
);
int tabsX = (width - 43) / 2; int tabsX = (width - 43) / 2;
int tabsY = modsY - 17; int tabsY = modsY - 17;
draw(new SaturnSprite(Textures.TABS) draw(
new SaturnSprite(Textures.TABS)
.setX(tabsX) .setX(tabsX)
.setY(tabsY) .setY(tabsY)
.setWidth(43) .setWidth(43)
.setHeight(15) .setHeight(15)
.setAnimations(new Slide(1, 10))); .setAnimations(new Slide(1, 10))
);
int tabSize = 9; int tabSize = 9;
tabsX = (width - tabSize) / 2; tabsX = (width - tabSize) / 2;
draw(new SaturnClickableImage(Textures.SETTINGS, () -> { draw(
new SaturnClickableImage(Textures.SETTINGS, () -> {
System.out.println("Pressed"); System.out.println("Pressed");
}) })
.setX(tabsX) .setX(tabsX)
@@ -52,9 +59,11 @@ public class ModMenu extends SaturnUi {
.setWidth(tabSize) .setWidth(tabSize)
.setHeight(tabSize) .setHeight(tabSize)
.setAnimations(new FadeIn(2)) .setAnimations(new FadeIn(2))
.setAnimations(new Slide(1, 10))); .setAnimations(new Slide(1, 10))
);
draw(new SaturnClickableImage(Textures.MODS_TAB, () -> { draw(
new SaturnClickableImage(Textures.MODS_TAB, () -> {
System.out.println("Pressed"); System.out.println("Pressed");
}) })
.setX(tabsX - 12) .setX(tabsX - 12)
@@ -62,9 +71,11 @@ public class ModMenu extends SaturnUi {
.setWidth(tabSize) .setWidth(tabSize)
.setHeight(tabSize) .setHeight(tabSize)
.setAnimations(new FadeIn(2)) .setAnimations(new FadeIn(2))
.setAnimations(new Slide(1, 10))); .setAnimations(new Slide(1, 10))
);
draw(new SaturnClickableImage(Textures.SEARCH, () -> { draw(
new SaturnClickableImage(Textures.SEARCH, () -> {
System.out.println("Pressed"); System.out.println("Pressed");
}) })
.setX(tabsX + 12) .setX(tabsX + 12)
@@ -72,7 +83,8 @@ public class ModMenu extends SaturnUi {
.setWidth(tabSize) .setWidth(tabSize)
.setHeight(tabSize) .setHeight(tabSize)
.setAnimations(new FadeIn(2)) .setAnimations(new FadeIn(2))
.setAnimations(new Slide(1, 10))); .setAnimations(new Slide(1, 10))
);
int modX = 0; int modX = 0;
int modY = 0; int modY = 0;
@@ -81,11 +93,14 @@ public class ModMenu extends SaturnUi {
SaturnScroll modsScroll = new SaturnScroll(); SaturnScroll modsScroll = new SaturnScroll();
for (SaturnMod mod : ModManager.MODS) { for (SaturnMod mod : ModManager.MODS) {
modsScroll.draw(new SaturnModComp(mod) SaturnClient.LOGGER.info(mod.getName());
modsScroll.draw(
new SaturnModComp(mod)
.setX(modX) .setX(modX)
.setY(modY) .setY(modY)
.setWidth(86) .setWidth(86)
.setHeight(20)); .setHeight(20)
);
col++; col++;
@@ -98,8 +113,14 @@ public class ModMenu extends SaturnUi {
} }
} }
draw(modsScroll.setX(modsX + 17).setY(modsY + 10).setWidth(rectWidth - 17).setHeight(rectHeight - 10) draw(
.setAnimations(new Slide(1, 10))); modsScroll
.setX(modsX + 17)
.setY(modsY + 10)
.setWidth(rectWidth - 17)
.setHeight(rectHeight - 20)
.setAnimations(new Slide(1, 10))
);
super.init(); super.init();
} }
@@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack; 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; import org.saturnclient.ui.SaturnWidget;
public class SaturnScroll extends SaturnWidget { public class SaturnScroll extends SaturnWidget {
@@ -40,26 +40,30 @@ public class SaturnScroll extends SaturnWidget {
) { ) {
context.enableScissor(0, 0, width, height); context.enableScissor(0, 0, width, height);
for (SaturnWidget child : children) { for (SaturnWidget widget : children) {
if (!child.visible) continue; if (!widget.visible) continue;
double adjustedMouseX = (mouseX - widget.x) * scale;
double adjustedMouseY = (mouseY - widget.y + scroll) * scale;
boolean isMouseInside = boolean isMouseInside =
child.x < mouseX && adjustedMouseX >= 0 &&
child.x + child.width > mouseX && adjustedMouseX <= widget.width &&
child.y < mouseY && adjustedMouseY >= 0 &&
child.y + child.height > mouseY; 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(); MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
matrices.translate(child.x, child.y - scroll, 0); matrices.translate(widget.x, widget.y - scroll, 0);
matrices.scale(child.scale, child.scale, 1.0f); matrices.scale(widget.scale, widget.scale, 1.0f);
child.render( widget.render(
context, context,
isMouseInside, isMouseInside,
mouseX - child.x, (int) adjustedMouseX,
mouseY - (child.y - scroll) (int) adjustedMouseY
); );
matrices.pop(); matrices.pop();
} }
@@ -69,10 +73,9 @@ public class SaturnScroll extends SaturnWidget {
@Override @Override
public void init() { public void init() {
if (isScrollable()) { maxScroll = 0;
for (SaturnWidget child : children) { for (SaturnWidget child : children) {
maxScroll = Math.max(maxScroll, child.y - height); maxScroll = Math.max(maxScroll, child.y + child.height - height);
}
} }
} }
@@ -84,8 +87,8 @@ public class SaturnScroll extends SaturnWidget {
} }
public boolean isScrollable() { public boolean isScrollable() {
for (SaturnWidget child : children) { for (SaturnWidget widget : children) {
if (child.y + child.height > height) { if (widget.y + widget.height > height) {
return true; return true;
} }
} }
@@ -94,55 +97,45 @@ public class SaturnScroll extends SaturnWidget {
@Override @Override
public void keyPressed(int keyCode, int scanCode, int modifiers) { public void keyPressed(int keyCode, int scanCode, int modifiers) {
for (SaturnWidget child : children) { for (SaturnWidget widget : children) {
if (!child.visible || !child.focused) { if (!widget.visible || !widget.focused) {
continue; continue;
} }
child.keyPressed(keyCode, scanCode, modifiers); widget.keyPressed(keyCode, scanCode, modifiers);
break; break;
} }
} }
@Override @Override
public void charTyped(char typedChar) { public void charTyped(char typedChar) {
for (SaturnWidget child : children) { for (SaturnWidget widget : children) {
if (!child.visible || !child.focused) { if (!widget.visible || !widget.focused) {
continue; continue;
} }
child.charTyped(typedChar); widget.charTyped(typedChar);
break; break;
} }
} }
@Override @Override
public void click(int mouseX, int mouseY) { public void click(int mouseX, int mouseY) {
System.out.println(
"[SaturnScroll] Click at: x=" + mouseX + ", y=" + mouseY
);
for (SaturnWidget widget : children) { for (SaturnWidget widget : children) {
widget.focused = false; widget.focused = false;
if (!widget.visible) { if (!widget.visible) {
continue; continue;
} }
double adjustedMouseX = (mouseX - widget.x); double adjustedMouseX = (mouseX - widget.x) * scale;
double adjustedMouseY = (mouseY - widget.y); double adjustedMouseY =
(mouseY - (widget.y - scroll)) * widget.scale;
boolean isMouseInside = boolean isMouseInside =
adjustedMouseX >= 0 && adjustedMouseX >= 0 &&
adjustedMouseX <= widget.width && adjustedMouseX <= widget.width &&
adjustedMouseY >= 0 && adjustedMouseY >= 0 &&
adjustedMouseY <= widget.height; adjustedMouseY <= widget.height;
System.out.println(
widget.getClass().getName() +
" Adjusted at: x=" +
adjustedMouseX +
", y=" +
adjustedMouseY
);
if (isMouseInside) { if (isMouseInside) {
widget.focused = true; widget.focused = true;
widget.click((int) adjustedMouseX, (int) adjustedMouseY); widget.click((int) adjustedMouseX, (int) adjustedMouseY);