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 &lt;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