tkormann 01/11/19 00:29:25
Modified: sources/org/apache/batik/bridge SVGAElementBridge.java
SVGImageElementBridge.java
Log:
fix a bug in SVG image + <a>
Revision Changes Path
1.11 +6 -3 xml-batik/sources/org/apache/batik/bridge/SVGAElementBridge.java
Index: SVGAElementBridge.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGAElementBridge.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- SVGAElementBridge.java 2001/09/14 09:03:28 1.10
+++ SVGAElementBridge.java 2001/11/19 08:29:25 1.11
@@ -25,7 +25,7 @@
* Bridge class for the <a> element.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a>
- * @version $Id: SVGAElementBridge.java,v 1.10 2001/09/14 09:03:28 tkormann Exp $
+ * @version $Id: SVGAElementBridge.java,v 1.11 2001/11/19 08:29:25 tkormann Exp $
*/
public class SVGAElementBridge extends AbstractGraphicsNodeBridge {
@@ -74,7 +74,7 @@
target.addEventListener(SVG_EVENT_MOUSEOUT,
new CursorMouseOutListener(ctx.getUserAgent()),
- false);
+ false);
}
/**
@@ -108,6 +108,7 @@
Cursor cursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
userAgent.setSVGCursor(cursor);
userAgent.openLink(elt);
+ evt.stopPropagation();
}
}
@@ -135,9 +136,10 @@
Cursor cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
userAgent.setSVGCursor(cursor);
if (elt != null) {
- String href = XLinkSupport.getXLinkHref(elt);
+ String href = XLinkSupport.getXLinkHref(elt);
userAgent.displayMessage(href);
}
+ evt.stopPropagation();
}
}
@@ -165,6 +167,7 @@
Cursor cursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
userAgent.setSVGCursor(cursor);
userAgent.displayMessage("");
+ evt.stopPropagation();
}
}
}
1.32 +101 -100
xml-batik/sources/org/apache/batik/bridge/SVGImageElementBridge.java
Index: SVGImageElementBridge.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGImageElementBridge.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- SVGImageElementBridge.java 2001/11/14 10:54:23 1.31
+++ SVGImageElementBridge.java 2001/11/19 08:29:25 1.32
@@ -51,7 +51,7 @@
* Bridge class for the <image> element.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a>
- * @version $Id: SVGImageElementBridge.java,v 1.31 2001/11/14 10:54:23 tkormann Exp
$
+ * @version $Id: SVGImageElementBridge.java,v 1.32 2001/11/19 08:29:25 tkormann Exp
$
*/
public class SVGImageElementBridge extends AbstractGraphicsNodeBridge {
@@ -73,13 +73,13 @@
*
* @param ctx the bridge context to use
* @param e the element that describes the graphics node to build
- * @return a graphics node that represents the specified element
+ * @return a graphics node that represents the specified element
*/
public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) {
- // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage'
- if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) {
- return null;
- }
+ // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage'
+ if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) {
+ return null;
+ }
ImageNode imageNode = (ImageNode)super.createGraphicsNode(ctx, e);
@@ -166,14 +166,14 @@
// bind the specified element and its associated graphics node if needed
if (ctx.isDynamic()) {
- // HACK due to the way images are represented in GVT
- ImageNode imgNode = (ImageNode)node;
- if (imgNode.getImage() instanceof RasterImageNode) {
- // register the RasterImageNode instead
- ctx.bind(e, imgNode.getImage());
- } else {
- ctx.bind(e, node);
- }
+ // HACK due to the way images are represented in GVT
+ ImageNode imgNode = (ImageNode)node;
+ if (imgNode.getImage() instanceof RasterImageNode) {
+ // register the RasterImageNode instead
+ ctx.bind(e, imgNode.getImage());
+ } else {
+ ctx.bind(e, node);
+ }
BridgeEventSupport.addDOMListener(ctx, e);
}
SVGUtilities.bridgeChildren(ctx, e);
@@ -199,7 +199,7 @@
*
* @param ctx the bridge context
* @param e the image element
- * @param uriStr the uri of the image
+ * @param uriStr the uri of the image
*/
protected static GraphicsNode createRasterImageNode(BridgeContext ctx,
Element e,
@@ -216,21 +216,21 @@
return createSVGImageNode(ctx, e, (SVGDocument)obj);
}
node.setImage(img);
- Rectangle2D imgBounds = img.getBounds2D();
- node.setImageBounds(imgBounds);
+ Rectangle2D imgBounds = img.getBounds2D();
+ node.setImageBounds(imgBounds);
Rectangle2D bounds = getImageBounds(ctx, e);
- // create the implicit viewBox for the raster image. The viewBox for a
- // raster image is the size of the image
- float [] vb = new float[4];
- vb[0] = 0; // x
- vb[1] = 0; // y
- vb[2] = (float)imgBounds.getWidth(); // width
- vb[3] = (float)imgBounds.getHeight(); // height
-
- // handles the 'preserveAspectRatio', 'overflow' and 'clip' and sets the
- // appropriate AffineTransform to the image node
- initializeViewport(ctx, e, node, vb, bounds);
+ // create the implicit viewBox for the raster image. The viewBox for a
+ // raster image is the size of the image
+ float [] vb = new float[4];
+ vb[0] = 0; // x
+ vb[1] = 0; // y
+ vb[2] = (float)imgBounds.getWidth(); // width
+ vb[3] = (float)imgBounds.getHeight(); // height
+
+ // handles the 'preserveAspectRatio', 'overflow' and 'clip' and sets the
+ // appropriate AffineTransform to the image node
+ initializeViewport(ctx, e, node, vb, bounds);
return node;
}
@@ -258,83 +258,84 @@
SVGSVGElement svgElement = imgDocument.getRootElement();
GraphicsNode node = ctx.getGVTBuilder().build(ctx, svgElement);
- // HACK: remove the clip set by the SVGSVGElement as the overflow
- // and clip properties must be ignored. The clip will be set later
- // using the overflow and clip of the <image> element.
- node.setClip(null);
+ // HACK: remove the clip set by the SVGSVGElement as the overflow
+ // and clip properties must be ignored. The clip will be set later
+ // using the overflow and clip of the <image> element.
+ node.setClip(null);
result.getChildren().add(node);
- // create the implicit viewBox for the SVG image. The viewBox for a
- // SVG image is the viewBox of the outermost SVG element of the SVG file
- String viewBox =
- svgElement.getAttributeNS(null, SVG_VIEW_BOX_ATTRIBUTE);
- float [] vb = ViewBox.parseViewBoxAttribute(e, viewBox);
-
- // handles the 'preserveAspectRatio', 'overflow' and 'clip' and sets the
- // appropriate AffineTransform to the image node
+ // create the implicit viewBox for the SVG image. The viewBox for a
+ // SVG image is the viewBox of the outermost SVG element of the SVG file
+ String viewBox =
+ svgElement.getAttributeNS(null, SVG_VIEW_BOX_ATTRIBUTE);
+ float [] vb = ViewBox.parseViewBoxAttribute(e, viewBox);
+
+ // handles the 'preserveAspectRatio', 'overflow' and 'clip' and sets the
+ // appropriate AffineTransform to the image node
Rectangle2D bounds = getImageBounds(ctx, e);
- initializeViewport(ctx, e, result, vb, bounds);
+ initializeViewport(ctx, e, result, vb, bounds);
- // add a listener on the outermost svg element of the SVG image.
- // if an event occured inside the SVG image document, send it
- // to the <image> element (inside the original document).
- if (ctx.isDynamic()) {
- EventListener listener = new ForwardEventListener(svgElement, e);
- EventTarget target = (EventTarget)svgElement;
- target.addEventListener(SVG_EVENT_CLICK, listener, false);
- target.addEventListener(SVG_EVENT_MOUSEOVER, listener, false);
- target.addEventListener(SVG_EVENT_MOUSEOUT, listener, false);
- }
+ // add a listener on the outermost svg element of the SVG image.
+ // if an event occured inside the SVG image document, send it
+ // to the <image> element (inside the original document).
+ if (ctx.isDynamic()) {
+ EventListener listener = new ForwardEventListener(svgElement, e);
+ EventTarget target = (EventTarget)svgElement;
+ target.addEventListener(SVG_EVENT_CLICK, listener, false);
+ target.addEventListener(SVG_EVENT_MOUSEOVER, listener, false);
+ target.addEventListener(SVG_EVENT_MOUSEOUT, listener, false);
+ }
return result;
}
/**
* A simple DOM listener to forward events from the SVG image document to
- * the original document.
+ * the original document.
*/
protected static class ForwardEventListener implements EventListener {
- /**
- * The root element of the SVG image.
- */
- protected Element svgElement;
-
- /**
- * The image element.
- */
- protected Element imgElement;
-
- /**
- * Constructs a new <tt>ForwardEventListener</tt>
- */
- public ForwardEventListener(Element svgElement, Element imgElement) {
- this.svgElement = svgElement;
- this.imgElement = imgElement;
- }
-
+ /**
+ * The root element of the SVG image.
+ */
+ protected Element svgElement;
+
+ /**
+ * The image element.
+ */
+ protected Element imgElement;
+
+ /**
+ * Constructs a new <tt>ForwardEventListener</tt>
+ */
+ public ForwardEventListener(Element svgElement, Element imgElement) {
+ this.svgElement = svgElement;
+ this.imgElement = imgElement;
+ }
+
public void handleEvent(Event e) {
MouseEvent evt = (MouseEvent) e;
MouseEvent newMouseEvent = (MouseEvent)
// DOM Level 2 6.5 cast from Document to DocumentEvent is ok
((DocumentEvent)imgElement.getOwnerDocument()).createEvent("MouseEvents");
- newMouseEvent.initMouseEvent(evt.getType(),
- evt.getBubbles(),
- evt.getCancelable(),
- evt.getView(),
- evt.getDetail(),
- evt.getScreenX(),
- evt.getScreenY(),
- evt.getClientX(),
- evt.getClientY(),
- evt.getCtrlKey(),
- evt.getAltKey(),
- evt.getShiftKey(),
- evt.getMetaKey(),
- evt.getButton(),
- (EventTarget)imgElement);
- ((EventTarget)imgElement).dispatchEvent(newMouseEvent);
- }
+
+ newMouseEvent.initMouseEvent(evt.getType(),
+ evt.getBubbles(),
+ evt.getCancelable(),
+ evt.getView(),
+ evt.getDetail(),
+ evt.getScreenX(),
+ evt.getScreenY(),
+ evt.getClientX(),
+ evt.getClientY(),
+ evt.getCtrlKey(),
+ evt.getAltKey(),
+ evt.getShiftKey(),
+ evt.getMetaKey(),
+ evt.getButton(),
+ (EventTarget)imgElement);
+ ((EventTarget)imgElement).dispatchEvent(newMouseEvent);
+ }
}
/**
@@ -347,14 +348,14 @@
* @param e the image element that defines the properties
* @param node the graphics node
* @param vb the implicit viewBox definition
- * @param bounds the bounds of the image element
+ * @param bounds the bounds of the image element
*/
protected static void initializeViewport(BridgeContext ctx,
- Element e,
- GraphicsNode node,
- float [] vb,
- Rectangle2D bounds) {
-
+ Element e,
+ GraphicsNode node,
+ float [] vb,
+ Rectangle2D bounds) {
+
float x = (float)bounds.getX();
float y = (float)bounds.getY();
float w = (float)bounds.getWidth();
@@ -384,13 +385,13 @@
}
if (clip != null) {
- try {
- at = at.createInverse(); // clip in user space
- Filter filter = node.getGraphicsNodeRable();
- clip = at.createTransformedShape(clip);
- node.setClip(new ClipRable8Bit(filter, clip));
- } catch (java.awt.geom.NoninvertibleTransformException ex) {}
- }
+ try {
+ at = at.createInverse(); // clip in user space
+ Filter filter = node.getGraphicsNodeRable();
+ clip = at.createTransformedShape(clip);
+ node.setClip(new ClipRable8Bit(filter, clip));
+ } catch (java.awt.geom.NoninvertibleTransformException ex) {}
+ }
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]