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 cj...@apache.org on 2001/02/07 16:59:59 UTC
cvs commit: xml-batik/sources/org/apache/batik/bridge BridgeEventSupport.java SVGAElementBridge.java SVGGElementBridge.java SVGImageElementBridge.java SVGSVGElementBridge.java SVGShapeElementBridge.java SVGSwitchElementBridge.java SVGTextElementBridge.java SVGUseElementBridge.java
cjolif 01/02/07 07:59:58
Modified: sources/org/apache/batik/bridge BridgeEventSupport.java
SVGAElementBridge.java SVGGElementBridge.java
SVGImageElementBridge.java SVGSVGElementBridge.java
SVGShapeElementBridge.java
SVGSwitchElementBridge.java
SVGTextElementBridge.java SVGUseElementBridge.java
Log:
event support now requires a SVGElement in parameter instead of Element+
some other smal re-writtings.
Revision Changes Path
1.6 +97 -23 xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java
Index: BridgeEventSupport.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- BridgeEventSupport.java 2001/02/07 11:07:54 1.5
+++ BridgeEventSupport.java 2001/02/07 15:59:44 1.6
@@ -40,11 +40,11 @@
* on the GVT root to propagate GVT events to the DOM.
* @author <a href="mailto:cjolif@ilog.fr>Christophe Jolif</a>
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: BridgeEventSupport.java,v 1.5 2001/02/07 11:07:54 cjolif Exp $
+ * @version $Id: BridgeEventSupport.java,v 1.6 2001/02/07 15:59:44 cjolif Exp $
*/
class BridgeEventSupport {
- private static final String[] EVENT_ATTRIBUTES = {
- // all
+ private static final String[] EVENT_ATTRIBUTES_GRAPHICS = {
+ // graphics + svg
"onfocusin",
"onfocusout",
"onactivate",
@@ -54,16 +54,24 @@
"onmouseover",
"onmouseout",
"onmousemove",
- "onload",
+ "onload"
+ };
+
+ private static final int FIRST_SVG_EVENT = 10;
+ private static final String[] EVENT_ATTRIBUTES_SVG = {
// document
"onunload",
"onabort",
"onerror",
"onresize",
"onscroll",
- "onzoom",
+ "onzoom"
+ };
+
+ private static final int FIRST_ANIMATION_EVENT = 16;
+ private static final String[] EVENT_ATTRIBUTES_ANIMATION = {
// animation
"onbegin",
"onend",
@@ -104,35 +112,95 @@
* when necessary.
* @param ctx the <code>BridgeContext</code> containing useful
* information.
- * @param element the DOM element corresponding to the node. It should
- * also be an event target.
+ * @param element the DOM SVGElement corresponding to the node. It should
+ * also be an instance of <code>EventTarget</code> otherwise no listener
+ * will be added.
* @param node the <code>GraphicsNode</code>.
*/
public static void addDOMListener(BridgeContext ctx,
- Element element) {
- // ability for scripts to be called
- EventTarget target = (EventTarget)element;
- String script = null;
- // <!> HACK (the cast) should be modified : call the method
- // with SVGElement's only
- SVGSVGElement svgElement = (SVGSVGElement)
- ((SVGElement)element).getOwnerSVGElement();
+ SVGElement element) {
+ EventTarget target = null;
+ try {
+ // ability for scripts to be called
+ target = (EventTarget)element;
+ } catch (ClassCastException e) {
+ // will not work on this one!
+ return;
+ }
+ SVGSVGElement svgElement = (SVGSVGElement)element.getOwnerSVGElement();
if (svgElement == null) {
- if (element instanceof SVGSVGElement) {
+ if (element.getLocalName().equals("svg")) {
svgElement = (SVGSVGElement)element;
} else {
- // disable scripting
+ // something goes wrong => disable scripting
return;
}
}
String language = svgElement.getContentScriptType();
Interpreter interpret = null;
+ String script = null;
// <!> TODO we need to memo listeners to be able to remove
- // them later.
- // <!> TODO be smarter : don't look for doc attr on other
- // elements.
- for (int i = 0; i < EVENT_ATTRIBUTES.length; i++) {
- if (!(script = element.getAttribute(EVENT_ATTRIBUTES[i])).
+ // them later when deconnecting the bridge binding...
+ if (element.getLocalName().equals("svg")) {
+ for (int i = 0; i < EVENT_ATTRIBUTES_SVG.length; i++) {
+ if (!(script = element.getAttribute(EVENT_ATTRIBUTES_SVG[i])).
+ equals("")) {
+ if (interpret == null) {
+ // try to get the intepreter only if we have
+ // a reason to do it!
+ interpret = ctx.getInterpreterPool().
+ getInterpreter(element.getOwnerDocument(), language);
+ // the interpreter is not avaible => stop it now!
+ if (interpret == null) {
+ UserAgent ua = ctx.getUserAgent();
+ if (ua != null)
+ ua.displayError("unknow language: "+language);
+ break;
+ }
+ }
+ target.
+ addEventListener(EVENT_NAMES[i+FIRST_SVG_EVENT],
+ new ScriptCaller(ctx.getUserAgent(),
+ script, interpret),
+ false);
+ }
+ }
+ // continue
+ } else
+ if (element.getLocalName().equals("set") ||
+ element.getLocalName().startsWith("animate")) {
+ for (int i = 0; i < EVENT_ATTRIBUTES_ANIMATION.length; i++) {
+ if (!(script =
+ element.getAttribute(EVENT_ATTRIBUTES_ANIMATION[i])).
+ equals("")) {
+ if (interpret == null) {
+ // try to get the intepreter only if we have
+ // a reason to do it!
+ interpret = ctx.getInterpreterPool().
+ getInterpreter(element.getOwnerDocument(),
+ language);
+ // the interpreter is not avaible => stop it now!
+ if (interpret == null) {
+ UserAgent ua = ctx.getUserAgent();
+ if (ua != null)
+ ua.displayError("unknow language: "+
+ language);
+ break;
+ }
+ }
+ target.
+ addEventListener(EVENT_NAMES[i+
+ FIRST_ANIMATION_EVENT],
+ new ScriptCaller(ctx.getUserAgent(),
+ script, interpret),
+ false);
+ }
+ }
+ // not other stuff to do on this kind of events
+ return;
+ }
+ for (int i = 0; i < EVENT_ATTRIBUTES_GRAPHICS.length; i++) {
+ if (!(script = element.getAttribute(EVENT_ATTRIBUTES_GRAPHICS[i])).
equals("")) {
if (interpret == null) {
// try to get the intepreter only if we have
@@ -156,10 +224,15 @@
}
}
+
public static void updateDOMListener(BridgeContext ctx,
Element element) {
}
+ /**
+ * Is called only for the root element in order to dispatch GVT
+ * events to the DOM.
+ */
public static void addGVTListener(BridgeContext ctx, Element svgRoot) {
UserAgent ua = ctx.getUserAgent();
if (ua != null) {
@@ -263,6 +336,7 @@
(int)Math.floor(pos.getY()));
// compute screen coordinates
GraphicsNode node = evt.getGraphicsNode();
+ // <!> TODO dispatch it only if pointers-event property ask for
Element elmt = context.getElement(node);
if (elmt == null) // should not appeared if binding on
return;
@@ -274,7 +348,7 @@
if ((evt.BUTTON3_MASK & evt.getModifiers()) != 0)
button = 2;
MouseEvent mevent =
- // DOM Level 2 6.5 cast form Document to DocumentEvent is ok
+ // DOM Level 2 6.5 cast from Document to DocumentEvent is ok
(MouseEvent)org.apache.batik.dom.events.EventSupport.
createEvent(org.apache.batik.dom.events.EventSupport.
MOUSE_EVENT_TYPE);
1.6 +2 -2 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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SVGAElementBridge.java 2001/02/07 09:38:27 1.5
+++ SVGAElementBridge.java 2001/02/07 15:59:45 1.6
@@ -49,7 +49,7 @@
* A factory for the <a> SVG element.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGAElementBridge.java,v 1.5 2001/02/07 09:38:27 tkormann Exp $
+ * @version $Id: SVGAElementBridge.java,v 1.6 2001/02/07 15:59:45 cjolif Exp $
*/
public class SVGAElementBridge implements GraphicsNodeBridge, SVGConstants {
@@ -107,7 +107,7 @@
false);
// <!> TODO only when binding is enabled
- BridgeEventSupport.addDOMListener(ctx, element);
+ BridgeEventSupport.addDOMListener(ctx, (SVGElement)element);
ctx.bind(element, gn);
}
1.6 +2 -2 xml-batik/sources/org/apache/batik/bridge/SVGGElementBridge.java
Index: SVGGElementBridge.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGGElementBridge.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SVGGElementBridge.java 2001/02/07 09:38:27 1.5
+++ SVGGElementBridge.java 2001/02/07 15:59:45 1.6
@@ -42,7 +42,7 @@
* A factory for the <g> SVG element.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGGElementBridge.java,v 1.5 2001/02/07 09:38:27 tkormann Exp $
+ * @version $Id: SVGGElementBridge.java,v 1.6 2001/02/07 15:59:45 cjolif Exp $
*/
public class SVGGElementBridge implements GraphicsNodeBridge, SVGConstants {
@@ -94,7 +94,7 @@
node.setClip(clip);
// <!> TODO only when binding is enabled
- BridgeEventSupport.addDOMListener(ctx, element);
+ BridgeEventSupport.addDOMListener(ctx, (SVGElement)element);
ctx.bind(element, node);
}
1.7 +2 -2 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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SVGImageElementBridge.java 2001/02/07 09:38:27 1.6
+++ SVGImageElementBridge.java 2001/02/07 15:59:46 1.7
@@ -61,7 +61,7 @@
*
* @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
* @author <a href="mailto:Thomas.DeWeeese@Kodak.com">Thomas DeWeese</a>
- * @version $Id: SVGImageElementBridge.java,v 1.6 2001/02/07 09:38:27 tkormann Exp $
+ * @version $Id: SVGImageElementBridge.java,v 1.7 2001/02/07 15:59:46 cjolif Exp $
*/
public class SVGImageElementBridge implements GraphicsNodeBridge,
SVGConstants {
@@ -155,7 +155,7 @@
node.setClip(clip);
// <!> TODO only when binding is enabled
- BridgeEventSupport.addDOMListener(ctx, element);
+ BridgeEventSupport.addDOMListener(ctx, (SVGElement)element);
}
protected GraphicsNode createBase64ImageNode(BridgeContext ctx,
1.6 +2 -2 xml-batik/sources/org/apache/batik/bridge/SVGSVGElementBridge.java
Index: SVGSVGElementBridge.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGSVGElementBridge.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SVGSVGElementBridge.java 2001/02/06 09:30:58 1.5
+++ SVGSVGElementBridge.java 2001/02/07 15:59:46 1.6
@@ -37,7 +37,7 @@
*
* @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGSVGElementBridge.java,v 1.5 2001/02/06 09:30:58 tkormann Exp $
+ * @version $Id: SVGSVGElementBridge.java,v 1.6 2001/02/07 15:59:46 cjolif Exp $
*/
public class SVGSVGElementBridge implements GraphicsNodeBridge, SVGConstants {
@@ -126,7 +126,7 @@
} catch (java.awt.geom.NoninvertibleTransformException ex) {}
// <!> TODO only when binding is enabled
- BridgeEventSupport.addDOMListener(ctx, element);
+ BridgeEventSupport.addDOMListener(ctx, svgElement);
ctx.bind(element, node);
ctx.setViewport(new SVGViewport(svgElement, uctx));
1.7 +2 -2 xml-batik/sources/org/apache/batik/bridge/SVGShapeElementBridge.java
Index: SVGShapeElementBridge.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGShapeElementBridge.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SVGShapeElementBridge.java 2001/02/07 09:38:27 1.6
+++ SVGShapeElementBridge.java 2001/02/07 15:59:46 1.7
@@ -41,7 +41,7 @@
*
* @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
* @author <a href="mailto:cjolif@ilog.fr">Christophe Jolif</a>
- * @version $Id: SVGShapeElementBridge.java,v 1.6 2001/02/07 09:38:27 tkormann Exp $
+ * @version $Id: SVGShapeElementBridge.java,v 1.7 2001/02/07 15:59:46 cjolif Exp $
*/
public abstract class SVGShapeElementBridge implements GraphicsNodeBridge,
SVGConstants {
@@ -104,7 +104,7 @@
node.setClip(clip);
// <!> TODO only when binding is enabled
- BridgeEventSupport.addDOMListener(ctx, element);
+ BridgeEventSupport.addDOMListener(ctx, svgElement);
ctx.bind(element, node);
}
1.6 +2 -6 xml-batik/sources/org/apache/batik/bridge/SVGSwitchElementBridge.java
Index: SVGSwitchElementBridge.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGSwitchElementBridge.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SVGSwitchElementBridge.java 2001/02/07 09:38:27 1.5
+++ SVGSwitchElementBridge.java 2001/02/07 15:59:47 1.6
@@ -22,19 +22,17 @@
import org.apache.batik.gvt.filter.Mask;
import org.apache.batik.util.SVGConstants;
import org.apache.batik.util.UnitProcessor;
-import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.css.CSSPrimitiveValue;
import org.w3c.dom.css.CSSStyleDeclaration;
import org.w3c.dom.css.ViewCSS;
import org.w3c.dom.svg.SVGElement;
-import org.w3c.dom.views.DocumentView;
/**
* A factory for the <switch> SVG element.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGSwitchElementBridge.java,v 1.5 2001/02/07 09:38:27 tkormann Exp $
+ * @version $Id: SVGSwitchElementBridge.java,v 1.6 2001/02/07 15:59:47 cjolif Exp $
*/
public class SVGSwitchElementBridge
implements GraphicsNodeBridge,
@@ -67,8 +65,6 @@
public void buildGraphicsNode(GraphicsNode gn,
BridgeContext ctx,
Element element) {
-
- Document document = element.getOwnerDocument();
CSSStyleDeclaration decl = CSSUtilities.getComputedStyle(element);
CSSPrimitiveValue val =
(CSSPrimitiveValue)decl.getPropertyCSSValue(ATTR_OPACITY);
@@ -85,7 +81,7 @@
gn.setClip(clip);
// <!> TODO only when binding is enabled
- BridgeEventSupport.addDOMListener(ctx, element);
+ BridgeEventSupport.addDOMListener(ctx, (SVGElement)element);
ctx.bind(element, gn);
}
1.12 +2 -2 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.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- SVGTextElementBridge.java 2001/02/07 09:38:27 1.11
+++ SVGTextElementBridge.java 2001/02/07 15:59:47 1.12
@@ -66,7 +66,7 @@
* A factory for the <text> SVG element.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGTextElementBridge.java,v 1.11 2001/02/07 09:38:27 tkormann Exp $
+ * @version $Id: SVGTextElementBridge.java,v 1.12 2001/02/07 15:59:47 cjolif Exp $
*/
public class SVGTextElementBridge implements GraphicsNodeBridge, SVGConstants {
protected final static Map fonts = new HashMap(11);
@@ -179,7 +179,7 @@
result.setClip(clip);
// <!> TODO only when binding is enabled
- BridgeEventSupport.addDOMListener(ctx, element);
+ BridgeEventSupport.addDOMListener(ctx, (SVGElement)element);
ctx.bind(element, result);
}
1.6 +2 -2 xml-batik/sources/org/apache/batik/bridge/SVGUseElementBridge.java
Index: SVGUseElementBridge.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGUseElementBridge.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SVGUseElementBridge.java 2001/02/07 09:38:28 1.5
+++ SVGUseElementBridge.java 2001/02/07 15:59:47 1.6
@@ -42,7 +42,7 @@
* A factory for the <use> SVG element.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGUseElementBridge.java,v 1.5 2001/02/07 09:38:28 tkormann Exp $
+ * @version $Id: SVGUseElementBridge.java,v 1.6 2001/02/07 15:59:47 cjolif Exp $
*/
public class SVGUseElementBridge
implements GraphicsNodeBridge,
@@ -121,7 +121,7 @@
gn.setClip(clip);
// <!> TODO only when binding is enabled
- BridgeEventSupport.addDOMListener(ctx, element);
+ BridgeEventSupport.addDOMListener(ctx, (SVGElement)element);
}
public void update(BridgeMutationEvent evt) {