< prev index next >

src/java.desktop/windows/classes/sun/java2d/opengl/WGLSurfaceData.java

Print this page

        

@@ -29,36 +29,53 @@
 import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsDevice;
 import java.awt.GraphicsEnvironment;
 import java.awt.Image;
 import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
 import java.awt.image.ColorModel;
 import sun.awt.SunToolkit;
+import sun.awt.Win32GraphicsDevice;
 import sun.awt.windows.WComponentPeer;
 import sun.java2d.SurfaceData;
 
 public abstract class WGLSurfaceData extends OGLSurfaceData {
 
     protected WComponentPeer peer;
     private WGLGraphicsConfig graphicsConfig;
+    protected double scaleX = 1;
+    protected double scaleY = 1;
 
     private native void initOps(long pConfigInfo, WComponentPeer peer,
                                 long hwnd);
 
     protected WGLSurfaceData(WComponentPeer peer, WGLGraphicsConfig gc,
                              ColorModel cm, int type)
     {
         super(gc, cm, type);
         this.peer = peer;
         this.graphicsConfig = gc;
+        Win32GraphicsDevice device = gc.getDevice();
+        this.scaleX = type == TEXTURE ? 1 : device.getDefaultScaleX();
+        this.scaleY = type == TEXTURE ? 1 : device.getDefaultScaleY();
 
         long pConfigInfo = gc.getNativeConfigInfo();
         long hwnd = peer != null ? peer.getHWnd() : 0L;
 
         initOps(pConfigInfo, peer, hwnd);
     }
 
+    @Override
+    public double getDefaultScaleX() {
+        return scaleX;
+    }
+
+    @Override
+    public double getDefaultScaleY() {
+        return scaleY;
+    }
+
     public GraphicsConfiguration getDeviceConfiguration() {
         return graphicsConfig;
     }
 
     /**

@@ -146,10 +163,12 @@
         }
 
         public Rectangle getBounds() {
             Rectangle r = peer.getBounds();
             r.x = r.y = 0;
+            r.width = (int) Math.ceil(r.width * scaleX);
+            r.height = (int) Math.ceil(r.height * scaleY);
             return r;
         }
 
         /**
          * Returns destination Component associated with this SurfaceData.

@@ -206,24 +225,26 @@
                                        Image image, ColorModel cm,
                                        int type)
         {
             super(peer, gc, cm, type);
 
-            this.width = width;
-            this.height = height;
+            this.width = (int) Math.ceil(width * scaleX);
+            this.height = (int) Math.ceil(height * scaleY);
             offscreenImage = image;
 
-            initSurface(width, height);
+            initSurface(this.width, this.height);
         }
 
         public SurfaceData getReplacement() {
             return restoreContents(offscreenImage);
         }
 
         public Rectangle getBounds() {
             if (type == FLIP_BACKBUFFER) {
                 Rectangle r = peer.getBounds();
+                r.width = (int) Math.ceil(r.width * scaleX);
+                r.height = (int) Math.ceil(r.height * scaleY);
                 r.x = r.y = 0;
                 return r;
             } else {
                 return new Rectangle(width, height);
             }
< prev index next >