diff options
author | Ian Brown <[email protected]> | 2018-09-04 21:27:15 +0100 |
---|---|---|
committer | Ian Brown <[email protected]> | 2018-09-04 21:27:15 +0100 |
commit | 4fea4c231a0ad580ac08146162acb38fa9d85409 (patch) | |
tree | 196dbf8b030b097aaa17f38a3c80d0a98bec9f51 /src | |
parent | 2bda7c3f69d3a7bfe4b465a849270b6fd99b41b4 (diff) |
Fix HiDPI issues on windows
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/org/jogamp/java3d/Canvas3D.java | 13 | ||||
-rw-r--r-- | src/main/java/org/jogamp/java3d/CanvasViewEventCatcher.java | 9 |
2 files changed, 17 insertions, 5 deletions
diff --git a/src/main/java/org/jogamp/java3d/Canvas3D.java b/src/main/java/org/jogamp/java3d/Canvas3D.java index fe21197..a4f2b95 100644 --- a/src/main/java/org/jogamp/java3d/Canvas3D.java +++ b/src/main/java/org/jogamp/java3d/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; @@ -822,6 +824,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. @@ -1228,10 +1232,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; } diff --git a/src/main/java/org/jogamp/java3d/CanvasViewEventCatcher.java b/src/main/java/org/jogamp/java3d/CanvasViewEventCatcher.java index 3d72016..966f359 100644 --- a/src/main/java/org/jogamp/java3d/CanvasViewEventCatcher.java +++ b/src/main/java/org/jogamp/java3d/CanvasViewEventCatcher.java @@ -26,6 +26,7 @@ package org.jogamp.java3d; +import java.awt.Dimension; import java.awt.IllegalComponentStateException; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; @@ -65,7 +66,8 @@ class CanvasViewEventCatcher extends ComponentAdapter { // see comment below try { - canvas.newSize = canvas.getSize(); + Dimension size = canvas.getSize(); + canvas.newSize = new Dimension((int)(size.getWidth()*canvas.xscale), (int)(size.getHeight()*canvas.yscale)); canvas.newPosition = canvas.getLocationOnScreen(); } catch (IllegalComponentStateException ex) {} @@ -90,8 +92,9 @@ class CanvasViewEventCatcher extends ComponentAdapter { // first, then canvas lock in removeComponentListener() try { - canvas.newSize = canvas.getSize(); - canvas.newPosition = canvas.getLocationOnScreen(); + Dimension size = canvas.getSize(); + canvas.newSize = new Dimension((int)(size.getWidth()*canvas.xscale), (int)(size.getHeight()*canvas.yscale)); + canvas.newPosition = canvas.getLocationOnScreen(); } catch (IllegalComponentStateException ex) {} } |