hillion 02/03/08 00:45:28 Modified: sources/org/apache/batik/dom AbstractElement.java sources/org/apache/batik/swing/gvt GVTTreeRenderer.java sources/org/apache/batik/swing/svg GVTTreeBuilder.java SVGDocumentLoader.java SVGLoadEventDispatcher.java xdocs scriptFeatures.xml site-book.xml Added: xdocs javaScripting.xml Log: - Added more doc about scripting, - the xxxStarted events are now called synchroneously, - fixed a DOM bug: DOMAttrModified was fired twice when an Attr was changed. Revision Changes Path 1.13 +1 -7 xml-batik/sources/org/apache/batik/dom/AbstractElement.java Index: AbstractElement.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/AbstractElement.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- AbstractElement.java 19 Nov 2001 13:39:55 -0000 1.12 +++ AbstractElement.java 8 Mar 2002 08:45:27 -0000 1.13 @@ -29,7 +29,7 @@ * This class implements the {@link org.w3c.dom.Element} interface. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AbstractElement.java,v 1.12 2001/11/19 13:39:55 hillion Exp $ + * @version $Id: AbstractElement.java,v 1.13 2002/03/08 08:45:27 hillion Exp $ */ public abstract class AbstractElement extends AbstractParentChildNode @@ -235,13 +235,7 @@ attr.setValue(value); attributes.setNamedItemNS(attr); } else { - String s = attr.getValue(); attr.setValue(value); - fireDOMAttrModifiedEvent(qualifiedName, - attr, - s, - value, - MutationEvent.MODIFICATION); } } 1.6 +42 -24 xml-batik/sources/org/apache/batik/swing/gvt/GVTTreeRenderer.java Index: GVTTreeRenderer.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/gvt/GVTTreeRenderer.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- GVTTreeRenderer.java 21 Aug 2001 15:03:24 -0000 1.5 +++ GVTTreeRenderer.java 8 Mar 2002 08:45:27 -0000 1.6 @@ -15,6 +15,8 @@ import java.awt.image.BufferedImage; +import java.lang.reflect.InvocationTargetException; + import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -27,7 +29,7 @@ * a GVT tree. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: GVTTreeRenderer.java,v 1.5 2001/08/21 15:03:24 tkormann Exp $ + * @version $Id: GVTTreeRenderer.java,v 1.6 2002/03/08 08:45:27 hillion Exp $ */ public class GVTTreeRenderer extends Thread { @@ -160,24 +162,29 @@ /** * Fires a GVTTreeRendererEvent in the preparing phase. */ - protected void firePrepareEvent() { + protected void firePrepareEvent() throws InterruptedException { final Object[] dll = listeners.toArray(); if (dll.length > 0) { - final GVTTreeRendererEvent ev = new GVTTreeRendererEvent(this, null); + final GVTTreeRendererEvent ev = + new GVTTreeRendererEvent(this, null); if (EventQueue.isDispatchThread()) { for (int i = 0; i < dll.length; i++) { ((GVTTreeRendererListener)dll[i]).gvtRenderingPrepare(ev); } } else { - EventQueue.invokeLater(new Runnable() { - public void run() { - for (int i = 0; i < dll.length; i++) { - ((GVTTreeRendererListener)dll[i]).gvtRenderingPrepare(ev); - } - } - }); + try { + EventQueue.invokeAndWait(new Runnable() { + public void run() { + for (int i = 0; i < dll.length; i++) { + ((GVTTreeRendererListener)dll[i]). + gvtRenderingPrepare(ev); + } + } + }); + } catch (InvocationTargetException e) { + } } } } @@ -185,7 +192,8 @@ /** * Fires a GVTTreeRendererEvent in the starting phase. */ - protected void fireStartedEvent(BufferedImage bi) { + protected void fireStartedEvent(BufferedImage bi) + throws InterruptedException { final Object[] dll = listeners.toArray(); if (dll.length > 0) { @@ -196,13 +204,17 @@ ((GVTTreeRendererListener)dll[i]).gvtRenderingStarted(ev); } } else { - EventQueue.invokeLater(new Runnable() { - public void run() { - for (int i = 0; i < dll.length; i++) { - ((GVTTreeRendererListener)dll[i]).gvtRenderingStarted(ev); - } - } - }); + try { + EventQueue.invokeAndWait(new Runnable() { + public void run() { + for (int i = 0; i < dll.length; i++) { + ((GVTTreeRendererListener)dll[i]). + gvtRenderingStarted(ev); + } + } + }); + } catch (InvocationTargetException e) { + } } } } @@ -218,13 +230,15 @@ if (EventQueue.isDispatchThread()) { for (int i = 0; i < dll.length; i++) { - ((GVTTreeRendererListener)dll[i]).gvtRenderingCancelled(ev); + ((GVTTreeRendererListener)dll[i]). + gvtRenderingCancelled(ev); } } else { EventQueue.invokeLater(new Runnable() { public void run() { for (int i = 0; i < dll.length; i++) { - ((GVTTreeRendererListener)dll[i]).gvtRenderingCancelled(ev); + ((GVTTreeRendererListener)dll[i]). + gvtRenderingCancelled(ev); } } }); @@ -243,13 +257,15 @@ if (EventQueue.isDispatchThread()) { for (int i = 0; i < dll.length; i++) { - ((GVTTreeRendererListener)dll[i]).gvtRenderingCompleted(ev); + ((GVTTreeRendererListener)dll[i]). + gvtRenderingCompleted(ev); } } else { EventQueue.invokeLater(new Runnable() { public void run() { for (int i = 0; i < dll.length; i++) { - ((GVTTreeRendererListener)dll[i]).gvtRenderingCompleted(ev); + ((GVTTreeRendererListener)dll[i]). + gvtRenderingCompleted(ev); } } }); @@ -264,7 +280,8 @@ final Object[] dll = listeners.toArray(); if (dll.length > 0) { - final GVTTreeRendererEvent ev = new GVTTreeRendererEvent(this, null); + final GVTTreeRendererEvent ev = + new GVTTreeRendererEvent(this, null); if (EventQueue.isDispatchThread()) { for (int i = 0; i < dll.length; i++) { @@ -274,7 +291,8 @@ EventQueue.invokeLater(new Runnable() { public void run() { for (int i = 0; i < dll.length; i++) { - ((GVTTreeRendererListener)dll[i]).gvtRenderingFailed(ev); + ((GVTTreeRendererListener)dll[i]). + gvtRenderingFailed(ev); } } }); 1.7 +16 -11 xml-batik/sources/org/apache/batik/swing/svg/GVTTreeBuilder.java Index: GVTTreeBuilder.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/GVTTreeBuilder.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- GVTTreeBuilder.java 18 Feb 2002 09:11:59 -0000 1.6 +++ GVTTreeBuilder.java 8 Mar 2002 08:45:28 -0000 1.7 @@ -10,6 +10,8 @@ import java.awt.EventQueue; +import java.lang.reflect.InvocationTargetException; + import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -29,7 +31,7 @@ * a GVT tree. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: GVTTreeBuilder.java,v 1.6 2002/02/18 09:11:59 hillion Exp $ + * @version $Id: GVTTreeBuilder.java,v 1.7 2002/03/08 08:45:28 hillion Exp $ */ public class GVTTreeBuilder extends Thread { @@ -115,7 +117,7 @@ /** * Fires a GVTTreeBuilderEvent. */ - protected void fireStartedEvent() { + protected void fireStartedEvent() throws InterruptedException { final Object[] dll = listeners.toArray(); if (dll.length > 0) { @@ -127,15 +129,18 @@ dl.gvtBuildStarted(ev); } } else { - EventQueue.invokeLater(new Runnable() { - public void run() { - for (int i = 0; i < dll.length; i++) { - GVTTreeBuilderListener dl = - (GVTTreeBuilderListener)dll[i]; - dl.gvtBuildStarted(ev); - } - } - }); + try { + EventQueue.invokeAndWait(new Runnable() { + public void run() { + for (int i = 0; i < dll.length; i++) { + GVTTreeBuilderListener dl = + (GVTTreeBuilderListener)dll[i]; + dl.gvtBuildStarted(ev); + } + } + }); + } catch (InvocationTargetException e) { + } } } } 1.5 +32 -19 xml-batik/sources/org/apache/batik/swing/svg/SVGDocumentLoader.java Index: SVGDocumentLoader.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/SVGDocumentLoader.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- SVGDocumentLoader.java 19 Apr 2001 13:13:51 -0000 1.4 +++ SVGDocumentLoader.java 8 Mar 2002 08:45:28 -0000 1.5 @@ -12,6 +12,8 @@ import java.io.InterruptedIOException; +import java.lang.reflect.InvocationTargetException; + import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -26,7 +28,7 @@ * This class represents an object which loads asynchroneaously a SVG document. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: SVGDocumentLoader.java,v 1.4 2001/04/19 13:13:51 hillion Exp $ + * @version $Id: SVGDocumentLoader.java,v 1.5 2002/03/08 08:45:28 hillion Exp $ */ public class SVGDocumentLoader extends Thread { @@ -100,27 +102,32 @@ /** * Fires a SVGDocumentLoaderEvent. */ - protected void fireStartedEvent() { + protected void fireStartedEvent() throws InterruptedException { final Object[] dll = listeners.toArray(); if (dll.length > 0) { - final SVGDocumentLoaderEvent ev = new SVGDocumentLoaderEvent(this, null); + final SVGDocumentLoaderEvent ev = + new SVGDocumentLoaderEvent(this, null); if (EventQueue.isDispatchThread()) { for (int i = 0; i < dll.length; i++) { - SVGDocumentLoaderListener dl = (SVGDocumentLoaderListener)dll[i]; + SVGDocumentLoaderListener dl = + (SVGDocumentLoaderListener)dll[i]; dl.documentLoadingStarted(ev); } } else { - EventQueue.invokeLater(new Runnable() { - public void run() { - for (int i = 0; i < dll.length; i++) { - SVGDocumentLoaderListener dl = - (SVGDocumentLoaderListener)dll[i]; - dl.documentLoadingStarted(ev); - } - } - }); + try { + EventQueue.invokeAndWait(new Runnable() { + public void run() { + for (int i = 0; i < dll.length; i++) { + SVGDocumentLoaderListener dl = + (SVGDocumentLoaderListener)dll[i]; + dl.documentLoadingStarted(ev); + } + } + }); + } catch (InvocationTargetException e) { + } } } } @@ -132,11 +139,13 @@ final Object[] dll = listeners.toArray(); if (dll.length > 0) { - final SVGDocumentLoaderEvent ev = new SVGDocumentLoaderEvent(this, doc); + final SVGDocumentLoaderEvent ev = + new SVGDocumentLoaderEvent(this, doc); if (EventQueue.isDispatchThread()) { for (int i = 0; i < dll.length; i++) { - SVGDocumentLoaderListener dl = (SVGDocumentLoaderListener)dll[i]; + SVGDocumentLoaderListener dl = + (SVGDocumentLoaderListener)dll[i]; dl.documentLoadingCompleted(ev); } } else { @@ -160,11 +169,13 @@ final Object[] dll = listeners.toArray(); if (dll.length > 0) { - final SVGDocumentLoaderEvent ev = new SVGDocumentLoaderEvent(this, null); + final SVGDocumentLoaderEvent ev = + new SVGDocumentLoaderEvent(this, null); if (EventQueue.isDispatchThread()) { for (int i = 0; i < dll.length; i++) { - SVGDocumentLoaderListener dl = (SVGDocumentLoaderListener)dll[i]; + SVGDocumentLoaderListener dl = + (SVGDocumentLoaderListener)dll[i]; dl.documentLoadingFailed(ev); } } else { @@ -188,11 +199,13 @@ final Object[] dll = listeners.toArray(); if (dll.length > 0) { - final SVGDocumentLoaderEvent ev = new SVGDocumentLoaderEvent(this, null); + final SVGDocumentLoaderEvent ev = + new SVGDocumentLoaderEvent(this, null); if (EventQueue.isDispatchThread()) { for (int i = 0; i < dll.length; i++) { - SVGDocumentLoaderListener dl = (SVGDocumentLoaderListener)dll[i]; + SVGDocumentLoaderListener dl = + (SVGDocumentLoaderListener)dll[i]; dl.documentLoadingCancelled(ev); } } else { 1.4 +16 -11 xml-batik/sources/org/apache/batik/swing/svg/SVGLoadEventDispatcher.java Index: SVGLoadEventDispatcher.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/SVGLoadEventDispatcher.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SVGLoadEventDispatcher.java 25 Feb 2002 15:05:33 -0000 1.3 +++ SVGLoadEventDispatcher.java 8 Mar 2002 08:45:28 -0000 1.4 @@ -10,6 +10,8 @@ import java.awt.EventQueue; +import java.lang.reflect.InvocationTargetException; + import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -26,7 +28,7 @@ * This class dispatches the SVGLoadEvent event on a SVG document. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: SVGLoadEventDispatcher.java,v 1.3 2002/02/25 15:05:33 hillion Exp $ + * @version $Id: SVGLoadEventDispatcher.java,v 1.4 2002/03/08 08:45:28 hillion Exp $ */ public class SVGLoadEventDispatcher extends Thread { @@ -125,7 +127,7 @@ /** * Fires a SVGLoadEventDispatcherEvent. */ - protected void fireStartedEvent() { + protected void fireStartedEvent() throws InterruptedException { final Object[] dll = listeners.toArray(); if (dll.length > 0) { @@ -139,15 +141,18 @@ dl.svgLoadEventDispatchStarted(ev); } } else { - EventQueue.invokeLater(new Runnable() { - public void run() { - for (int i = 0; i < dll.length; i++) { - SVGLoadEventDispatcherListener dl = - (SVGLoadEventDispatcherListener)dll[i]; - dl.svgLoadEventDispatchStarted(ev); - } - } - }); + try { + EventQueue.invokeAndWait(new Runnable() { + public void run() { + for (int i = 0; i < dll.length; i++) { + SVGLoadEventDispatcherListener dl = + (SVGLoadEventDispatcherListener)dll[i]; + dl.svgLoadEventDispatchStarted(ev); + } + } + }); + } catch (InvocationTargetException e) { + } } } } 1.3 +7 -7 xml-batik/xdocs/scriptFeatures.xml Index: scriptFeatures.xml =================================================================== RCS file: /home/cvs/xml-batik/xdocs/scriptFeatures.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- scriptFeatures.xml 7 Mar 2002 15:23:12 -0000 1.2 +++ scriptFeatures.xml 8 Mar 2002 08:45:28 -0000 1.3 @@ -11,7 +11,7 @@ <!-- ========================================================================= --> <!-- author [EMAIL PROTECTED] --> -<!-- version $Id: scriptFeatures.xml,v 1.2 2002/03/07 15:23:12 hillion Exp $ --> +<!-- version $Id: scriptFeatures.xml,v 1.3 2002/03/08 08:45:28 hillion Exp $ --> <!-- ========================================================================= --> <document> <header> @@ -100,7 +100,7 @@ </tr> </table> <p> - Shows an confirm dialog with 'OK' and 'Cancel' button. + Shows a confirm dialog with 'OK' and 'Cancel' buttons. </p> <ul> <li><em>question</em>: The string to display</li> @@ -114,8 +114,8 @@ <table> <tr> - <td>Method <code>prompt</code>(<em>message</em>, - [<em>defaultValue</em>])</td> + <td>Method <code>prompt</code>(<em>message</em>[, + <em>defaultValue</em>])</td> </tr> </table> <p> @@ -208,7 +208,7 @@ </p> <ul> <li><em>script</em>: A string representing the script to evaluate.</li> - <li><em>interval</em>: The timeout in milliseconds.</li> + <li><em>timeout</em>: The timeout in milliseconds.</li> </ul> <p> This method returns an object which can be used with @@ -231,7 +231,7 @@ </p> <ul> <li><em>function</em>: A function to call.</li> - <li><em>interval</em>: The timeout in milliseconds.</li> + <li><em>timeout</em>: The timeout in milliseconds.</li> </ul> <p> This method returns an object which can be used with @@ -247,7 +247,7 @@ </tr> </table> <p> - Cancels an timeout that was set by a call to <code>setTimeout</code>. + Cancels a timeout that was set by a call to <code>setTimeout</code>. </p> <ul> <li><em>timeoutID</em>: An object returned by a call to 1.27 +6 -4 xml-batik/xdocs/site-book.xml Index: site-book.xml =================================================================== RCS file: /home/cvs/xml-batik/xdocs/site-book.xml,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- site-book.xml 7 Mar 2002 15:16:50 -0000 1.26 +++ site-book.xml 8 Mar 2002 08:45:28 -0000 1.27 @@ -12,10 +12,10 @@ <!-- author [EMAIL PROTECTED] --> <!-- author [EMAIL PROTECTED] --> <!-- author [EMAIL PROTECTED] --> -<!-- version $Id: site-book.xml,v 1.26 2002/03/07 15:16:50 hillion Exp $ --> +<!-- version $Id: site-book.xml,v 1.27 2002/03/08 08:45:28 hillion Exp $ --> <!-- ========================================================================= --> -<book title="Apache Batik documentation" copyright="2000-2001 The Apache Software Foundation"> +<book title="Apache Batik documentation" copyright="2000-2002 The Apache Software Foundation"> <!-- ======================= --> <!-- Home --> <!-- ======================= --> @@ -58,11 +58,13 @@ <page id="architecture" label="Architecture" source="architecture.xml"/> <page id="svggen" label="Generator" source="svggen.xml" /> <page id="domapi" label="DOM API" source="domTutorial.xml" /> - <page id="scripting" label="Scripting Intro" source="scriptIntro.xml" /> - <page id="scriptfeatures" label="Script Features" source="scriptFeatures.xml" /> <page id="svgcanvas" label="JSVGCanvas" source="jsvgcanvas.xml" /> <page id="rasterizerTutorial" label="Transcoder API" source="rasterizerTutorial.xml"/> <separator/> + <page id="scripting" label="Scripting Intro" source="scriptIntro.xml" /> + <page id="scriptfeatures" label="Scripting Features" source="scriptFeatures.xml" /> + <page id="javaScripting" label="Java Scripting" source="javaScripting.xml" /> + <separator /> <page id="extendingBatik" label="Extensions" source="extendingBatik.xml" /> <separator/> <page id="test" label="Testing" source="testInfrastructure.xml"/> 1.1 xml-batik/xdocs/javaScripting.xml Index: javaScripting.xml =================================================================== <?xml version="1.0"?> <!DOCTYPE document SYSTEM "./dtd/document-v10.dtd"> <!-- ========================================================================= --> <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> <!-- --> <!-- This software is published under the terms of the Apache Software License --> <!-- version 1.1, a copy of which has been included with this distribution in --> <!-- the LICENSE file. --> <!-- ========================================================================= --> <!-- ========================================================================= --> <!-- author [EMAIL PROTECTED] --> <!-- version $Id: javaScripting.xml,v 1.1 2002/03/08 08:45:28 hillion Exp $ --> <!-- ========================================================================= --> <document> <header> <title>Scripting With Java</title> <authors> <person name="Stephane Hillion" email="[EMAIL PROTECTED]"/> </authors> </header> <body> <s1 title="How to manipulate a JSVGCanvas DOM"> <p> The follow code template demonstrates how to manipulate an SVG document displayed in a JSVGCanvas directly from a Java program. </p> <source> import java.awt.event.WindowEvent; import javax.swing.JFrame; import org.apache.batik.swing.JSVGCanvas; import org.apache.batik.swing.svg.SVGLoadEventDispatcherAdapter; import org.apache.batik.swing.svg.SVGLoadEventDispatcherEvent; import org.apache.batik.script.Window; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.events.Event; import org.w3c.dom.events.EventListener; import org.w3c.dom.events.EventTarget; public class SVGApplication { public static void main(String[] args) { new SVGApplication(); } JFrame frame; JSVGCanvas canvas; Document document; Window window; public SVGApplication() { frame = new JFrame(); canvas = new JSVGCanvas(); // Forces the canvas to always be dynamic even if the current // document does not contains scripting or animation. canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC); canvas.addSVGLoadEventDispatcherListener (new SVGLoadEventDispatcherAdapter() { public void svgLoadEventDispatchStarted (SVGLoadEventDispatcherEvent e) { // At this time the document is available... document = canvas.getSVGDocument(); // ...and the window object too. window = canvas.getUpdateManager(). getScriptingEnvironment().createWindow(); // Registers the listeners on the document // just before the SVGLoad event is // dispatched. registerListeners(); // It is time to pack the frame. frame.pack(); } }); frame.addWindowListener(new WindowAdapter() { public void windowOpened(WindowEvent e) { // Loads the base document now. canvas.setURI("doc.svg"); } }); frame.getContentPane().add(canvas); frame.setSize(800, 600); frame.show(); } public void registerListeners() { // Gets an element from the loaded document. Element elt = document.getElementById("elt-id"); // Adds a 'onload' listener ((EventTarget)elt).addEventListener("SVGLoad", new OnLoadAction(), false); // Adds a 'onclick' listener ((EventTarget)elt).addEventListener("click", new OnClickAction(), false); } public class OnLoadAction implements EventListener { public void handleEvent(Event evt) { // Make some action here... // For example start an animation loop: window.setInterval(new Animation(), 50); } } public class OnClickAction implements EventListener { public void handleEvent(Event evt) { // Make some actions here... } } public class Animation implements Runnable { public void run() { // Insert animation code here... } } } </source> </s1> <s1 title="Writing thread-safe code"> <p> The DOM listeners registered on the SVG document are called from the canvas update thread. To avoid race conditions do not manipulate the DOM tree from another thread.<br/> The way to switch from an external thread to the canvas update thread is to use the following code: </p> <source> // Returns immediately canvas.getUpdateManager().getUpdateRunnableQueue(). invokeLater(new Runnable() { // Insert some actions on the DOM here }); - or - // Waits until the Runnable is invoked canvas.getUpdateManager().getUpdateRunnableQueue(). invokeAndWait(new Runnable() { // Insert some actions on the DOM here }); </source> </s1> </body> </document>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]