home *** CD-ROM | disk | FTP | other *** search
/ Popular Software (Premium Edition) / mycd.iso / INTERNET / NETSCAP4.06 / CP32E406.EXE / nav40.z / java40.jar / sun / awt / image / ImageRepresentation.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-08-13  |  6.9 KB  |  460 lines

  1. package sun.awt.image;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Rectangle;
  6. import java.awt.image.ColorModel;
  7. import java.awt.image.ImageConsumer;
  8. import java.awt.image.ImageObserver;
  9. import java.util.Hashtable;
  10. import sun.awt.AWTFinalizeable;
  11. import sun.awt.AWTFinalizer;
  12.  
  13. public class ImageRepresentation extends ImageWatched implements ImageConsumer, AWTFinalizeable {
  14.    int pData;
  15.    InputStreamImageSource src;
  16.    Image image;
  17.    int tag;
  18.    int srcW;
  19.    int srcH;
  20.    public int width;
  21.    public int height;
  22.    int hints;
  23.    int availinfo;
  24.    boolean offscreen;
  25.    Rectangle newbits;
  26.    private boolean consuming = false;
  27.    private int numWaiters;
  28.    AWTFinalizeable finalnext;
  29.  
  30.    public ImageRepresentation(Image var1, int var2, int var3, int var4) {
  31.       this.image = var1;
  32.       this.tag = var4;
  33.       if (var2 != 0 && var3 != 0) {
  34.          if (var2 > 0) {
  35.             this.width = var2;
  36.             this.availinfo |= 1;
  37.          }
  38.  
  39.          if (var3 > 0) {
  40.             this.height = var3;
  41.             this.availinfo |= 2;
  42.          }
  43.  
  44.          if (this.image.getSource() instanceof InputStreamImageSource) {
  45.             this.src = (InputStreamImageSource)this.image.getSource();
  46.          }
  47.  
  48.       } else {
  49.          throw new IllegalArgumentException();
  50.       }
  51.    }
  52.  
  53.    protected native void offscreenInit(Color var1);
  54.  
  55.    public synchronized void reconstruct(int var1) {
  56.       if (this.src != null) {
  57.          this.src.checkSecurity((Object)null, false);
  58.       }
  59.  
  60.       int var2 = var1 & ~this.availinfo;
  61.       if ((this.availinfo & 64) == 0 && var2 != 0) {
  62.          ++this.numWaiters;
  63.  
  64.          try {
  65.             this.startProduction();
  66.  
  67.             for(int var9 = var1 & ~this.availinfo; (this.availinfo & 64) == 0 && var9 != 0; var9 = var1 & ~this.availinfo) {
  68.                try {
  69.                   this.wait();
  70.                } catch (InterruptedException var7) {
  71.                   SecurityManager.enablePrivilege("UniversalThreadAccess");
  72.                   Thread.currentThread().interrupt();
  73.                   SecurityManager.revertPrivilege();
  74.                   return;
  75.                }
  76.             }
  77.  
  78.          } finally {
  79.             this.decrementWaiters();
  80.          }
  81.       }
  82.    }
  83.  
  84.    public void setDimensions(int var1, int var2) {
  85.       if (this.src != null) {
  86.          this.src.checkSecurity((Object)null, false);
  87.       }
  88.  
  89.       this.image.setDimensions(var1, var2);
  90.       ((ImageWatched)this).newInfo(this.image, 3, 0, 0, var1, var2);
  91.       this.srcW = var1;
  92.       this.srcH = var2;
  93.       if ((this.availinfo & 1) == 0 && (this.availinfo & 2) == 0) {
  94.          this.width = var1;
  95.          this.height = var2;
  96.       } else if ((this.availinfo & 1) == 0) {
  97.          this.width = var1 * this.height / var2;
  98.       } else {
  99.          if ((this.availinfo & 2) != 0) {
  100.             return;
  101.          }
  102.  
  103.          this.height = var2 * this.width / var1;
  104.       }
  105.  
  106.       if (this.srcW > 0 && this.srcH > 0 && this.width > 0 && this.height > 0) {
  107.          this.availinfo |= 3;
  108.       } else {
  109.          this.imageComplete(1);
  110.       }
  111.    }
  112.  
  113.    public void setProperties(Hashtable var1) {
  114.       if (this.src != null) {
  115.          this.src.checkSecurity((Object)null, false);
  116.       }
  117.  
  118.       this.image.setProperties(var1);
  119.       ((ImageWatched)this).newInfo(this.image, 4, 0, 0, 0, 0);
  120.    }
  121.  
  122.    public void setColorModel(ColorModel var1) {
  123.       if (this.src != null) {
  124.          this.src.checkSecurity((Object)null, false);
  125.       }
  126.  
  127.    }
  128.  
  129.    public void setHints(int var1) {
  130.       if (this.src != null) {
  131.          this.src.checkSecurity((Object)null, false);
  132.       }
  133.  
  134.       this.hints = var1;
  135.    }
  136.  
  137.    private native boolean setBytePixels(int var1, int var2, int var3, int var4, ColorModel var5, byte[] var6, int var7, int var8);
  138.  
  139.    public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, byte[] var6, int var7, int var8) {
  140.       if (this.src != null) {
  141.          this.src.checkSecurity((Object)null, false);
  142.       }
  143.  
  144.       boolean var9 = false;
  145.       synchronized(this){}
  146.  
  147.       int var10;
  148.       int var11;
  149.       int var12;
  150.       int var13;
  151.       try {
  152.          if (this.newbits == null) {
  153.             this.newbits = new Rectangle(0, 0, this.width, this.height);
  154.          }
  155.  
  156.          if (this.setBytePixels(var1, var2, var3, var4, var5, var6, var7, var8)) {
  157.             this.availinfo |= 8;
  158.             var9 = true;
  159.          }
  160.  
  161.          var10 = this.newbits.x;
  162.          var11 = this.newbits.y;
  163.          var12 = this.newbits.width;
  164.          var13 = this.newbits.height;
  165.       } catch (Throwable var16) {
  166.          throw var16;
  167.       }
  168.  
  169.       if (var9 && !this.offscreen && (this.availinfo & 16) == 0) {
  170.          ((ImageWatched)this).newInfo(this.image, 8, var10, var11, var12, var13);
  171.       }
  172.  
  173.    }
  174.  
  175.    private native boolean setIntPixels(int var1, int var2, int var3, int var4, ColorModel var5, int[] var6, int var7, int var8);
  176.  
  177.    public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, int[] var6, int var7, int var8) {
  178.       if (this.src != null) {
  179.          this.src.checkSecurity((Object)null, false);
  180.       }
  181.  
  182.       boolean var9 = false;
  183.       synchronized(this){}
  184.  
  185.       int var10;
  186.       int var11;
  187.       int var12;
  188.       int var13;
  189.       try {
  190.          if (this.newbits == null) {
  191.             this.newbits = new Rectangle(0, 0, this.width, this.height);
  192.          }
  193.  
  194.          if (this.setIntPixels(var1, var2, var3, var4, var5, var6, var7, var8)) {
  195.             this.availinfo |= 8;
  196.             var9 = true;
  197.          }
  198.  
  199.          var10 = this.newbits.x;
  200.          var11 = this.newbits.y;
  201.          var12 = this.newbits.width;
  202.          var13 = this.newbits.height;
  203.       } catch (Throwable var16) {
  204.          throw var16;
  205.       }
  206.  
  207.       if (var9 && !this.offscreen && (this.availinfo & 16) == 0) {
  208.          ((ImageWatched)this).newInfo(this.image, 8, var10, var11, var12, var13);
  209.       }
  210.  
  211.    }
  212.  
  213.    private native boolean finish(boolean var1);
  214.  
  215.    public void imageComplete(int var1) {
  216.       if (this.src != null) {
  217.          this.src.checkSecurity((Object)null, false);
  218.       }
  219.  
  220.       boolean var2;
  221.       short var3;
  222.       switch (var1) {
  223.          case 1:
  224.             this.image.addInfo(64);
  225.             var2 = true;
  226.             var3 = 64;
  227.             this.dispose();
  228.             break;
  229.          case 2:
  230.             var2 = false;
  231.             var3 = 16;
  232.             break;
  233.          case 3:
  234.             var2 = true;
  235.             var3 = 32;
  236.             if (this.finish(false)) {
  237.                this.image.getSource().requestTopDownLeftRightResend(this);
  238.                this.finish(true);
  239.             }
  240.             break;
  241.          case 4:
  242.          default:
  243.             var2 = true;
  244.             var3 = 128;
  245.       }
  246.  
  247.       synchronized(this){}
  248.  
  249.       try {
  250.          if (var2) {
  251.             this.image.getSource().removeConsumer(this);
  252.             this.consuming = false;
  253.             this.newbits = null;
  254.          }
  255.  
  256.          this.availinfo |= var3;
  257.          this.notifyAll();
  258.       } catch (Throwable var6) {
  259.          throw var6;
  260.       }
  261.  
  262.       if (!this.offscreen) {
  263.          ((ImageWatched)this).newInfo(this.image, var3, 0, 0, this.width, this.height);
  264.       }
  265.  
  266.       this.image.infoDone(var1);
  267.    }
  268.  
  269.    void startProduction() {
  270.       if (!this.consuming) {
  271.          this.consuming = true;
  272.          this.image.getSource().startProduction(this);
  273.       }
  274.  
  275.    }
  276.  
  277.    private synchronized void checkConsumption() {
  278.       if (super.watchers == null && this.numWaiters == 0 && (this.availinfo & 32) == 0) {
  279.          this.dispose();
  280.       }
  281.  
  282.    }
  283.  
  284.    public synchronized void removeWatcher(ImageObserver var1) {
  285.       super.removeWatcher(var1);
  286.       this.checkConsumption();
  287.    }
  288.  
  289.    private synchronized void decrementWaiters() {
  290.       --this.numWaiters;
  291.       this.checkConsumption();
  292.    }
  293.  
  294.    public boolean prepare(ImageObserver var1) {
  295.       if (this.src != null) {
  296.          this.src.checkSecurity((Object)null, false);
  297.       }
  298.  
  299.       if ((this.availinfo & 64) != 0) {
  300.          if (var1 != null) {
  301.             var1.imageUpdate(this.image, 192, -1, -1, -1, -1);
  302.          }
  303.  
  304.          return false;
  305.       } else {
  306.          boolean var2 = (this.availinfo & 32) != 0;
  307.          if (!var2) {
  308.             ((ImageWatched)this).addWatcher(var1);
  309.             this.startProduction();
  310.             var2 = (this.availinfo & 32) != 0;
  311.          }
  312.  
  313.          return var2;
  314.       }
  315.    }
  316.  
  317.    public int check(ImageObserver var1) {
  318.       if (this.src != null) {
  319.          this.src.checkSecurity((Object)null, false);
  320.       }
  321.  
  322.       if ((this.availinfo & 96) == 0) {
  323.          ((ImageWatched)this).addWatcher(var1);
  324.       }
  325.  
  326.       return this.availinfo;
  327.    }
  328.  
  329.    synchronized native void imageDraw(Graphics var1, int var2, int var3, Color var4);
  330.  
  331.    synchronized native void imageStretch(Graphics var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, Color var10);
  332.  
  333.    public boolean drawImage(Graphics var1, int var2, int var3, Color var4, ImageObserver var5) {
  334.       if (this.src != null) {
  335.          this.src.checkSecurity((Object)null, false);
  336.       }
  337.  
  338.       if ((this.availinfo & 64) != 0) {
  339.          if (var5 != null) {
  340.             var5.imageUpdate(this.image, 192, -1, -1, -1, -1);
  341.          }
  342.  
  343.          return false;
  344.       } else {
  345.          boolean var6 = (this.availinfo & 32) != 0;
  346.          if (!var6) {
  347.             ((ImageWatched)this).addWatcher(var5);
  348.             this.startProduction();
  349.             var6 = (this.availinfo & 32) != 0;
  350.          }
  351.  
  352.          this.imageDraw(var1, var2, var3, var4);
  353.          return var6;
  354.       }
  355.    }
  356.  
  357.    public boolean drawStretchImage(Graphics var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, Color var10, ImageObserver var11) {
  358.       if (this.src != null) {
  359.          this.src.checkSecurity((Object)null, false);
  360.       }
  361.  
  362.       if ((this.availinfo & 64) != 0) {
  363.          if (var11 != null) {
  364.             var11.imageUpdate(this.image, 192, -1, -1, -1, -1);
  365.          }
  366.  
  367.          return false;
  368.       } else {
  369.          boolean var12 = (this.availinfo & 32) != 0;
  370.          if (!var12) {
  371.             ((ImageWatched)this).addWatcher(var11);
  372.             this.startProduction();
  373.             var12 = (this.availinfo & 32) != 0;
  374.          }
  375.  
  376.          this.imageStretch(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10);
  377.          return var12;
  378.       }
  379.    }
  380.  
  381.    public boolean drawScaledImage(Graphics var1, int var2, int var3, int var4, int var5, Color var6, ImageObserver var7) {
  382.       if (this.src != null) {
  383.          this.src.checkSecurity((Object)null, false);
  384.       }
  385.  
  386.       if ((this.availinfo & 64) != 0) {
  387.          if (var7 != null) {
  388.             var7.imageUpdate(this.image, 192, -1, -1, -1, -1);
  389.          }
  390.  
  391.          return false;
  392.       } else {
  393.          boolean var8 = (this.availinfo & 32) != 0;
  394.          if (!var8) {
  395.             ((ImageWatched)this).addWatcher(var7);
  396.             this.startProduction();
  397.             var8 = (this.availinfo & 32) != 0;
  398.          }
  399.  
  400.          if ((~this.availinfo & 3) != 0) {
  401.             return false;
  402.          } else {
  403.             if (var4 < 0) {
  404.                if (var5 < 0) {
  405.                   var4 = this.width;
  406.                   var5 = this.height;
  407.                } else {
  408.                   var4 = var5 * this.width / this.height;
  409.                }
  410.             } else if (var5 < 0) {
  411.                var5 = var4 * this.height / this.width;
  412.             }
  413.  
  414.             if (var4 == this.width && var5 == this.height) {
  415.                this.imageDraw(var1, var2, var3, var6);
  416.             } else {
  417.                this.imageStretch(var1, var2, var3, var2 + var4, var3 + var5, 0, 0, this.width, this.height, var6);
  418.             }
  419.  
  420.             return var8;
  421.          }
  422.       }
  423.    }
  424.  
  425.    private native void disposeImage();
  426.  
  427.    synchronized void abort() {
  428.       this.image.getSource().removeConsumer(this);
  429.       this.consuming = false;
  430.       this.newbits = null;
  431.       this.disposeImage();
  432.       ((ImageWatched)this).newInfo(this.image, 128, -1, -1, -1, -1);
  433.       this.availinfo &= -121;
  434.    }
  435.  
  436.    synchronized void dispose() {
  437.       this.image.getSource().removeConsumer(this);
  438.       this.consuming = false;
  439.       this.newbits = null;
  440.       this.disposeImage();
  441.       this.availinfo &= -57;
  442.    }
  443.  
  444.    public void finalize() {
  445.       AWTFinalizer.addFinalizeable(this);
  446.    }
  447.  
  448.    public void doFinalization() {
  449.       this.disposeImage();
  450.    }
  451.  
  452.    public void setNextFinalizeable(AWTFinalizeable var1) {
  453.       this.finalnext = var1;
  454.    }
  455.  
  456.    public AWTFinalizeable getNextFinalizeable() {
  457.       return this.finalnext;
  458.    }
  459. }
  460.