aboutsummaryrefslogtreecommitdiffstats
path: root/src/javax/media/j3d/Canvas3D.java
diff options
context:
space:
mode:
authorIan Brown <[email protected]>2018-09-30 18:30:49 -0700
committerHarvey Harrison <[email protected]>2018-09-30 18:30:49 -0700
commitdd694ef6042fdf2d978a978d3750acac2c25557d (patch)
treee2d2f0f3374cb82e80fab278694f79331d475c63 /src/javax/media/j3d/Canvas3D.java
parenta61cf7db3460ff1e39fd4923b32e4c0450ac8c36 (diff)
j3d-core: Fix HiDPI issues on Windows
Signed-off-by: Harvey Harrison <[email protected]>
Diffstat (limited to 'src/javax/media/j3d/Canvas3D.java')
-rw-r--r--src/javax/media/j3d/Canvas3D.java14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/javax/media/j3d/Canvas3D.java b/src/javax/media/j3d/Canvas3D.java
index 080bd18..8824191 100644
--- a/src/javax/media/j3d/Canvas3D.java
+++ b/src/javax/media/j3d/Canvas3D.java
@@ -32,12 +32,14 @@ import java.awt.Container;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
+import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.IllegalComponentStateException;
import java.awt.Point;
import java.awt.Window;
+import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Hashtable;
@@ -820,6 +822,8 @@ ArrayList<Integer> textureIdResourceFreeList = new ArrayList<Integer>();
// CanvasViewEventCatcher.
Point newPosition = new Point();
Dimension newSize = new Dimension();
+ double xscale = 1.0;
+ double yscale = 1.0;
// Remember OGL context resources to free
// before context is destroy.
@@ -1227,9 +1231,15 @@ ArrayList<TextureRetained> textureIDResourceTable = new ArrayList<TextureRetaine
if (!firstPaintCalled && added && validCanvas &&
validGraphicsMode()) {
+ final Graphics2D g2d = (Graphics2D) g;
+ final AffineTransform t = g2d.getTransform();
+
try {
- newSize = getSize();
- newPosition = getLocationOnScreen();
+ Dimension scaledSize = getSize();
+ xscale = t.getScaleX();
+ yscale = t.getScaleY();
+ newSize = new Dimension((int)(scaledSize.getWidth()*xscale), (int)(scaledSize.getHeight()*yscale));
+ newPosition = getLocationOnScreen();
} catch (IllegalComponentStateException e) {
return;
}