< prev index next >

src/java.desktop/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java

Print this page

        

@@ -26,10 +26,11 @@
 package sun.java2d.windows;
 
 import java.awt.Rectangle;
 import java.awt.GraphicsConfiguration;
 import java.awt.color.ColorSpace;
+import java.awt.geom.AffineTransform;
 import java.awt.image.ColorModel;
 import java.awt.image.ComponentColorModel;
 import java.awt.image.DirectColorModel;
 import java.awt.image.IndexColorModel;
 import java.awt.image.Raster;

@@ -75,10 +76,13 @@
     public static final SurfaceType ThreeByteBgrGdi =
         SurfaceType.ThreeByteBgr.deriveSubType(DESC_GDI);
 
     private static native void initIDs(Class<?> xorComp);
 
+    private final double scaleX;
+    private final double scaleY;
+
     static {
         initIDs(XORComposite.class);
         if (WindowsFlags.isGdiBlitEnabled()) {
             // Register our gdi Blit loops
             GDIBlitLoops.register();

@@ -263,17 +267,27 @@
             bMask = dcm.getBlueMask();
         }
         this.graphicsConfig =
             (Win32GraphicsConfig) peer.getGraphicsConfiguration();
         this.solidloops = graphicsConfig.getSolidLoops(sType);
-
-        Win32GraphicsDevice gd =
-            (Win32GraphicsDevice)graphicsConfig.getDevice();
+        Win32GraphicsDevice gd = graphicsConfig.getDevice();
+        scaleX = gd.getDefaultScaleX();
+        scaleY = gd.getDefaultScaleY();
         initOps(peer, depth, rMask, gMask, bMask, gd.getScreen());
         setBlitProxyKey(graphicsConfig.getProxyKey());
     }
 
+    @Override
+    public double getDefaultScaleX() {
+        return scaleX;
+    }
+
+    @Override
+    public double getDefaultScaleY() {
+        return scaleY;
+    }
+
     /**
      * {@inheritDoc}
      *
      * Overridden to use ScreenUpdateManager to obtain the replacement surface.
      *

@@ -286,10 +300,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;
     }
 
     public boolean copyArea(SunGraphics2D sg2d,
                             int x, int y, int w, int h, int dx, int dy)
< prev index next >