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:[EMAIL PROTECTED]";>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 &lt;text> element.
    *
    * @author <a href="[EMAIL PROTECTED]>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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to