Button is now primary (accent fill) or secondary (a translucent outlined surface), and IconButton is a square secondary button with a Lucide icon, replacing the PNG TextureButtons. Neither is scaled with Element.scale any more, which multiplied click positions instead of dividing them. The Shift menu is the HUD editor, the mod menu (its button was labelled "Settings") and cosmetics. The title screen centers the logo over a compact stack of the game's menus, with the player, a dock of Saturn's screens and the version along the bottom. The player chip shows the player's face from their skin and whether they're connected to Saturn. Co-Authored-By: Claude Opus 5.5 <[email protected]>
41 lines
1.2 KiB
Java
41 lines
1.2 KiB
Java
package org.saturnclient.ui.elements;
|
|
|
|
import org.saturnclient.common.ref.asset.IdentifierRef;
|
|
import org.saturnclient.config.Theme;
|
|
import org.saturnclient.ui.Element;
|
|
import org.saturnclient.ui.ElementContext;
|
|
import org.saturnclient.ui.RenderScope;
|
|
|
|
/**
|
|
* A square secondary {@link Button} showing an icon, which turns the accent
|
|
* color on hover.
|
|
*/
|
|
public class IconButton extends Element {
|
|
private static final float ICON_RATIO = 0.48f;
|
|
|
|
private final IdentifierRef icon;
|
|
private final Runnable onClick;
|
|
|
|
public IconButton(IdentifierRef icon, Runnable onClick) {
|
|
this.icon = icon;
|
|
this.onClick = onClick;
|
|
this.width = Button.HEIGHT;
|
|
this.height = Button.HEIGHT;
|
|
}
|
|
|
|
@Override
|
|
public void render(RenderScope renderScope, ElementContext ctx) {
|
|
boolean hovered = ctx.isHovering();
|
|
Button.drawSurface(renderScope, width, height, false, hovered);
|
|
|
|
int size = (int) (Math.min(width, height) * ICON_RATIO);
|
|
renderScope.drawTexture(icon, (width - size) / 2, (height - size) / 2, 0, 0, size, size,
|
|
hovered ? Theme.ACCENT.value : Theme.PRIMARY_FG.value);
|
|
}
|
|
|
|
@Override
|
|
public void click(int mouseX, int mouseY) {
|
|
onClick.run();
|
|
}
|
|
}
|