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 &lt;a&gt; 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 &lt;g&gt; 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 &lt;switch&gt; 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 &lt;text&gt; 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 &lt;use&gt; 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) {