summaryrefslogtreecommitdiff
path: root/java/gjt/ImageScroller.java
blob: 79fdc86ea3cd9bab43cfa52137223bfdb3d0185b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package gjt;

import java.awt.*;

/**
 * An extension of Scroller that smoothly scrolls an Image.<p>
 *
 * An Image must be supplied at construction time.  The image 
 * may be reset any time after construction.<p>
 *
 * @version 1.0, Apr 1 1996
 * @author  David Geary
 * @see     Scroller
 * @see     ImageCanvas
 * @see     gjt.test.ScrollerTest
 */
public class ImageScroller extends Scroller {
    private Image  image;
    private ScrollerImageCanvas canvas;

    public ImageScroller(Image image) {
        viewport.setLayout(new BorderLayout());
        setImage(image);
    }
    public void resetImage(Image image) {
        viewport.remove(canvas);
        setImage(image);
        invalidate();
        validate();
    }
    public void scrollTo(int x, int y) {
        Graphics g = canvas.getGraphics();
        if(g != null) {
            g.translate(-x,-y);
            g.drawImage(image, 0, 0, this);
        }
    }
    public Dimension getScrollAreaSize() {
        return new Dimension(image.getWidth(this), 
                             image.getHeight(this));
    }
    private void setImage(Image image) {
        this.image = image;
        hbar.setValue(0);
        vbar.setValue(0);
        viewport.add("Center", 
            canvas = new ScrollerImageCanvas(this, image));
    }
}

class ScrollerImageCanvas extends ImageCanvas {
    private ImageScroller scroller;

    public ScrollerImageCanvas(ImageScroller scroller, 
                               Image         image) {
        super(image);
        this.scroller = scroller;
    }
    public void paint(Graphics g) {
        scroller.repaint(); 
    }
}