tkormann    02/02/15 06:58:45

  Modified:    sources/org/apache/batik/bridge
                        AbstractGraphicsNodeBridge.java
                        AbstractSVGGradientElementBridge.java
                        BridgeContext.java BridgeUpdateEvent.java
                        BridgeUpdateHandler.java PaintServer.java
                        SVGCircleElementBridge.java
                        SVGEllipseElementBridge.java SVGGElementBridge.java
                        SVGImageElementBridge.java
                        SVGLineElementBridge.java
                        SVGLinearGradientElementBridge.java
                        SVGPathElementBridge.java
                        SVGPolygonElementBridge.java
                        SVGPolylineElementBridge.java
                        SVGRadialGradientElementBridge.java
                        SVGRectElementBridge.java SVGSVGElementBridge.java
                        SVGShapeElementBridge.java
                        SVGTextElementBridge.java SVGUseElementBridge.java
               sources/org/apache/batik/gvt CompositeShapePainter.java
  Log:
  first quick and dirty support for dynamic radial and linear gradient.
  
  Revision  Changes    Path
  1.13      +31 -3     
xml-batik/sources/org/apache/batik/bridge/AbstractGraphicsNodeBridge.java
  
  Index: AbstractGraphicsNodeBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/AbstractGraphicsNodeBridge.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- AbstractGraphicsNodeBridge.java   13 Feb 2002 15:01:14 -0000      1.12
  +++ AbstractGraphicsNodeBridge.java   15 Feb 2002 14:58:44 -0000      1.13
  @@ -39,10 +39,10 @@
    * </ul>
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: AbstractGraphicsNodeBridge.java,v 1.12 2002/02/13 15:01:14 
tkormann Exp $
  + * @version $Id: AbstractGraphicsNodeBridge.java,v 1.13 2002/02/15 14:58:44 
