]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/AnimatedSVGNode.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / nodes / AnimatedSVGNode.java
index 7e855293b0b11f0dce32850a9225839ddf93ee59..1d0c9f795f81d8404caf4be42974c3bf26fa2230 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.scenegraph.g2d.nodes;\r
-\r
-import java.awt.Graphics2D;\r
-import java.awt.geom.Rectangle2D;\r
-import java.io.ByteArrayInputStream;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-import java.util.UUID;\r
-\r
-import javax.script.ScriptEngine;\r
-import javax.script.ScriptEngineManager;\r
-import javax.script.ScriptException;\r
-\r
-import org.simantics.scenegraph.utils.BufferedImage;\r
-import org.simantics.scenegraph.utils.G2DUtils;\r
-import org.simantics.scenegraph.utils.MipMapBufferedImage;\r
-import org.simantics.scenegraph.utils.MipMapVRamBufferedImage;\r
-import org.simantics.scenegraph.utils.VRamBufferedImage;\r
-\r
-import com.kitfox.svg.SVGCache;\r
-import com.kitfox.svg.SVGElement;\r
-import com.kitfox.svg.SVGException;\r
-import com.kitfox.svg.SVGUniverse;\r
-import com.kitfox.svg.xml.StyleAttribute;\r
-\r
-public class AnimatedSVGNode extends SVGNode {\r
-    /**\r
-     * \r
-     */\r
-    private static final long serialVersionUID = 8698435757824280001L;\r
-    public Map<String, Object> valuezz = new HashMap<String, Object>();\r
-\r
-    protected String      script       = null;\r
-\r
-    @PropertySetter("VariableFilter")\r
-    @SyncField("script")\r
-    public void setScript(String script) {\r
-        this.script = script;\r
-    }\r
-\r
-    @SyncField("values")\r
-    public void setValue(String key, Object value) {\r
-        valuezz.put(key, value);\r
-        animate();\r
-    }\r
-    \r
-    @PropertySetter("valuezz")\r
-    @SyncField("valuezz")\r
-    public void setValuezz(Map<String, Object> val) {\r
-        valuezz = val;\r
-        animate();\r
-    }\r
-\r
-    @ClientSide\r
-    public void animate() {\r
-        animate(script);\r
-    }\r
-\r
-    @ClientSide\r
-    public void animate(final String script) {\r
-        if (script == null)\r
-            return;\r
-\r
-        if (dataHash == null) {\r
-            dataHash = parseSVG();\r
-        }\r
-        if (diagramCache == null) {\r
-            // Cannot execute script when SVGDiagram is not available\r
-            return;\r
-        }\r
-\r
-//        AnimationExecutor.getInstance().animate(new IAnimation() {\r
-//            @Override\r
-//            public void run() {\r
-        try {\r
-\r
-            ScriptEngineManager manager = new ScriptEngineManager();\r
-            ScriptEngine engine = manager.getEngineByName("JavaScript");\r
-\r
-            for(String key : valuezz.keySet()) {\r
-                engine.put(key, valuezz.get(key));\r
-            }\r
-            engine.put("time", System.currentTimeMillis());\r
-            engine.put("svg", diagramCache);\r
-            engine.put("t", AnimatedSVGNode.this);\r
-\r
-            //System.out.println("ANIMATE(" + engine.get("time") + ")");\r
-            engine.eval(script);\r
-\r
-            diagramCache.updateTime(0);\r
-\r
-            buffer = null;\r
-\r
-        } catch (ScriptException e) {\r
-            e.printStackTrace(); // Just report the error..\r
-        } catch (Throwable t) {\r
-            t.printStackTrace();\r
-        }\r
-\r
-//            }\r
-//        });\r
-    }\r
-\r
-    protected Map<String, String> eventAnimations = new HashMap<String, String>();\r
-\r
-    @ClientSide\r
-    public void registerEventAnimation(String event, String animation) {\r
-        eventAnimations.put(event, animation);\r
-    }\r
-\r
-    @ClientSide\r
-    public void animateEvent(String event) {\r
-        if(eventAnimations.containsKey(event)) {\r
-            animate(eventAnimations.get(event));\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Use UUID hash\r
-     */\r
-    @Override\r
-    protected String parseSVG() {\r
-        if (data == null)\r
-            return null;\r
-        try {\r
-            dataHash = UUID.randomUUID().toString();\r
-            // NOTE: hard-coded to assume all SVG data is encoded in UTF-8\r
-            InputStream is = new ByteArrayInputStream(data.getBytes("UTF-8"));\r
-            SVGUniverse univ = SVGCache.getSVGUniverse();\r
-            if (diagramCache != null)\r
-                univ.decRefCount(diagramCache.getXMLBase());\r
-            diagramCache = univ.getDiagram(SVGCache.getSVGUniverse().loadSVG(is, dataHash), false);\r
-            documentCache = data;\r
-            try {\r
-                setBounds((Rectangle2D) diagramCache.getRoot().getBoundingBox().clone());\r
-            } catch (SVGException e) {\r
-                setBounds((Rectangle2D) diagramCache.getViewRect().clone());\r
-            }\r
-            univ.incRefCount(diagramCache.getXMLBase());\r
-        } catch (IOException e) {\r
-            diagramCache = null;\r
-        }\r
-\r
-        return dataHash;\r
-    }\r
-\r
-    @SuppressWarnings("unused")\r
-    private void print(SVGElement e, int indent) {\r
-        for(int i=0;i<indent;i++) System.err.print(" ");\r
-        System.err.println(e);\r
-        for(int i=0;i<e.getNumChildren();i++) {\r
-            print(e.getChild(i), indent+2);\r
-        }\r
-        for(Object o : e.getPresentationAttributes()) {\r
-            for(int i=0;i<indent;i++) System.err.print(" ");\r
-            System.err.print("  " + o);\r
-            System.err.print("=");\r
-            StyleAttribute sa = e.getPresAbsolute((String)o);\r
-            System.err.println(sa.getStringValue());\r
-\r
-        }\r
-    }\r
-\r
-    /**\r
-     * ..skip buffering\r
-     */\r
-    @Override\r
-    protected void initBuffer(Graphics2D g2d) {\r
-        if (dataHash == null) {\r
-            dataHash = parseSVG();\r
-        }\r
-\r
-        if (diagramCache == null) {\r
-            System.out.println("UNABLE TO PARSE ANIMATED SVG:\n" + data);\r
-            return;\r
-        }\r
-\r
-        diagramCache.setIgnoringClipHeuristic(true); // FIXME\r
-        if (diagramCache.getViewRect().getWidth() == 0 || diagramCache.getViewRect().getHeight() == 0) {\r
-            buffer = null;\r
-        } else {\r
-            if(useMipMap) {\r
-                if (G2DUtils.isAccelerated(g2d)) {\r
-                    buffer = new MipMapVRamBufferedImage(diagramCache, bounds, targetSize);\r
-                } else {\r
-                    buffer = new MipMapBufferedImage(diagramCache, bounds, targetSize);\r
-                }\r
-            } else {\r
-                // FIXME: for some reason, this code causes effects where the graphics, if rotated, will start to pixelate, translate and completely disappear in the end.\r
-                // See issue #2396.\r
-                if (G2DUtils.isAccelerated(g2d)) {\r
-                    buffer = new VRamBufferedImage(diagramCache, bounds, targetSize);\r
-                } else {\r
-                    buffer = new BufferedImage(diagramCache, bounds, targetSize);\r
-                }\r
-            }\r
-        }\r
-    }\r
-\r
-//    @Override\r
-//    public void handleEvent(AWTEvent event) {\r
-//        if(event.getID() == KeyEvent.KEY_PRESSED) {\r
-//            KeyEvent ke = (KeyEvent)event;\r
-//            switch(ke.getKeyCode()) {\r
-//                case KeyEvent.VK_LEFT:\r
-//                    animateEvent("LEFT");\r
-//                    break;\r
-//\r
-//                case KeyEvent.VK_RIGHT:\r
-//                    animateEvent("RIGHT");\r
-//                    break;\r
-//\r
-//                case KeyEvent.VK_UP:\r
-//                    animateEvent("UP");\r
-//                    break;\r
-//\r
-//                case KeyEvent.VK_DOWN:\r
-//                    animateEvent("DOWN");\r
-//                    break;\r
-//                default:\r
-//                    break;\r
-//            }\r
-//        }\r
-//\r
-//        super.handleEvent(event);\r
-//    }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.scenegraph.g2d.nodes;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+
+import org.simantics.scenegraph.utils.BufferedImage;
+import org.simantics.scenegraph.utils.G2DUtils;
+import org.simantics.scenegraph.utils.MipMapBufferedImage;
+import org.simantics.scenegraph.utils.MipMapVRamBufferedImage;
+import org.simantics.scenegraph.utils.VRamBufferedImage;
+
+import com.kitfox.svg.SVGCache;
+import com.kitfox.svg.SVGElement;
+import com.kitfox.svg.SVGException;
+import com.kitfox.svg.SVGUniverse;
+import com.kitfox.svg.xml.StyleAttribute;
+
+public class AnimatedSVGNode extends SVGNode {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 8698435757824280001L;
+    public Map<String, Object> valuezz = new HashMap<String, Object>();
+
+    protected String      script       = null;
+
+    @PropertySetter("VariableFilter")
+    @SyncField("script")
+    public void setScript(String script) {
+        this.script = script;
+    }
+
+    @SyncField("values")
+    public void setValue(String key, Object value) {
+        valuezz.put(key, value);
+        animate();
+    }
+    
+    @PropertySetter("valuezz")
+    @SyncField("valuezz")
+    public void setValuezz(Map<String, Object> val) {
+        valuezz = val;
+        animate();
+    }
+
+    @ClientSide
+    public void animate() {
+        animate(script);
+    }
+
+    @ClientSide
+    public void animate(final String script) {
+        if (script == null)
+            return;
+
+        if (dataHash == null) {
+            dataHash = parseSVG();
+        }
+        if (diagramCache == null) {
+            // Cannot execute script when SVGDiagram is not available
+            return;
+        }
+
+//        AnimationExecutor.getInstance().animate(new IAnimation() {
+//            @Override
+//            public void run() {
+        try {
+
+            ScriptEngineManager manager = new ScriptEngineManager();
+            ScriptEngine engine = manager.getEngineByName("JavaScript");
+
+            for(String key : valuezz.keySet()) {
+                engine.put(key, valuezz.get(key));
+            }
+            engine.put("time", System.currentTimeMillis());
+            engine.put("svg", diagramCache);
+            engine.put("t", AnimatedSVGNode.this);
+
+            //System.out.println("ANIMATE(" + engine.get("time") + ")");
+            engine.eval(script);
+
+            diagramCache.updateTime(0);
+
+            buffer = null;
+
+        } catch (ScriptException e) {
+            e.printStackTrace(); // Just report the error..
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+
+//            }
+//        });
+    }
+
+    protected Map<String, String> eventAnimations = new HashMap<String, String>();
+
+    @ClientSide
+    public void registerEventAnimation(String event, String animation) {
+        eventAnimations.put(event, animation);
+    }
+
+    @ClientSide
+    public void animateEvent(String event) {
+        if(eventAnimations.containsKey(event)) {
+            animate(eventAnimations.get(event));
+        }
+    }
+
+    /**
+     * Use UUID hash
+     */
+    @Override
+    protected String parseSVG() {
+        if (data == null)
+            return null;
+        try {
+            dataHash = UUID.randomUUID().toString();
+            // NOTE: hard-coded to assume all SVG data is encoded in UTF-8
+            InputStream is = new ByteArrayInputStream(data.getBytes("UTF-8"));
+            SVGUniverse univ = SVGCache.getSVGUniverse();
+            if (diagramCache != null)
+                univ.decRefCount(diagramCache.getXMLBase());
+            diagramCache = univ.getDiagram(SVGCache.getSVGUniverse().loadSVG(is, dataHash), false);
+            documentCache = data;
+            try {
+                setBounds((Rectangle2D) diagramCache.getRoot().getBoundingBox().clone());
+            } catch (SVGException e) {
+                setBounds((Rectangle2D) diagramCache.getViewRect().clone());
+            }
+            univ.incRefCount(diagramCache.getXMLBase());
+        } catch (IOException e) {
+            diagramCache = null;
+        }
+
+        return dataHash;
+    }
+
+    @SuppressWarnings("unused")
+    private void print(SVGElement e, int indent) {
+        for(int i=0;i<indent;i++) System.err.print(" ");
+        System.err.println(e);
+        for(int i=0;i<e.getNumChildren();i++) {
+            print(e.getChild(i), indent+2);
+        }
+        for(Object o : e.getPresentationAttributes()) {
+            for(int i=0;i<indent;i++) System.err.print(" ");
+            System.err.print("  " + o);
+            System.err.print("=");
+            StyleAttribute sa = e.getPresAbsolute((String)o);
+            System.err.println(sa.getStringValue());
+
+        }
+    }
+
+    /**
+     * ..skip buffering
+     */
+    @Override
+    protected void initBuffer(Graphics2D g2d) {
+        if (dataHash == null) {
+            dataHash = parseSVG();
+        }
+
+        if (diagramCache == null) {
+            System.out.println("UNABLE TO PARSE ANIMATED SVG:\n" + data);
+            return;
+        }
+
+        diagramCache.setIgnoringClipHeuristic(true); // FIXME
+        if (diagramCache.getViewRect().getWidth() == 0 || diagramCache.getViewRect().getHeight() == 0) {
+            buffer = null;
+        } else {
+            if(useMipMap) {
+                if (G2DUtils.isAccelerated(g2d)) {
+                    buffer = new MipMapVRamBufferedImage(diagramCache, bounds, targetSize);
+                } else {
+                    buffer = new MipMapBufferedImage(diagramCache, bounds, targetSize);
+                }
+            } else {
+                // FIXME: for some reason, this code causes effects where the graphics, if rotated, will start to pixelate, translate and completely disappear in the end.
+                // See issue #2396.
+                if (G2DUtils.isAccelerated(g2d)) {
+                    buffer = new VRamBufferedImage(diagramCache, bounds, targetSize);
+                } else {
+                    buffer = new BufferedImage(diagramCache, bounds, targetSize);
+                }
+            }
+        }
+    }
+
+//    @Override
+//    public void handleEvent(AWTEvent event) {
+//        if(event.getID() == KeyEvent.KEY_PRESSED) {
+//            KeyEvent ke = (KeyEvent)event;
+//            switch(ke.getKeyCode()) {
+//                case KeyEvent.VK_LEFT:
+//                    animateEvent("LEFT");
+//                    break;
+//
+//                case KeyEvent.VK_RIGHT:
+//                    animateEvent("RIGHT");
+//                    break;
+//
+//                case KeyEvent.VK_UP:
+//                    animateEvent("UP");
+//                    break;
+//
+//                case KeyEvent.VK_DOWN:
+//                    animateEvent("DOWN");
+//                    break;
+//                default:
+//                    break;
+//            }
+//        }
+//
+//        super.handleEvent(event);
+//    }
+
+}