Hopefully better scaling behavior for normal DPIs

This commit is contained in:
Pazaz 2022-04-21 04:27:00 -04:00
parent 8e396ebbbe
commit 8a35c73f76
3 changed files with 23 additions and 5 deletions

View file

@ -119,6 +119,10 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
public static double canvasScale = 1.0d;
public static double subpixelX = 0.5d;
public static double subpixelY = 0.5d;
@OriginalMember(owner = "client!rc", name = "providesignlink", descriptor = "(Lsignlink!ll;)V")
public static void providesignlink(@OriginalArg(0) SignLink signLink) {
GameShell.signLink = signLink;
@ -232,7 +236,14 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
} else {
canvasScale = 1.0d;
}
System.out.println("Scaling factor: " + canvasScale);
if (Math.floor(canvasScale) != canvasScale) {
subpixelX = 0.0d;
subpixelY = -0.5d;
} else {
subpixelX = 0.5d;
subpixelY = 0.5d;
}
System.out.println("Scaling factor: " + canvasScale + "x, using fractional scaling");
}
if (container == frame) {
@Pc(66) Insets insets = frame.getInsets();
@ -391,6 +402,13 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
if (g != null) {
if (g instanceof Graphics2D) {
canvasScale = ((Graphics2D) g).getTransform().getScaleX();
if (Math.floor(canvasScale) != canvasScale) {
subpixelX = 0.0d;
subpixelY = -0.5d;
} else {
subpixelX = 0.5d;
subpixelY = 0.5d;
}
} else {
canvasScale = 1.0;
}

View file

@ -755,8 +755,8 @@ public final class GlRenderer {
@OriginalMember(owner = "client!gi", name = "b", descriptor = "()V")
private static void resizeViewport() {
gl.glViewport((int) (leftMargin * GameShell.canvasScale), (int) (topMargin * GameShell.canvasScale - 0.5d),
(int) (viewportWidth * GameShell.canvasScale), (int) (viewportHeight * GameShell.canvasScale - 0.5d));
gl.glViewport((int) (leftMargin * GameShell.canvasScale + GameShell.subpixelX), (int) (topMargin * GameShell.canvasScale + GameShell.subpixelY),
(int) (viewportWidth * GameShell.canvasScale + GameShell.subpixelX), (int) (viewportHeight * GameShell.canvasScale + GameShell.subpixelY));
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(IIIIII)V")

View file

@ -197,7 +197,7 @@ public final class Static46 {
@Pc(21) GL2 gl = GlRenderer.gl;
gl.glEnable(GL2.GL_SCISSOR_TEST);
if (clipX <= anInt1440 && clipY <= anInt1441) {
gl.glScissor((int)(clipX * GameShell.canvasScale), (int)((GlRenderer.canvasHeight - anInt1441) * GameShell.canvasScale - 0.5d), (int)((anInt1440 - clipX) * GameShell.canvasScale), (int)((anInt1441 - clipY) * GameShell.canvasScale - 0.5d));
gl.glScissor((int)(clipX * GameShell.canvasScale + GameShell.subpixelX), (int)((GlRenderer.canvasHeight - anInt1441) * GameShell.canvasScale + GameShell.subpixelY), (int)((anInt1440 - clipX) * GameShell.canvasScale + GameShell.subpixelX), (int)((anInt1441 - clipY) * GameShell.canvasScale + GameShell.subpixelY));
} else {
gl.glScissor(0, 0, 0, 0);
}
@ -262,7 +262,7 @@ public final class Static46 {
@Pc(27) GL2 local27 = GlRenderer.gl;
local27.glEnable(GL2.GL_SCISSOR_TEST);
if (clipX <= anInt1440 && clipY <= anInt1441) {
local27.glScissor((int)(clipX * GameShell.canvasScale), (int)((GlRenderer.canvasHeight - anInt1441) * GameShell.canvasScale - 0.5d), (int)((anInt1440 - clipX) * GameShell.canvasScale), (int)((anInt1441 - clipY) * GameShell.canvasScale - 0.5d));
local27.glScissor((int)(clipX * GameShell.canvasScale + GameShell.subpixelX), (int)((GlRenderer.canvasHeight - anInt1441) * GameShell.canvasScale + GameShell.subpixelY), (int)((anInt1440 - clipX) * GameShell.canvasScale + GameShell.subpixelX), (int)((anInt1441 - clipY) * GameShell.canvasScale + GameShell.subpixelY));
} else {
local27.glScissor(0, 0, 0, 0);
}