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 tk...@apache.org on 2001/11/14 11:54:23 UTC
cvs commit: xml-batik/sources/org/apache/batik/bridge SVGImageElementBridge.java SVGTextElementBridge.java
tkormann 01/11/14 02:54:23
Modified: sources/org/apache/batik/bridge SVGImageElementBridge.java
SVGTextElementBridge.java
Log:
fix linking on image element (raster and SVG image).
Revision Changes Path
1.31 +102 -1 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.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- SVGImageElementBridge.java 2001/11/13 15:20:58 1.30
+++ SVGImageElementBridge.java 2001/11/14 10:54:23 1.31
@@ -41,11 +41,17 @@
import org.w3c.dom.svg.SVGDocument;
import org.w3c.dom.svg.SVGSVGElement;
+import org.w3c.dom.events.DocumentEvent;
+import org.w3c.dom.events.Event;
+import org.w3c.dom.events.EventListener;
+import org.w3c.dom.events.EventTarget;
+import org.w3c.dom.events.MouseEvent;
+
/**
* Bridge class for the <image> element.
*
* @author <a href="mailto:tkormann@apache.org">Thierry Kormann</a>
- * @version $Id: SVGImageElementBridge.java,v 1.30 2001/11/13 15:20:58 tkormann Exp $
+ * @version $Id: SVGImageElementBridge.java,v 1.31 2001/11/14 10:54:23 tkormann Exp $
*/
public class SVGImageElementBridge extends AbstractGraphicsNodeBridge {
@@ -139,6 +145,41 @@
}
/**
+ * Builds using the specified BridgeContext and element, the
+ * specified graphics node.
+ *
+ * @param ctx the bridge context to use
+ * @param e the element that describes the graphics node to build
+ * @param node the graphics node to build
+ */
+ public void buildGraphicsNode(BridgeContext ctx,
+ Element e,
+ GraphicsNode node) {
+ // 'opacity'
+ node.setComposite(CSSUtilities.convertOpacity(e));
+ // 'filter'
+ node.setFilter(CSSUtilities.convertFilter(e, node, ctx));
+ // 'mask'
+ node.setMask(CSSUtilities.convertMask(e, node, ctx));
+ // 'clip-path'
+ node.setClip(CSSUtilities.convertClipPath(e, node, ctx));
+
+ // 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);
+ }
+ BridgeEventSupport.addDOMListener(ctx, e);
+ }
+ SVGUtilities.bridgeChildren(ctx, e);
+ }
+
+ /**
* Creates an <tt>ImageNode</tt>.
*/
protected GraphicsNode instantiateGraphicsNode() {
@@ -233,7 +274,67 @@
// appropriate AffineTransform to the image node
Rectangle2D bounds = getImageBounds(ctx, e);
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);
+ }
+
return result;
+ }
+
+ /**
+ * A simple DOM listener to forward events from the SVG image document to
+ * 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;
+ }
+
+ 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);
+ }
}
/**
1.41 +2 -6 xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java
Index: SVGTextElementBridge.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- SVGTextElementBridge.java 2001/11/13 15:20:58 1.40
+++ SVGTextElementBridge.java 2001/11/14 10:54:23 1.41
@@ -56,7 +56,7 @@
* Bridge class for the <text> element.
*
* @author <a href="bill.haneman@ireland.sun.com>Bill Haneman</a>
- * @version $Id: SVGTextElementBridge.java,v 1.40 2001/11/13 15:20:58 tkormann Exp $
+ * @version $Id: SVGTextElementBridge.java,v 1.41 2001/11/14 10:54:23 tkormann Exp $
*/
public class SVGTextElementBridge extends AbstractSVGBridge
implements GraphicsNodeBridge, ErrorConstants {
@@ -1326,7 +1326,7 @@
}
- private class TextDecoration {
+ protected static class TextDecoration {
Paint underlinePaint;
Paint underlineStrokePaint;
@@ -1361,11 +1361,7 @@
strikethroughStrokePaint = td.strikethroughStrokePaint;
strikethroughStroke = td.strikethroughStroke;
}
-
-
}
-
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org