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]