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 / TexturePaintContext.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.8 KB  |  264 lines

  1. package java.awt;
  2.  
  3. import java.awt.geom.AffineTransform;
  4. import java.awt.geom.NoninvertibleTransformException;
  5. import java.awt.image.BufferedImage;
  6. import java.awt.image.ColorModel;
  7. import java.awt.image.DirectColorModel;
  8. import java.awt.image.IndexColorModel;
  9. import java.awt.image.Raster;
  10. import java.awt.image.WritableRaster;
  11. import java.lang.ref.WeakReference;
  12. import sun.awt.image.ByteInterleavedRaster;
  13. import sun.awt.image.IntegerInterleavedRaster;
  14.  
  15. abstract class TexturePaintContext implements PaintContext {
  16.    public static ColorModel xrgbmodel = new DirectColorModel(24, 16711680, 65280, 255);
  17.    public static ColorModel argbmodel = ColorModel.getRGBdefault();
  18.    ColorModel colorModel;
  19.    int bWidth;
  20.    int bHeight;
  21.    int maxWidth;
  22.    WritableRaster outRas;
  23.    double xOrg;
  24.    double yOrg;
  25.    double incXAcross;
  26.    double incYAcross;
  27.    double incXDown;
  28.    double incYDown;
  29.    int colincx;
  30.    int colincy;
  31.    int colincxerr;
  32.    int colincyerr;
  33.    int rowincx;
  34.    int rowincy;
  35.    int rowincxerr;
  36.    int rowincyerr;
  37.    private static WeakReference xrgbRasRef;
  38.    private static WeakReference argbRasRef;
  39.    private static WeakReference byteRasRef;
  40.  
  41.    public static PaintContext getContext(BufferedImage var0, AffineTransform var1, RenderingHints var2, Rectangle var3) {
  42.       WritableRaster var4 = var0.getRaster();
  43.       ColorModel var5 = var0.getColorModel();
  44.       int var6 = var3.width;
  45.       Object var7 = var2.get(RenderingHints.KEY_INTERPOLATION);
  46.       boolean var8 = var7 == null ? var2.get(RenderingHints.KEY_RENDERING) == RenderingHints.VALUE_RENDER_QUALITY : var7 != RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR;
  47.       if (var4 instanceof IntegerInterleavedRaster && (!var8 || isFilterableDCM(var5))) {
  48.          IntegerInterleavedRaster var10 = (IntegerInterleavedRaster)var4;
  49.          if (var10.getNumDataElements() == 1 && var10.getPixelStride() == 1) {
  50.             return new Int(var10, var5, var1, var6, var8);
  51.          }
  52.       } else if (var4 instanceof ByteInterleavedRaster) {
  53.          ByteInterleavedRaster var9 = (ByteInterleavedRaster)var4;
  54.          if (var9.getNumDataElements() == 1 && var9.getPixelStride() == 1) {
  55.             if (!var8) {
  56.                return new Byte(var9, var5, var1, var6);
  57.             }
  58.  
  59.             if (isFilterableICM(var5)) {
  60.                return new ByteFilter(var9, var5, var1, var6);
  61.             }
  62.          }
  63.       }
  64.  
  65.       return new Any(var4, var5, var1, var6, var8);
  66.    }
  67.  
  68.    public static boolean isFilterableICM(ColorModel var0) {
  69.       if (var0 instanceof IndexColorModel) {
  70.          IndexColorModel var1 = (IndexColorModel)var0;
  71.          if (var1.getMapSize() <= 256) {
  72.             return true;
  73.          }
  74.       }
  75.  
  76.       return false;
  77.    }
  78.  
  79.    public static boolean isFilterableDCM(ColorModel var0) {
  80.       if (!(var0 instanceof DirectColorModel)) {
  81.          return false;
  82.       } else {
  83.          DirectColorModel var1 = (DirectColorModel)var0;
  84.          return isMaskOK(var1.getAlphaMask(), true) && isMaskOK(var1.getRedMask(), false) && isMaskOK(var1.getGreenMask(), false) && isMaskOK(var1.getBlueMask(), false);
  85.       }
  86.    }
  87.  
  88.    public static boolean isMaskOK(int var0, boolean var1) {
  89.       if (var1 && var0 == 0) {
  90.          return true;
  91.       } else {
  92.          return var0 == 255 || var0 == 65280 || var0 == 16711680 || var0 == -16777216;
  93.       }
  94.    }
  95.  
  96.    public static ColorModel getInternedColorModel(ColorModel var0) {
  97.       if (xrgbmodel != var0 && !xrgbmodel.equals(var0)) {
  98.          return argbmodel != var0 && !argbmodel.equals(var0) ? var0 : argbmodel;
  99.       } else {
  100.          return xrgbmodel;
  101.       }
  102.    }
  103.  
  104.    TexturePaintContext(ColorModel var1, AffineTransform var2, int var3, int var4, int var5) {
  105.       this.colorModel = getInternedColorModel(var1);
  106.       this.bWidth = var3;
  107.       this.bHeight = var4;
  108.       this.maxWidth = var5;
  109.  
  110.       try {
  111.          var2 = var2.createInverse();
  112.       } catch (NoninvertibleTransformException var7) {
  113.          var2.setToScale((double)0.0F, (double)0.0F);
  114.       }
  115.  
  116.       this.incXAcross = mod(var2.getScaleX(), (double)var3);
  117.       this.incYAcross = mod(var2.getShearY(), (double)var4);
  118.       this.incXDown = mod(var2.getShearX(), (double)var3);
  119.       this.incYDown = mod(var2.getScaleY(), (double)var4);
  120.       this.xOrg = var2.getTranslateX();
  121.       this.yOrg = var2.getTranslateY();
  122.       this.colincx = (int)this.incXAcross;
  123.       this.colincy = (int)this.incYAcross;
  124.       this.colincxerr = fractAsInt(this.incXAcross);
  125.       this.colincyerr = fractAsInt(this.incYAcross);
  126.       this.rowincx = (int)this.incXDown;
  127.       this.rowincy = (int)this.incYDown;
  128.       this.rowincxerr = fractAsInt(this.incXDown);
  129.       this.rowincyerr = fractAsInt(this.incYDown);
  130.    }
  131.  
  132.    static int fractAsInt(double var0) {
  133.       return (int)(var0 % (double)1.0F * (double)Integer.MAX_VALUE);
  134.    }
  135.  
  136.    static double mod(double var0, double var2) {
  137.       var0 %= var2;
  138.       if (var0 < (double)0.0F) {
  139.          var0 += var2;
  140.          if (var0 >= var2) {
  141.             var0 = (double)0.0F;
  142.          }
  143.       }
  144.  
  145.       return var0;
  146.    }
  147.  
  148.    public void dispose() {
  149.       dropRaster(this.colorModel, this.outRas);
  150.    }
  151.  
  152.    public ColorModel getColorModel() {
  153.       return this.colorModel;
  154.    }
  155.  
  156.    public Raster getRaster(int var1, int var2, int var3, int var4) {
  157.       if (this.outRas == null || this.outRas.getWidth() < var3 || this.outRas.getHeight() < var4) {
  158.          this.outRas = this.makeRaster(var4 == 1 ? Math.max(var3, this.maxWidth) : var3, var4);
  159.       }
  160.  
  161.       double var5 = mod(this.xOrg + (double)var1 * this.incXAcross + (double)var2 * this.incXDown, (double)this.bWidth);
  162.       double var7 = mod(this.yOrg + (double)var1 * this.incYAcross + (double)var2 * this.incYDown, (double)this.bHeight);
  163.       this.setRaster((int)var5, (int)var7, fractAsInt(var5), fractAsInt(var7), var3, var4, this.bWidth, this.bHeight, this.colincx, this.colincxerr, this.colincy, this.colincyerr, this.rowincx, this.rowincxerr, this.rowincy, this.rowincyerr);
  164.       return this.outRas;
  165.    }
  166.  
  167.    static synchronized WritableRaster makeRaster(ColorModel var0, Raster var1, int var2, int var3) {
  168.       if (xrgbmodel == var0) {
  169.          if (xrgbRasRef != null) {
  170.             WritableRaster var4 = (WritableRaster)xrgbRasRef.get();
  171.             if (var4 != null && var4.getWidth() >= var2 && var4.getHeight() >= var3) {
  172.                xrgbRasRef = null;
  173.                return var4;
  174.             }
  175.          }
  176.  
  177.          if (var2 <= 32 && var3 <= 32) {
  178.             var3 = 32;
  179.             var2 = 32;
  180.          }
  181.       } else if (argbmodel == var0) {
  182.          if (argbRasRef != null) {
  183.             WritableRaster var5 = (WritableRaster)argbRasRef.get();
  184.             if (var5 != null && var5.getWidth() >= var2 && var5.getHeight() >= var3) {
  185.                argbRasRef = null;
  186.                return var5;
  187.             }
  188.          }
  189.  
  190.          if (var2 <= 32 && var3 <= 32) {
  191.             var3 = 32;
  192.             var2 = 32;
  193.          }
  194.       }
  195.  
  196.       return var1 != null ? var1.createCompatibleWritableRaster(var2, var3) : var0.createCompatibleWritableRaster(var2, var3);
  197.    }
  198.  
  199.    static synchronized void dropRaster(ColorModel var0, Raster var1) {
  200.       if (var1 != null) {
  201.          if (xrgbmodel == var0) {
  202.             xrgbRasRef = new WeakReference(var1);
  203.          } else if (argbmodel == var0) {
  204.             argbRasRef = new WeakReference(var1);
  205.          }
  206.  
  207.       }
  208.    }
  209.  
  210.    static synchronized WritableRaster makeByteRaster(Raster var0, int var1, int var2) {
  211.       if (byteRasRef != null) {
  212.          WritableRaster var3 = (WritableRaster)byteRasRef.get();
  213.          if (var3 != null && var3.getWidth() >= var1 && var3.getHeight() >= var2) {
  214.             byteRasRef = null;
  215.             return var3;
  216.          }
  217.       }
  218.  
  219.       if (var1 <= 32 && var2 <= 32) {
  220.          var2 = 32;
  221.          var1 = 32;
  222.       }
  223.  
  224.       return var0.createCompatibleWritableRaster(var1, var2);
  225.    }
  226.  
  227.    static synchronized void dropByteRaster(Raster var0) {
  228.       if (var0 != null) {
  229.          byteRasRef = new WeakReference(var0);
  230.       }
  231.    }
  232.  
  233.    public abstract WritableRaster makeRaster(int var1, int var2);
  234.  
  235.    public abstract void setRaster(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15, int var16);
  236.  
  237.    public static int blend(int[] var0, int var1, int var2) {
  238.       var1 >>>= 19;
  239.       var2 >>>= 19;
  240.       int var6 = 0;
  241.       int var5 = 0;
  242.       int var4 = 0;
  243.       int var3 = 0;
  244.  
  245.       for(int var7 = 0; var7 < 4; ++var7) {
  246.          int var8 = var0[var7];
  247.          var1 = 4096 - var1;
  248.          if ((var7 & 1) == 0) {
  249.             var2 = 4096 - var2;
  250.          }
  251.  
  252.          int var9 = var1 * var2;
  253.          if (var9 != 0) {
  254.             var3 += (var8 >>> 24) * var9;
  255.             var4 += (var8 >>> 16 & 255) * var9;
  256.             var5 += (var8 >>> 8 & 255) * var9;
  257.             var6 += (var8 & 255) * var9;
  258.          }
  259.       }
  260.  
  261.       return var3 + 8388608 >>> 24 << 24 | var4 + 8388608 >>> 24 << 16 | var5 + 8388608 >>> 24 << 8 | var6 + 8388608 >>> 24;
  262.    }
  263. }
  264.