Milán Major

netscape-revival

1 branch
Code

sun-java/classsrc/java/awt/test/PaintTest.java

/*
 * @(#)PaintTest.java	1.20 95/09/16 Sami Shaio
 *
 * Copyright (c) 1995 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL purposes and without
 * fee is hereby granted provided that this copyright notice
 * appears in all copies. Please refer to the file "copyright.html"
 * for further important copyright and licensing information.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 */
import java.awt.*;

public class PaintTest extends Frame {
    public PaintTest() {
	setTitle("PaintTest");
	setBackground(Color.lightGray);
	setLayout(new BorderLayout());
	add("Center", new PaintPanel());
	reshape(0, 0, 300, 300);
	show();
    }
	    
    public static void main(String args[]) {
	new PrintTest(new PaintTest());
    }
}

class PaintPanel extends Panel {
    public PaintPanel() {
	setLayout(new BorderLayout());
	Panel grid = new Panel();
	grid.setLayout(new GridLayout(0, 1));
	add("Center", grid);
	grid.add(new PaintCanvas());
	grid.add(new PaintCanvas());
	grid.add(new PaintCanvas());
	reshape(0, 0, 20, 20);
    }
}

class PaintCanvas extends Canvas {    
    int 	hadd = 0;
    int		xadd = 0;
    int		yadd = 0;
    boolean	focus = false;

    public PaintCanvas() {
	reshape(0, 0, 100, 100);
    }

    public boolean gotFocus(Event e, Object arg) {
	focus = true;
	repaint();
	return true;
    }

    public boolean lostFocus(Event e, Object arg) {
	focus = false;
	repaint();
	return true;
    }

    public void paint(Graphics g) {
	Rectangle r = bounds();
	int hlines = r.height / 10;
	int vlines = r.width / 10;

	g.setColor(Color.pink);
	for (int i = 1; i <= hlines; i++) {
	    g.drawLine(0, i * 10, r.width, i * 10);
	}
	for (int i = 1; i <= vlines; i++) {
	    g.drawLine(i * 10, 0, i * 10, r.height);
	}
	if (focus) {
	    g.setColor(Color.red);
	} else {
	    g.setColor(Color.darkGray);
	}
	g.drawRect(0, 0, r.width-1, r.height-1);
	g.drawLine(0, 0, r.width, r.height);
	g.drawLine(r.width, 0, 0, r.height);
	g.drawLine(0, r.height / 2, r.width, r.height / 2);
	g.drawLine(r.width / 2, 0, r.width / 2, r.height);

	for (int i = 0; i < 360; i += 30) {
	    float percent = (((float)i /(float)360) * (float)255);
	    g.setColor(new Color((int)percent, (int)(percent / 2),
				      (int)percent));
	    g.fillArc(xadd, yadd, 100 + hadd, 100 + hadd, i, 30);
	}
    }

    public boolean handleEvent(Event e) {
	switch (e.id) {
	  case Event.KEY_ACTION:
	  case Event.KEY_PRESS:
	    switch (e.key) {
	      case Event.UP:
		yadd -= 5;
		repaint();
		return true;
	      case Event.DOWN:
		yadd += 5;
		repaint();
		return true;
	      case Event.RIGHT:
	      case 'r':
		xadd += 5;
		repaint();
		return true;
	      case Event.LEFT:
		xadd -= 5;
		repaint();
		return true;
	      case Event.PGUP:
		hadd += 10;
		repaint();
		return true;
	      case Event.PGDN:
		hadd -= 10;
		repaint();
		return true;
	      default:
		return false;
	    }

	  default:
	    return super.handleEvent(e);
	}
    }

}

class PrintTest extends Frame {
    Component comp;

    public PrintTest(Component comp) {
	this.comp = comp;
	reshape(400, 0, 400, 400);
	show();
    }

    public void paint(Graphics g) {
	Dimension d = size();
	g.setColor(getBackground());
	g.fillRect(0, 0, d.width, d.height);
	comp.printAll(g);
    }
}