Java/J2ME/Clip
Clipping Region
<source lang="java">
//jad file (please verify the jar size) /* MIDlet-Name: ClippingRegion MIDlet-Version: 1.0 MIDlet-Vendor: MyCompany MIDlet-Jar-URL: ClippingRegion.jar MIDlet-1: ClippingRegion, , ClippingRegion MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-1.0 MIDlet-JAR-SIZE: 100
- /
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.rumand; import javax.microedition.lcdui.rumandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; import javax.microedition.midlet.MIDlet; public class ClippingRegion extends MIDlet {
private Display display; private MyCanvas canvas; public ClippingRegion() { display = Display.getDisplay(this); canvas = new MyCanvas(this); } protected void startApp() { display.setCurrent(canvas); } protected void pauseApp() { } protected void destroyApp(boolean unconditional) { } public void exitMIDlet() { destroyApp(true); notifyDestroyed(); } public Display getDisplay() { return display; }
} class MyCanvas extends Canvas implements CommandListener {
private Command exit = new Command("Exit", Command.EXIT, 1); private ClippingRegion clippingRegion; private Image image = null; public MyCanvas(ClippingRegion clippingRegion) { this.clippingRegion = clippingRegion; addCommand(exit); setCommandListener(this); try { image = Image.createImage(70, 70); Graphics graphics = image.getGraphics(); graphics.setColor(255, 0, 0); graphics.fillArc(10, 10, 60, 50, 180, 180); } catch (Exception error) { Alert alert = new Alert("Failure", "Creating Image", null, null); alert.setTimeout(Alert.FOREVER); this.clippingRegion.getDisplay().setCurrent(alert); } } protected void paint(Graphics graphics) { if (image != null) { graphics.setColor(255, 255, 255); graphics.fillRect(0, 0, getWidth(), getHeight()); graphics.setClip(35, 35, 40, 40); graphics.drawImage(image, 30, 30, Graphics.VCENTER | Graphics.HCENTER); } } public void commandAction(Command command, Displayable display) { if (command == exit) { clippingRegion.exitMIDlet(); } }
}
</source>
Move a clipping region around a Canvas
<source lang="java">
/*--------------------------------------------------
- Clip.java
- Move a clipping region around a Canvas
- Example from the book: Core J2ME Technology
- Copyright John W. Muchow http://www.CoreJ2ME.ru
- You may use/modify for any non-commercial purpose
- -------------------------------------------------*/
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.util.*; public class Clip extends MIDlet {
private Display display; // The display private ClipCanvas canvas; // Canvas public Clip() { display = Display.getDisplay(this); canvas = new ClipCanvas(this); } protected void startApp() { display.setCurrent( canvas ); } protected void pauseApp() { } protected void destroyApp( boolean unconditional ) { } public void exitMIDlet() { destroyApp(true); notifyDestroyed(); }
} /*--------------------------------------------------
- Class ClipCanvas
- Display the clipping region
- -------------------------------------------------*/
class ClipCanvas extends Canvas implements CommandListener {
private Command cmExit; // Exit private Clip midlet; // Main midlet private Image im = null; // Image to display private Random random; // Get random number private int clipx = 0, clipy = 0, // View port clipw = 45, cliph = 45; // (clipping region) private int old_clipx = 0, old_clipy = 0; // Last clipping region public ClipCanvas(Clip midlet) { this.midlet = midlet; // Create exit command & listen for events cmExit = new Command("Exit", Command.EXIT, 1); addCommand(cmExit); setCommandListener(this); // Get random values for starting point random = new java.util.Random(); // Make sure the entire clipping region is // visible on the display clipx = Math.min((getWidth() - clipw), (random.nextInt() >>> 1) % getWidth()); clipy = Math.min((getHeight() - cliph), (random.nextInt() >>> 1) % getHeight()); try { // Create immutable image im = Image.createImage("/house.png"); } catch (java.io.IOException e) { System.err.println("Unable to locate or read .png file"); } } protected void paint(Graphics g) { if (im != null) { // Clear only the previous clipping region g.setColor(255, 255, 255); g.fillRect(old_clipx, old_clipy, clipw, cliph); // Set the new clipping region g.setClip(clipx, clipy, clipw, cliph); // Draw image g.drawImage(im, 0, 0, Graphics.LEFT | Graphics.TOP); } } public void commandAction(Command c, Displayable d) { if (c == cmExit) midlet.exitMIDlet(); } protected void keyPressed(int keyCode) { // Save the last clipping region old_clipx = clipx; old_clipy = clipy; switch (getGameAction(keyCode)) { case UP: // Move clipping region up 3 pixels if (clipy > 0) clipy = Math.max(0, clipy - 3); break; case DOWN: // Move clipping region down 3 pixels if (clipy + cliph < getHeight()) clipy = Math.min(getHeight(), clipy + 3); break; case LEFT: // Move clipping region left 3 pixels if (clipx > 0) clipx = Math.max(0, clipx - 3); break; case RIGHT: // Move clipping region right 3 pixels if (clipx + clipw < getWidth()) clipx = Math.min(getWidth(), clipx + 3); break; case FIRE: // Show the whole screen by reseting // the clipping region to the entire display clipx = clipy = 0; clipw = getWidth(); cliph = getHeight(); } repaint(); }
}
</source>