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