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 2001/04/19 15:05:36 UTC

cvs commit: xml-batik/sources/org/apache/batik/swing/svg JSVGComponent.java SVGDocumentLoader.java

hillion     01/04/19 06:05:36

  Modified:    sources/org/apache/batik/css/svg StrokeDasharrayFactory.java
               sources/org/apache/batik/swing/gvt JGVTComponent.java
               sources/org/apache/batik/swing/svg JSVGComponent.java
                        SVGDocumentLoader.java
  Log:
  - According to the spec, stroke-dasharray is a list of comma-separated
    numbers, with optional white-space. StrokeDasharrayFactory has been
    fixed to be conform to the spec.
  - The order the JSVGComponent events are fired is now garanteed to be
    load->build->render. Another sequence of events cannot start before
    the previous sequence has finished or has been interrupted.
    This should fix the history bugs and some other unexpected behaviors.
  
  Revision  Changes    Path
  1.7       +6 -11     xml-batik/sources/org/apache/batik/css/svg/StrokeDasharrayFactory.java
  
  Index: StrokeDasharrayFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/svg/StrokeDasharrayFactory.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StrokeDasharrayFactory.java	2001/04/10 17:27:15	1.6
  +++ StrokeDasharrayFactory.java	2001/04/19 13:05:34	1.7
  @@ -26,7 +26,7 @@
    * This class provides a factory for the 'stroke-dasharray' property values.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: StrokeDasharrayFactory.java,v 1.6 2001/04/10 17:27:15 hillion Exp $
  + * @version $Id: StrokeDasharrayFactory.java,v 1.7 2001/04/19 13:05:34 hillion Exp $
    */
   public class StrokeDasharrayFactory extends AbstractValueFactory {
       /**
  @@ -96,16 +96,11 @@
               if (lu == null) {
                   break;
               }
  -            if (lu.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) {
  -                throw CSSDOMExceptionFactory.createDOMException
  -                    (DOMException.INVALID_ACCESS_ERR,
  -                     "invalid.lexical.unit",
  -                     new Object[] { new Integer(lu.getLexicalUnitType()),
  -                                    getPropertyName() });
  -            }
  -	    lu = lu.getNextLexicalUnit();
  -            if (lu == null) {
  -                break;
  +            if (lu.getLexicalUnitType() == LexicalUnit.SAC_OPERATOR_COMMA) {
  +                lu = lu.getNextLexicalUnit();
  +                if (lu == null) {
  +                    break;
  +                }
               }
   	}
   	return list;
  
  
  
  1.8       +2 -1      xml-batik/sources/org/apache/batik/swing/gvt/JGVTComponent.java
  
  Index: JGVTComponent.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/gvt/JGVTComponent.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- JGVTComponent.java	2001/04/11 17:32:24	1.7
  +++ JGVTComponent.java	2001/04/19 13:05:35	1.8
  @@ -52,7 +52,7 @@
    * This class represents a component which can display a GVT tree.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: JGVTComponent.java,v 1.7 2001/04/11 17:32:24 hillion Exp $
  + * @version $Id: JGVTComponent.java,v 1.8 2001/04/19 13:05:35 hillion Exp $
    */
   public class JGVTComponent extends JComponent {
       
  @@ -236,6 +236,7 @@
        */
       public void stopProcessing() {
           if (gvtTreeRenderer != null) {
  +            needRender = false;
               gvtTreeRenderer.interrupt();
               interruptProgressivePaintThread();
           }
  
  
  
  1.15      +153 -24   xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java
  
  Index: JSVGComponent.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- JSVGComponent.java	2001/04/18 13:51:05	1.14
  +++ JSVGComponent.java	2001/04/19 13:05:35	1.15
  @@ -63,7 +63,7 @@
    * This class represents a Swing component which can display SVG.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: JSVGComponent.java,v 1.14 2001/04/18 13:51:05 hillion Exp $
  + * @version $Id: JSVGComponent.java,v 1.15 2001/04/19 13:05:35 hillion Exp $
    */
   public class JSVGComponent extends JGVTComponent {
   
  @@ -73,6 +73,11 @@
       protected SVGDocumentLoader documentLoader;
   
       /**
  +     * The next document loader to run.
  +     */
  +    protected SVGDocumentLoader nextDocumentLoader;
  +
  +    /**
        * The concrete bridge document loader.
        */
       protected DocumentLoader loader;
  @@ -83,6 +88,11 @@
       protected GVTTreeBuilder gvtTreeBuilder;
   
       /**
  +     * The next GVT tree builder to run.
  +     */
  +    protected GVTTreeBuilder nextGVTTreeBuilder;
  +
  +    /**
        * The current SVG document.
        */
       protected SVGDocument svgDocument;
  @@ -147,6 +157,9 @@
        * Stops the processing of the current document.
        */
       public void stopProcessing() {
  +        nextDocumentLoader = null;
  +        nextGVTTreeBuilder = null;
  +
           if (documentLoader != null) {
               documentLoader.interrupt();
           } else if (gvtTreeBuilder != null) {
  @@ -181,15 +194,28 @@
           fragmentIdentifier = newURI.getRef();
   
           loader = new DocumentLoader(userAgent.getXMLParserClassName());
  -        documentLoader = new SVGDocumentLoader(url, loader);
  -        documentLoader.setPriority(Thread.MIN_PRIORITY);
  +        nextDocumentLoader = new SVGDocumentLoader(url, loader);
  +        nextDocumentLoader.setPriority(Thread.MIN_PRIORITY);
   
           Iterator it = svgDocumentLoaderListeners.iterator();
           while (it.hasNext()) {
  -            documentLoader.addSVGDocumentLoaderListener
  +            nextDocumentLoader.addSVGDocumentLoaderListener
                   ((SVGDocumentLoaderListener)it.next());
           }
   
  +        if (documentLoader == null &&
  +            gvtTreeBuilder == null &&
  +            gvtTreeRenderer == null) {
  +            startDocumentLoader();
  +        }
  +    }
  +
  +    /**
  +     * Starts a loading thread.
  +     */
  +    private void startDocumentLoader() {
  +        documentLoader = nextDocumentLoader;
  +        nextDocumentLoader = null;
           documentLoader.start();
       }
   
  @@ -201,32 +227,49 @@
           if (!(doc.getImplementation() instanceof SVGDOMImplementation)) {
               throw new IllegalArgumentException("Invalid DOM implementation.");
           }
  -        svgDocument = doc;
  -        if (loader == null) {
  -            loader = new DocumentLoader(userAgent.getXMLParserClassName());
  +
  +        if (eventsEnabled && svgDocument != null) {
  +            // fire the unload event
  +            Event evt = svgDocument.createEvent("SVGEvents");
  +            evt.initEvent("SVGUnload", false, false);
  +            ((EventTarget)(svgDocument.getRootElement())).dispatchEvent(evt);
           }
   
  +        svgDocument = doc;
  +
           DefaultSVGContext ctx = (DefaultSVGContext)((SVGOMDocument)doc).getSVGContext();
           ctx.setUserStyleSheetURI(userAgent.getUserStyleSheetURI());
   
           Element root = doc.getDocumentElement();
           String znp = root.getAttributeNS(null, SVGConstants.SVG_ZOOM_AND_PAN_ATTRIBUTE);
  -        if (!znp.equals(SVGConstants.SVG_MAGNIFY_VALUE)) {
  -            disableInteractions = true;
  -        }
  +        disableInteractions = !znp.equals(SVGConstants.SVG_MAGNIFY_VALUE);
   
  -        gvtTreeBuilder = new GVTTreeBuilder(doc, bridgeContext = createBridgeContext());
  -        gvtTreeBuilder.setPriority(Thread.MIN_PRIORITY);
  +        bridgeContext = createBridgeContext();
  +        nextGVTTreeBuilder = new GVTTreeBuilder(doc, bridgeContext);
  +        nextGVTTreeBuilder.setPriority(Thread.MIN_PRIORITY);
   
           Iterator it = gvtTreeBuilderListeners.iterator();
           while (it.hasNext()) {
  -            gvtTreeBuilder.addGVTTreeBuilderListener
  +            nextGVTTreeBuilder.addGVTTreeBuilderListener
                   ((GVTTreeBuilderListener)it.next());
           }
   
           releaseRenderingReferences();
           initializeEventHandling();
   
  +        if (gvtTreeBuilder == null &&
  +            documentLoader == null &&
  +            gvtTreeRenderer == null) {
  +            startGVTTreeBuilder();
  +        }
  +    }
  +
  +    /**
  +     * Starts a tree builder.
  +     */
  +    private void startGVTTreeBuilder() {
  +        gvtTreeBuilder = nextGVTTreeBuilder;
  +        nextGVTTreeBuilder = null;
           gvtTreeBuilder.start();
       }
   
  @@ -256,6 +299,9 @@
        * Creates a new bridge context.
        */
       protected BridgeContext createBridgeContext() {
  +        if (loader == null) {
  +            loader = new DocumentLoader(userAgent.getXMLParserClassName());
  +        }
           return new BridgeContext(userAgent,
                                    rendererFactory.getRenderContext(),
                                    loader);
  @@ -355,12 +401,11 @@
            * Called when the loading of a document was completed.
            */
           public void documentLoadingCompleted(SVGDocumentLoaderEvent e) {
  -            if (eventsEnabled && svgDocument != null) {
  -                // fire the unload event
  -                Event evt = svgDocument.createEvent("SVGEvents");
  -                evt.initEvent("SVGUnload", false, false);
  -                ((EventTarget)(svgDocument.getRootElement())).dispatchEvent(evt);
  +            if (nextDocumentLoader != null) {
  +                startDocumentLoader();
  +                return;
               }
  +
               documentLoader = null;
               setSVGDocument(e.getSVGDocument());
           }
  @@ -369,15 +414,35 @@
            * Called when the loading of a document was cancelled.
            */
           public void documentLoadingCancelled(SVGDocumentLoaderEvent e) {
  +            if (nextDocumentLoader != null) {
  +                startDocumentLoader();
  +                return;
  +            }
  +
               documentLoader = null;
  +
  +            if (nextGVTTreeBuilder != null) {
  +                startGVTTreeBuilder();
  +                return;
  +            }
           }
   
           /**
            * Called when the loading of a document has failed.
            */
           public void documentLoadingFailed(SVGDocumentLoaderEvent e) {
  +            if (nextDocumentLoader != null) {
  +                startDocumentLoader();
  +                return;
  +            }
  +
               documentLoader = null;
               userAgent.displayError(((SVGDocumentLoader)e.getSource()).getException());
  +
  +            if (nextGVTTreeBuilder != null) {
  +                startGVTTreeBuilder();
  +                return;
  +            }
           }
   
           // GVTTreeBuilderListener //////////////////////////////////////////////
  @@ -394,10 +459,18 @@
            * Called when a build was completed.
            */
           public void gvtBuildCompleted(GVTTreeBuilderEvent e) {
  -            loader.dispose(); // purge loader cache
  -            loader = null;
  +            if (nextGVTTreeBuilder != null) {
  +                startGVTTreeBuilder();
  +                return;
  +            }
   
  +            loader = null;
               gvtTreeBuilder = null;
  +            if (nextDocumentLoader != null) {
  +                startDocumentLoader();
  +                return;
  +            }
  +
               setGraphicsNode(e.getGVTRoot(), false);
               Dimension2D dim = bridgeContext.getDocumentSize();
               setPreferredSize(new Dimension((int)dim.getWidth(), (int)dim.getHeight()));
  @@ -408,10 +481,17 @@
            * Called when a build was cancelled.
            */
           public void gvtBuildCancelled(GVTTreeBuilderEvent e) {
  -            loader.dispose(); // purge loader cache
  -            loader = null;
  +            if (nextGVTTreeBuilder != null) {
  +                startGVTTreeBuilder();
  +                return;
  +            }
   
  +            loader = null;
               gvtTreeBuilder = null;
  +            if (nextDocumentLoader != null) {
  +                startDocumentLoader();
  +                return;
  +            }
               image = null;
               repaint();
           }
  @@ -420,10 +500,18 @@
            * Called when a build failed.
            */
           public void gvtBuildFailed(GVTTreeBuilderEvent e) {
  -            loader.dispose(); // purge loader cache
  -            loader = null;
  +            if (nextGVTTreeBuilder != null) {
  +                startGVTTreeBuilder();
  +                return;
  +            }
   
  +            loader = null;
               gvtTreeBuilder = null;
  +            if (nextDocumentLoader != null) {
  +                startDocumentLoader();
  +                return;
  +            }
  +
               GraphicsNode gn = e.getGVTRoot();
               Dimension2D dim = bridgeContext.getDocumentSize();
               if (gn == null || dim == null) {
  @@ -446,12 +534,53 @@
           public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
               super.gvtRenderingCompleted(e);
   
  +            if (nextGVTTreeBuilder != null) {
  +                startGVTTreeBuilder();
  +                return;
  +            }
  +            if (nextDocumentLoader != null) {
  +                startDocumentLoader();
  +                return;
  +            }
  +
               if (eventsEnabled) {
                   Event evt = svgDocument.createEvent("SVGEvents");
                   evt.initEvent("SVGLoad", false, false);
                   ((EventTarget)(svgDocument.getRootElement())).dispatchEvent(evt);
                   ((EventTarget)svgDocument).addEventListener("DOMAttrModified",
                                           new MutationListener(bridgeContext), false);
  +            }
  +        }
  +
  +        /**
  +         * Called when a rendering was cancelled.
  +         */
  +        public void gvtRenderingCancelled(GVTTreeRendererEvent e) {
  +            super.gvtRenderingCancelled(e);
  +
  +            if (nextGVTTreeBuilder != null) {
  +                startGVTTreeBuilder();
  +                return;
  +            }
  +            if (nextDocumentLoader != null) {
  +                startDocumentLoader();
  +                return;
  +            }
  +        }
  +        
  +        /**
  +         * Called when a rendering failed.
  +         */
  +        public void gvtRenderingFailed(GVTTreeRendererEvent e) {
  +            super.gvtRenderingFailed(e);
  +
  +            if (nextGVTTreeBuilder != null) {
  +                startGVTTreeBuilder();
  +                return;
  +            }
  +            if (nextDocumentLoader != null) {
  +                startDocumentLoader();
  +                return;
               }
           }
   
  
  
  
  1.3       +2 -1      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SVGDocumentLoader.java	2001/03/30 14:31:13	1.2
  +++ SVGDocumentLoader.java	2001/04/19 13:05:35	1.3
  @@ -26,7 +26,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.2 2001/03/30 14:31:13 tkormann Exp $
  + * @version $Id: SVGDocumentLoader.java,v 1.3 2001/04/19 13:05:35 hillion Exp $
    */
   public class SVGDocumentLoader extends Thread {
   
  @@ -74,6 +74,7 @@
               exception = e;
               fireFailedEvent();
           }
  +        loader.dispose();
       }
   
       /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org