home *** CD-ROM | disk | FTP | other *** search
- package sun.java2d.loops;
-
- import java.awt.Rectangle;
- import java.awt.image.BufferedImage;
- import java.awt.image.ColorModel;
- import java.awt.image.ComponentColorModel;
- import java.awt.image.DirectColorModel;
- import java.awt.image.IndexColorModel;
- import java.awt.image.PixelInterleavedSampleModel;
- import java.awt.image.Raster;
- import java.awt.image.RasterFormatException;
- import java.awt.image.SampleModel;
- import sun.awt.image.ByteComponentRaster;
- import sun.awt.image.BytePackedRaster;
- import sun.awt.image.IntegerComponentRaster;
- import sun.awt.image.ShortComponentRaster;
- import sun.java2d.SunGraphics2D;
-
- public final class LockableRaster {
- private Raster parentRaster;
- private SunGraphics2D parent2D;
- private BufferedImage parentImage;
- private int parentType;
- private static final int PARENT_RASTER = 1;
- private static final int PARENT_2D = 2;
- private static final int PARENT_IMAGE = 3;
- private static final int metaFormat = 2;
- private ColorModel parentCM;
- private ImageData cachedID;
- // $FF: renamed from: id sun.java2d.loops.ImageData
- public ImageData field_0;
- public int type;
- public String devID;
- static final int DCM_RED_MASK = 16711680;
- static final int DCM_GREEN_MASK = 65280;
- static final int DCM_BLUE_MASK = 255;
- static final int DCM_ALPHA_MASK = -16777216;
- static final int DCM_565_RED_MASK = 63488;
- static final int DCM_565_GRN_MASK = 2016;
- static final int DCM_565_BLU_MASK = 31;
- static final int DCM_555_RED_MASK = 31744;
- static final int DCM_555_GRN_MASK = 992;
- static final int DCM_555_BLU_MASK = 31;
- static final int DCM_BGR_RED_MASK = 255;
- static final int DCM_BGR_GRN_MASK = 65280;
- static final int DCM_BGR_BLU_MASK = 16711680;
-
- public LockableRaster(Raster var1, ColorModel var2) {
- this.parentRaster = var1;
- this.parent2D = null;
- this.parentImage = null;
- this.parentType = 1;
- this.field_0 = null;
- this.cachedID = null;
- this.parentCM = var2;
- this.type = findRasterType(this.parentRaster, this.parentCM);
- this.devID = null;
- }
-
- public LockableRaster(SunGraphics2D var1) {
- this.parentRaster = null;
- this.parent2D = var1;
- this.parentImage = null;
- this.parentType = 2;
- Rectangle var2 = var1.getCompBounds();
- this.field_0 = var1.lock(var2.x, var2.y, 1, 1, 4);
- this.cachedID = null;
- this.parentCM = null;
- this.type = 0;
- this.devID = var1.getDevID();
- if (null != this.field_0) {
- this.type = this.field_0.getType();
- var1.unlock(this.field_0);
- this.field_0 = null;
- }
-
- }
-
- public LockableRaster(BufferedImage var1) {
- this.parentRaster = var1.getRaster();
- this.parent2D = null;
- this.parentImage = var1;
- this.parentType = 3;
- this.field_0 = null;
- this.cachedID = null;
- this.parentCM = var1.getColorModel();
- this.type = var1.getType();
- this.devID = null;
- if (this.type == 0) {
- this.type = findRasterType(this.parentRaster, this.parentCM);
- } else {
- this.type = adjustCM(this.type, this.parentCM);
- }
-
- }
-
- public LockableRaster(int var1, int var2) {
- this.parent2D = null;
- this.parentImage = null;
- this.parentType = 1;
- this.field_0 = null;
- this.cachedID = null;
- this.parentCM = ColorModel.getRGBdefault();
- this.type = 2;
- this.devID = null;
- this.parentRaster = this.parentCM.createCompatibleWritableRaster(var1, var2);
- }
-
- public boolean isTranslucent() {
- if (this.parentCM == null) {
- return false;
- } else {
- return this.parentCM.getTransparency() == 3;
- }
- }
-
- public boolean containsTransparentPixels() {
- if (this.parentCM == null) {
- return false;
- } else {
- return 2 == this.parentCM.getTransparency();
- }
- }
-
- public boolean lock(int var1, int var2, int var3, int var4, int var5) throws RasterLockingException {
- switch (this.parentType) {
- case 1:
- case 3:
- this.field_0 = this.lockRaster(this.parentRaster, this.parentCM, var2, var3, var4, var5, var1);
- break;
- case 2:
- this.field_0 = this.parent2D.lock(var2, var3, var4, var5, var1);
- if (this.field_0 == null && 0 != (var1 & 8)) {
- return false;
- }
- break;
- default:
- this.field_0 = null;
- }
-
- if (null != this.field_0) {
- this.type = this.field_0.getType();
- return true;
- } else {
- throw new RasterLockingException("Surface not available/bad request");
- }
- }
-
- public void unlock() {
- switch (this.parentType) {
- case 2:
- this.parent2D.unlock(this.field_0);
- case 1:
- case 3:
- default:
- this.field_0 = null;
- }
- }
-
- private static int adjustCM(int var0, ColorModel var1) {
- if (var1.getTransparency() == 2) {
- switch (var0) {
- case 2:
- var0 = -14;
- break;
- case 3:
- var0 = -15;
- break;
- case 13:
- var0 = -16;
- }
- } else if (var1 instanceof IndexColorModel) {
- IndexColorModel var2 = (IndexColorModel)var1;
- if (var0 == 13 && ImageData.isAllOpaqueGrayICM(var2) && ((ColorModel)var2).getPixelSize() == 8) {
- var0 = -17;
- }
- }
-
- return var0;
- }
-
- private static int findRasterType(Raster var0, ColorModel var1) {
- int var2 = 0;
- int var3 = var0.getNumBands();
- if (var0 instanceof IntegerComponentRaster && (var3 == 3 || var3 == 4)) {
- IntegerComponentRaster var14 = (IntegerComponentRaster)var0;
- int var16 = var1.getPixelSize();
- if (var14.getPixelStride() == 1 && var1 instanceof DirectColorModel && (var16 == 32 || var16 == 24) || var16 == 25) {
- DirectColorModel var19 = (DirectColorModel)var1;
- int var7 = var19.getRedMask();
- int var8 = var19.getGreenMask();
- int var9 = var19.getBlueMask();
- if (var7 == 16711680 && var8 == 65280 && var9 == 255) {
- boolean var10 = ((ColorModel)var19).isAlphaPremultiplied();
- if (var19.getAlphaMask() == -16777216) {
- var2 = var10 ? 3 : 2;
- } else if (var16 == 24) {
- var2 = 1;
- } else if (var16 == 25) {
- var2 = -14;
- }
- } else if (var16 == 24 && var7 == 255 && var8 == 65280 && var9 == 16711680) {
- var2 = 4;
- }
- }
- } else if (var1 instanceof IndexColorModel && var3 == 1) {
- IndexColorModel var13 = (IndexColorModel)var1;
- int var15 = ((ColorModel)var13).getPixelSize();
- if (var0 instanceof BytePackedRaster) {
- var2 = 12;
- } else if (var0 instanceof ByteComponentRaster) {
- ByteComponentRaster var17 = (ByteComponentRaster)var0;
- if (var17.getPixelStride() == 1 && var15 <= 8) {
- var2 = 13;
- }
- } else if (var0 instanceof ShortComponentRaster) {
- ShortComponentRaster var18 = (ShortComponentRaster)var0;
- if (var18.getPixelStride() == 1 && var15 == 12 && ImageData.isAllOpaqueGrayICM(var13)) {
- var2 = -18;
- }
- }
- } else if (var0 instanceof ShortComponentRaster && var1 instanceof DirectColorModel && var3 == 3) {
- DirectColorModel var12 = (DirectColorModel)var1;
- if (var12.getRedMask() == 63488) {
- if (var12.getGreenMask() == 2016 && var12.getBlueMask() == 31) {
- var2 = 8;
- }
- } else if (var12.getRedMask() == 31744 && var12.getGreenMask() == 992 && var12.getBlueMask() == 31) {
- var2 = 9;
- }
- } else if (var0 instanceof ShortComponentRaster && var1 instanceof ComponentColorModel && var1.getColorSpace().getType() == 6 && var3 == 1) {
- if (((ShortComponentRaster)var0).getPixelStride() == 1) {
- var2 = 11;
- }
- } else if (var0 instanceof ByteComponentRaster) {
- if (var1 instanceof ComponentColorModel && var0.getSampleModel() instanceof PixelInterleavedSampleModel && (var3 == 3 || var3 == 4)) {
- ComponentColorModel var4 = (ComponentColorModel)var1;
- ByteComponentRaster var5 = (ByteComponentRaster)var0;
- int[] var6 = var5.getDataOffsets();
- if (((ColorModel)var4).getNumComponents() != var3) {
- throw new RasterFormatException("Number of components in ColorModeldoes not match # in Raster");
- }
-
- if (var5.getPixelStride() == var3) {
- if (var6[0] == var3 - 1 && var6[1] == var3 - 2 && var6[2] == var3 - 3) {
- if (!((ColorModel)var4).isAlphaPremultiplied()) {
- if (var3 == 3) {
- var2 = 5;
- } else if (var6[3] == 0) {
- var2 = 6;
- }
- } else if (var3 == 4 && var6[3] == 0) {
- var2 = 7;
- }
- } else if (var3 == 3 && var6[0] == 0 && var6[1] == 1 && var6[2] == 2) {
- var2 = -12;
- }
- }
- } else if (var1 instanceof ComponentColorModel && var1.getColorSpace().getType() == 6 && var3 == 1 && ((ByteComponentRaster)var0).getPixelStride() == 1) {
- var2 = 10;
- }
- }
-
- var2 = adjustCM(var2, var1);
- return var2;
- }
-
- public static boolean prepareImageData(ImageData var0, Raster var1, ColorModel var2, int var3) {
- boolean var4 = false;
- SampleModel var5 = var1.getSampleModel();
- int var6 = var5.getNumBands();
- Object var7 = null;
- Object var8 = null;
- Object var9 = null;
- int var10 = 0;
- int var11 = 0;
- int var12 = 0;
- byte var13 = 0;
- int var14 = 0;
- int var15 = 0;
- int var16 = 0;
- int var17 = var1.getWidth();
- int var18 = var1.getHeight();
- if (0 == var3) {
- var3 = findRasterType(var1, var2);
- }
-
- switch (var3) {
- case -18:
- case 8:
- case 9:
- case 11:
- ShortComponentRaster var21 = (ShortComponentRaster)var1;
- short[] var28;
- if (null != (var28 = var21.getDataStorage())) {
- var0.setShortDataArray(var28);
- var10 = var21.getScanlineStride();
- var11 = var21.getPixelStride();
- var12 = 1;
- var13 = 2;
- var14 = var21.getDataOffset(0);
- var15 = var14 % var10 / var11;
- var16 = (var14 - var15) / var10;
- var4 = true;
- }
- break;
- case -17:
- case -16:
- case -12:
- case 5:
- case 6:
- case 7:
- case 10:
- case 13:
- ByteComponentRaster var20 = (ByteComponentRaster)var1;
- byte[] var26;
- if (null != (var26 = var20.getDataStorage())) {
- var0.setByteDataArray(var26);
- var10 = var20.getScanlineStride();
- var11 = var20.getPixelStride();
- var12 = 1;
- var13 = 1;
- var14 = var20.getDataOffset(0);
- var15 = var14 % var10 / var11;
- var16 = (var14 - var15) / var10;
- var4 = true;
- }
- break;
- case -15:
- case -14:
- case 1:
- case 2:
- case 3:
- case 4:
- IntegerComponentRaster var19 = (IntegerComponentRaster)var1;
- int[] var27;
- if (null != (var27 = var19.getDataStorage())) {
- var0.setIntDataArray(var27);
- var10 = var19.getScanlineStride();
- var11 = var19.getPixelStride();
- var12 = 1;
- var13 = 4;
- var14 = var19.getDataOffset(0);
- var15 = var14 % var10 / var11;
- var16 = (var14 - var15) / var10;
- var4 = true;
- }
- break;
- case -13:
- case -11:
- case -10:
- case -9:
- case -8:
- case -7:
- case -6:
- case -5:
- case -4:
- case -3:
- case -2:
- case -1:
- default:
- throw new InternalError("Unknown GraphicsPrimitive type");
- case 0:
- var12 = 1;
- var4 = true;
- break;
- case 12:
- BytePackedRaster var22 = (BytePackedRaster)var1;
- byte[] var25;
- if (null != (var25 = var22.getDataStorage())) {
- var0.setByteDataArray(var25);
- var10 = var22.getScanlineStride();
- var11 = 1;
- var12 = 8 / var22.getNumberOfBits();
- var13 = 1;
- var14 = var22.getDataBitOffset();
- var15 = var14 % (var10 << 3) / var22.getNumberOfBits();
- var16 = var14 / (var10 << 3);
- var4 = true;
- }
- }
-
- if (var4) {
- var0.setType(var3);
- if (null != var2 && var2 instanceof IndexColorModel) {
- int var23 = ((IndexColorModel)var2).getMapSize();
- int[] var24 = new int[var23];
- ((IndexColorModel)var2).getRGBs(var24);
- var0.setLutData(0);
- var0.setIntLutDataArray(var24);
- var0.setLutDataLength(var23);
- }
-
- var0.setTransparency(var2.getTransparency());
- var0.setDataPointer(0);
- var0.setPixelStride(var11);
- var0.setScanlineStride(var10);
- var0.setNumChannels(var6);
- var0.setPixelsPerDataUnit(var12);
- var0.setBytePerChannel(var13);
- var0.setColorModel(var2);
- var0.setRaster(var1);
- var0.setXSize(var17);
- var0.setYSize(var18);
- var0.setOffsetX(var15);
- var0.setOffsetY(var16);
- }
-
- return var4;
- }
-
- public static boolean prepareRasterBounds(ImageData var0) {
- return prepareRasterBounds(var0, 0, 0, var0.getXSize(), var0.getYSize());
- }
-
- public static boolean prepareRasterBounds(ImageData var0, int var1, int var2, int var3, int var4) {
- int var5 = var0.getXViewArea();
- int var6 = var0.getYViewArea();
- int var7 = var0.getDXViewArea();
- int var8 = var0.getDYViewArea();
- int var9 = var5 + var7;
- int var10 = var6 + var8;
- if (var5 < var1) {
- var5 = var1;
- }
-
- if (var6 < var2) {
- var6 = var2;
- }
-
- if (var9 > var1 + var3) {
- var9 = var1 + var3;
- }
-
- if (var10 > var2 + var4) {
- var10 = var2 + var4;
- }
-
- var7 = var9 - var5;
- var8 = var10 - var6;
- var5 += var0.getOffsetX();
- var6 += var0.getOffsetY();
- if (var8 > 0 && var7 > 0) {
- var0.setDeviceArea(var5, var6, var7, var8);
- var0.setOutputArea(var5, var6, var7, var8);
- return true;
- } else {
- return false;
- }
- }
-
- private ImageData lockRaster(Raster var1, ColorModel var2, int var3, int var4, int var5, int var6, int var7) {
- if (null != var2 && null != var1) {
- ImageData var8 = this.cachedID;
- if (null == var8) {
- var8 = new ImageData();
- if (!prepareImageData(var8, var1, var2, this.type)) {
- return null;
- }
-
- this.type = var8.getType();
- }
-
- var8.setViewArea(var3, var4, var5, var6);
- var8.setLockMethod(var7);
- if (prepareRasterBounds(var8)) {
- this.cachedID = var8;
- return var8;
- } else {
- return null;
- }
- } else {
- return null;
- }
- }
-
- public String toString() {
- String var1 = "LockableRaster[";
- switch (this.parentType) {
- case 1:
- var1 = var1 + "Raster[";
- var1 = var1 + this.parentRaster + "[";
- break;
- case 2:
- var1 = var1 + "2D[";
- var1 = var1 + this.parent2D + "[";
- var1 = var1 + this.field_0 + "[";
- var1 = var1 + GraphicsPrimitive.typeStr(this.type);
- break;
- case 3:
- var1 = var1 + "Image[";
- var1 = var1 + this.parentImage + "[";
- }
-
- if (this.field_0 != null) {
- var1 = var1 + this.field_0;
- }
-
- return var1;
- }
- }
-