mirror of
https://gitlab.com/2009scape/rt4-client.git
synced 2025-12-12 09:30:22 -07:00
Hopefully better scaling behavior for normal DPIs
This commit is contained in:
parent
8e396ebbbe
commit
8a35c73f76
3 changed files with 23 additions and 5 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue