home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161b.iso / handson / archive / Issue153 / java / Ripple.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-04  |  3.7 KB  |  170 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Graphics;
  5. import java.awt.Image;
  6.  
  7. public class Ripple extends Applet implements Runnable {
  8.    static boolean dispCopy;
  9.    Image origImg;
  10.    Image backImg;
  11.    Image finImg;
  12.    // $FF: renamed from: w1 int
  13.    int field_0;
  14.    // $FF: renamed from: h1 int
  15.    int field_1;
  16.    Graphics backG;
  17.    Graphics finG;
  18.    int phase;
  19.    Thread thrRipple;
  20.    int frameNo;
  21.    int frames;
  22.    int period;
  23.    boolean stopIt = true;
  24.    boolean borderGap = true;
  25.    boolean imLoaded = false;
  26.  
  27.    public void init() {
  28.       if (!dispCopy) {
  29.          System.out.println("Ripple v 1.0 for Java");
  30.          dispCopy = true;
  31.       }
  32.  
  33.       ((Component)this).setBackground(Color.white);
  34.       this.origImg = ((Applet)this).getImage(((Applet)this).getDocumentBase(), ((Applet)this).getParameter("image"));
  35.       this.borderGap = "on".equals(((Applet)this).getParameter("bordergap"));
  36.       this.field_0 = this.origImg.getWidth(this);
  37.       this.field_1 = this.origImg.getHeight(this);
  38.       if (this.field_1 > 0 && this.field_0 > 0) {
  39.          this.stopIt = false;
  40.       }
  41.  
  42.       String var1 = ((Applet)this).getParameter("period");
  43.       if (var1 != null) {
  44.          this.period = Integer.parseInt(var1);
  45.       } else {
  46.          this.period = 24;
  47.       }
  48.  
  49.       var1 = ((Applet)this).getParameter("frames");
  50.       if (var1 != null) {
  51.          this.frames = Integer.parseInt(var1);
  52.       } else {
  53.          this.frames = 12;
  54.       }
  55.    }
  56.  
  57.    public void start() {
  58.       if (this.thrRipple == null) {
  59.          this.thrRipple = new Thread(this);
  60.          this.thrRipple.start();
  61.       }
  62.  
  63.    }
  64.  
  65.    public void stop() {
  66.       if (this.thrRipple != null) {
  67.          this.thrRipple.stop();
  68.          this.thrRipple = null;
  69.       }
  70.  
  71.    }
  72.  
  73.    public boolean imageUpdate(Image var1, int var2, int var3, int var4, int var5, int var6) {
  74.       boolean var7 = true;
  75.       if ((var2 & 2) > 0) {
  76.          this.field_1 = var6;
  77.       }
  78.  
  79.       if ((var2 & 1) > 0) {
  80.          this.field_0 = var5;
  81.       }
  82.  
  83.       if ((var2 & 32) > 0) {
  84.          this.imLoaded = true;
  85.       }
  86.  
  87.       if (this.imLoaded && this.field_0 > 0 && this.field_1 > 0) {
  88.          this.stopIt = false;
  89.          var7 = false;
  90.       }
  91.  
  92.       return var7;
  93.    }
  94.  
  95.    public void createIt() {
  96.       this.backImg = ((Component)this).createImage(this.field_0, this.field_1);
  97.       this.backG = this.backImg.getGraphics();
  98.       this.finImg = ((Component)this).createImage(this.field_0, this.frames * this.field_1);
  99.       this.finG = this.finImg.getGraphics();
  100.       this.backG.setColor(Color.white);
  101.  
  102.       for(this.phase = 0; this.phase < this.frames; ++this.phase) {
  103.          this.backG.drawImage(this.origImg, 0, 0, this);
  104.          this.transformImage(this.backG);
  105.          this.finG.drawImage(this.backImg, 0, this.phase * this.field_1, this);
  106.       }
  107.  
  108.    }
  109.  
  110.    public void transformImage(Graphics var1) {
  111.       this.translateX(var1);
  112.       this.translateY(var1);
  113.    }
  114.  
  115.    public void translateX(Graphics var1) {
  116.       for(int var2 = 0; var2 < this.field_1; ++var2) {
  117.          double var3 = (double)(this.period >> 1) * Math.sin((double)var2 / (double)this.period + (Math.PI * 2D) * (double)this.phase / (double)this.frames);
  118.          var1.copyArea(0, var2, this.field_0, 1, (int)var3, 0);
  119.          if (this.borderGap) {
  120.             var1.drawLine((int)var3, var2, 0, var2);
  121.             var1.drawLine((int)var3 + this.field_0, var2, this.field_0, var2);
  122.          }
  123.       }
  124.  
  125.    }
  126.  
  127.    public void translateY(Graphics var1) {
  128.       for(int var2 = 0; var2 < this.field_0; ++var2) {
  129.          double var3 = (double)(this.period >> 1) * Math.sin((double)var2 / (double)this.period + (Math.PI * 2D) * (double)this.phase / (double)this.frames);
  130.          var1.copyArea(var2, 0, 1, this.field_1, 0, (int)var3);
  131.          if (this.borderGap) {
  132.             var1.drawLine(var2, (int)var3, var2, 0);
  133.             var1.drawLine(var2, (int)var3 + this.field_1, var2, this.field_1);
  134.          }
  135.       }
  136.  
  137.    }
  138.  
  139.    public void run() {
  140.       while(this.thrRipple != null) {
  141.          try {
  142.             Thread.sleep(50L);
  143.          } catch (InterruptedException var1) {
  144.          }
  145.  
  146.          this.frameNo = (this.frameNo + 1) % this.frames;
  147.          ((Component)this).repaint();
  148.       }
  149.  
  150.    }
  151.  
  152.    public void update(Graphics var1) {
  153.       this.paint(var1);
  154.    }
  155.  
  156.    public void paint(Graphics var1) {
  157.       if (!this.stopIt) {
  158.          this.stopIt = true;
  159.          this.createIt();
  160.       }
  161.  
  162.       if (this.finImg != null) {
  163.          var1.drawImage(this.finImg, 0, -this.frameNo * this.field_1, this);
  164.          var1.drawImage(this.finImg, 0, (this.frames - this.frameNo) * this.field_1, this);
  165.       } else {
  166.          var1.drawImage(this.origImg, 0, 0, this);
  167.       }
  168.    }
  169. }
  170.