/* 
 * 1.0 version.
 */

import java.awt.*;
import java.applet.Applet;

class ImageCanvas extends Canvas {
    Container pappy;
    Image image;
    Dimension size;
    int w, h;
    boolean trueSizeKnown;
    MediaTracker tracker;

    public ImageCanvas(Image image, Container highestContainer, 
                       int initialWidth, int initialHeight) {
        if (image == null) {
            System.err.println("Canvas got invalid image object!");
            return;
        }

        this.image = image;
        this.pappy = highestContainer;

        w = initialWidth;
        h = initialHeight;

        tracker = new MediaTracker(this);
        tracker.addImage(image, 0);

        size = new Dimension(w,h);
    }

    public Dimension getPreferredSize() {
        return getMinimumSize();
    }

    public synchronized Dimension getMinimumSize() {
        return size;
    }

    public void paint (Graphics g) {
        if (image != null) {
            if (!trueSizeKnown) {
                int imageWidth = image.getWidth(this);
                int imageHeight = image.getHeight(this);

                if (tracker.checkAll(true)) {
                    trueSizeKnown = true;
                    if (tracker.isErrorAny()) {
                        System.err.println("Error loading image: "
                                           + image);
                    }
                }

                //Component-initiated resizing.
                if (((imageWidth > 0) && (w != imageWidth)) ||
                    ((imageHeight > 0) && (h != imageHeight))) {
                    w = imageWidth;
                    h = imageHeight;
                    size = new Dimension(w,h);
                    resize(w, h);
                    pappy.validate();
                }
            }
        }

        g.drawImage(image, 0, 0, this);
        g.drawRect(0, 0, w - 1, h - 1);
    }
}

public class ImageApplet extends Applet {
    public void init() { 
        Image image1 = getImage(getCodeBase(),
                               "kwalrath.gif");
        Image image2 = getImage(getCodeBase(),
                                "innocence_small.gif");
        ImageCanvas ic1 = new ImageCanvas(image1, this, 
                                          50, 50);
        ImageCanvas ic2 = new ImageCanvas(image2, this,
                                          100, 100);
        add(ic1);
        add(ic2);
    }
}
