src/share/classes/sun/awt/image/BufImgSurfaceData.java

Print this page

        

@@ -234,29 +234,36 @@
                         }
                     }
                     sData = createDataSC(bufImg, sType, icm);
                     break;
                 }
-                sData = new BufImgSurfaceData(raster.getDataBuffer(),
-                                              bufImg, SurfaceType.Custom);
+                sData = createData(raster.getDataBuffer(), bufImg, SurfaceType.Custom);
             }
             break;
         }
         ((BufImgSurfaceData) sData).initSolidLoops();
         return sData;
     }
 
+    private static BufImgSurfaceData createData(DataBuffer db, BufferedImage bufImg,
+                                                SurfaceType sType)
+    {
+        if (bufImg instanceof OffScreenImage) {
+            return ((OffScreenImage)bufImg).new SurfaceData(db, sType);
+        }
+        return new BufImgSurfaceData(db, bufImg, sType);
+    }
+
     public static SurfaceData createData(Raster ras, ColorModel cm) {
         throw new InternalError("SurfaceData not implemented for Raster/CM");
     }
 
     public static SurfaceData createDataIC(BufferedImage bImg,
                                            SurfaceType sType) {
         IntegerComponentRaster icRaster =
             (IntegerComponentRaster)bImg.getRaster();
-        BufImgSurfaceData bisd =
-            new BufImgSurfaceData(icRaster.getDataBuffer(), bImg, sType);
+        BufImgSurfaceData bisd = createData(icRaster.getDataBuffer(), bImg, sType);
         bisd.initRaster(icRaster.getDataStorage(),
                         icRaster.getDataOffset(0) * 4, 0,
                         icRaster.getWidth(),
                         icRaster.getHeight(),
                         icRaster.getPixelStride() * 4,

@@ -268,12 +275,11 @@
     public static SurfaceData createDataSC(BufferedImage bImg,
                                            SurfaceType sType,
                                            IndexColorModel icm) {
         ShortComponentRaster scRaster =
             (ShortComponentRaster)bImg.getRaster();
-        BufImgSurfaceData bisd =
-            new BufImgSurfaceData(scRaster.getDataBuffer(), bImg, sType);
+        BufImgSurfaceData bisd = createData(scRaster.getDataBuffer(), bImg, sType);
         bisd.initRaster(scRaster.getDataStorage(),
                         scRaster.getDataOffset(0) * 2, 0,
                         scRaster.getWidth(),
                         scRaster.getHeight(),
                         scRaster.getPixelStride() * 2,

@@ -285,12 +291,11 @@
     public static SurfaceData createDataBC(BufferedImage bImg,
                                            SurfaceType sType,
                                            int primaryBank) {
         ByteComponentRaster bcRaster =
             (ByteComponentRaster)bImg.getRaster();
-        BufImgSurfaceData bisd =
-            new BufImgSurfaceData(bcRaster.getDataBuffer(), bImg, sType);
+        BufImgSurfaceData bisd = createData(bcRaster.getDataBuffer(), bImg, sType);
         ColorModel cm = bImg.getColorModel();
         IndexColorModel icm = ((cm instanceof IndexColorModel)
                                ? (IndexColorModel) cm
                                : null);
         bisd.initRaster(bcRaster.getDataStorage(),

@@ -305,12 +310,11 @@
 
     public static SurfaceData createDataBP(BufferedImage bImg,
                                            SurfaceType sType) {
         BytePackedRaster bpRaster =
             (BytePackedRaster)bImg.getRaster();
-        BufImgSurfaceData bisd =
-            new BufImgSurfaceData(bpRaster.getDataBuffer(), bImg, sType);
+        BufImgSurfaceData bisd = createData(bpRaster.getDataBuffer(), bImg, sType);
         ColorModel cm = bImg.getColorModel();
         IndexColorModel icm = ((cm instanceof IndexColorModel)
                                ? (IndexColorModel) cm
                                : null);
         bisd.initRaster(bpRaster.getDataStorage(),