Improved theme usability

This commit is contained in:
2026-02-21 20:42:04 +01:00
parent 3b0ab53d86
commit 6ee2fc3b0e
2 changed files with 30 additions and 12 deletions
@@ -45,11 +45,33 @@ public class Theme {
config.property("Font", FONT);
}
/**
* primary by default, accent if true
*/
public static int getBg(boolean hover) {
return hover ? ACCENT.value : PRIMARY.value;
}
/**
* (Foreground) primary by default, accent if true
*/
public static int getFg(boolean hover) {
return hover ? ACCENT_FG.value : PRIMARY_FG.value;
}
/**
* Sets alpha using 0–255 range.
*/
public static int withAlpha(int alpha, int color) {
alpha = Math.max(0, Math.min(255, alpha));
return (color & 0x00FFFFFF) | (alpha << 24);
}
/**
* Sets alpha using 0.0–1.0 range.
*/
public static int withAlpha(float alpha, int color) {
alpha = Math.max(0f, Math.min(1f, alpha));
return withAlpha((int) (alpha * 255f), color);
}
}
@@ -3,6 +3,7 @@ package org.saturnclient.saturnclient.mixin;
import java.util.Optional;
import java.util.function.Consumer;
import org.saturnclient.saturnclient.config.Theme;
import org.saturnclient.ui2.RenderScope;
import org.saturnclient.ui2.resources.Textures;
import org.spongepowered.asm.mixin.Mixin;
@@ -40,10 +41,6 @@ public abstract class SplashOverlayMixin {
@Shadow(remap = false)
private float progress;
private static int withAlpha(int color, int alpha) {
return color & 0xFFFFFF | alpha << 24;
}
/**
* @reason Replace vanilla splash rendering completely but keep exit logic
*/
@@ -80,19 +77,17 @@ public abstract class SplashOverlayMixin {
if (fadeOutProgress >= 1.0F) {
renderCurrentScreen(context, mouseX, mouseY, delta);
int overlayAlpha = computeOverlayAlpha(fadeOutProgress - 1f);
// context.fill(0, 0, screenWidth, screenHeight,
// withAlpha(0x53389E, overlayAlpha));
scope.drawTexture(Textures.SPLASH, 0, 0, 0, 0, screenWidth, screenHeight,
withAlpha(0xFFFFFF, overlayAlpha));
Theme.withAlpha(0xFFFFFFFF, overlayAlpha));
} else if (reloading) {
if (reloadProgress < 1.0F) {
renderCurrentScreen(context, mouseX, mouseY, delta);
}
scope.drawTexture(Textures.SPLASH, 0, 0, 0, 0, screenWidth, screenHeight,
withAlpha(0xFFFFFF, alpha));
Theme.withAlpha(0xFFFFFFFF, alpha));
} else {
scope.drawTexture(Textures.SPLASH, 0, 0, 0, 0, screenWidth, screenHeight,
withAlpha(0xFFFFFF, alpha));
Theme.withAlpha(0xFFFFFFFF, alpha));
}
float u = this.reload.getProgress();
@@ -120,18 +115,19 @@ public abstract class SplashOverlayMixin {
/** Draw the main logo centered */
private void drawLogo(RenderScope scope, int screenWidth, int screenHeight, int alpha) {
scope.drawTexture(Textures.LOGO, (screenWidth - 60) / 2, ((screenHeight - 60) / 2) - 20, 0, 0, 60, 60,
withAlpha(0xFFFFFF, alpha));
Theme.withAlpha(0xFFFFFFFF, alpha));
}
private void renderProgressBar(RenderScope scope, DrawContext context, int screenWidth, int screenHeight,
int alpha) {
int progressY = ((screenHeight - 5) / 2) + 25;
context.drawBorder((screenWidth - 120) / 2, progressY, 120, 5, withAlpha(0xFFFFFF, alpha));
context.drawBorder((screenWidth - 120) / 2, progressY, 120, 5, Theme.withAlpha(0xFFFFFFFF, alpha));
int progressWidth = Math.min((int) (progress * 120), 120);
int progressX = (screenWidth - 120) / 2;
context.fill(progressX, progressY, progressX + progressWidth, progressY + 5, withAlpha(0xFFFFFF, alpha));
context.fill(progressX, progressY, progressX + progressWidth, progressY + 5,
Theme.withAlpha(0xFFFFFFFF, alpha));
}
/** Compute overlay alpha from fade progress */