home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Component;
- import java.awt.Event;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.MediaTracker;
- import java.awt.image.CropImageFilter;
- import java.awt.image.FilteredImageSource;
- import java.awt.image.ImageFilter;
- import java.awt.image.ImageProducer;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.Vector;
-
- public class ImageMap extends Applet implements Runnable {
- Image baseImage;
- ImageMapArea[] areas;
- static final int BRIGHTER = 0;
- static final int DARKER = 1;
- int hlmode;
- int hlpercent = 50;
- MediaTracker tracker;
- Thread aniThread;
- String introTune;
- private boolean fullrepaint = false;
- private static final long UPDATERATE = 100L;
- int pressX;
- int pressY;
-
- Image getHighlight(int var1, int var2, int var3, int var4) {
- return this.getHighlight(var1, var2, var3, var4, this.hlmode, this.hlpercent);
- }
-
- Image getHighlight(int var1, int var2, int var3, int var4, int var5, int var6) {
- return this.getHighlight(var1, var2, var3, var4, new HighlightFilter(var5 == 0, var6));
- }
-
- Image getHighlight(int var1, int var2, int var3, int var4, ImageFilter var5) {
- CropImageFilter var6 = new CropImageFilter(var1, var2, var3, var4);
- FilteredImageSource var7 = new FilteredImageSource(this.baseImage.getSource(), var6);
- return this.makeImage(var7, var5, 0);
- }
-
- Image makeImage(Image var1, ImageFilter var2) {
- return this.makeImage(var1.getSource(), var2);
- }
-
- Image makeImage(ImageProducer var1, ImageFilter var2) {
- return this.makeImage(var1, var2, var1 == this.baseImage.getSource() ? 1 : 0);
- }
-
- Image makeImage(ImageProducer var1, ImageFilter var2, int var3) {
- Image var4 = ((Component)this).createImage(new FilteredImageSource(var1, var2));
- this.tracker.addImage(var4, var3);
- return var4;
- }
-
- void addImage(Image var1) {
- this.tracker.addImage(var1, 1);
- }
-
- void parseHighlight(String var1) {
- if (var1 != null) {
- if (var1.startsWith("brighter")) {
- this.hlmode = 0;
- if (var1.length() > "brighter".length()) {
- this.hlpercent = Integer.parseInt(var1.substring("brighter".length()));
- return;
- }
- } else if (var1.startsWith("darker")) {
- this.hlmode = 1;
- if (var1.length() > "darker".length()) {
- this.hlpercent = Integer.parseInt(var1.substring("darker".length()));
- }
- }
-
- }
- }
-
- public void init() {
- this.tracker = new MediaTracker(this);
- this.parseHighlight(((Applet)this).getParameter("highlight"));
- this.introTune = ((Applet)this).getParameter("startsound");
- this.baseImage = ((Applet)this).getImage(((Applet)this).getDocumentBase(), ((Applet)this).getParameter("img"));
- Vector var2 = new Vector();
- int var3 = 1;
-
- while(true) {
- String var1 = ((Applet)this).getParameter("area" + var3);
- if (var1 == null) {
- var1 = ((Applet)this).getParameter("rect" + var3);
- if (var1 == null) {
- break;
- }
-
- try {
- ImageMapArea var4 = new HighlightArea();
- var4.init(this, var1);
- var2.addElement(var4);
- String var5 = ((Applet)this).getParameter("href" + var3);
- if (var5 != null) {
- var1 = var1 + "," + var5;
- var4 = new LinkArea();
- var4.init(this, var1);
- var2.addElement(var4);
- }
- } catch (Exception var7) {
- System.out.println("error processing: " + var1);
- ((Throwable)var7).printStackTrace();
- break;
- }
- } else {
- try {
- int var14 = var1.indexOf(",");
- String var6 = var1.substring(0, var14);
- ImageMapArea var13 = (ImageMapArea)Class.forName(var6).newInstance();
- var1 = var1.substring(var14 + 1);
- var13.init(this, var1);
- var2.addElement(var13);
- } catch (Exception var8) {
- System.out.println("error processing: " + var1);
- ((Throwable)var8).printStackTrace();
- break;
- }
- }
-
- ++var3;
- }
-
- this.areas = new ImageMapArea[var2.size()];
- var2.copyInto(this.areas);
- this.checkSize();
- }
-
- public void start() {
- if (this.introTune != null) {
- try {
- ((Applet)this).play(new URL(((Applet)this).getDocumentBase(), this.introTune));
- } catch (MalformedURLException var1) {
- }
- }
-
- if (this.aniThread == null) {
- this.aniThread = new Thread(this);
- this.aniThread.setName("ImageMap Animator");
- this.aniThread.start();
- }
-
- }
-
- public void run() {
- Thread var1 = Thread.currentThread();
- this.tracker.checkAll(true);
- int var2 = this.areas.length;
-
- while(true) {
- --var2;
- if (var2 < 0) {
- var1.setPriority(1);
-
- while(this.aniThread == var1) {
- boolean var3 = false;
- int var4 = this.areas.length;
-
- while(true) {
- --var4;
- if (var4 < 0) {
- try {
- synchronized(this){}
-
- try {
- this.wait((long)(var3 ? 100 : 0));
- break;
- } catch (Throwable var8) {
- throw var8;
- }
- } catch (InterruptedException var9) {
- return;
- }
- }
-
- var3 = this.areas[var4].animate() || var3;
- }
- }
-
- return;
- }
-
- this.areas[var2].getMedia();
- }
- }
-
- public synchronized void startAnimation() {
- this.notify();
- }
-
- public synchronized void stop() {
- this.aniThread = null;
- this.notify();
-
- for(int var1 = 0; var1 < this.areas.length; ++var1) {
- this.areas[var1].exit();
- }
-
- }
-
- void checkSize() {
- int var1 = this.baseImage.getWidth(this);
- int var2 = this.baseImage.getHeight(this);
- if (var1 > 0 && var2 > 0) {
- ((Applet)this).resize(var1, var2);
- synchronized(this){}
-
- try {
- this.fullrepaint = true;
- } catch (Throwable var5) {
- throw var5;
- }
-
- ((Component)this).repaint(0, 0, var1, var2);
- }
-
- }
-
- public boolean imageUpdate(Image var1, int var2, int var3, int var4, int var5, int var6) {
- if ((var2 & 3) != 0) {
- this.checkSize();
- }
-
- if ((var2 & 56) != 0) {
- synchronized(this){}
-
- try {
- this.fullrepaint = true;
- } catch (Throwable var9) {
- throw var9;
- }
-
- ((Component)this).repaint((var2 & 48) != 0 ? 0L : 100L, var3, var4, var5, var6);
- }
-
- return (var2 & 96) == 0;
- }
-
- public void paint(Graphics var1) {
- synchronized(this){}
-
- try {
- this.fullrepaint = false;
- } catch (Throwable var4) {
- throw var4;
- }
-
- if (this.baseImage != null) {
- var1.drawImage(this.baseImage, 0, 0, this);
- if (this.areas != null) {
- int var2 = this.areas.length;
-
- while(true) {
- --var2;
- if (var2 < 0) {
- break;
- }
-
- this.areas[var2].highlight(var1);
- }
- }
-
- }
- }
-
- public void update(Graphics var1) {
- synchronized(this){}
-
- boolean var2;
- try {
- var2 = this.fullrepaint;
- } catch (Throwable var5) {
- throw var5;
- }
-
- if (var2) {
- this.paint(var1);
- } else if (this.baseImage != null) {
- var1.drawImage(this.baseImage, 0, 0, this);
- if (this.areas != null) {
- int var3 = this.areas.length;
-
- while(true) {
- --var3;
- if (var3 < 0) {
- return;
- }
-
- this.areas[var3].highlight(var1);
- }
- }
- }
- }
-
- public boolean mouseExit(Event var1, int var2, int var3) {
- for(int var4 = 0; var4 < this.areas.length; ++var4) {
- this.areas[var4].checkExit();
- }
-
- return true;
- }
-
- public boolean mouseMove(Event var1, int var2, int var3) {
- boolean var4 = false;
-
- for(int var5 = 0; var5 < this.areas.length; ++var5) {
- if (!var4 && this.areas[var5].inside(var2, var3)) {
- var4 = this.areas[var5].checkEnter(var2, var3);
- } else {
- this.areas[var5].checkExit();
- }
- }
-
- return true;
- }
-
- public boolean mouseDown(Event var1, int var2, int var3) {
- this.pressX = var2;
- this.pressY = var3;
-
- for(int var4 = 0; var4 < this.areas.length && (!this.areas[var4].inside(var2, var3) || !this.areas[var4].press(var2, var3)); ++var4) {
- }
-
- return true;
- }
-
- public boolean mouseUp(Event var1, int var2, int var3) {
- for(int var4 = 0; var4 < this.areas.length && (!this.areas[var4].inside(this.pressX, this.pressY) || !this.areas[var4].lift(var2, var3)); ++var4) {
- }
-
- return true;
- }
-
- public boolean mouseDrag(Event var1, int var2, int var3) {
- this.mouseMove(var1, var2, var3);
-
- for(int var4 = 0; var4 < this.areas.length && (!this.areas[var4].inside(this.pressX, this.pressY) || !this.areas[var4].drag(var2, var3)); ++var4) {
- }
-
- return true;
- }
-
- public void newStatus() {
- String var1 = null;
-
- for(int var2 = 0; var2 < this.areas.length; ++var2) {
- var1 = this.areas[var2].getStatus(var1);
- }
-
- ((Applet)this).showStatus(var1);
- }
- }
-