home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / awt / GradientPaintContext.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  3.7 KB  |  245 lines

  1. package java.awt;
  2.  
  3. import java.awt.geom.AffineTransform;
  4. import java.awt.geom.NoninvertibleTransformException;
  5. import java.awt.geom.Point2D;
  6. import java.awt.image.ColorModel;
  7. import java.awt.image.DirectColorModel;
  8. import java.awt.image.Raster;
  9. import java.lang.ref.WeakReference;
  10. import sun.awt.image.IntegerComponentRaster;
  11.  
  12. class GradientPaintContext implements PaintContext {
  13.    static ColorModel xrgbmodel = new DirectColorModel(24, 16711680, 65280, 255);
  14.    static ColorModel xbgrmodel = new DirectColorModel(24, 255, 65280, 16711680);
  15.    static ColorModel cachedModel;
  16.    static WeakReference cached;
  17.    // $FF: renamed from: x1 double
  18.    double field_0;
  19.    // $FF: renamed from: y1 double
  20.    double field_1;
  21.    // $FF: renamed from: dx double
  22.    double field_2;
  23.    // $FF: renamed from: dy double
  24.    double field_3;
  25.    boolean cyclic;
  26.    int[] interp;
  27.    Raster saved;
  28.    ColorModel model;
  29.  
  30.    static synchronized Raster getCachedRaster(ColorModel var0, int var1, int var2) {
  31.       if (var0 == cachedModel && cached != null) {
  32.          Raster var3 = (Raster)cached.get();
  33.          if (var3 != null && var3.getWidth() >= var1 && var3.getHeight() >= var2) {
  34.             cached = null;
  35.             return var3;
  36.          }
  37.       }
  38.  
  39.       return var0.createCompatibleWritableRaster(var1, var2);
  40.    }
  41.  
  42.    static synchronized void putCachedRaster(ColorModel var0, Raster var1) {
  43.       if (cached != null) {
  44.          Raster var2 = (Raster)cached.get();
  45.          if (var2 != null) {
  46.             int var3 = var2.getWidth();
  47.             int var4 = var2.getHeight();
  48.             int var5 = var1.getWidth();
  49.             int var6 = var1.getHeight();
  50.             if (var3 >= var5 && var4 >= var6) {
  51.                return;
  52.             }
  53.  
  54.             if (var3 * var4 >= var5 * var6) {
  55.                return;
  56.             }
  57.          }
  58.       }
  59.  
  60.       cachedModel = var0;
  61.       cached = new WeakReference(var1);
  62.    }
  63.  
  64.    public GradientPaintContext(ColorModel var1, Point2D var2, Point2D var3, AffineTransform var4, Color var5, Color var6, boolean var7) {
  65.       Point2D.Double var8 = new Point2D.Double((double)1.0F, (double)0.0F);
  66.       Point2D.Double var9 = new Point2D.Double((double)0.0F, (double)1.0F);
  67.  
  68.       try {
  69.          AffineTransform var10 = var4.createInverse();
  70.          var10.deltaTransform(var8, var8);
  71.          var10.deltaTransform(var9, var9);
  72.       } catch (NoninvertibleTransformException var30) {
  73.          ((Point2D)var8).setLocation((double)0.0F, (double)0.0F);
  74.          ((Point2D)var9).setLocation((double)0.0F, (double)0.0F);
  75.       }
  76.  
  77.       double var31 = var3.getX() - var2.getX();
  78.       double var12 = var3.getY() - var2.getY();
  79.       double var14 = var31 * var31 + var12 * var12;
  80.       if (var14 <= Double.MIN_VALUE) {
  81.          this.field_2 = (double)0.0F;
  82.          this.field_3 = (double)0.0F;
  83.       } else {
  84.          this.field_2 = (((Point2D)var8).getX() * var31 + ((Point2D)var8).getY() * var12) / var14;
  85.          this.field_3 = (((Point2D)var9).getX() * var31 + ((Point2D)var9).getY() * var12) / var14;
  86.          if (var7) {
  87.             this.field_2 %= (double)1.0F;
  88.             this.field_3 %= (double)1.0F;
  89.          } else if (this.field_2 < (double)0.0F) {
  90.             var2 = var3;
  91.             Color var17 = var5;
  92.             var5 = var6;
  93.             var6 = var17;
  94.             this.field_2 = -this.field_2;
  95.             this.field_3 = -this.field_3;
  96.          }
  97.       }
  98.  
  99.       Point2D var16 = var4.transform(var2, (Point2D)null);
  100.       this.field_0 = var16.getX();
  101.       this.field_1 = var16.getY();
  102.       this.cyclic = var7;
  103.       int var32 = var5.getRGB();
  104.       int var18 = var6.getRGB();
  105.       int var19 = var32 >> 24 & 255;
  106.       int var20 = var32 >> 16 & 255;
  107.       int var21 = var32 >> 8 & 255;
  108.       int var22 = var32 & 255;
  109.       int var23 = (var18 >> 24 & 255) - var19;
  110.       int var24 = (var18 >> 16 & 255) - var20;
  111.       int var25 = (var18 >> 8 & 255) - var21;
  112.       int var26 = (var18 & 255) - var22;
  113.       if (var19 == 255 && var23 == 0) {
  114.          this.model = xrgbmodel;
  115.          if (var1 instanceof DirectColorModel) {
  116.             DirectColorModel var27 = (DirectColorModel)var1;
  117.             int var28 = var27.getAlphaMask();
  118.             if ((var28 == 0 || var28 == 255) && var27.getRedMask() == 255 && var27.getGreenMask() == 65280 && var27.getBlueMask() == 16711680) {
  119.                this.model = xbgrmodel;
  120.                var28 = var20;
  121.                var20 = var22;
  122.                var22 = var28;
  123.                var28 = var24;
  124.                var24 = var26;
  125.                var26 = var28;
  126.             }
  127.          }
  128.       } else {
  129.          this.model = ColorModel.getRGBdefault();
  130.       }
  131.  
  132.       this.interp = new int[var7 ? 513 : 257];
  133.  
  134.       for(int var33 = 0; var33 <= 256; ++var33) {
  135.          float var36 = (float)var33 / 256.0F;
  136.          int var29 = (int)((float)var19 + (float)var23 * var36) << 24 | (int)((float)var20 + (float)var24 * var36) << 16 | (int)((float)var21 + (float)var25 * var36) << 8 | (int)((float)var22 + (float)var26 * var36);
  137.          this.interp[var33] = var29;
  138.          if (var7) {
  139.             this.interp[512 - var33] = var29;
  140.          }
  141.       }
  142.  
  143.    }
  144.  
  145.    public void dispose() {
  146.       if (this.saved != null) {
  147.          putCachedRaster(this.model, this.saved);
  148.          this.saved = null;
  149.       }
  150.  
  151.    }
  152.  
  153.    public ColorModel getColorModel() {
  154.       return this.model;
  155.    }
  156.  
  157.    public Raster getRaster(int var1, int var2, int var3, int var4) {
  158.       double var5 = ((double)var1 - this.field_0) * this.field_2 + ((double)var2 - this.field_1) * this.field_3;
  159.       Raster var7 = this.saved;
  160.       if (var7 == null || var7.getWidth() < var3 || var7.getHeight() < var4) {
  161.          var7 = getCachedRaster(this.model, var3, var4);
  162.          this.saved = var7;
  163.       }
  164.  
  165.       IntegerComponentRaster var8 = (IntegerComponentRaster)var7;
  166.       int var9 = var8.getDataOffset(0);
  167.       int var10 = var8.getScanlineStride() - var3;
  168.       int[] var11 = var8.getDataStorage();
  169.       if (this.cyclic) {
  170.          this.cycleFillRaster(var11, var9, var10, var3, var4, var5, this.field_2, this.field_3);
  171.       } else {
  172.          this.clipFillRaster(var11, var9, var10, var3, var4, var5, this.field_2, this.field_3);
  173.       }
  174.  
  175.       return var7;
  176.    }
  177.  
  178.    void cycleFillRaster(int[] var1, int var2, int var3, int var4, int var5, double var6, double var8, double var10) {
  179.       var6 %= (double)2.0F;
  180.       int var12 = (int)(var6 * (double)1.0737418E9F) << 1;
  181.       int var13 = (int)(-var8 * (double)Integer.MIN_VALUE);
  182.       int var14 = (int)(-var10 * (double)Integer.MIN_VALUE);
  183.  
  184.       while(true) {
  185.          --var5;
  186.          if (var5 < 0) {
  187.             return;
  188.          }
  189.  
  190.          int var15 = var12;
  191.  
  192.          for(int var16 = var4; var16 > 0; --var16) {
  193.             var1[var2++] = this.interp[var15 >>> 23];
  194.             var15 += var13;
  195.          }
  196.  
  197.          var2 += var3;
  198.          var12 += var14;
  199.       }
  200.    }
  201.  
  202.    void clipFillRaster(int[] var1, int var2, int var3, int var4, int var5, double var6, double var8, double var10) {
  203.       while(true) {
  204.          --var5;
  205.          if (var5 < 0) {
  206.             return;
  207.          }
  208.  
  209.          double var12 = var6;
  210.          int var14 = var4;
  211.          if (var6 <= (double)0.0F) {
  212.             int var15 = this.interp[0];
  213.  
  214.             do {
  215.                var1[var2++] = var15;
  216.                var12 += var8;
  217.                --var14;
  218.             } while(var14 > 0 && var12 <= (double)0.0F);
  219.          }
  220.  
  221.          while(var12 < (double)1.0F) {
  222.             --var14;
  223.             if (var14 < 0) {
  224.                break;
  225.             }
  226.  
  227.             var1[var2++] = this.interp[(int)(var12 * (double)256.0F)];
  228.             var12 += var8;
  229.          }
  230.  
  231.          if (var14 > 0) {
  232.             int var16 = this.interp[256];
  233.  
  234.             do {
  235.                var1[var2++] = var16;
  236.                --var14;
  237.             } while(var14 > 0);
  238.          }
  239.  
  240.          var2 += var3;
  241.          var6 += var10;
  242.       }
  243.    }
  244. }
  245.