tkormann Exp $
    */
   public abstract class AbstractGraphicsNodeBridge extends AbstractSVGBridge
  -    implements GraphicsNodeBridge, ErrorConstants {
  +    implements BridgeUpdateHandler, GraphicsNodeBridge, ErrorConstants {
   
       /**
        * The element that has been handled by this bridge.
  @@ -106,6 +106,12 @@
       public void buildGraphicsNode(BridgeContext ctx,
                                     Element e,
                                     GraphicsNode node) {
  +
  +        // push 'this' as the current BridgeUpdateHandler for subbridges
  +        if (ctx.isDynamic()) {
  +            ctx.pushBridgeUpdateHandler(this);
  +        }
  +
           // 'opacity'
           node.setComposite(CSSUtilities.convertOpacity(e));
           // 'filter'
  @@ -122,6 +128,8 @@
               this.node = node;
               this.ctx = ctx;
               initializeDynamicSupport();
  +            // 'this' is no more the current BridgeUpdateHandler
  +            ctx.popBridgeUpdateHandler();
           }
   
           // Handle children elements such as <title>
  @@ -145,6 +153,26 @@
       }
   
       /**
  +     * Invoked when a bridge update is starting.
  +     *
  +     * @param evt the evt that describes the incoming update
  +     */
  +    public void bridgeUpdateStarting(BridgeUpdateEvent evt) {
  +        System.out.println("("+e.getLocalName()+" "+node+") update started "+
  +                           evt.getHandlerKey());
  +    }
  +
  +    /**
  +     * Invoked when a bridge update is completed.
  +     *
  +     * @param evt the evt that describes the update
  +     */
  +    public void bridgeUpdateCompleted(BridgeUpdateEvent evt) {
  +        System.out.println("("+e.getLocalName()+" "+node+") update completed "+
  +                           evt.getHandlerKey());
  +    }
  +
  +    /**
        * Handles DOMAttrModified events.
        *
        * @param evt the DOM mutation event
  @@ -152,7 +180,7 @@
       protected void handleDOMAttrModifiedEvent(MutationEvent evt) {
           String attrName = evt.getAttrName();
           if (attrName.equals(SVG_TRANSFORM_ATTRIBUTE)) {
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               
               String s = evt.getNewValue();
  
  
  
  1.4       +96 -10    
xml-batik/sources/org/apache/batik/bridge/AbstractSVGGradientElementBridge.java
  
  Index: AbstractSVGGradientElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/AbstractSVGGradientElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractSVGGradientElementBridge.java     11 Feb 2002 16:00:07 -0000      1.3
  +++ AbstractSVGGradientElementBridge.java     15 Feb 2002 14:58:44 -0000      1.4
  @@ -24,16 +24,32 @@
   
   import org.w3c.dom.Element;
   import org.w3c.dom.Node;
  +import org.w3c.dom.events.Event;
  +import org.w3c.dom.events.EventListener;
  +import org.w3c.dom.events.EventTarget;
  +import org.w3c.dom.events.MutationEvent;
   
   /**
    * Bridge class for vending gradients.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: AbstractSVGGradientElementBridge.java,v 1.3 2002/02/11 16:00:07 
tkormann Exp $
  + * @version $Id: AbstractSVGGradientElementBridge.java,v 1.4 2002/02/15 14:58:44 
tkormann Exp $
    */
   public abstract class AbstractSVGGradientElementBridge extends AbstractSVGBridge
       implements PaintBridge, ErrorConstants {
   
  +    protected BridgeContext ctx;
  +
  +    protected Element paintElement;
  +
  +    protected Element paintedElement;
  +
  +    protected GraphicsNode paintedNode;
  +
  +    protected float opacity;
  +
  +    protected Paint paint;
  +
       /**
        * Constructs a new AbstractSVGGradientElementBridge.
        */
  @@ -100,15 +116,36 @@
               transform = new AffineTransform();
           }
   
  -        return buildGradient(paintElement,
  -                             paintedElement,
  -                             paintedNode,
  -                             spreadMethod,
  -                             colorSpace,
  -                             transform,
  -                             colors,
  -                             offsets,
  -                             ctx);
  +        Paint paint = buildGradient(paintElement,
  +                                    paintedElement,
  +                                    paintedNode,
  +                                    spreadMethod,
  +                                    colorSpace,
  +                                    transform,
  +                                    colors,
  +                                    offsets,
  +                                    ctx);
  +
  +        if (ctx.isDynamic()) {
  +            if (handler == null) { // quick hack to fix dynamic
  +                this.handler = ctx.getCurrentBridgeUpdateHandler();
  +                this.handlerKey = ctx.getCurrentBridgeUpdateHandlerKey();
  +
  +                this.ctx = ctx;
  +                this.paintElement = paintElement;
  +                this.paintedElement = paintedElement;
  +                this.paintedNode = paintedNode;
  +                this.opacity = opacity;
  +
  +                ((EventTarget)paintElement).addEventListener
  +                    ("DOMAttrModified",
  +                     new DOMAttrModifiedEventListener(),
  +                     false);
  +            }
  +            this.paint = paint;
  +        }
  +
  +        return paint;
       }
   
       /**
  @@ -134,6 +171,55 @@
                               Color [] colors,
                               float [] offsets,
                               BridgeContext ctx);
  +    // dynamic support
  +
  +    /**
  +     * Handles DOMAttrModified events.
  +     *
  +     * @param evt the DOM mutation event
  +     */
  +    protected void handleDOMAttrModifiedEvent(MutationEvent evt) {
  +        String attrName = evt.getAttrName();
  +        if (attrName.equals(SVG_GRADIENT_TRANSFORM_ATTRIBUTE) ||
  +            attrName.equals(SVG_SPREAD_METHOD_ATTRIBUTE)) {
  +
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
  +            be.setOldValue(paint);
  +            fireBridgeUpdateStarting(be);
  +            this.paint = createPaint
  +                (ctx, paintElement, paintedElement, paintedNode, opacity);
  +            be.setNewValue(paint);
  +            fireBridgeUpdateCompleted(be);
  +        } else {
  +            System.out.println("Unsupported attribute modification: "+attrName+
  +                               " on "+paintElement.getLocalName());
  +        }
  +    }
  +
  +    /**
  +     * The listener class for 'DOMAttrModified' event.
  +     */
  +    protected class DOMAttrModifiedEventListener implements EventListener {
  +
  +        /**
  +         * Handles 'DOMAttrModfied' events and deleguates to the
  +         * 'handleDOMAttrModifiedEvent' method any changes to the
  +         * GraphicsNode if any.
  +         *
  +         * @param evt the DOM event
  +         */
  +        public void handleEvent(Event evt) {
  +            Element e = (Element)evt.getTarget();
  +            // <!> FIXME: need to check if e is a stop
  +            // check if an attribute has changed on the gradient or on a stop
  +            if (e != paintElement && e.getParentNode() != paintElement) {
  +                return;
  +            }
  +            handleDOMAttrModifiedEvent((MutationEvent)evt);
  +        }
  +    }
  +
  +    // convenient methods
   
       /**
        * Converts the spreadMethod attribute.
  
  
  
  1.34      +47 -2     xml-batik/sources/org/apache/batik/bridge/BridgeContext.java
  
  Index: BridgeContext.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeContext.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- BridgeContext.java        14 Feb 2002 12:37:54 -0000      1.33
  +++ BridgeContext.java        15 Feb 2002 14:58:44 -0000      1.34
  @@ -47,7 +47,7 @@
    * a SVG DOM tree such as the current viewport or the user agent.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: BridgeContext.java,v 1.33 2002/02/14 12:37:54 tkormann Exp $
  + * @version $Id: BridgeContext.java,v 1.34 2002/02/15 14:58:44 tkormann Exp $
    */
   public class BridgeContext implements ErrorConstants {
   
  @@ -81,6 +81,11 @@
       protected List viewportStack = new LinkedList();
   
       /**
  +     * The BridgeUpdateHandler stack. Used in building time.
  +     */
  +    protected List bridgeUpdateHandlerStack = new LinkedList();
  +
  +    /**
        * The user agent.
        */
       protected UserAgent userAgent;
  @@ -389,7 +394,7 @@
        * @param e the element that closes its viewport
        */
       public void closeViewport(Element e) {
  -        viewportMap.remove(e);
  +        //viewportMap.remove(e); FIXME: potential memory leak
           viewportStack.remove(0);
           if (viewportStack.size() == 0) {
               viewportStack = null;
  @@ -612,6 +617,46 @@
               }
           }
       }
  +
  +    // dynamic support
  +
  +    public void pushBridgeUpdateHandler(BridgeUpdateHandler handler) {
  +        bridgeUpdateHandlerStack.add(0, new BridgeUpdateHandlerInfo(handler));
  +    }
  +
  +    public void setCurrentBridgeUpdateHandlerKey(int handlerKey) {
  +        BridgeUpdateHandlerInfo info = 
  +            (BridgeUpdateHandlerInfo)bridgeUpdateHandlerStack.get(0);
  +        info.handlerKey = handlerKey;
  +    }
  +
  +    public BridgeUpdateHandler getCurrentBridgeUpdateHandler() {
  +        BridgeUpdateHandlerInfo info = 
  +            (BridgeUpdateHandlerInfo)bridgeUpdateHandlerStack.get(0);
  +        return info.handler;
  +    }
  +
  +    public int getCurrentBridgeUpdateHandlerKey() {
  +        BridgeUpdateHandlerInfo info = 
  +            (BridgeUpdateHandlerInfo)bridgeUpdateHandlerStack.get(0);
  +        return info.handlerKey;
  +    }
  +
  +    public void popBridgeUpdateHandler() {
  +        bridgeUpdateHandlerStack.remove(0);
  +    }
  +
  +    protected static class BridgeUpdateHandlerInfo {
  +
  +        protected BridgeUpdateHandler handler;
  +        protected int handlerKey;
  +
  +        public BridgeUpdateHandlerInfo(BridgeUpdateHandler handler) {
  +            this.handler = handler;
  +        }
  +    }
  +
  +    // bridge extensions support
   
      /**
        * Registers the bridges to handle SVG 1.0 elements.
  
  
  
  1.2       +27 -11    xml-batik/sources/org/apache/batik/bridge/BridgeUpdateEvent.java
  
  Index: BridgeUpdateEvent.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeUpdateEvent.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BridgeUpdateEvent.java    23 Jan 2002 14:14:07 -0000      1.1
  +++ BridgeUpdateEvent.java    15 Feb 2002 14:58:44 -0000      1.2
  @@ -8,65 +8,81 @@
   
   package org.apache.batik.bridge;
   
  +import java.util.EventObject;
  +
   /**
    * Describes an update from a <tt>DynamicBridge</tt>
    * 
    * @author <a href="mailto:[EMAIL PROTECTED]";>Vincent Hardy</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: BridgeUpdateEvent.java,v 1.1 2002/01/23 14:14:07 deweese Exp $
  + * @version $Id: BridgeUpdateEvent.java,v 1.2 2002/02/15 14:58:44 tkormann Exp $
    */
  -public class BridgeUpdateEvent {
  -    
  +public class BridgeUpdateEvent extends EventObject {
  +
  +    /** The handler key. */
       private int handlerKey;
  +
  +    /* The new value of the GVT product. */
       private Object newValue;
  +
  +    /* The old value of the GVT product. */
       private Object oldValue;
   
       /**
  +     * Constructs a new <tt>BridgeUpdateEvent</tt>.
        *
  +     * @param source the source of the event
        */
  -    public BridgeUpdateEvent(){
  +    public BridgeUpdateEvent(Object source){
  +        super(source);
       }
   
       /**
  -     *
  +     * Returns the BridgeUpdateHandler's key.
        */
       public int getHandlerKey(){
           return handlerKey;
       }
   
       /**
  -     * 
  +     * Sets the BridgeUpdateHandler's key to the specified value.
  +     *
  +     * @param handlerKey the key of the BridgeUpdateHandler
        */
       public void setHandlerKey(int handlerKey){
           this.handlerKey = handlerKey;
       }
   
       /**
  -     * 
  +     * Returns the new GVT product resulting from the update or null
  +     * if the update has not been completed yet.
        */
       public Object getNewValue(){
           return newValue;
       }
   
       /**
  -     * 
  +     * Sets the new GVT product to the specified value.
  +     *
  +     * @param newValue the new GVT product resulting from the update
        */
       public void setNewValue(Object newValue){
           this.newValue = newValue;
       }
   
       /**
  -     * 
  +     * Returns the old GVT product before the update.
        */
       public Object getOldValue(){
           return oldValue;
       }
   
       /**
  -     * 
  +     * Sets the old GVT product to the specified value.
  +     *
  +     * @param oldValue the old GVT product before the update
        */
       public void setOldValue(Object oldValue){
           this.oldValue = oldValue;
       }
  -
   }
  
  
  
  1.2       +10 -6     
xml-batik/sources/org/apache/batik/bridge/BridgeUpdateHandler.java
  
  Index: BridgeUpdateHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeUpdateHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BridgeUpdateHandler.java  23 Jan 2002 14:14:07 -0000      1.1
  +++ BridgeUpdateHandler.java  15 Feb 2002 14:58:44 -0000      1.2
  @@ -9,22 +9,26 @@
   package org.apache.batik.bridge;
   
   /**
  - * Interface for objects interesed in being notified of updates
  - * by a <tt>DynamicBridge</tt>.
  + * Interface for objects interested in being notified of updates
  + * by a <tt>Bridge</tt>.
    * 
    * @author <a href="mailto:[EMAIL PROTECTED]";>Vincent Hardy</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: BridgeUpdateHandler.java,v 1.1 2002/01/23 14:14:07 deweese Exp $
  + * @version $Id: BridgeUpdateHandler.java,v 1.2 2002/02/15 14:58:44 tkormann Exp $
    */
   public interface BridgeUpdateHandler {
       
       /**
  +     * Invoked when a bridge update starts.
        *
  +     * @param evt the evt that describes the incoming update
        */
  -    public void bridgeUpdateStarting(BridgeUpdateEvent e);
  +    void bridgeUpdateStarting(BridgeUpdateEvent evt);
   
       /**
  -     * 
  +     * Invoked when a bridge update ends.
  +     *
  +     * @param evt the evt that describes the update
        */
  -    public void bridgeUpdateCompleted(BridgeUpdateEvent e);
  +    void bridgeUpdateCompleted(BridgeUpdateEvent evt);
   }
  
  
  
  1.3       +12 -2     xml-batik/sources/org/apache/batik/bridge/PaintServer.java
  
  Index: PaintServer.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/PaintServer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PaintServer.java  15 Mar 2001 16:28:00 -0000      1.2
  +++ PaintServer.java  15 Feb 2002 14:58:44 -0000      1.3
  @@ -49,11 +49,15 @@
    * Paint using the ShapePainter interface.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: PaintServer.java,v 1.2 2001/03/15 16:28:00 tkormann Exp $
  + * @version $Id: PaintServer.java,v 1.3 2002/02/15 14:58:44 tkormann Exp $
    */
   public abstract class PaintServer
       implements SVGConstants, CSSConstants, ErrorConstants {
   
  +    public static final int KEY_STROKE = 1;
  +
  +    public static final int KEY_FILL = 2;
  +
       /**
        * No instance of this class is required.
        */
  @@ -154,10 +158,16 @@
                                                       ShapeNode node,
                                                       BridgeContext ctx) {
   
  +        if (ctx.isDynamic()) {
  +            ctx.setCurrentBridgeUpdateHandlerKey(KEY_FILL);
  +        }
           Paint fillPaint = convertFillPaint(e, node, ctx);
  +        if (ctx.isDynamic()) {
  +            ctx.setCurrentBridgeUpdateHandlerKey(KEY_STROKE);
  +        }
           Paint strokePaint = convertStrokePaint(e, node, ctx);
  -        Shape shape = node.getShape();
   
  +        Shape shape = node.getShape();
           if (fillPaint != null && strokePaint != null) {
               FillShapePainter fp = new FillShapePainter(shape);
               fp.setPaint(fillPaint);
  
  
  
  1.7       +2 -2      
xml-batik/sources/org/apache/batik/bridge/SVGCircleElementBridge.java
  
  Index: SVGCircleElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGCircleElementBridge.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SVGCircleElementBridge.java       13 Feb 2002 09:51:01 -0000      1.6
  +++ SVGCircleElementBridge.java       15 Feb 2002 14:58:44 -0000      1.7
  @@ -22,7 +22,7 @@
    * Bridge class for the &lt;circle> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGCircleElementBridge.java,v 1.6 2002/02/13 09:51:01 tkormann Exp 
$
  + * @version $Id: SVGCircleElementBridge.java,v 1.7 2002/02/15 14:58:44 tkormann Exp 
$
    */
   public class SVGCircleElementBridge extends SVGShapeElementBridge {
   
  @@ -108,7 +108,7 @@
               attrName.equals(SVG_CY_ATTRIBUTE) ||
               attrName.equals(SVG_R_ATTRIBUTE)) {
   
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               buildShape(ctx, e, (ShapeNode)node);
               if (((ShapeNode)node).getShape() == null) {
  
  
  
  1.7       +2 -2      
xml-batik/sources/org/apache/batik/bridge/SVGEllipseElementBridge.java
  
  Index: SVGEllipseElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGEllipseElementBridge.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SVGEllipseElementBridge.java      13 Feb 2002 09:51:01 -0000      1.6
  +++ SVGEllipseElementBridge.java      15 Feb 2002 14:58:44 -0000      1.7
  @@ -22,7 +22,7 @@
    * Bridge class for the &lt;ellipse> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGEllipseElementBridge.java,v 1.6 2002/02/13 09:51:01 tkormann 
Exp $
  + * @version $Id: SVGEllipseElementBridge.java,v 1.7 2002/02/15 14:58:44 tkormann 
Exp $
    */
   public class SVGEllipseElementBridge extends SVGShapeElementBridge {
   
  @@ -122,7 +122,7 @@
               attrName.equals(SVG_RX_ATTRIBUTE) ||
               attrName.equals(SVG_RY_ATTRIBUTE)) {
   
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               buildShape(ctx, e, (ShapeNode)node);
               if (((ShapeNode)node).getShape() == null) {
  
  
  
  1.14      +7 -4      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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- SVGGElementBridge.java    14 Feb 2002 12:37:54 -0000      1.13
  +++ SVGGElementBridge.java    15 Feb 2002 14:58:44 -0000      1.14
  @@ -26,7 +26,7 @@
    * Bridge class for the &lt;g> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGGElementBridge.java,v 1.13 2002/02/14 12:37:54 tkormann Exp $
  + * @version $Id: SVGGElementBridge.java,v 1.14 2002/02/15 14:58:44 tkormann Exp $
    */
   public class SVGGElementBridge extends AbstractGraphicsNodeBridge {
   
  @@ -124,7 +124,7 @@
           GVTBuilder builder = ctx.getGVTBuilder();
           GraphicsNode childNode = builder.build(ctx, childElt);
           if (childNode == null) {
  -            return;
  +            return; // the added element is not a graphic element
           }
           // add the graphics node
           Node n = e.getFirstChild();
  @@ -136,7 +136,7 @@
               // append at the end
               ((CompositeGraphicsNode)node).add(childNode);
           } else {
  -            // find the index into the CompositeGraphicsNode
  +            // find the index of the GraphicsNode to add
               int index = 0;
               while (n != lastChild && n != childElt) {
                   if (n.getNodeType() == Node.ELEMENT_NODE) {
  @@ -159,6 +159,9 @@
       protected void handleDOMNodeRemoved(MutationEvent evt) {
           //System.out.println("handleDOMNodeRemoved "+e.getLocalName());
           Element childElt = (Element)evt.getTarget();
  +        if (!ctx.hasGraphicsNodeBridge(childElt)) {
  +            return; // the removed element is not a graphic element
  +        }
           Node n = e.getFirstChild();
           Node lastChild = e.getLastChild();
           if (n == childElt) {
  @@ -169,7 +172,7 @@
               CompositeGraphicsNode cgn = (CompositeGraphicsNode)node;
               cgn.remove(cgn.size()-1);
           } else {
  -            // find the index into the CompositeGraphicsNode
  +            // find the index of the GraphicsNode to remove
               int index = 0;
               while (n != lastChild && n != childElt) {
                   if (n.getNodeType() == Node.ELEMENT_NODE) {
  
  
  
  1.37      +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.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- SVGImageElementBridge.java        13 Feb 2002 15:01:14 -0000      1.36
  +++ SVGImageElementBridge.java        15 Feb 2002 14:58:44 -0000      1.37
  @@ -52,7 +52,7 @@
    * Bridge class for the &lt;image> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGImageElementBridge.java,v 1.36 2002/02/13 15:01:14 tkormann Exp 
$
  + * @version $Id: SVGImageElementBridge.java,v 1.37 2002/02/15 14:58:44 tkormann Exp 
$
    */
   public class SVGImageElementBridge extends AbstractGraphicsNodeBridge {
   
  @@ -235,7 +235,7 @@
               attrName.equals(SVG_WIDTH_ATTRIBUTE) ||
               attrName.equals(SVG_HEIGHT_ATTRIBUTE)) {
   
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               
               // <!> FIXME: Not yet implemented
  
  
  
  1.7       +2 -2      
xml-batik/sources/org/apache/batik/bridge/SVGLineElementBridge.java
  
  Index: SVGLineElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGLineElementBridge.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SVGLineElementBridge.java 13 Feb 2002 09:51:01 -0000      1.6
  +++ SVGLineElementBridge.java 15 Feb 2002 14:58:44 -0000      1.7
  @@ -21,7 +21,7 @@
    * Bridge class for the &lt;line> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGLineElementBridge.java,v 1.6 2002/02/13 09:51:01 tkormann Exp $
  + * @version $Id: SVGLineElementBridge.java,v 1.7 2002/02/15 14:58:44 tkormann Exp $
    */
   public class SVGLineElementBridge extends SVGDecoratedShapeElementBridge {
   
  @@ -107,7 +107,7 @@
               attrName.equals(SVG_X2_ATTRIBUTE) ||
               attrName.equals(SVG_Y2_ATTRIBUTE)) {
   
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               buildShape(ctx, e, (ShapeNode)node);
               if (((ShapeNode)node).getShape() == null) {
  
  
  
  1.6       +37 -1     
xml-batik/sources/org/apache/batik/bridge/SVGLinearGradientElementBridge.java
  
  Index: SVGLinearGradientElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGLinearGradientElementBridge.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SVGLinearGradientElementBridge.java       15 Oct 2001 12:33:51 -0000      1.5
  +++ SVGLinearGradientElementBridge.java       15 Feb 2002 14:58:44 -0000      1.6
  @@ -19,12 +19,13 @@
   import org.apache.batik.gvt.GraphicsNode;
   
   import org.w3c.dom.Element;
  +import org.w3c.dom.events.MutationEvent;
   
   /**
    * Bridge class for the &lt;linearGradient> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGLinearGradientElementBridge.java,v 1.5 2001/10/15 12:33:51 
tkormann Exp $
  + * @version $Id: SVGLinearGradientElementBridge.java,v 1.6 2002/02/15 14:58:44 
tkormann Exp $
    */
   public class SVGLinearGradientElementBridge
       extends AbstractSVGGradientElementBridge {
  @@ -42,6 +43,13 @@
       }
   
       /**
  +     * Returns a new instance of this bridge.
  +     */
  +    public Bridge getInstance() {
  +        return new SVGLinearGradientElementBridge();
  +    }
  +
  +    /**
        * Builds a linear gradient according to the specified parameters.
        *
        * @param paintElement the element that defines a Paint
  @@ -138,5 +146,33 @@
                                           colorSpace,
                                           transform);
        }
  +    }
  +
  +    // dynamic support
  +
  +    /**
  +     * Handles DOMAttrModified events.
  +     *
  +     * @param evt the DOM mutation event
  +     */
  +    protected void handleDOMAttrModifiedEvent(MutationEvent evt) {
  +        String attrName = evt.getAttrName();
  +        if (attrName.equals(SVG_X1_ATTRIBUTE) ||
  +            attrName.equals(SVG_Y1_ATTRIBUTE) ||
  +            attrName.equals(SVG_X2_ATTRIBUTE) ||
  +            attrName.equals(SVG_Y2_ATTRIBUTE) ||
  +            attrName.equals(SVG_GRADIENT_UNITS_ATTRIBUTE)) {
  +            
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
  +            be.setOldValue(paint);
  +            fireBridgeUpdateStarting(be);
  +            // <!> FIXME: create a new paint each time
  +            this.paint = createPaint
  +                (ctx, paintElement, paintedElement, paintedNode, opacity);
  +            be.setNewValue(paint);
  +            fireBridgeUpdateCompleted(be);
  +        } else {
  +            super.handleDOMAttrModifiedEvent(evt);
  +        }
       }
   }
  
  
  
  1.10      +2 -2      
xml-batik/sources/org/apache/batik/bridge/SVGPathElementBridge.java
  
  Index: SVGPathElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGPathElementBridge.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SVGPathElementBridge.java 13 Feb 2002 09:51:01 -0000      1.9
  +++ SVGPathElementBridge.java 15 Feb 2002 14:58:44 -0000      1.10
  @@ -24,7 +24,7 @@
    * Bridge class for the &lt;path> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGPathElementBridge.java,v 1.9 2002/02/13 09:51:01 tkormann Exp $
  + * @version $Id: SVGPathElementBridge.java,v 1.10 2002/02/15 14:58:44 tkormann Exp $
    */
   public class SVGPathElementBridge extends SVGDecoratedShapeElementBridge {
   
  @@ -93,7 +93,7 @@
           String attrName = evt.getAttrName();
           if (attrName.equals(SVG_D_ATTRIBUTE)) {
   
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               buildShape(ctx, e, (ShapeNode)node);
               if (((ShapeNode)node).getShape() == null) {
  
  
  
  1.11      +2 -2      
xml-batik/sources/org/apache/batik/bridge/SVGPolygonElementBridge.java
  
  Index: SVGPolygonElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGPolygonElementBridge.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- SVGPolygonElementBridge.java      13 Feb 2002 09:51:01 -0000      1.10
  +++ SVGPolygonElementBridge.java      15 Feb 2002 14:58:44 -0000      1.11
  @@ -24,7 +24,7 @@
    * Bridge class for the &lt;polygon> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGPolygonElementBridge.java,v 1.10 2002/02/13 09:51:01 tkormann 
Exp $
  + * @version $Id: SVGPolygonElementBridge.java,v 1.11 2002/02/15 14:58:44 tkormann 
Exp $
    */
   public class SVGPolygonElementBridge extends SVGDecoratedShapeElementBridge {
   
  @@ -92,7 +92,7 @@
           String attrName = evt.getAttrName();
           if (attrName.equals(SVG_POINTS_ATTRIBUTE)) {
   
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               buildShape(ctx, e, (ShapeNode)node);
               if (((ShapeNode)node).getShape() == null) {
  
  
  
  1.10      +2 -2      
xml-batik/sources/org/apache/batik/bridge/SVGPolylineElementBridge.java
  
  Index: SVGPolylineElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGPolylineElementBridge.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SVGPolylineElementBridge.java     13 Feb 2002 09:51:01 -0000      1.9
  +++ SVGPolylineElementBridge.java     15 Feb 2002 14:58:44 -0000      1.10
  @@ -24,7 +24,7 @@
    * Bridge class for the &lt;polyline> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGPolylineElementBridge.java,v 1.9 2002/02/13 09:51:01 tkormann 
Exp $
  + * @version $Id: SVGPolylineElementBridge.java,v 1.10 2002/02/15 14:58:44 tkormann 
Exp $
    */
   public class SVGPolylineElementBridge extends SVGDecoratedShapeElementBridge {
   
  @@ -92,7 +92,7 @@
           String attrName = evt.getAttrName();
           if (attrName.equals(SVG_POINTS_ATTRIBUTE)) {
   
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               buildShape(ctx, e, (ShapeNode)node);
               if (((ShapeNode)node).getShape() == null) {
  
  
  
  1.7       +40 -1     
xml-batik/sources/org/apache/batik/bridge/SVGRadialGradientElementBridge.java
  
  Index: SVGRadialGradientElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGRadialGradientElementBridge.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SVGRadialGradientElementBridge.java       15 Oct 2001 12:33:51 -0000      1.6
  +++ SVGRadialGradientElementBridge.java       15 Feb 2002 14:58:44 -0000      1.7
  @@ -19,12 +19,13 @@
   import org.apache.batik.gvt.GraphicsNode;
   
   import org.w3c.dom.Element;
  +import org.w3c.dom.events.MutationEvent;
   
   /**
    * Bridge class for the &lt;radialGradient> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGRadialGradientElementBridge.java,v 1.6 2001/10/15 12:33:51 
tkormann Exp $
  + * @version $Id: SVGRadialGradientElementBridge.java,v 1.7 2002/02/15 14:58:44 
tkormann Exp $
    */
   public class SVGRadialGradientElementBridge
       extends AbstractSVGGradientElementBridge {
  @@ -43,6 +44,13 @@
       }
   
       /**
  +     * Returns a new instance of this bridge.
  +     */
  +    public Bridge getInstance() {
  +        return new SVGRadialGradientElementBridge();
  +    }
  +
  +    /**
        * Builds a radial gradient according to the specified parameters.
        *
        * @param paintElement the element that defines a Paint
  @@ -152,6 +160,37 @@
                                              spreadMethod,
                                              RadialGradientPaint.SRGB,
                                              transform);
  +        }
  +    }
  +
  +    // dynamic support
  +
  +    /**
  +     * Handles DOMAttrModified events.
  +     *
  +     * @param evt the DOM mutation event
  +     */
  +    protected void handleDOMAttrModifiedEvent(MutationEvent evt) {
  +        String attrName = evt.getAttrName();
  +        if (attrName.equals(SVG_CX_ATTRIBUTE) ||
  +            attrName.equals(SVG_CY_ATTRIBUTE) ||
  +            attrName.equals(SVG_R_ATTRIBUTE) ||
  +            attrName.equals(SVG_FX_ATTRIBUTE) ||
  +            attrName.equals(SVG_FY_ATTRIBUTE) ||
  +            attrName.equals(SVG_GRADIENT_UNITS_ATTRIBUTE)) {
  +            //long t0 = System.currentTimeMillis();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
  +            be.setOldValue(paint);
  +            fireBridgeUpdateStarting(be);
  +            // <!> FIXME: create a new paint each time
  +            this.paint = createPaint
  +                (ctx, paintElement, paintedElement, paintedNode, opacity);
  +            be.setNewValue(paint);
  +            fireBridgeUpdateCompleted(be);
  +            //long t1 = System.currentTimeMillis();
  +            //System.out.println("new grad: "+(t1-t0));
  +        } else {
  +            super.handleDOMAttrModifiedEvent(evt);
           }
       }
   }
  
  
  
  1.9       +2 -2      
xml-batik/sources/org/apache/batik/bridge/SVGRectElementBridge.java
  
  Index: SVGRectElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGRectElementBridge.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SVGRectElementBridge.java 13 Feb 2002 09:51:01 -0000      1.8
  +++ SVGRectElementBridge.java 15 Feb 2002 14:58:44 -0000      1.9
  @@ -24,7 +24,7 @@
    * Bridge class for the &lt;rect> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGRectElementBridge.java,v 1.8 2002/02/13 09:51:01 tkormann Exp $
  + * @version $Id: SVGRectElementBridge.java,v 1.9 2002/02/15 14:58:44 tkormann Exp $
    */
   public class SVGRectElementBridge extends SVGShapeElementBridge {
   
  @@ -168,7 +168,7 @@
               attrName.equals(SVG_RX_ATTRIBUTE) ||
               attrName.equals(SVG_RY_ATTRIBUTE)) {
   
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               buildShape(ctx, e, (ShapeNode)node);
               if (((ShapeNode)node).getShape() == null) {
  
  
  
  1.23      +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.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- SVGSVGElementBridge.java  13 Feb 2002 15:01:14 -0000      1.22
  +++ SVGSVGElementBridge.java  15 Feb 2002 14:58:44 -0000      1.23
  @@ -33,7 +33,7 @@
    * Bridge class for the &lt;svg> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGSVGElementBridge.java,v 1.22 2002/02/13 15:01:14 tkormann Exp $
  + * @version $Id: SVGSVGElementBridge.java,v 1.23 2002/02/15 14:58:44 tkormann Exp $
    */
   public class SVGSVGElementBridge extends AbstractSVGBridge
       implements GraphicsNodeBridge, ErrorConstants {
  @@ -248,7 +248,7 @@
       protected void handleDOMAttrModifiedEvent(MutationEvent evt) {
           String attrName = evt.getAttrName();
   
  -        BridgeUpdateEvent be = new BridgeUpdateEvent();
  +        BridgeUpdateEvent be = new BridgeUpdateEvent(this);
           fireBridgeUpdateStarting(be);
           System.out.println("Unsupported attribute modification: "+attrName+
                              " on "+e.getLocalName());
  
  
  
  1.14      +78 -1     
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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- SVGShapeElementBridge.java        12 Feb 2002 15:14:37 -0000      1.13
  +++ SVGShapeElementBridge.java        15 Feb 2002 14:58:45 -0000      1.14
  @@ -17,11 +17,20 @@
   
   import org.w3c.dom.Element;
   
  +
  +import org.apache.batik.gvt.CompositeShapePainter;
  +import org.apache.batik.gvt.FillShapePainter;
  +import org.apache.batik.gvt.StrokeShapePainter;
  +import java.awt.Paint;
  +import java.awt.Shape;
  +
  +
  +
   /**
    * The base bridge class for shapes. Subclasses bridge <tt>ShapeNode</tt>.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGShapeElementBridge.java,v 1.13 2002/02/12 15:14:37 tkormann Exp 
$
  + * @version $Id: SVGShapeElementBridge.java,v 1.14 2002/02/15 14:58:45 tkormann Exp 
$
    */
   public abstract class SVGShapeElementBridge extends AbstractGraphicsNodeBridge {
   
  @@ -84,8 +93,19 @@
       public void buildGraphicsNode(BridgeContext ctx,
                                     Element e,
                                     GraphicsNode node) {
  +        // push 'this' as the current BridgeUpdateHandler for subbridges
  +        if (ctx.isDynamic()) {
  +            ctx.pushBridgeUpdateHandler(this);
  +        }
  +
           ShapeNode shapeNode = (ShapeNode)node;
           shapeNode.setShapePainter(createShapePainter(ctx, e, shapeNode));
  +
  +        // 'this' is no more the current BridgeUpdateHandler
  +        if (ctx.isDynamic()) {
  +            ctx.popBridgeUpdateHandler();
  +        }
  +
           super.buildGraphicsNode(ctx, e, node);
       }
   
  @@ -131,5 +151,62 @@
        */
       public boolean isComposite() {
           return false;
  +    }
  +
  +    // dynamic support
  +
  +    /**
  +     * Invoked when a bridge update is starting.
  +     *
  +     * @param evt the evt that describes the incoming update
  +     */
  +    public void bridgeUpdateStarting(BridgeUpdateEvent evt) {
  +        //        System.out.println("("+e.getLocalName()+" "+node+") update 
started "+evt.getHandlerKey());
  +    }
  +
  +    /**
  +     * Invoked when a bridge update is completed.
  +     *
  +     * @param evt the evt that describes the update
  +     */
  +    public void bridgeUpdateCompleted(BridgeUpdateEvent evt) {
  +        //        System.out.println(">>> ("+e.getLocalName()+" "+node+") update 
completed "+ evt.getHandlerKey());
  +        switch(evt.getHandlerKey()) {
  +        case PaintServer.KEY_FILL: {
  +            Paint paint = (Paint)evt.getNewValue();
  +            ShapeNode shapeNode = (ShapeNode)node;
  +            Shape shape = shapeNode.getShape();
  +            ShapePainter painter = shapeNode.getShapePainter();
  +            if (painter instanceof FillShapePainter) {
  +                FillShapePainter fp = (FillShapePainter)painter;
  +                fp.setPaint(paint);
  +                shapeNode.setShapePainter(fp);
  +            } else if (painter instanceof CompositeShapePainter) {
  +                CompositeShapePainter cp = (CompositeShapePainter)painter;
  +                FillShapePainter fp = (FillShapePainter)cp.getShapePainter(0);
  +                fp.setPaint(paint);
  +                shapeNode.setShapePainter(cp);
  +            }
  +            break;
  +        } case PaintServer.KEY_STROKE: {
  +              Paint paint = (Paint)evt.getNewValue();
  +              ShapeNode shapeNode = (ShapeNode)node;
  +              Shape shape = shapeNode.getShape();
  +              ShapePainter painter = shapeNode.getShapePainter();
  +              if (painter instanceof StrokeShapePainter) {
  +                  StrokeShapePainter sp = (StrokeShapePainter)painter;
  +                  sp.setPaint(paint);
  +                  shapeNode.setShapePainter(sp);
  +              } else if (painter instanceof CompositeShapePainter) {
  +                  CompositeShapePainter cp = (CompositeShapePainter)painter;
  +                  StrokeShapePainter sp = 
  +                      (StrokeShapePainter)cp.getShapePainter(1);
  +                  sp.setPaint(paint);
  +                shapeNode.setShapePainter(cp);
  +              }
  +              break;
  +          }
  +        }
  +        //        System.out.println("<<< ("+e.getLocalName()+" "+node+") update 
completed "+ evt.getHandlerKey());
       }
   }
  
  
  
  1.49      +32 -3     
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.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- SVGTextElementBridge.java 13 Feb 2002 15:01:14 -0000      1.48
  +++ SVGTextElementBridge.java 15 Feb 2002 14:58:45 -0000      1.49
  @@ -60,10 +60,10 @@
    * Bridge class for the &lt;text> element.
    *
    * @author <a href="[EMAIL PROTECTED]>Bill Haneman</a>
  - * @version $Id: SVGTextElementBridge.java,v 1.48 2002/02/13 15:01:14 tkormann Exp $
  + * @version $Id: SVGTextElementBridge.java,v 1.49 2002/02/15 14:58:45 tkormann Exp $
    */
   public class SVGTextElementBridge extends AbstractSVGBridge
  -    implements GraphicsNodeBridge, ErrorConstants {
  +    implements BridgeUpdateHandler, GraphicsNodeBridge, ErrorConstants {
   
       /**
        * The element that has been handled by this bridge.
  @@ -193,6 +193,13 @@
       public void buildGraphicsNode(BridgeContext ctx,
                                     Element e,
                                     GraphicsNode node) {
  +
  +
  +        // push 'this' as the current BridgeUpdateHandler for subbridges
  +        if (ctx.isDynamic()) {
  +            ctx.pushBridgeUpdateHandler(this);
  +        }
  +
           e.normalize();
           AttributedString as = buildAttributedString(ctx, e, node);
           addGlyphPositionAttributes(as, e, ctx);
  @@ -220,6 +227,8 @@
               this.node = node;
               this.ctx = ctx;
               initializeDynamicSupport();
  +            // 'this' is no more the current BridgeUpdateHandler
  +            ctx.popBridgeUpdateHandler();
           }
   
           // Handle children elements such as <title>
  @@ -250,6 +259,26 @@
       }
   
       /**
  +     * Invoked when a bridge update is starting.
  +     *
  +     * @param evt the evt that describes the incoming update
  +     */
  +    public void bridgeUpdateStarting(BridgeUpdateEvent evt) {
  +        System.out.println("("+e.getLocalName()+" "+node+") update started "+
  +                           evt.getHandlerKey());
  +    }
  +
  +    /**
  +     * Invoked when a bridge update is completed.
  +     *
  +     * @param evt the evt that describes the update
  +     */
  +    public void bridgeUpdateCompleted(BridgeUpdateEvent evt) {
  +        System.out.println("("+e.getLocalName()+" "+node+") update completed "+
  +                           evt.getHandlerKey());
  +    }
  +
  +    /**
        * Handles DOMAttrModified events.
        *
        * @param evt the DOM mutation event
  @@ -257,7 +286,7 @@
       protected void handleDOMAttrModifiedEvent(MutationEvent evt) {
           String attrName = evt.getAttrName();
           if (attrName.equals(SVG_TRANSFORM_ATTRIBUTE)) {
  -            BridgeUpdateEvent be = new BridgeUpdateEvent();
  +            BridgeUpdateEvent be = new BridgeUpdateEvent(this);
               fireBridgeUpdateStarting(be);
               
               String s = evt.getNewValue();
  
  
  
  1.20      +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.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- SVGUseElementBridge.java  13 Feb 2002 15:01:15 -0000      1.19
  +++ SVGUseElementBridge.java  15 Feb 2002 14:58:45 -0000      1.20
  @@ -37,7 +37,7 @@
    * Bridge class for the &lt;use> element.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: SVGUseElementBridge.java,v 1.19 2002/02/13 15:01:15 tkormann Exp $
  + * @version $Id: SVGUseElementBridge.java,v 1.20 2002/02/15 14:58:45 tkormann Exp $
    */
   public class SVGUseElementBridge extends AbstractSVGBridge
       implements GraphicsNodeBridge, ErrorConstants {
  @@ -274,7 +274,7 @@
       protected void handleDOMAttrModifiedEvent(MutationEvent evt) {
           String attrName = evt.getAttrName();
   
  -        BridgeUpdateEvent be = new BridgeUpdateEvent();
  +        BridgeUpdateEvent be = new BridgeUpdateEvent(this);
           fireBridgeUpdateStarting(be);
           System.out.println("Unsupported attribute modification: "+attrName+
                              " on "+e.getLocalName());
  
  
  
  1.14      +20 -1     
xml-batik/sources/org/apache/batik/gvt/CompositeShapePainter.java
  
  Index: CompositeShapePainter.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/gvt/CompositeShapePainter.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- CompositeShapePainter.java        6 Feb 2002 17:52:36 -0000       1.13
  +++ CompositeShapePainter.java        15 Feb 2002 14:58:45 -0000      1.14
  @@ -21,7 +21,7 @@
    * A shape painter which consists of multiple shape painters.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: CompositeShapePainter.java,v 1.13 2002/02/06 17:52:36 deweese Exp $
  + * @version $Id: CompositeShapePainter.java,v 1.14 2002/02/15 14:58:45 tkormann Exp 
$
    */
   public class CompositeShapePainter implements ShapePainter {
   
  @@ -72,6 +72,25 @@
           }
           painters[count++] = shapePainter;
       }
  +
  +    /**
  +     * Sets to the specified index, the specified ShapePainter.
  +     *
  +     * @param index the index where to set the ShapePainter
  +     * @param shapePainter the ShapePainter to set
  +     */
  +    /*    public void setShapePainter(int index, ShapePainter shapePainter) {
  +        if (shapePainter == null) {
  +            return;
  +        }
  +        if (this.shape != shapePainter.getShape()) {
  +            shapePainter.setShape(shape);
  +        }
  +        if (painters == null || index >= painters.length) {
  +            throw new IllegalArgumentException("Bad index: "+index);
  +        }
  +        painters[index] = shapePainter;
  +        }*/
   
       /**
        * Returns the shape painter at the specified index.
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to