SVGImage.java
上传用户:haobig99
上传日期:2022-06-15
资源大小:369k
文件大小:6k
- /*
- * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
- package com.sun.lwuit;
- import com.sun.lwuit.animations.Animation;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.microedition.m2g.ScalableGraphics;
- import org.w3c.dom.Document;
- import org.w3c.dom.svg.SVGPoint;
- import org.w3c.dom.svg.SVGSVGElement;
- /**
- * Represents a JSR 226 image using the standard Image API, just like other images
- * in LWUIT this image can be animated. All features of JSR 226 may be accessed
- * in this image using the standard DOM API.
- *
- * @deprecated Use the SVGImplementationFactory with standard LWUIT Image.createSVG
- * @author Chen Fishbein
- */
- public class SVGImage extends Image implements Animation {
- private javax.microedition.m2g.SVGImage im;
- private static final String SVG_NAMESPACE = "http://www.w3.org/2000/svg";
- private boolean animated;
- private long startTime = -1;
- private int id = 0;
- private static int idCounter = 0;
- private static final boolean IS_SUPPORTED;
- static {
- boolean supported = false;
- try {
- Class.forName("javax.microedition.m2g.SVGImage");
- supported = true;
- } catch (Throwable t) {
- }
- IS_SUPPORTED = supported;
- }
-
- SVGImage(javax.microedition.m2g.SVGImage im, boolean animated) {
- super(null);
- this.im = im;
- this.animated = animated;
- }
- /**
- * Create an SVG image
- *
- * @param stream source stream
- * @param animated whether SVG animations should be supported
- * @return an SVG image
- * @throws java.io.IOException when the stream throws an exception
- */
- public static Image createSVGImage(InputStream stream, boolean animated) throws IOException {
- SVGImage instance = new SVGImage((javax.microedition.m2g.SVGImage) javax.microedition.m2g.SVGImage.createImage(stream, null), animated);
- return instance;
- }
- /**
- * Create an SVG image
- *
- * @param url source url
- * @param animated whether SVG animations should be supported
- * @return an SVG image
- * @throws java.io.IOException when the stream throws an exception
- */
- public static Image createSVGImage(java.lang.String url, boolean animated) throws IOException {
- return createSVGImage(Display.getInstance().getResourceAsStream(SVGImage.class, url), animated);
- }
- /**
- * @inheritDoc
- */
- public int getWidth() {
- return im.getViewportWidth();
- }
- /**
- * @inheritDoc
- */
- public int getHeight() {
- return im.getViewportHeight();
- }
- /**
- * @inheritDoc
- */
- protected void drawImage(Graphics g, Object nativeGraphics, int x, int y) {
- ScalableGraphics svgGraphics = ScalableGraphics.createInstance();
- javax.microedition.lcdui.Graphics gr = (javax.microedition.lcdui.Graphics)nativeGraphics;
- gr.setClip(g.getTranslateX() + g.getClipX(), g.getTranslateY() + g.getClipY(), g.getClipWidth(), g.getClipHeight());
- svgGraphics.bindTarget(gr);
- svgGraphics.render(x + g.getTranslateX(), y + g.getTranslateY(), im);
- svgGraphics.releaseTarget();
- }
- /**
- * @inheritDoc
- */
- public Image scaled(int width, int height) {
- im.setViewportWidth(width);
- im.setViewportHeight(height);
- return this;
- }
- /**
- * @inheritDoc
- */
- public Image rotate(int degrees) {
- SVGSVGElement e = getSVGElement();
- SVGPoint p = e.getCurrentTranslate();
- p.setX(-getWidth()/2);
- p.setY(-getHeight()/2);
- e.setCurrentRotate(degrees);
- p.setX(0);
- p.setY(0);
- return this;
- }
-
- /**
- * Get the SVG document object for DOM manipulation
- *
- * @return the SVG document
- */
- public Document getDocument(){
- return im.getDocument();
- }
-
- private SVGSVGElement getSVGElement(){
- SVGSVGElement retVal = null;
- Document dom = im.getDocument();
- retVal = (SVGSVGElement)dom.getElementById(this.getClass().getName() + id);
- if(retVal == null){
- retVal = (SVGSVGElement) dom.createElementNS(SVG_NAMESPACE, "svg");
- id = idCounter++;
- retVal.setId(this.getClass().getName() + id);
- }
- return retVal;
- }
- /**
- * @inheritDoc
- */
- public boolean animate() {
- long currentTime = System.currentTimeMillis();
- //if this is the first time init the start time.
- if (startTime == -1) {
- startTime = currentTime;
- }
- im.incrementTime((currentTime - startTime) / 1000.0f);
- startTime = currentTime;
- return animated;
- }
- /**
- * @inheritDoc
- */
- public void paint(Graphics g) {
- }
- /**
- * @inheritDoc
- */
- public boolean isAnimation() {
- return true;
- }
-
- /**
- * Returns true if the platform supports SVG
- *
- * @return true if this platform supports SVG, false otherwise
- */
- public static boolean isSupported() {
- return IS_SUPPORTED;
- }
- }