home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / java2d / loops / LockableRaster.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  8.1 KB  |  502 lines

  1. package sun.java2d.loops;
  2.  
  3. import java.awt.Rectangle;
  4. import java.awt.image.BufferedImage;
  5. import java.awt.image.ColorModel;
  6. import java.awt.image.ComponentColorModel;
  7. import java.awt.image.DirectColorModel;
  8. import java.awt.image.IndexColorModel;
  9. import java.awt.image.PixelInterleavedSampleModel;
  10. import java.awt.image.Raster;
  11. import java.awt.image.RasterFormatException;
  12. import java.awt.image.SampleModel;
  13. import sun.awt.image.ByteComponentRaster;
  14. import sun.awt.image.BytePackedRaster;
  15. import sun.awt.image.IntegerComponentRaster;
  16. import sun.awt.image.ShortComponentRaster;
  17. import sun.java2d.SunGraphics2D;
  18.  
  19. public final class LockableRaster {
  20.    private Raster parentRaster;
  21.    private SunGraphics2D parent2D;
  22.    private BufferedImage parentImage;
  23.    private int parentType;
  24.    private static final int PARENT_RASTER = 1;
  25.    private static final int PARENT_2D = 2;
  26.    private static final int PARENT_IMAGE = 3;
  27.    private static final int metaFormat = 2;
  28.    private ColorModel parentCM;
  29.    private ImageData cachedID;
  30.    // $FF: renamed from: id sun.java2d.loops.ImageData
  31.    public ImageData field_0;
  32.    public int type;
  33.    public String devID;
  34.    static final int DCM_RED_MASK = 16711680;
  35.    static final int DCM_GREEN_MASK = 65280;
  36.    static final int DCM_BLUE_MASK = 255;
  37.    static final int DCM_ALPHA_MASK = -16777216;
  38.    static final int DCM_565_RED_MASK = 63488;
  39.    static final int DCM_565_GRN_MASK = 2016;
  40.    static final int DCM_565_BLU_MASK = 31;
  41.    static final int DCM_555_RED_MASK = 31744;
  42.    static final int DCM_555_GRN_MASK = 992;
  43.    static final int DCM_555_BLU_MASK = 31;
  44.    static final int DCM_BGR_RED_MASK = 255;
  45.    static final int DCM_BGR_GRN_MASK = 65280;
  46.    static final int DCM_BGR_BLU_MASK = 16711680;
  47.  
  48.    public LockableRaster(Raster var1, ColorModel var2) {
  49.       this.parentRaster = var1;
  50.       this.parent2D = null;
  51.       this.parentImage = null;
  52.       this.parentType = 1;
  53.       this.field_0 = null;
  54.       this.cachedID = null;
  55.       this.parentCM = var2;
  56.       this.type = findRasterType(this.parentRaster, this.parentCM);
  57.       this.devID = null;
  58.    }
  59.  
  60.    public LockableRaster(SunGraphics2D var1) {
  61.       this.parentRaster = null;
  62.       this.parent2D = var1;
  63.       this.parentImage = null;
  64.       this.parentType = 2;
  65.       Rectangle var2 = var1.getCompBounds();
  66.       this.field_0 = var1.lock(var2.x, var2.y, 1, 1, 4);
  67.       this.cachedID = null;
  68.       this.parentCM = null;
  69.       this.type = 0;
  70.       this.devID = var1.getDevID();
  71.       if (null != this.field_0) {
  72.          this.type = this.field_0.getType();
  73.          var1.unlock(this.field_0);
  74.          this.field_0 = null;
  75.       }
  76.  
  77.    }
  78.  
  79.    public LockableRaster(BufferedImage var1) {
  80.       this.parentRaster = var1.getRaster();
  81.       this.parent2D = null;
  82.       this.parentImage = var1;
  83.       this.parentType = 3;
  84.       this.field_0 = null;
  85.       this.cachedID = null;
  86.       this.parentCM = var1.getColorModel();
  87.       this.type = var1.getType();
  88.       this.devID = null;
  89.       if (this.type == 0) {
  90.          this.type = findRasterType(this.parentRaster, this.parentCM);
  91.       } else {
  92.          this.type = adjustCM(this.type, this.parentCM);
  93.       }
  94.  
  95.    }
  96.  
  97.    public LockableRaster(int var1, int var2) {
  98.       this.parent2D = null;
  99.       this.parentImage = null;
  100.       this.parentType = 1;
  101.       this.field_0 = null;
  102.       this.cachedID = null;
  103.       this.parentCM = ColorModel.getRGBdefault();
  104.       this.type = 2;
  105.       this.devID = null;
  106.       this.parentRaster = this.parentCM.createCompatibleWritableRaster(var1, var2);
  107.    }
  108.  
  109.    public boolean isTranslucent() {
  110.       if (this.parentCM == null) {
  111.          return false;
  112.       } else {
  113.          return this.parentCM.getTransparency() == 3;
  114.       }
  115.    }
  116.  
  117.    public boolean containsTransparentPixels() {
  118.       if (this.parentCM == null) {
  119.          return false;
  120.       } else {
  121.          return 2 == this.parentCM.getTransparency();
  122.       }
  123.    }
  124.  
  125.    public boolean lock(int var1, int var2, int var3, int var4, int var5) throws RasterLockingException {
  126.       switch (this.parentType) {
  127.          case 1:
  128.          case 3:
  129.             this.field_0 = this.lockRaster(this.parentRaster, this.parentCM, var2, var3, var4, var5, var1);
  130.             break;
  131.          case 2:
  132.             this.field_0 = this.parent2D.lock(var2, var3, var4, var5, var1);
  133.             if (this.field_0 == null && 0 != (var1 & 8)) {
  134.                return false;
  135.             }
  136.             break;
  137.          default:
  138.             this.field_0 = null;
  139.       }
  140.  
  141.       if (null != this.field_0) {
  142.          this.type = this.field_0.getType();
  143.          return true;
  144.       } else {
  145.          throw new RasterLockingException("Surface not available/bad request");
  146.       }
  147.    }
  148.  
  149.    public void unlock() {
  150.       switch (this.parentType) {
  151.          case 2:
  152.             this.parent2D.unlock(this.field_0);
  153.          case 1:
  154.          case 3:
  155.          default:
  156.             this.field_0 = null;
  157.       }
  158.    }
  159.  
  160.    private static int adjustCM(int var0, ColorModel var1) {
  161.       if (var1.getTransparency() == 2) {
  162.          switch (var0) {
  163.             case 2:
  164.                var0 = -14;
  165.                break;
  166.             case 3:
  167.                var0 = -15;
  168.                break;
  169.             case 13:
  170.                var0 = -16;
  171.          }
  172.       } else if (var1 instanceof IndexColorModel) {
  173.          IndexColorModel var2 = (IndexColorModel)var1;
  174.          if (var0 == 13 && ImageData.isAllOpaqueGrayICM(var2) && ((ColorModel)var2).getPixelSize() == 8) {
  175.             var0 = -17;
  176.          }
  177.       }
  178.  
  179.       return var0;
  180.    }
  181.  
  182.    private static int findRasterType(Raster var0, ColorModel var1) {
  183.       int var2 = 0;
  184.       int var3 = var0.getNumBands();
  185.       if (var0 instanceof IntegerComponentRaster && (var3 == 3 || var3 == 4)) {
  186.          IntegerComponentRaster var14 = (IntegerComponentRaster)var0;
  187.          int var16 = var1.getPixelSize();
  188.          if (var14.getPixelStride() == 1 && var1 instanceof DirectColorModel && (var16 == 32 || var16 == 24) || var16 == 25) {
  189.             DirectColorModel var19 = (DirectColorModel)var1;
  190.             int var7 = var19.getRedMask();
  191.             int var8 = var19.getGreenMask();
  192.             int var9 = var19.getBlueMask();
  193.             if (var7 == 16711680 && var8 == 65280 && var9 == 255) {
  194.                boolean var10 = ((ColorModel)var19).isAlphaPremultiplied();
  195.                if (var19.getAlphaMask() == -16777216) {
  196.                   var2 = var10 ? 3 : 2;
  197.                } else if (var16 == 24) {
  198.                   var2 = 1;
  199.                } else if (var16 == 25) {
  200.                   var2 = -14;
  201.                }
  202.             } else if (var16 == 24 && var7 == 255 && var8 == 65280 && var9 == 16711680) {
  203.                var2 = 4;
  204.             }
  205.          }
  206.       } else if (var1 instanceof IndexColorModel && var3 == 1) {
  207.          IndexColorModel var13 = (IndexColorModel)var1;
  208.          int var15 = ((ColorModel)var13).getPixelSize();
  209.          if (var0 instanceof BytePackedRaster) {
  210.             var2 = 12;
  211.          } else if (var0 instanceof ByteComponentRaster) {
  212.             ByteComponentRaster var17 = (ByteComponentRaster)var0;
  213.             if (var17.getPixelStride() == 1 && var15 <= 8) {
  214.                var2 = 13;
  215.             }
  216.          } else if (var0 instanceof ShortComponentRaster) {
  217.             ShortComponentRaster var18 = (ShortComponentRaster)var0;
  218.             if (var18.getPixelStride() == 1 && var15 == 12 && ImageData.isAllOpaqueGrayICM(var13)) {
  219.                var2 = -18;
  220.             }
  221.          }
  222.       } else if (var0 instanceof ShortComponentRaster && var1 instanceof DirectColorModel && var3 == 3) {
  223.          DirectColorModel var12 = (DirectColorModel)var1;
  224.          if (var12.getRedMask() == 63488) {
  225.             if (var12.getGreenMask() == 2016 && var12.getBlueMask() == 31) {
  226.                var2 = 8;
  227.             }
  228.          } else if (var12.getRedMask() == 31744 && var12.getGreenMask() == 992 && var12.getBlueMask() == 31) {
  229.             var2 = 9;
  230.          }
  231.       } else if (var0 instanceof ShortComponentRaster && var1 instanceof ComponentColorModel && var1.getColorSpace().getType() == 6 && var3 == 1) {
  232.          if (((ShortComponentRaster)var0).getPixelStride() == 1) {
  233.             var2 = 11;
  234.          }
  235.       } else if (var0 instanceof ByteComponentRaster) {
  236.          if (var1 instanceof ComponentColorModel && var0.getSampleModel() instanceof PixelInterleavedSampleModel && (var3 == 3 || var3 == 4)) {
  237.             ComponentColorModel var4 = (ComponentColorModel)var1;
  238.             ByteComponentRaster var5 = (ByteComponentRaster)var0;
  239.             int[] var6 = var5.getDataOffsets();
  240.             if (((ColorModel)var4).getNumComponents() != var3) {
  241.                throw new RasterFormatException("Number of components in ColorModeldoes not match # in Raster");
  242.             }
  243.  
  244.             if (var5.getPixelStride() == var3) {
  245.                if (var6[0] == var3 - 1 && var6[1] == var3 - 2 && var6[2] == var3 - 3) {
  246.                   if (!((ColorModel)var4).isAlphaPremultiplied()) {
  247.                      if (var3 == 3) {
  248.                         var2 = 5;
  249.                      } else if (var6[3] == 0) {
  250.                         var2 = 6;
  251.                      }
  252.                   } else if (var3 == 4 && var6[3] == 0) {
  253.                      var2 = 7;
  254.                   }
  255.                } else if (var3 == 3 && var6[0] == 0 && var6[1] == 1 && var6[2] == 2) {
  256.                   var2 = -12;
  257.                }
  258.             }
  259.          } else if (var1 instanceof ComponentColorModel && var1.getColorSpace().getType() == 6 && var3 == 1 && ((ByteComponentRaster)var0).getPixelStride() == 1) {
  260.             var2 = 10;
  261.          }
  262.       }
  263.  
  264.       var2 = adjustCM(var2, var1);
  265.       return var2;
  266.    }
  267.  
  268.    public static boolean prepareImageData(ImageData var0, Raster var1, ColorModel var2, int var3) {
  269.       boolean var4 = false;
  270.       SampleModel var5 = var1.getSampleModel();
  271.       int var6 = var5.getNumBands();
  272.       Object var7 = null;
  273.       Object var8 = null;
  274.       Object var9 = null;
  275.       int var10 = 0;
  276.       int var11 = 0;
  277.       int var12 = 0;
  278.       byte var13 = 0;
  279.       int var14 = 0;
  280.       int var15 = 0;
  281.       int var16 = 0;
  282.       int var17 = var1.getWidth();
  283.       int var18 = var1.getHeight();
  284.       if (0 == var3) {
  285.          var3 = findRasterType(var1, var2);
  286.       }
  287.  
  288.       switch (var3) {
  289.          case -18:
  290.          case 8:
  291.          case 9:
  292.          case 11:
  293.             ShortComponentRaster var21 = (ShortComponentRaster)var1;
  294.             short[] var28;
  295.             if (null != (var28 = var21.getDataStorage())) {
  296.                var0.setShortDataArray(var28);
  297.                var10 = var21.getScanlineStride();
  298.                var11 = var21.getPixelStride();
  299.                var12 = 1;
  300.                var13 = 2;
  301.                var14 = var21.getDataOffset(0);
  302.                var15 = var14 % var10 / var11;
  303.                var16 = (var14 - var15) / var10;
  304.                var4 = true;
  305.             }
  306.             break;
  307.          case -17:
  308.          case -16:
  309.          case -12:
  310.          case 5:
  311.          case 6:
  312.          case 7:
  313.          case 10:
  314.          case 13:
  315.             ByteComponentRaster var20 = (ByteComponentRaster)var1;
  316.             byte[] var26;
  317.             if (null != (var26 = var20.getDataStorage())) {
  318.                var0.setByteDataArray(var26);
  319.                var10 = var20.getScanlineStride();
  320.                var11 = var20.getPixelStride();
  321.                var12 = 1;
  322.                var13 = 1;
  323.                var14 = var20.getDataOffset(0);
  324.                var15 = var14 % var10 / var11;
  325.                var16 = (var14 - var15) / var10;
  326.                var4 = true;
  327.             }
  328.             break;
  329.          case -15:
  330.          case -14:
  331.          case 1:
  332.          case 2:
  333.          case 3:
  334.          case 4:
  335.             IntegerComponentRaster var19 = (IntegerComponentRaster)var1;
  336.             int[] var27;
  337.             if (null != (var27 = var19.getDataStorage())) {
  338.                var0.setIntDataArray(var27);
  339.                var10 = var19.getScanlineStride();
  340.                var11 = var19.getPixelStride();
  341.                var12 = 1;
  342.                var13 = 4;
  343.                var14 = var19.getDataOffset(0);
  344.                var15 = var14 % var10 / var11;
  345.                var16 = (var14 - var15) / var10;
  346.                var4 = true;
  347.             }
  348.             break;
  349.          case -13:
  350.          case -11:
  351.          case -10:
  352.          case -9:
  353.          case -8:
  354.          case -7:
  355.          case -6:
  356.          case -5:
  357.          case -4:
  358.          case -3:
  359.          case -2:
  360.          case -1:
  361.          default:
  362.             throw new InternalError("Unknown GraphicsPrimitive type");
  363.          case 0:
  364.             var12 = 1;
  365.             var4 = true;
  366.             break;
  367.          case 12:
  368.             BytePackedRaster var22 = (BytePackedRaster)var1;
  369.             byte[] var25;
  370.             if (null != (var25 = var22.getDataStorage())) {
  371.                var0.setByteDataArray(var25);
  372.                var10 = var22.getScanlineStride();
  373.                var11 = 1;
  374.                var12 = 8 / var22.getNumberOfBits();
  375.                var13 = 1;
  376.                var14 = var22.getDataBitOffset();
  377.                var15 = var14 % (var10 << 3) / var22.getNumberOfBits();
  378.                var16 = var14 / (var10 << 3);
  379.                var4 = true;
  380.             }
  381.       }
  382.  
  383.       if (var4) {
  384.          var0.setType(var3);
  385.          if (null != var2 && var2 instanceof IndexColorModel) {
  386.             int var23 = ((IndexColorModel)var2).getMapSize();
  387.             int[] var24 = new int[var23];
  388.             ((IndexColorModel)var2).getRGBs(var24);
  389.             var0.setLutData(0);
  390.             var0.setIntLutDataArray(var24);
  391.             var0.setLutDataLength(var23);
  392.          }
  393.  
  394.          var0.setTransparency(var2.getTransparency());
  395.          var0.setDataPointer(0);
  396.          var0.setPixelStride(var11);
  397.          var0.setScanlineStride(var10);
  398.          var0.setNumChannels(var6);
  399.          var0.setPixelsPerDataUnit(var12);
  400.          var0.setBytePerChannel(var13);
  401.          var0.setColorModel(var2);
  402.          var0.setRaster(var1);
  403.          var0.setXSize(var17);
  404.          var0.setYSize(var18);
  405.          var0.setOffsetX(var15);
  406.          var0.setOffsetY(var16);
  407.       }
  408.  
  409.       return var4;
  410.    }
  411.  
  412.    public static boolean prepareRasterBounds(ImageData var0) {
  413.       return prepareRasterBounds(var0, 0, 0, var0.getXSize(), var0.getYSize());
  414.    }
  415.  
  416.    public static boolean prepareRasterBounds(ImageData var0, int var1, int var2, int var3, int var4) {
  417.       int var5 = var0.getXViewArea();
  418.       int var6 = var0.getYViewArea();
  419.       int var7 = var0.getDXViewArea();
  420.       int var8 = var0.getDYViewArea();
  421.       int var9 = var5 + var7;
  422.       int var10 = var6 + var8;
  423.       if (var5 < var1) {
  424.          var5 = var1;
  425.       }
  426.  
  427.       if (var6 < var2) {
  428.          var6 = var2;
  429.       }
  430.  
  431.       if (var9 > var1 + var3) {
  432.          var9 = var1 + var3;
  433.       }
  434.  
  435.       if (var10 > var2 + var4) {
  436.          var10 = var2 + var4;
  437.       }
  438.  
  439.       var7 = var9 - var5;
  440.       var8 = var10 - var6;
  441.       var5 += var0.getOffsetX();
  442.       var6 += var0.getOffsetY();
  443.       if (var8 > 0 && var7 > 0) {
  444.          var0.setDeviceArea(var5, var6, var7, var8);
  445.          var0.setOutputArea(var5, var6, var7, var8);
  446.          return true;
  447.       } else {
  448.          return false;
  449.       }
  450.    }
  451.  
  452.    private ImageData lockRaster(Raster var1, ColorModel var2, int var3, int var4, int var5, int var6, int var7) {
  453.       if (null != var2 && null != var1) {
  454.          ImageData var8 = this.cachedID;
  455.          if (null == var8) {
  456.             var8 = new ImageData();
  457.             if (!prepareImageData(var8, var1, var2, this.type)) {
  458.                return null;
  459.             }
  460.  
  461.             this.type = var8.getType();
  462.          }
  463.  
  464.          var8.setViewArea(var3, var4, var5, var6);
  465.          var8.setLockMethod(var7);
  466.          if (prepareRasterBounds(var8)) {
  467.             this.cachedID = var8;
  468.             return var8;
  469.          } else {
  470.             return null;
  471.          }
  472.       } else {
  473.          return null;
  474.       }
  475.    }
  476.  
  477.    public String toString() {
  478.       String var1 = "LockableRaster[";
  479.       switch (this.parentType) {
  480.          case 1:
  481.             var1 = var1 + "Raster[";
  482.             var1 = var1 + this.parentRaster + "[";
  483.             break;
  484.          case 2:
  485.             var1 = var1 + "2D[";
  486.             var1 = var1 + this.parent2D + "[";
  487.             var1 = var1 + this.field_0 + "[";
  488.             var1 = var1 + GraphicsPrimitive.typeStr(this.type);
  489.             break;
  490.          case 3:
  491.             var1 = var1 + "Image[";
  492.             var1 = var1 + this.parentImage + "[";
  493.       }
  494.  
  495.       if (this.field_0 != null) {
  496.          var1 = var1 + this.field_0;
  497.       }
  498.  
  499.       return var1;
  500.    }
  501. }
  502.