feat(ui): redetect scale factor on each launch when not set in config (PR260)

* re-detect DPI scale each launch instead of using stale saved value

* make uiScale config default null

---------

Co-authored-by: Jindra Petřík <jindra.petrik@gmail.com>
This commit is contained in:
takattowo
2026-05-24 14:51:19 +07:00
committed by GitHub
parent 66042ec82f
commit 3e7b25a96f
2 changed files with 9 additions and 6 deletions

View File

@@ -823,7 +823,7 @@ public final class Configuration {
@ConfigurationCategory("script")
public static ConfigurationItem<Boolean> flattenASPackages = null;
@ConfigurationDefaultDouble(1.0)
//@ConfigurationDefaultDouble(1.0)
@ConfigurationCategory("display")
@ConfigurationName("gui.scale")
public static ConfigurationItem<Double> uiScale = null;

View File

@@ -2971,16 +2971,19 @@ public class Main {
System.setProperty("sun.java2d.d3d", "false");
System.setProperty("sun.java2d.noddraw", "true");
if (System.getProperty("sun.java2d.uiScale") == null) { //it was not set by commandline, etc.
if (!Configuration.uiScale.hasValue()) {
if (System.getProperty("sun.java2d.uiScale") == null) { //it was not set by commandline, etc.
double scaleToUse = Configuration.uiScale.get();
if (!Configuration.uiScale.hasValue() || Configuration.uiScale.get() == null) {
// Auto-detect from current screen. Do NOT persist to config so the scale is
// re-detected on each launch (prevents stale 4K scale being applied on a
// lower-DPI monitor after a display change).
GraphicsConfiguration configuration = View.getMainDefaultScreenDevice().getDefaultConfiguration();
AffineTransform transform = configuration.getDefaultTransform();
if (transform != null) {
Configuration.uiScale.set(transform.getScaleX());
scaleToUse = transform.getScaleX();
}
}
System.setProperty("sun.java2d.uiScale", "" + Configuration.uiScale.get());
System.setProperty("sun.java2d.uiScale", "" + scaleToUse);
}
if (Configuration.hwAcceleratedGraphics.get()) {