/* * SVGScriptingDemoScreen.java * * Copyright � 1998-2011 Research In Motion Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Note: For the sake of simplicity, this sample application may not leverage * resource bundles and resource strings. However, it is STRONGLY recommended * that application developers make use of the localization features available * within the BlackBerry development platform to ensure a seamless application * experience across a variety of languages and geographies. For more information * on localizing your application, please refer to the BlackBerry Java Development * Environment Development Guide associated with this release. */ package com.rim.samples.device.svg.svgscriptingdemo; import java.io.IOException; import java.io.InputStream; import javax.microedition.m2g.SVGAnimator; import javax.microedition.m2g.SVGImage; import javax.microedition.m2g.ScalableImage; import net.rim.device.api.system.Display; import net.rim.device.api.ui.Field; import net.rim.device.api.ui.Manager; import net.rim.device.api.ui.component.RichTextField; import net.rim.device.api.ui.container.MainScreen; import org.w3c.dom.Document; import org.w3c.dom.svg.SVGElement; /** * This class resizes the SVG document to fit the device's display screen and * then displays the SVG image. */ public class SVGScriptingDemoScreen extends MainScreen { // As per the quadrant size of 150 in the svg script private static final int ORIGINAL_DISPLAY_SIZE = 300; // As per the button size in the svg script private static final int ORIGINAL_BUTTON_SIZE = 80; private static final int DISPLAY_Y_OFFSET = 10; /** * Creates a new SVGScriptingDemoScreen object */ public SVGScriptingDemoScreen() { super(Manager.NO_VERTICAL_SCROLL); try { // Load SVG from sample.svg final InputStream inputStream = getClass().getResourceAsStream("/sample.svg"); // Create SVGImage and resize it according to the dimensions of the // device screen. final SVGImage image = (SVGImage) ScalableImage.createImage(inputStream, null); resize(image.getDocument()); // Retrieve the SVG animator, add it to the screen, and start the // SVG final SVGAnimator animator = SVGAnimator.createAnimator(image, "net.rim.device.api.ui.Field"); final Field svgField = (Field) animator.getTargetComponent(); add(svgField); animator.play(); } catch (final IOException e) { add(new RichTextField("Could not load the svg file: " + e)); } } /** * Resizes the SVG document to fit onto the device screen * * Note: this method is specific to the sample svg only * * @param doc * The SVG document to resize */ public static void resize(final Document doc) { // Calculate the new dimension of the display based on the minimum // display dimension size. final int displayWidth = Display.getWidth(); final int displayHeight = Display.getHeight(); final int minDimension = Math.min(displayWidth, displayHeight); final float newDimension = 0.9f * minDimension; // Scale and center the display element to a portion of the device's // minimum display dimension. final float translateX = (displayWidth - newDimension) / 2; final float scaleWidth = newDimension / ORIGINAL_DISPLAY_SIZE; final float scaleHeight = newDimension / ORIGINAL_DISPLAY_SIZE; final SVGElement display = (SVGElement) doc.getElementById("display"); display.setAttribute("transform", "translate(" + translateX + " " + DISPLAY_Y_OFFSET + ") " + "scale(" + scaleWidth + " " + scaleHeight + ")"); // Scale and position the play and stop buttons final float newBtnSize = 0.2f * (minDimension - DISPLAY_Y_OFFSET); final float scaleBtn = newBtnSize / ORIGINAL_BUTTON_SIZE; final SVGElement playBtn = (SVGElement) doc.getElementById("play"); playBtn.setAttribute("transform", "translate(" + newBtnSize + " " + (displayHeight - newBtnSize) + ") " + "scale(" + scaleBtn + ")"); final SVGElement stopBtn = (SVGElement) doc.getElementById("stop"); stopBtn.setAttribute("transform", "translate(" + (displayWidth - newBtnSize) + " " + (displayHeight - newBtnSize) + ") " + "scale(" + scaleBtn + ")"); } }