import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Doodle extends MIDlet {
private Display display; // The display
private DoodleCanvas canvas; // Canvas
public Doodle() {
display = Display.getDisplay(this);
canvas = new DoodleCanvas(this);
}
protected void startApp() {
display.setCurrent(canvas);
}
protected void pauseApp() {}
protected void destroyApp(boolean unconditional) {}
public void exitMIDlet() {
destroyApp(true);
notifyDestroyed();
}
}
/*--------------------------------------------------
* Class DoodleCanvas
*
* Pointer event handling
*-------------------------------------------------*/
class DoodleCanvas extends Canvas implements CommandListener {
private Command cmExit; // Exit midlet
private Command cmClear; // Clear display
private int startx = 0, // Where pointer was clicked
starty = 0,
currentx = 0, // Current location
currenty = 0;
private Doodle midlet;
private boolean clearDisplay = false;
/*--------------------------------------------------
* Constructor
*-------------------------------------------------*/
public DoodleCanvas(Doodle midlet) {
this.midlet = midlet;
// Create exit command & listen for events
cmExit = new Command("Exit", Command.EXIT, 1);
cmClear = new Command("Clear", Command.SCREEN, 1);
addCommand(cmExit);
addCommand(cmClear);
setCommandListener(this);
}
/*--------------------------------------------------
* Paint the text representing the key code
*-------------------------------------------------*/
protected void paint(Graphics g) {
// Clear the background (to white)
if (clearDisplay) {
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
clearDisplay = false;
startx = currentx = starty = currenty = 0;
return;
}
// Draw with black pen
g.setColor(0, 0, 0);
// Draw line
g.drawLine(startx, starty, currentx, currenty);
// New starting point is the current position
startx = currentx;
starty = currenty;
}
/*--------------------------------------------------
* Command event handling
*-------------------------------------------------*/
public void commandAction(Command c, Displayable d) {
if (c == cmExit) {
midlet.exitMIDlet();
} else if (c == cmClear) {
clearDisplay = true;
repaint();
}
}
/*--------------------------------------------------
* Pointer pressed
*-------------------------------------------------*/
protected void pointerPressed(int x, int y) {
startx = x;
starty = y;
}
/*--------------------------------------------------
* Pointer moved
*-------------------------------------------------*/
protected void pointerDragged(int x, int y) {
currentx = x;
currenty = y;
repaint();
}
}