Skip to content

Commit dd694ef

Browse files
bigianbhharrison
authored andcommitted
j3d-core: Fix HiDPI issues on Windows
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
1 parent a61cf7d commit dd694ef

2 files changed

Lines changed: 17 additions & 4 deletions

File tree

src/javax/media/j3d/Canvas3D.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@
3232
import java.awt.Dimension;
3333
import java.awt.Frame;
3434
import java.awt.Graphics;
35+
import java.awt.Graphics2D;
3536
import java.awt.GraphicsConfiguration;
3637
import java.awt.GraphicsDevice;
3738
import java.awt.GraphicsEnvironment;
3839
import java.awt.IllegalComponentStateException;
3940
import java.awt.Point;
4041
import java.awt.Window;
42+
import java.awt.geom.AffineTransform;
4143
import java.awt.image.BufferedImage;
4244
import java.util.ArrayList;
4345
import java.util.Hashtable;
@@ -820,6 +822,8 @@ public class Canvas3D extends Canvas {
820822
// CanvasViewEventCatcher.
821823
Point newPosition = new Point();
822824
Dimension newSize = new Dimension();
825+
double xscale = 1.0;
826+
double yscale = 1.0;
823827

824828
// Remember OGL context resources to free
825829
// before context is destroy.
@@ -1227,9 +1231,15 @@ public void paint(Graphics g) {
12271231
if (!firstPaintCalled && added && validCanvas &&
12281232
validGraphicsMode()) {
12291233

1234+
final Graphics2D g2d = (Graphics2D) g;
1235+
final AffineTransform t = g2d.getTransform();
1236+
12301237
try {
1231-
newSize = getSize();
1232-
newPosition = getLocationOnScreen();
1238+
Dimension scaledSize = getSize();
1239+
xscale = t.getScaleX();
1240+
yscale = t.getScaleY();
1241+
newSize = new Dimension((int)(scaledSize.getWidth()*xscale), (int)(scaledSize.getHeight()*yscale));
1242+
newPosition = getLocationOnScreen();
12331243
} catch (IllegalComponentStateException e) {
12341244
return;
12351245
}

src/javax/media/j3d/CanvasViewEventCatcher.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
package javax.media.j3d;
2828

29+
import java.awt.Dimension;
2930
import java.awt.IllegalComponentStateException;
3031
import java.awt.event.ComponentAdapter;
3132
import java.awt.event.ComponentEvent;
@@ -65,7 +66,8 @@ public void componentResized(ComponentEvent e) {
6566

6667
// see comment below
6768
try {
68-
canvas.newSize = canvas.getSize();
69+
Dimension size = canvas.getSize();
70+
canvas.newSize = new Dimension((int)(size.getWidth()*canvas.xscale), (int)(size.getHeight()*canvas.yscale));
6971
canvas.newPosition = canvas.getLocationOnScreen();
7072
} catch (IllegalComponentStateException ex) {}
7173

@@ -90,7 +92,8 @@ public void componentMoved(ComponentEvent e) {
9092
// first, then canvas lock in removeComponentListener()
9193

9294
try {
93-
canvas.newSize = canvas.getSize();
95+
Dimension size = canvas.getSize();
96+
canvas.newSize = new Dimension((int)(size.getWidth()*canvas.xscale), (int)(size.getHeight()*canvas.yscale));
9497
canvas.newPosition = canvas.getLocationOnScreen();
9598
} catch (IllegalComponentStateException ex) {}
9699

0 commit comments

Comments
 (0)