Change canvas scaling to read from the current device

This commit is contained in:
Pazaz 2022-04-22 19:51:33 -04:00
parent 240862d626
commit f65909dc06
2 changed files with 16 additions and 31 deletions

View file

@ -229,22 +229,6 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
container.add(canvas); container.add(canvas);
canvas.setSize(canvasWidth, canvasHeight); canvas.setSize(canvasWidth, canvasHeight);
canvas.setVisible(true); canvas.setVisible(true);
Graphics g = canvas.getGraphics();
if (g != null) {
if (g instanceof Graphics2D) {
canvasScale = ((Graphics2D) g).getTransform().getScaleX();
} else {
canvasScale = 1.0d;
}
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) { if (container == frame) {
@Pc(66) Insets insets = frame.getInsets(); @Pc(66) Insets insets = frame.getInsets();
canvas.setLocation(leftMargin + insets.left, insets.top + topMargin); canvas.setLocation(leftMargin + insets.left, insets.top + topMargin);
@ -383,6 +367,19 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
} }
} }
public GraphicsDevice getCurrentDevice() {
GraphicsConfiguration config = frame.getGraphicsConfiguration();
GraphicsDevice myScreen = config.getDevice();
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] allScreens = env.getScreenDevices();
for (int i = 0; i < allScreens.length; i++) {
if (allScreens[i].equals(myScreen)) {
return allScreens[i];
}
}
return null;
}
@OriginalMember(owner = "client!rc", name = "e", descriptor = "(I)V") @OriginalMember(owner = "client!rc", name = "e", descriptor = "(I)V")
private void mainRedrawWrapper() { private void mainRedrawWrapper() {
@Pc(2) long now = MonotonicClock.currentTimeMillis(); @Pc(2) long now = MonotonicClock.currentTimeMillis();
@ -398,21 +395,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
partialRedraws -= 50; partialRedraws -= 50;
canvas.setSize(canvasWidth, canvasHeight); canvas.setSize(canvasWidth, canvasHeight);
canvas.setVisible(true); canvas.setVisible(true);
Graphics g = canvas.getGraphics(); canvasScale = getCurrentDevice().getDefaultConfiguration().getDefaultTransform().getScaleX();
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;
}
}
if (frame != null && fullScreenFrame == null) { if (frame != null && fullScreenFrame == null) {
@Pc(84) Insets insets = frame.getInsets(); @Pc(84) Insets insets = frame.getInsets();
canvas.setLocation(insets.left + leftMargin, topMargin + insets.top); canvas.setLocation(insets.left + leftMargin, topMargin + insets.top);

View file

@ -1,4 +1,5 @@
import java.applet.Applet; import java.applet.Applet;
import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.EventQueue; import java.awt.EventQueue;
import java.awt.Frame; import java.awt.Frame;
@ -375,6 +376,7 @@ public final class SignLink implements Runnable {
@Pc(168) Frame frame = new Frame("Jagex Full Screen"); @Pc(168) Frame frame = new Frame("Jagex Full Screen");
request.result = frame; request.result = frame;
frame.setResizable(false); frame.setResizable(false);
frame.setBackground(Color.black);
this.fullScreenManager.enter(request.intArg1 & 0xFFFF, request.intArg1 >> 16, request.intArg2 & 0xFFFF, frame, request.intArg2 >>> 16); this.fullScreenManager.enter(request.intArg1 & 0xFFFF, request.intArg1 >> 16, request.intArg2 & 0xFFFF, frame, request.intArg2 >>> 16);
} else if (type == 7) { } else if (type == 7) {
this.fullScreenManager.exit(); this.fullScreenManager.exit();