import java.awt.*;

class ImageCanvas extends Canvas {
	Container pappy;
	Image image;
	boolean trueSizeKnown = false;
	Dimension minSize;
	int w, h;

	public ImageCanvas(Image image, Container parent, 
				int initialWidth, int initialHeight) {
		if (image == null) {
			System.err.println("Canvas got invalid image object!");
			return;
		}

		this.image = image;
		pappy = parent;

		w = initialWidth;
		h = initialHeight;

		minSize = new Dimension(w,h);
	}

	public Dimension preferredSize() {
		return minimumSize();
	}

	public synchronized Dimension minimumSize() {
		return minSize;
	}

	public void paint (Graphics g) {
		if (image != null) {
			if (!trueSizeKnown) {
				int imageWidth = image.getWidth(this);
				int imageHeight = image.getHeight(this);

				if ((imageWidth > 0) && (imageHeight > 0)) {
					trueSizeKnown = true;

					//Ooh... component-initiated resizing.
					w = imageWidth;
					h = imageHeight;
					minSize = new Dimension(w,h);
					resize(w, h);
					pappy.layout();
					pappy.repaint();
				}
			}

			g.drawImage(image, 0, 0, this);
		}
	}
}
