SvgCanvas1.java

/**
 * Copyright (c) 2012 Nokia Corporation. All rights reserved.
 * Nokia and Nokia Connecting People are registered trademarks of Nokia 
Corporation.
 * Oracle and Java are trademarks or registered trademarks of Oracle and/or its
 * affiliates. Other product and company names mentioned herein may be trademarks
 * or trade names of their respective owners.
 * See LICENSE.TXT for license information.
 */

package com.nokia.example;

import com.nokia.mid.ui.orientation.Orientation;
import com.nokia.mid.ui.orientation.OrientationListener;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.m2g.SVGImage;
import javax.microedition.m2g.ScalableGraphics;
import org.w3c.dom.svg.SVGElement;
import org.w3c.dom.svg.SVGPath;
import org.w3c.dom.svg.SVGRGBColor;
import org.w3c.dom.svg.SVGSVGElement;

/**
 * Simple canvas that uses JSR-226 to render SVG content. This class also
 * implements OrientationListener to detect a change in the orientation of the
 * device's display. Orientation is supported for Java Runtime 2.0.0 for Series
 * 40 onwards.
 */
public class SvgCanvas1 extends GameCanvas implements OrientationListener {

    /**
     * Constructor.
     */
    public SvgCanvas1(boolean suppressKeyEvents) {
        super(suppressKeyEvents);

        /**
         * Orientation is supported for Java Runtime 2.0.0 for Series 40
         * onwards. Registers the orientation listener. Applications that need
         * information about events related to display orientation changes need
         * to register with Orientation to get notifications of the events.
         */
        Orientation.addOrientationListener(this);

        // *** setup an instance of ScalableGraphics
        sg = ScalableGraphics.createInstance();
        sg.setRenderingQuality(ScalableGraphics.RENDERING_QUALITY_HIGH);

        // *** create a simple SVG image

        // ** create an empty image
        svgImage = (SVGImage) (SVGImage.createEmptyImage(null));

        // ** grab the root <svg> element
        SVGSVGElement rootElement = (SVGSVGElement) (svgImage.getDocument().getDocumentElement());

        // ** create some basic colors to work with
        SVGRGBColor yellow = rootElement.createSVGRGBColor(255, 255, 0);
        SVGRGBColor black = rootElement.createSVGRGBColor(0, 0, 0);

        // ** create the face and add it to the document
        SVGElement circle = (SVGElement) (svgImage.getDocument().createElementNS("http://www.w3.org/2000/svg", "circle"));
        circle.setRGBColorTrait("fill", yellow);
        circle.setFloatTrait("r", 50);
        circle.setFloatTrait("cx", 50);
        circle.setFloatTrait("cy", 50);
        rootElement.appendChild(circle);

        // ** create the left eye and add it to the document
        circle = (SVGElement) (svgImage.getDocument().createElementNS("http://www.w3.org/2000/svg", "circle"));
        circle.setFloatTrait("r", 5);
        circle.setFloatTrait("cx", 30);
        circle.setFloatTrait("cy", 30);
        rootElement.appendChild(circle);

        // ** create the right eye and add it to the document
        circle = (SVGElement) (svgImage.getDocument().createElementNS("http://www.w3.org/2000/svg", "circle"));
        circle.setFloatTrait("r", 5);
        circle.setFloatTrait("cx", 70);
        circle.setFloatTrait("cy", 30);
        rootElement.appendChild(circle);

        // ** create the mouth and add it to the document
        SVGElement path = (SVGElement) (svgImage.getDocument().createElementNS("http://www.w3.org/2000/svg", "path"));
        SVGPath d = rootElement.createSVGPath();
        d.moveTo(20, 60);
        d.quadTo(50, 80, 80, 60);
        path.setPathTrait("d", d);
        path.setRGBColorTrait("stroke", black);
        path.setFloatTrait("stroke-width", 3);
        path.setTrait("fill", "none");
        rootElement.appendChild(path);

    }

    /**
     * Paint method.
     */
    public void paint(Graphics g) {
        // *** clear the display

        g.setColor(255, 255, 255);

        g.fillRect(0, 0, getWidth(), getHeight());

        // *** render the SVG image
        sg.bindTarget(g);
        sg.setTransparency(1f);
        sg.render((getWidth() - svgImage.getViewportWidth()) >> 1, (getHeight() - svgImage.getViewportHeight()) >> 1, svgImage);
        sg.releaseTarget();


    }
    /*
     * Private members
     */
    private ScalableGraphics sg;
    private SVGImage svgImage;

    /**
     * Orientation is supported for Java Runtime 2.0.0 for Series 40 onwards.
     * Called when display's orientation has changed.
     */
    public void displayOrientationChanged(int newDisplayOrientation) {
        /**
         * Change MIDlet UI orientation
         */
        Orientation.setAppOrientation(newDisplayOrientation);
    }
}