package NET.worlds.console; import java.awt.Canvas; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Toolkit; import java.util.Vector; class SplashCanvas extends Canvas { private static final long serialVersionUID = 341168247494647821L; protected String name; protected Image image; protected Dimension dim; protected Vector overlays = new Vector(); SplashCanvas(String name) { this.name = name; } public void flush() { this.image.flush(); this.image = null; for (int i = 0; i < this.overlays.size(); i++) { Overlay over = this.overlays.elementAt(i); over.flush(); } this.overlays.removeAllElements(); } @Override public void paint(Graphics g) { super.paint(g); g.drawImage(this.image, 0, 0, this); for (int i = 0; i < this.overlays.size(); i++) { Overlay over = this.overlays.elementAt(i); over.paint(g, this); } } public void setImage(String name) { this.name = name; this.image = null; this.imageSize(); } public void addOverlay(String name, int x, int y) { Overlay over = new Overlay(name, x, y); Dimension dim = over.imageSize(this); this.overlays.addElement(over); this.repaint(x, y, dim.width, dim.height); } public void removeOverlay(String name, int x, int y) { for (int i = 0; i < this.overlays.size(); i++) { Overlay over = this.overlays.elementAt(i); if (over.matches(name, x, y)) { Dimension dim = over.imageSize(this); this.overlays.removeElementAt(i); this.repaint(x, y, dim.width, dim.height); return; } } } private Dimension imageSize() { if (this.image == null) { this.image = getEarlyImage(this.name, this); if (this.image != null) { int width = this.image.getWidth(this); int height = this.image.getHeight(this); if (width != -1 && height != -1) { return this.dim = new Dimension(width, height); } } this.dim = new Dimension(0, 0); } for (int i = 0; i < this.overlays.size(); i++) { Overlay over = this.overlays.elementAt(i); over.imageSize(this); } return this.dim; } public static Image getEarlyImage(String name, Component comp) { for (int pass = 0; pass < 2; pass++) { String imagename = Gamma.earlyURLUnalias(name); Image image = Toolkit.getDefaultToolkit().getImage(imagename); MediaTracker tracker = new MediaTracker(comp); tracker.addImage(image, 0); try { tracker.waitForAll(); } catch (InterruptedException var7) { } if (!tracker.isErrorAny()) { return image; } if (pass == 0) { name = "..\\" + name; } } return null; } @Override public Dimension preferredSize() { return this.imageSize(); } @Override public Dimension minimumSize() { return this.imageSize(); } }