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;
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();
}
@@ -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);