hillion 02/02/22 03:30:54 Modified: sources/org/apache/batik/apps/svgbrowser JSVGViewerFrame.java sources/org/apache/batik/bridge ScriptingEnvironment.java UpdateManager.java sources/org/apache/batik/swing/svg JSVGComponent.java SVGLoadEventDispatcher.java Log: Zombie-hunting. Revision Changes Path 1.71 +24 -24 xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java Index: JSVGViewerFrame.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java,v retrieving revision 1.70 retrieving revision 1.71 diff -u -r1.70 -r1.71 --- JSVGViewerFrame.java 18 Feb 2002 09:11:58 -0000 1.70 +++ JSVGViewerFrame.java 22 Feb 2002 11:30:53 -0000 1.71 @@ -161,7 +161,7 @@ * This class represents a SVG viewer swing frame. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: JSVGViewerFrame.java,v 1.70 2002/02/18 09:11:58 hillion Exp $ + * @version $Id: JSVGViewerFrame.java,v 1.71 2002/02/22 11:30:53 hillion Exp $ */ public class JSVGViewerFrame extends JFrame @@ -1496,7 +1496,7 @@ */ public void documentLoadingStarted(SVGDocumentLoaderEvent e) { if (debug) { - System.out.println("Load started..."); + System.out.println("Document load started..."); time = System.currentTimeMillis(); } statusBar.setMainMessage(resources.getString("Message.documentLoad")); @@ -1509,7 +1509,7 @@ */ public void documentLoadingCompleted(SVGDocumentLoaderEvent e) { if (debug) { - System.out.print("Load completed in "); + System.out.print("Document load completed in "); System.out.println((System.currentTimeMillis() - time) + " ms"); } svgDocument = e.getSVGDocument(); @@ -1568,7 +1568,7 @@ */ public void documentLoadingCancelled(SVGDocumentLoaderEvent e) { if (debug) { - System.out.println("Load cancelled"); + System.out.println("Document load cancelled"); } statusBar.setMainMessage(""); statusBar.setMessage(resources.getString("Message.documentCancelled")); @@ -1581,7 +1581,7 @@ */ public void documentLoadingFailed(SVGDocumentLoaderEvent e) { if (debug) { - System.out.println("Load failed"); + System.out.println("Document load failed"); } statusBar.setMainMessage(""); statusBar.setMessage(resources.getString("Message.documentFailed")); @@ -1597,7 +1597,7 @@ */ public void gvtBuildStarted(GVTTreeBuilderEvent e) { if (debug) { - System.out.println("Build started..."); + System.out.println("GVT build started..."); time = System.currentTimeMillis(); } statusBar.setMainMessage(resources.getString("Message.treeBuild")); @@ -1610,7 +1610,7 @@ */ public void gvtBuildCompleted(GVTTreeBuilderEvent e) { if (debug) { - System.out.print("Build completed in "); + System.out.print("GVT build completed in "); System.out.println((System.currentTimeMillis() - time) + " ms"); } if (findDialog != null) { @@ -1635,7 +1635,7 @@ */ public void gvtBuildCancelled(GVTTreeBuilderEvent e) { if (debug) { - System.out.println("Build cancelled"); + System.out.println("GVT build cancelled"); } statusBar.setMainMessage(""); statusBar.setMessage(resources.getString("Message.treeCancelled")); @@ -1650,7 +1650,7 @@ */ public void gvtBuildFailed(GVTTreeBuilderEvent e) { if (debug) { - System.out.println("Build failed"); + System.out.println("GVT build failed"); } statusBar.setMainMessage(""); statusBar.setMessage(resources.getString("Message.treeFailed")); @@ -1670,11 +1670,11 @@ */ public void svgLoadEventDispatchStarted(SVGLoadEventDispatcherEvent e) { if (debug) { - System.out.println("onload dispatch started..."); + System.out.println("Onload dispatch started..."); time = System.currentTimeMillis(); } stopAction.update(true); - statusBar.setMainMessage("Message.onload"); + statusBar.setMainMessage(resources.getString("Message.onload")); } /** @@ -1682,7 +1682,7 @@ */ public void svgLoadEventDispatchCompleted(SVGLoadEventDispatcherEvent e) { if (debug) { - System.out.print("onload dispatch completed in "); + System.out.print("Onload dispatch completed in "); System.out.println((System.currentTimeMillis() - time) + " ms"); } stopAction.update(false); @@ -1695,7 +1695,7 @@ */ public void svgLoadEventDispatchCancelled(SVGLoadEventDispatcherEvent e) { if (debug) { - System.out.println("onload dispatch cancelled."); + System.out.println("Onload dispatch cancelled."); } stopAction.update(false); statusBar.setMainMessage(""); @@ -1707,7 +1707,7 @@ */ public void svgLoadEventDispatchFailed(SVGLoadEventDispatcherEvent e) { if (debug) { - System.out.println("onload dispatch failed."); + System.out.println("Onload dispatch failed."); } stopAction.update(false); statusBar.setMainMessage(""); @@ -1721,7 +1721,7 @@ */ public void gvtRenderingPrepare(GVTTreeRendererEvent e) { if (debug) { - System.out.println("Rendering preparation..."); + System.out.println("GVT rendering preparation..."); time = System.currentTimeMillis(); } stopAction.update(true); @@ -1734,10 +1734,10 @@ */ public void gvtRenderingStarted(GVTTreeRendererEvent e) { if (debug) { - System.out.print("Rendering prepared in "); + System.out.print("GVT rendering prepared in "); System.out.println((System.currentTimeMillis() - time) + " ms"); time = System.currentTimeMillis(); - System.out.println("Rendering started..."); + System.out.println("GVT rendering started..."); } // Do nothing } @@ -1747,7 +1747,7 @@ */ public void gvtRenderingCompleted(GVTTreeRendererEvent e) { if (debug) { - System.out.print("Rendering completed in "); + System.out.print("GVT rendering completed in "); System.out.println((System.currentTimeMillis() - time) + " ms"); } statusBar.setMainMessage(""); @@ -1767,7 +1767,7 @@ */ public void gvtRenderingCancelled(GVTTreeRendererEvent e) { if (debug) { - System.out.println("Rendering cancelled"); + System.out.println("GVT rendering cancelled"); } statusBar.setMainMessage(""); if (!svgCanvas.isDynamic()) { @@ -1781,7 +1781,7 @@ */ public void gvtRenderingFailed(GVTTreeRendererEvent e) { if (debug) { - System.out.println("Rendering failed"); + System.out.println("GVT rendering failed"); } statusBar.setMainMessage(""); if (!svgCanvas.isDynamic()) { @@ -1826,7 +1826,7 @@ */ public void managerStarted(UpdateManagerEvent e) { if (debug) { - System.out.println("Manager Started"); + System.out.println("Update manager started..."); } managerStopped = false; playAction.update(false); @@ -1839,7 +1839,7 @@ */ public void managerSuspended(UpdateManagerEvent e) { if (debug) { - System.out.println("Manager Suspended"); + System.out.println("Update manager suspended"); } playAction.update(true); pauseAction.update(false); @@ -1850,7 +1850,7 @@ */ public void managerResumed(UpdateManagerEvent e) { if (debug) { - System.out.println("Manager Resumed"); + System.out.println("Update manager resumed"); } playAction.update(false); pauseAction.update(true); @@ -1861,7 +1861,7 @@ */ public void managerStopped(UpdateManagerEvent e) { if (debug) { - System.out.println("Manager Stopped"); + System.out.println("Update Manager Stopped"); } managerStopped = true; playAction.update(false); 1.7 +12 -8 xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java Index: ScriptingEnvironment.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ScriptingEnvironment.java 21 Feb 2002 10:33:43 -0000 1.6 +++ ScriptingEnvironment.java 22 Feb 2002 11:30:54 -0000 1.7 @@ -52,7 +52,7 @@ * This class contains the informations needed by the SVG scripting. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: ScriptingEnvironment.java,v 1.6 2002/02/21 10:33:43 hillion Exp $ + * @version $Id: ScriptingEnvironment.java,v 1.7 2002/02/22 11:30:54 hillion Exp $ */ public class ScriptingEnvironment { @@ -477,15 +477,17 @@ } } + Event ev; + DocumentEvent de = (DocumentEvent)elt.getOwnerDocument(); + ev = de.createEvent("SVGEvents"); + ev.initEvent("SVGLoad", false, false); + EventTarget t = (EventTarget)elt; + final String s = elt.getAttributeNS(null, SVGConstants.SVG_ONLOAD_ATTRIBUTE); + EventListener l = null; if (s.length() > 0) { - Event ev; - DocumentEvent de = (DocumentEvent)elt.getOwnerDocument(); - ev = de.createEvent("SVGEvents"); - ev.initEvent("SVGLoad", false, false); - EventTarget t = (EventTarget)elt; - EventListener l = new EventListener() { + l = new EventListener() { public void handleEvent(Event evt) { try { interp.bindObject(EVENT_NAME, evt); @@ -501,7 +503,9 @@ } }; t.addEventListener("SVGLoad", l, false); - t.dispatchEvent(ev); + } + t.dispatchEvent(ev); + if (s.length() > 0) { t.removeEventListener("SVGLoad", l, false); } } 1.11 +45 -37 xml-batik/sources/org/apache/batik/bridge/UpdateManager.java Index: UpdateManager.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/UpdateManager.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- UpdateManager.java 21 Feb 2002 10:33:43 -0000 1.10 +++ UpdateManager.java 22 Feb 2002 11:30:54 -0000 1.11 @@ -44,7 +44,7 @@ * This class provides features to manage the update of an SVG document. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: UpdateManager.java,v 1.10 2002/02/21 10:33:43 hillion Exp $ + * @version $Id: UpdateManager.java,v 1.11 2002/02/22 11:30:54 hillion Exp $ */ public class UpdateManager implements RunnableQueue.RunHandler { @@ -170,7 +170,8 @@ * - The scripting lock is taken. Is is released by a call to * manageUpdates(). */ - public void dispatchSVGLoadEvent() throws InterruptedException { + public synchronized void dispatchSVGLoadEvent() + throws InterruptedException { // Locking avoid execution of scripts scheduled by calls // to the setTimeout() function. // The lock is be released by a call to manageUpdates(). @@ -188,27 +189,30 @@ public void manageUpdates(final ImageRenderer r) { updateRunnableQueue.invokeLater(new Runnable() { public void run() { - startingTime = System.currentTimeMillis(); + synchronized (UpdateManager.this) { + startingTime = System.currentTimeMillis(); - running = true; - renderer = r; + running = true; + renderer = r; - updateTracker = new UpdateTracker(); - RootGraphicsNode root = graphicsNode.getRoot(); - if (root != null){ - root.addTreeGraphicsNodeChangeListener(updateTracker); - } + updateTracker = new UpdateTracker(); + RootGraphicsNode root = graphicsNode.getRoot(); + if (root != null){ + root.addTreeGraphicsNodeChangeListener + (updateTracker); + } - repaintManager = - new RepaintManager(UpdateManager.this, renderer); - repaintRateManager = - new RepaintRateManager(UpdateManager.this); - repaintRateManager.start(); - - scriptingEnvironment.getScriptingLock().unlock(); - - fireManagerStartedEvent(); - started = true; + repaintManager = + new RepaintManager(UpdateManager.this, renderer); + repaintRateManager = + new RepaintRateManager(UpdateManager.this); + repaintRateManager.start(); + + scriptingEnvironment.getScriptingLock().unlock(); + + fireManagerStartedEvent(); + started = true; + } } }); } @@ -277,7 +281,7 @@ /** * Suspends the update manager. */ - public void suspend() { + public synchronized void suspend() { if (running) { suspendCalled = true; updateRunnableQueue.suspendExecution(false); @@ -287,7 +291,7 @@ /** * Resumes the update manager. */ - public void resume() { + public synchronized void resume() { if (!running) { updateRunnableQueue.resumeExecution(); } @@ -296,7 +300,7 @@ /** * Interrupts the manager tasks. */ - public void interrupt() { + public synchronized void interrupt() { if (updateRunnableQueue.getThread() != null) { if (started) { dispatchSVGUnLoadEvent(); @@ -304,11 +308,13 @@ resume(); updateRunnableQueue.invokeLater(new Runnable() { public void run() { - if (repaintRateManager != null) { - repaintRateManager.interrupt(); + synchronized (UpdateManager.this) { + if (repaintManager != null) { + repaintRateManager.interrupt(); + } + scriptingEnvironment.interruptScripts(); + updateRunnableQueue.getThread().interrupt(); } - scriptingEnvironment.interruptScripts(); - updateRunnableQueue.getThread().interrupt(); } }); } @@ -328,17 +334,19 @@ resume(); updateRunnableQueue.invokeLater(new Runnable() { public void run() { - Event evt = - ((DocumentEvent)document).createEvent("SVGEvents"); - evt.initEvent("SVGUnload", false, false); - ((EventTarget)(document.getDocumentElement())). - dispatchEvent(evt); - running = false; + synchronized (UpdateManager.this) { + Event evt = + ((DocumentEvent)document).createEvent("SVGEvents"); + evt.initEvent("SVGUnload", false, false); + ((EventTarget)(document.getDocumentElement())). + dispatchEvent(evt); + running = false; - repaintRateManager.interrupt(); - scriptingEnvironment.interruptScripts(); - updateRunnableQueue.getThread().interrupt(); - fireManagerStoppedEvent(); + repaintRateManager.interrupt(); + scriptingEnvironment.interruptScripts(); + updateRunnableQueue.getThread().interrupt(); + fireManagerStoppedEvent(); + } } }); } 1.43 +87 -18 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.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- JSVGComponent.java 21 Feb 2002 10:33:44 -0000 1.42 +++ JSVGComponent.java 22 Feb 2002 11:30:54 -0000 1.43 @@ -180,11 +180,27 @@ * building/rendering a document (invalid XML file, missing attributes...).</p> * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: JSVGComponent.java,v 1.42 2002/02/21 10:33:44 hillion Exp $ + * @version $Id: JSVGComponent.java,v 1.43 2002/02/22 11:30:54 hillion Exp $ */ public class JSVGComponent extends JGVTComponent { /** + * Means that the component must auto detect whether + * the current document is static or dynamic. + */ + public final static int AUTODETECT = 0; + + /** + * Means that all document must be considered as dynamic. + */ + public final static int ALWAYS_DYNAMIC = 1; + + /** + * Means that all document must be considered as static. + */ + public final static int ALWAYS_STATIC = 2; + + /** * The document loader. */ protected SVGDocumentLoader documentLoader; @@ -280,6 +296,11 @@ protected boolean isDynamicDocument; /** + * The document state. + */ + protected int documentState; + + /** * Creates a new JSVGComponent. */ public JSVGComponent() { @@ -315,6 +336,24 @@ } /** + * Sets the document state. The given value must be one of + * AUTODETECT, ALWAYS_DYNAMIC or ALWAYS_STATIC. + */ + public void setDocumentState(int state) { + documentState = state; + } + + /** + * Returns the current update manager. + */ + public UpdateManager getUpdateManager() { + if (nextUpdateManager != null) { + return nextUpdateManager; + } + return updateManager; + } + + /** * Resumes the processing of the current document. */ public void resumeProcessing() { @@ -345,6 +384,9 @@ gvtTreeBuilder.interrupt(); } else if (svgLoadEventDispatcher != null) { svgLoadEventDispatcher.interrupt(); + } else if (nextUpdateManager != null) { + nextUpdateManager.interrupt(); + nextUpdateManager = null; } else if (updateManager != null) { updateManager.interrupt(); } else { @@ -413,7 +455,16 @@ throw new IllegalArgumentException("Invalid DOM implementation."); } - isDynamicDocument = UpdateManager.isDynamicDocument(doc); + switch (documentState) { + case ALWAYS_STATIC: + isDynamicDocument = false; + break; + case ALWAYS_DYNAMIC: + isDynamicDocument = true; + break; + case AUTODETECT: + isDynamicDocument = UpdateManager.isDynamicDocument(doc); + } svgDocument = doc; @@ -498,21 +549,21 @@ * Starts a SVGLoadEventDispatcher thread. */ protected void startSVGLoadEventDispatcher(GraphicsNode root) { - nextUpdateManager = new UpdateManager(bridgeContext, - root, - svgDocument); - SVGLoadEventDispatcher d = + UpdateManager um = new UpdateManager(bridgeContext, + root, + svgDocument); + svgLoadEventDispatcher = new SVGLoadEventDispatcher(root, svgDocument, bridgeContext, - nextUpdateManager); + um); Iterator it = svgLoadEventDispatcherListeners.iterator(); while (it.hasNext()) { - d.addSVGLoadEventDispatcherListener + svgLoadEventDispatcher.addSVGLoadEventDispatcherListener ((SVGLoadEventDispatcherListener)it.next()); } - d.start(); + svgLoadEventDispatcher.start(); } /** @@ -851,7 +902,9 @@ */ public void svgLoadEventDispatchCompleted (SVGLoadEventDispatcherEvent e) { + nextUpdateManager = svgLoadEventDispatcher.getUpdateManager(); svgLoadEventDispatcher = null; + if (nextGVTTreeBuilder != null) { nextUpdateManager.interrupt(); nextUpdateManager = null; @@ -875,6 +928,7 @@ */ public void svgLoadEventDispatchCancelled (SVGLoadEventDispatcherEvent e) { + nextUpdateManager = svgLoadEventDispatcher.getUpdateManager(); svgLoadEventDispatcher = null; nextUpdateManager.interrupt(); @@ -895,6 +949,7 @@ */ public void svgLoadEventDispatchFailed (SVGLoadEventDispatcherEvent e) { + nextUpdateManager = svgLoadEventDispatcher.getUpdateManager(); svgLoadEventDispatcher = null; nextUpdateManager.interrupt(); @@ -953,6 +1008,11 @@ super.gvtRenderingCancelled(e); if (nextGVTTreeBuilder != null) { + if (nextUpdateManager != null) { + nextUpdateManager.interrupt(); + nextUpdateManager = null; + } + startGVTTreeBuilder(); return; } @@ -973,6 +1033,11 @@ super.gvtRenderingFailed(e); if (nextGVTTreeBuilder != null) { + if (nextUpdateManager != null) { + nextUpdateManager.interrupt(); + nextUpdateManager = null; + } + startGVTTreeBuilder(); return; } @@ -1117,20 +1182,24 @@ } } suspendInteractions = false; - - Object[] dll = updateManagerListeners.toArray(); - - if (dll.length > 0) { - for (int i = 0; i < dll.length; i++) { - ((UpdateManagerListener)dll[i]). - updateCompleted(e); - } - } } }); } catch (Exception ex) { } + + EventQueue.invokeLater(new Runnable() { + public void run() { + Object[] dll = updateManagerListeners.toArray(); + + if (dll.length > 0) { + for (int i = 0; i < dll.length; i++) { + ((UpdateManagerListener)dll[i]). + updateCompleted(e); + } + } + } + }); } /** 1.2 +11 -4 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.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SVGLoadEventDispatcher.java 18 Feb 2002 09:11:59 -0000 1.1 +++ SVGLoadEventDispatcher.java 22 Feb 2002 11:30:54 -0000 1.2 @@ -26,7 +26,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.1 2002/02/18 09:11:59 hillion Exp $ + * @version $Id: SVGLoadEventDispatcher.java,v 1.2 2002/02/22 11:30:54 hillion Exp $ */ public class SVGLoadEventDispatcher extends Thread { @@ -64,9 +64,9 @@ * Creates a new SVGLoadEventDispatcher. */ public SVGLoadEventDispatcher(GraphicsNode gn, - SVGDocument doc, - BridgeContext bc, - UpdateManager um) { + SVGDocument doc, + BridgeContext bc, + UpdateManager um) { svgDocument = doc; root = gn; bridgeContext = bc; @@ -89,6 +89,13 @@ exception = e; fireFailedEvent(); } + } + + /** + * Returns the update manager. + */ + public UpdateManager getUpdateManager() { + return updateManager; } /**
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]