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(),