// jsketch.java // simple sketch: // "c" to clear, for new color // "a" for anchored mode, "r" for rectangle mode. // // This software comes with NO WARRANTY whatsoever. // It may be used as "free software" per the GNU GPL. // See http://www.gnu.org/copyleft/gpl.html for license information. // Copyright 1999 Demetri Patukas. rev 99.06.19 import java.applet.*; import java.awt.*; import java.util.*; // for Random public class jsketch extends Applet { /// ----- instance variables private int last_x = 0; private int last_y = 0; private boolean unanchored = true; private boolean rectmode = false; private Color current_color = Color.red; private Random rnd; private Graphics ggg; // cached GC/HDC /// ------ applet control public void init() { rnd = new Random(); ggg = this.getGraphics(); this.setBackground(Color.black); } /// ----- applet event handlers public boolean mouseDown(Event e, int x, int y) { ggg.setColor(current_color); last_x = x; last_y = y; return true; } public boolean mouseDrag(Event e, int x, int y) { if (rectmode) { cornerRect(ggg, last_x, last_y, x, y); } else { ggg.drawLine(last_x, last_y, x, y); } if (unanchored) { last_x = x; last_y = y; } return true; } public boolean keyDown(Event e, int key) { switch (key) { case 'c': clearwindow(); break; case 'a': unanchored = !unanchored; break; case 'r': rectmode = !rectmode; break; case ' ': new_color(ggg); break; default: return false; } return true; } /// ----- private helpers // make sure it's actually a different color. void new_color(Graphics ggg) { Color oldcolor = current_color; new_color1(ggg); while (oldcolor == current_color) { new_color1(ggg); } } // random color, but skips black (uses white). void new_color1(Graphics ggg) { switch (rnd.nextInt() & 7) { case 0: current_color = Color.white; break; //SB black case 1: current_color = Color.red; break; case 2: current_color = Color.blue; break; case 3: current_color = Color.magenta; break; case 4: current_color = Color.green; break; case 5: current_color = Color.yellow; break; case 6: current_color = Color.cyan; break; case 7: current_color = Color.white; break; } ggg.setColor(current_color); } void clearwindow() { ggg.clearRect(0, 0, 2000, 2000); } void cornerRect(Graphics ggg, int x1, int y1, int x2, int y2) { int t; if (x1 > x2) { t=x2; x2=x1; x1=t; } if (y1 > y2) { t=y2; y2=y1; y1=t; } ggg.fillRect(x1, y1, x2-x1, y2-y1); } } //end class jsketch