home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / WDESAMPL.BIN / ImageMap.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-11-19  |  7.3 KB  |  359 lines

  1. import java.applet.Applet;
  2. import java.awt.Component;
  3. import java.awt.Event;
  4. import java.awt.Graphics;
  5. import java.awt.Image;
  6. import java.awt.MediaTracker;
  7. import java.awt.image.CropImageFilter;
  8. import java.awt.image.FilteredImageSource;
  9. import java.awt.image.ImageFilter;
  10. import java.awt.image.ImageProducer;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.util.Vector;
  14.  
  15. public class ImageMap extends Applet implements Runnable {
  16.    Image baseImage;
  17.    ImageMapArea[] areas;
  18.    static final int BRIGHTER = 0;
  19.    static final int DARKER = 1;
  20.    int hlmode;
  21.    int hlpercent = 50;
  22.    MediaTracker tracker;
  23.    Thread aniThread;
  24.    String introTune;
  25.    private boolean fullrepaint = false;
  26.    private static final long UPDATERATE = 100L;
  27.    int pressX;
  28.    int pressY;
  29.  
  30.    Image getHighlight(int var1, int var2, int var3, int var4) {
  31.       return this.getHighlight(var1, var2, var3, var4, this.hlmode, this.hlpercent);
  32.    }
  33.  
  34.    Image getHighlight(int var1, int var2, int var3, int var4, int var5, int var6) {
  35.       return this.getHighlight(var1, var2, var3, var4, new HighlightFilter(var5 == 0, var6));
  36.    }
  37.  
  38.    Image getHighlight(int var1, int var2, int var3, int var4, ImageFilter var5) {
  39.       CropImageFilter var6 = new CropImageFilter(var1, var2, var3, var4);
  40.       FilteredImageSource var7 = new FilteredImageSource(this.baseImage.getSource(), var6);
  41.       return this.makeImage(var7, var5, 0);
  42.    }
  43.  
  44.    Image makeImage(Image var1, ImageFilter var2) {
  45.       return this.makeImage(var1.getSource(), var2);
  46.    }
  47.  
  48.    Image makeImage(ImageProducer var1, ImageFilter var2) {
  49.       return this.makeImage(var1, var2, var1 == this.baseImage.getSource() ? 1 : 0);
  50.    }
  51.  
  52.    Image makeImage(ImageProducer var1, ImageFilter var2, int var3) {
  53.       Image var4 = ((Component)this).createImage(new FilteredImageSource(var1, var2));
  54.       this.tracker.addImage(var4, var3);
  55.       return var4;
  56.    }
  57.  
  58.    void addImage(Image var1) {
  59.       this.tracker.addImage(var1, 1);
  60.    }
  61.  
  62.    void parseHighlight(String var1) {
  63.       if (var1 != null) {
  64.          if (var1.startsWith("brighter")) {
  65.             this.hlmode = 0;
  66.             if (var1.length() > "brighter".length()) {
  67.                this.hlpercent = Integer.parseInt(var1.substring("brighter".length()));
  68.                return;
  69.             }
  70.          } else if (var1.startsWith("darker")) {
  71.             this.hlmode = 1;
  72.             if (var1.length() > "darker".length()) {
  73.                this.hlpercent = Integer.parseInt(var1.substring("darker".length()));
  74.             }
  75.          }
  76.  
  77.       }
  78.    }
  79.  
  80.    public void init() {
  81.       this.tracker = new MediaTracker(this);
  82.       this.parseHighlight(((Applet)this).getParameter("highlight"));
  83.       this.introTune = ((Applet)this).getParameter("startsound");
  84.       this.baseImage = ((Applet)this).getImage(((Applet)this).getDocumentBase(), ((Applet)this).getParameter("img"));
  85.       Vector var2 = new Vector();
  86.       int var3 = 1;
  87.  
  88.       while(true) {
  89.          String var1 = ((Applet)this).getParameter("area" + var3);
  90.          if (var1 == null) {
  91.             var1 = ((Applet)this).getParameter("rect" + var3);
  92.             if (var1 == null) {
  93.                break;
  94.             }
  95.  
  96.             try {
  97.                ImageMapArea var4 = new HighlightArea();
  98.                var4.init(this, var1);
  99.                var2.addElement(var4);
  100.                String var5 = ((Applet)this).getParameter("href" + var3);
  101.                if (var5 != null) {
  102.                   var1 = var1 + "," + var5;
  103.                   var4 = new LinkArea();
  104.                   var4.init(this, var1);
  105.                   var2.addElement(var4);
  106.                }
  107.             } catch (Exception var7) {
  108.                System.out.println("error processing: " + var1);
  109.                ((Throwable)var7).printStackTrace();
  110.                break;
  111.             }
  112.          } else {
  113.             try {
  114.                int var14 = var1.indexOf(",");
  115.                String var6 = var1.substring(0, var14);
  116.                ImageMapArea var13 = (ImageMapArea)Class.forName(var6).newInstance();
  117.                var1 = var1.substring(var14 + 1);
  118.                var13.init(this, var1);
  119.                var2.addElement(var13);
  120.             } catch (Exception var8) {
  121.                System.out.println("error processing: " + var1);
  122.                ((Throwable)var8).printStackTrace();
  123.                break;
  124.             }
  125.          }
  126.  
  127.          ++var3;
  128.       }
  129.  
  130.       this.areas = new ImageMapArea[var2.size()];
  131.       var2.copyInto(this.areas);
  132.       this.checkSize();
  133.    }
  134.  
  135.    public void start() {
  136.       if (this.introTune != null) {
  137.          try {
  138.             ((Applet)this).play(new URL(((Applet)this).getDocumentBase(), this.introTune));
  139.          } catch (MalformedURLException var1) {
  140.          }
  141.       }
  142.  
  143.       if (this.aniThread == null) {
  144.          this.aniThread = new Thread(this);
  145.          this.aniThread.setName("ImageMap Animator");
  146.          this.aniThread.start();
  147.       }
  148.  
  149.    }
  150.  
  151.    public void run() {
  152.       Thread var1 = Thread.currentThread();
  153.       this.tracker.checkAll(true);
  154.       int var2 = this.areas.length;
  155.  
  156.       while(true) {
  157.          --var2;
  158.          if (var2 < 0) {
  159.             var1.setPriority(1);
  160.  
  161.             while(this.aniThread == var1) {
  162.                boolean var3 = false;
  163.                int var4 = this.areas.length;
  164.  
  165.                while(true) {
  166.                   --var4;
  167.                   if (var4 < 0) {
  168.                      try {
  169.                         synchronized(this){}
  170.  
  171.                         try {
  172.                            this.wait((long)(var3 ? 100 : 0));
  173.                            break;
  174.                         } catch (Throwable var8) {
  175.                            throw var8;
  176.                         }
  177.                      } catch (InterruptedException var9) {
  178.                         return;
  179.                      }
  180.                   }
  181.  
  182.                   var3 = this.areas[var4].animate() || var3;
  183.                }
  184.             }
  185.  
  186.             return;
  187.          }
  188.  
  189.          this.areas[var2].getMedia();
  190.       }
  191.    }
  192.  
  193.    public synchronized void startAnimation() {
  194.       this.notify();
  195.    }
  196.  
  197.    public synchronized void stop() {
  198.       this.aniThread = null;
  199.       this.notify();
  200.  
  201.       for(int var1 = 0; var1 < this.areas.length; ++var1) {
  202.          this.areas[var1].exit();
  203.       }
  204.  
  205.    }
  206.  
  207.    void checkSize() {
  208.       int var1 = this.baseImage.getWidth(this);
  209.       int var2 = this.baseImage.getHeight(this);
  210.       if (var1 > 0 && var2 > 0) {
  211.          ((Applet)this).resize(var1, var2);
  212.          synchronized(this){}
  213.  
  214.          try {
  215.             this.fullrepaint = true;
  216.          } catch (Throwable var5) {
  217.             throw var5;
  218.          }
  219.  
  220.          ((Component)this).repaint(0, 0, var1, var2);
  221.       }
  222.  
  223.    }
  224.  
  225.    public boolean imageUpdate(Image var1, int var2, int var3, int var4, int var5, int var6) {
  226.       if ((var2 & 3) != 0) {
  227.          this.checkSize();
  228.       }
  229.  
  230.       if ((var2 & 56) != 0) {
  231.          synchronized(this){}
  232.  
  233.          try {
  234.             this.fullrepaint = true;
  235.          } catch (Throwable var9) {
  236.             throw var9;
  237.          }
  238.  
  239.          ((Component)this).repaint((var2 & 48) != 0 ? 0L : 100L, var3, var4, var5, var6);
  240.       }
  241.  
  242.       return (var2 & 96) == 0;
  243.    }
  244.  
  245.    public void paint(Graphics var1) {
  246.       synchronized(this){}
  247.  
  248.       try {
  249.          this.fullrepaint = false;
  250.       } catch (Throwable var4) {
  251.          throw var4;
  252.       }
  253.  
  254.       if (this.baseImage != null) {
  255.          var1.drawImage(this.baseImage, 0, 0, this);
  256.          if (this.areas != null) {
  257.             int var2 = this.areas.length;
  258.  
  259.             while(true) {
  260.                --var2;
  261.                if (var2 < 0) {
  262.                   break;
  263.                }
  264.  
  265.                this.areas[var2].highlight(var1);
  266.             }
  267.          }
  268.  
  269.       }
  270.    }
  271.  
  272.    public void update(Graphics var1) {
  273.       synchronized(this){}
  274.  
  275.       boolean var2;
  276.       try {
  277.          var2 = this.fullrepaint;
  278.       } catch (Throwable var5) {
  279.          throw var5;
  280.       }
  281.  
  282.       if (var2) {
  283.          this.paint(var1);
  284.       } else if (this.baseImage != null) {
  285.          var1.drawImage(this.baseImage, 0, 0, this);
  286.          if (this.areas != null) {
  287.             int var3 = this.areas.length;
  288.  
  289.             while(true) {
  290.                --var3;
  291.                if (var3 < 0) {
  292.                   return;
  293.                }
  294.  
  295.                this.areas[var3].highlight(var1);
  296.             }
  297.          }
  298.       }
  299.    }
  300.  
  301.    public boolean mouseExit(Event var1, int var2, int var3) {
  302.       for(int var4 = 0; var4 < this.areas.length; ++var4) {
  303.          this.areas[var4].checkExit();
  304.       }
  305.  
  306.       return true;
  307.    }
  308.  
  309.    public boolean mouseMove(Event var1, int var2, int var3) {
  310.       boolean var4 = false;
  311.  
  312.       for(int var5 = 0; var5 < this.areas.length; ++var5) {
  313.          if (!var4 && this.areas[var5].inside(var2, var3)) {
  314.             var4 = this.areas[var5].checkEnter(var2, var3);
  315.          } else {
  316.             this.areas[var5].checkExit();
  317.          }
  318.       }
  319.  
  320.       return true;
  321.    }
  322.  
  323.    public boolean mouseDown(Event var1, int var2, int var3) {
  324.       this.pressX = var2;
  325.       this.pressY = var3;
  326.  
  327.       for(int var4 = 0; var4 < this.areas.length && (!this.areas[var4].inside(var2, var3) || !this.areas[var4].press(var2, var3)); ++var4) {
  328.       }
  329.  
  330.       return true;
  331.    }
  332.  
  333.    public boolean mouseUp(Event var1, int var2, int var3) {
  334.       for(int var4 = 0; var4 < this.areas.length && (!this.areas[var4].inside(this.pressX, this.pressY) || !this.areas[var4].lift(var2, var3)); ++var4) {
  335.       }
  336.  
  337.       return true;
  338.    }
  339.  
  340.    public boolean mouseDrag(Event var1, int var2, int var3) {
  341.       this.mouseMove(var1, var2, var3);
  342.  
  343.       for(int var4 = 0; var4 < this.areas.length && (!this.areas[var4].inside(this.pressX, this.pressY) || !this.areas[var4].drag(var2, var3)); ++var4) {
  344.       }
  345.  
  346.       return true;
  347.    }
  348.  
  349.    public void newStatus() {
  350.       String var1 = null;
  351.  
  352.       for(int var2 = 0; var2 < this.areas.length; ++var2) {
  353.          var1 = this.areas[var2].getStatus(var1);
  354.       }
  355.  
  356.       ((Applet)this).showStatus(var1);
  357.    }
  358. }
  359.