deweese     2003/03/19 16:18:59

  Modified:    sources/org/apache/batik/bridge SVGTextElementBridge.java
               sources/org/apache/batik/gvt UpdateTracker.java
               test-resources/org/apache/batik/test samplesRendering.xml
  Log:
  1) Fixed a rendering bug involving transform changes on groups
      with preceeding bounds changes on children.
  
  Revision  Changes    Path
  1.77      +14 -32    
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.76
  retrieving revision 1.77
  diff -u -r1.76 -r1.77
  --- SVGTextElementBridge.java 14 Mar 2003 21:53:20 -0000      1.76
  +++ SVGTextElementBridge.java 20 Mar 2003 00:18:59 -0000      1.77
  @@ -184,21 +184,7 @@
                                     Element e,
                                     GraphicsNode node) {
           e.normalize();
  -        AttributedString as = buildAttributedString(ctx, e);
  -        addGlyphPositionAttributes(as, e, ctx);
  -        if (ctx.isDynamic()) {
  -            layoutedText = new AttributedString(as.getIterator());
  -        }
  -        TextNode tn = (TextNode)node;
  -        tn.setAttributedCharacterIterator(as.getIterator());
  -
  -        // now add the painting attributes, cannot do it before this because
  -        // some of the Paint objects need to know the bounds of the text
  -        // and this isn't know until the text node aci is set
  -        TextDecoration textDecoration = 
  -            getTextDecoration(e, tn, new TextDecoration(), ctx);
  -        addPaintAttributes(as, e, tn, textDecoration, ctx);
  -        tn.setAttributedCharacterIterator(as.getIterator());
  +        computeLayoutedText(ctx, e, node);
   
           //
           // DO NOT CALL super, 'opacity' is handle during addPaintAttributes()
  @@ -371,7 +357,7 @@
               default:
           }
           if (layoutedText == null) {
  -            computeLayoutedText();
  +            computeLayoutedText(ctx, e, node);
           }
       }
   
  @@ -432,7 +418,7 @@
           //an operation occured onto the children of the
           //text element, check if the layout was discarded
           if (layoutedText == null) {
  -            computeLayoutedText();
  +            computeLayoutedText(ctx, e, node);
           }
       }
   
  @@ -485,10 +471,14 @@
        * update <code>layoutedText</code> with the new
        * value.
        */
  -    protected void computeLayoutedText() {
  +    protected void computeLayoutedText(BridgeContext ctx, 
  +                                       Element e,
  +                                       GraphicsNode node) {
           AttributedString as = buildAttributedString(ctx, e);
           addGlyphPositionAttributes(as, e, ctx);
  -        layoutedText = new AttributedString(as.getIterator());
  +        if (ctx.isDynamic()) {
  +            layoutedText = new AttributedString(as.getIterator());
  +        }
           TextNode tn = (TextNode)node;
           tn.setAttributedCharacterIterator(as.getIterator());
           TextDecoration textDecoration = 
  @@ -525,7 +515,7 @@
                   ((TextNode)node).setLocation(getLocation(ctx, e));
               }
   
  -            computeLayoutedText();
  +            computeLayoutedText(ctx, e, node);
           }
           else{
               super.handleDOMAttrModifiedEvent(evt);
  @@ -560,15 +550,7 @@
               case SVGCSSEngine.KERNING_INDEX: {
                   if (!hasNewACI) {
                       hasNewACI = true;
  -                    AttributedString as = buildAttributedString(ctx, e);
  -                    addGlyphPositionAttributes(as, e, ctx);
  -                    layoutedText = new AttributedString(as.getIterator());
  -                    TextNode tn = (TextNode)node;
  -                    tn.setAttributedCharacterIterator(as.getIterator());
  -                    TextDecoration textDecoration = 
  -                        getTextDecoration(e, tn, new TextDecoration(), ctx);
  -                    addPaintAttributes(as, e, tn, textDecoration, ctx);
  -                    tn.setAttributedCharacterIterator(as.getIterator());
  +                    computeLayoutedText(ctx, e, node);
                   }
                   break;
               }
  @@ -2089,7 +2071,7 @@
                   attrName.equals(SVG_DY_ATTRIBUTE) ||
                   attrName.equals(SVG_ROTATE_ATTRIBUTE)) {
                   //recompute the layout of the text node
  -                textBridge.computeLayoutedText();
  +                textBridge.computeLayoutedText(ctx, e, node);
               }
           }        
       }
  @@ -2131,7 +2113,7 @@
                   attrName.equals(SVG_DY_ATTRIBUTE) ||
                   attrName.equals(SVG_ROTATE_ATTRIBUTE)) {
                   //recompute the layout of the text node
  -                textBridge.computeLayoutedText();
  +                textBridge.computeLayoutedText(ctx, e, node);
               }
           }        
       }
  
  
  
  1.15      +30 -33    xml-batik/sources/org/apache/batik/gvt/UpdateTracker.java
  
  Index: UpdateTracker.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/UpdateTracker.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- UpdateTracker.java        19 Nov 2002 16:53:14 -0000      1.14
  +++ UpdateTracker.java        20 Mar 2003 00:18:59 -0000      1.15
  @@ -69,6 +69,9 @@
   
               AffineTransform oat;
               oat = (AffineTransform)dirtyNodes.get(gnWRef);
  +            if (oat != null){
  +                oat = new AffineTransform(oat);
  +            }
               
               Rectangle2D srcORgn = (Rectangle2D)fromBounds.remove(gnWRef);
   
  @@ -77,14 +80,14 @@
               AffineTransform nat = gn.getTransform();
   
               if (nat != null){
  -                nat = (nat == null) ? null : new AffineTransform(nat);
  +                nat = new AffineTransform(nat);
               }
   
               // System.out.println("Rgns: " + srcORgn + " - " + srcNRgn);
               // System.out.println("ATs: " + oat + " - " + nat);
               Shape oRgn = srcORgn;
               Shape nRgn = srcNRgn;
  -
  +            
               do {
                   // Filter f;
                   // f = gn.getGraphicsNodeRable(false);
  @@ -100,25 +103,24 @@
                   if (gn == null)
                       break; // We reached the top of the tree
   
  -                gnWRef = gn.getWeakReference();
  -
  +                // Get the parent's current Affine
                   AffineTransform at = gn.getTransform();
  -
  -                if (oat != null){
  -                    // oRgn = oat.createTransformedShape(srcORgn);
  -                    if (at != null){
  -                        oat.preConcatenate(at);
  -                    }
  -                } else {
  -                    oat = (at == null) ? null : new AffineTransform(at);
  +                // Get the parent's Affine last time we rendered.
  +                gnWRef = gn.getWeakReference();
  +                AffineTransform poat = (AffineTransform)dirtyNodes.get(gnWRef);
  +                if (poat == null) poat = at;
  +                if (poat != null) {
  +                    if (oat != null)
  +                        oat.preConcatenate(poat);
  +                    else 
  +                        oat = new AffineTransform(poat);
                   }
  -                if (nat != null){
  -                    //  nRgn = nat.createTransformedShape(srcNRgn);
  -                    if (at != null){
  +
  +                if (at != null){
  +                    if (nat != null)
                           nat.preConcatenate(at);
  -                    }
  -                } else {
  -                    nat = (at == null) ? null : new AffineTransform(at);
  +                    else
  +                        nat = new AffineTransform(at);
                   }
   
               } while (true);
  @@ -168,34 +170,29 @@
           if (doPut) {
               AffineTransform at = gn.getTransform();
               if (at != null) at = (AffineTransform)at.clone();
  +            else            at = new AffineTransform();
               dirtyNodes.put(gnWRef, at);
           }
   
  -        Rectangle2D r2d = null;
  -        if ( gnce.getFrom() != null ){
  -            r2d = (Rectangle2D)gnce.getFrom().clone();
  -        }
  -
  +        Rectangle2D r2d = gnce.getFrom();
           if (r2d == null) 
               r2d = gn.getBounds();
           if (r2d != null) {
               Rectangle2D rgn = (Rectangle2D)fromBounds.remove(gnWRef);
               if (rgn != null)
  -                r2d.add(rgn);
  +                r2d = r2d.createUnion(rgn);
  +            else
  +                r2d = (Rectangle2D)r2d.clone();
               fromBounds.put(gnWRef, r2d);
           }
   
  -        if ( gnce.getTo() != null ){
  -            r2d = (Rectangle2D)gnce.getTo().clone();
  -        }
  -        else{
  -            r2d = null;
  -        }
  -
  +        r2d = gnce.getTo();
           if (r2d != null) {
               Rectangle2D rgn = (Rectangle2D)toBounds.remove(gnWRef);
               if (rgn != null)
  -                r2d.add(rgn);
  +                r2d = r2d.createUnion(rgn);
  +            else
  +                r2d = (Rectangle2D)r2d.clone();
               toBounds.put(gnWRef, r2d);
           }
       }
  
  
  
  1.94      +2 -1      
xml-batik/test-resources/org/apache/batik/test/samplesRendering.xml
  
  Index: samplesRendering.xml
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/test-resources/org/apache/batik/test/samplesRendering.xml,v
  retrieving revision 1.93
  retrieving revision 1.94
  diff -u -r1.93 -r1.94
  --- samplesRendering.xml      4 Mar 2003 18:22:22 -0000       1.93
  +++ samplesRendering.xml      20 Mar 2003 00:18:59 -0000      1.94
  @@ -307,6 +307,7 @@
       <testGroup id="tests.spec.scripting">
           <test id="samples/tests/spec/scripting/add.svg" />
           <test id="samples/tests/spec/scripting/bug12933.svg" />
  +        <test id="samples/tests/spec/scripting/boundsTransformChange.svg" />
           <test id="samples/tests/spec/scripting/circle.svg" />
           <test id="samples/tests/spec/scripting/currentScaleTranslate.svg" />
           <test id="samples/tests/spec/scripting/ellipse.svg" />
  
  
  

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

Reply via email to