This is with Batik 1.6... I was having trouble getting an EventListener registered on a node in the DOM to receive any mouse events. The node was a <g> node, and events would be generated by some of the contained nodes but not others.
So I wrote a small test case (attached), but now I can't get ANY events to be emitted! Maybe I'm doing something stupid? Or is this a real bug? In the attached test case, clicking on the black square should cause something to be printed to System.out, but nothing happens. Any help appreciated... Thanks, -Archie __________________________________________________________________________ Archie Cobbs * CTO, Awarix * http://www.awarix.com
/* Demonstrates Batik bug where mouse events fail to be generated. */ import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Point; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.AffineTransform; import java.io.File; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Random; import java.util.Set; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.apache.batik.swing.JSVGCanvas; import org.apache.batik.swing.gvt.GVTTreeRendererEvent; import org.apache.batik.swing.gvt.GVTTreeRendererListener; import org.apache.batik.swing.svg.GVTTreeBuilderEvent; import org.apache.batik.swing.svg.GVTTreeBuilderListener; import org.apache.batik.swing.svg.SVGDocumentLoaderEvent; import org.apache.batik.swing.svg.SVGDocumentLoaderListener; import org.apache.batik.swing.svg.SVGLoadEventDispatcherEvent; import org.apache.batik.swing.svg.SVGLoadEventDispatcherListener; import org.w3c.dom.events.Event; import org.w3c.dom.events.EventListener; import org.w3c.dom.events.EventTarget; import org.w3c.dom.svg.SVGDocument; import org.w3c.dom.svg.SVGElement; import org.w3c.dom.svg.SVGPoint; import org.w3c.dom.svg.SVGSVGElement; public class ClickBug extends WindowAdapter implements SVGDocumentLoaderListener, GVTTreeBuilderListener, SVGLoadEventDispatcherListener, GVTTreeRendererListener, KeyListener, MouseListener, EventListener { private final String url; private final String nodeId; private final JFrame frame; private final JSVGCanvas canvas; private SVGDocument svg; private SVGElement theNode; private boolean didOneTimeStuff; public ClickBug(String url, String nodeId) { this.url = url; this.nodeId = nodeId; frame = new JFrame("ClickBug: url=" + url + " nodeId=\"" + nodeId + "\""); canvas = new JSVGCanvas(null, false, false); canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC); canvas.addSVGDocumentLoaderListener(this); canvas.addGVTTreeBuilderListener(this); canvas.addGVTTreeRendererListener(this); canvas.addSVGLoadEventDispatcherListener(this); canvas.addKeyListener(this); //canvas.addMouseListener(this); canvas.setFocusable(true); frame.addWindowListener(this); } public void go() { System.out.println("Loading " + url); canvas.setURI(url); } public void cancel() { System.out.println("Load canceled"); } public void showFrame() { SwingUtilities.invokeLater(new Runnable() { public void run() { frame.getContentPane().add(canvas); frame.pack(); Dimension size = frame.getSize(); Point center = GraphicsEnvironment .getLocalGraphicsEnvironment().getCenterPoint(); int x = (int)(center.getX() - size.getWidth() / 2); int y = (int)(center.getY() - size.getHeight() / 2); frame.setLocation(new Point(x, y)); frame.toFront(); frame.setVisible(true); } }); } void oneTimeStuff() { System.out.println("Doing one-time initialization"); svg = canvas.getSVGDocument(); theNode = (SVGElement)svg.getElementById(nodeId); if (theNode == null) { System.out.println("ERROR: no node with id=\"" + nodeId + "\" found"); System.exit(1); } EventTarget t = (EventTarget)theNode; t.addEventListener("mousedown", this, false); t.addEventListener("mouseup", this, false); t.addEventListener("mouseclick", this, false); t.addEventListener("mouseover", this, false); t.addEventListener("mouseout", this, false); System.out.println("Added EventListeners to node \"" + nodeId + "\": " + t); canvas.setRenderingTransform(new AffineTransform()); } // EventListener methods public void handleEvent(Event event) { System.out.println("GOT EVENT: " + event); } // SVGDocumentLoaderListener methods public void documentLoadingStarted(SVGDocumentLoaderEvent e) { System.out.println("Document loading started"); } public void documentLoadingCompleted(SVGDocumentLoaderEvent e) { System.out.println("Document loading completed"); } public void documentLoadingCancelled(SVGDocumentLoaderEvent e) { System.out.println("Document loading canceled"); } public void documentLoadingFailed(SVGDocumentLoaderEvent e) { System.out.println("Document loading failed"); cancel(); } // GVTTreeBuilderListener methods public void gvtBuildStarted(GVTTreeBuilderEvent e) { System.out.println("GVT build started"); } public void gvtBuildCompleted(GVTTreeBuilderEvent e) { System.out.println("GVT build completed"); showFrame(); } public void gvtBuildCancelled(GVTTreeBuilderEvent e) { System.out.println("GVT build canceled"); } public void gvtBuildFailed(GVTTreeBuilderEvent e) { System.out.println("GVT build failed"); cancel(); } // GVTTreeRendererListener methods public void gvtRenderingPrepare(GVTTreeRendererEvent e) { System.out.println("GVT rendering preparing"); } public void gvtRenderingStarted(GVTTreeRendererEvent e) { System.out.println("GVT rendering started"); } public void gvtRenderingCompleted(GVTTreeRendererEvent e) { System.out.println("GVT rendering complete"); if (didOneTimeStuff) return; didOneTimeStuff = true; canvas.getUpdateManager().getUpdateRunnableQueue().invokeLater( new Runnable() { public void run() { oneTimeStuff(); } } ); } public void gvtRenderingCancelled(GVTTreeRendererEvent e) { System.out.println("GVT rendering canceled"); } public void gvtRenderingFailed(GVTTreeRendererEvent e) { System.out.println("GVT rendering failed"); cancel(); } // SVGLoadEventDispatcherListener methods public void svgLoadEventDispatchCancelled( SVGLoadEventDispatcherEvent e) { System.out.println("Load event dispatch cancelled"); } public void svgLoadEventDispatchCompleted( SVGLoadEventDispatcherEvent e) { System.out.println("Load event dispatch completed"); } public void svgLoadEventDispatchFailed(SVGLoadEventDispatcherEvent e) { System.out.println("Load event dispatch failed"); } public void svgLoadEventDispatchStarted(SVGLoadEventDispatcherEvent e) { System.out.println("Load event dispatch started"); } // WindowListener methods public void windowClosing(WindowEvent e) { System.exit(0); } // KeyListener methods public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { switch (e.getKeyChar()) { case 'r': canvas.setRenderingTransform(new AffineTransform()); break; case 'q': System.exit(0); break; case '?': System.err.println("Hot keys:"); System.err.println(" r Reset view transformation"); System.err.println(" q Quit"); break; default: break; } } // MouseListener methods public void mouseClicked(MouseEvent e) { System.out.println("mouseClicked(): " + e); canvas.requestFocusInWindow(); } public void mousePressed(MouseEvent e) { System.out.println("mousePressed(): " + e); } public void mouseReleased(MouseEvent e) { System.out.println("mouseReleased(): " + e); } public void mouseEntered(MouseEvent e) { System.out.println("mouseEntered(): " + e); } public void mouseExited(MouseEvent e) { System.out.println("mouseExited(): " + e); } // Main entry point public static void main(String[] args) throws Exception { // Parse command line String url = "clickbug.svg"; String nodeId = "theNode"; try { int i; for (i = 0; i < args.length; i++) { if (!args[i].startsWith("-")) break; if (args[i].equals("-i")) { if (++i >= args.length) throw new IllegalArgumentException(); nodeId = args[i]; } else if (args[i].equals("--")) { i++; break; } else throw new IllegalArgumentException(); } switch (args.length - i) { case 0: break; case 1: url = args[i]; break; default: throw new IllegalArgumentException(); } } catch (IllegalArgumentException e) { System.err.println("Usage: java ClickBug [-i nodeId]" + " < filename | URL >"); System.exit(1); } // Convert filename into URL File f = new File(url); if (f.exists()) url = f.toURL().toString(); // Go new ClickBug(url, nodeId).go(); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]