You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by hi...@apache.org on 2002/03/08 09:45:28 UTC

cvs commit: xml-batik/xdocs javaScripting.xml scriptFeatures.xml site-book.xml

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:stephane@hillion.org">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:stephane@hillion.org">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:stephane@hillion.org">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:stephane@hillion.org">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:stephane@hillion.org">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 shillion@ilog.fr                                                     -->
  -<!-- 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 stephane@hillion.org                                               -->
   <!-- author tkormann@apache.org                                                -->
   <!-- author vincent.hardy@eng.sun.com                                          -->
  -<!-- 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 shillion@ilog.fr                                                     -->
  <!-- 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="shillion@ilog.fr"/>
      </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: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org