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/02/22 12:30:54 UTC
cvs commit: xml-batik/sources/org/apache/batik/swing/svg JSVGComponent.java SVGLoadEventDispatcher.java
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:stephane@hillion.org">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:stephane@hillion.org">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:stephane@hillion.org">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:stephane@hillion.org">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:stephane@hillion.org">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: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org