deweese     2003/07/20 15:32:31

  Modified:    sources/org/apache/batik/css/engine CSSEngine.java
               sources/org/apache/batik/gvt UpdateTracker.java
               sources/org/apache/batik/script/rhino WindowWrapper.java
               test-resources/org/apache/batik/test samplesRendering.xml
  Added:       samples/tests/spec/scripting styling.svg
               samples/tests/spec/styling styleElement.svg
  Log:
  1) Fixed an NPE with some updates.
  2) When an element is removed or CSS properties change all
     next sibling elements are not repainted (unless a rendering property
     truely changes as a result (think css '+' rules)).
  3) Changes to the 'class' attribute now update the rendering
     tree appropriately.
  4) New test for this (samples/tests/scripting/styling.svg) and
     for comments in style elements (samples/tests/styling/styleElement.svg).
  
  Revision  Changes    Path
  1.1                  xml-batik/samples/tests/spec/scripting/styling.svg
  
  Index: styling.svg
  ===================================================================
  <?xml version="1.0" standalone="no"?>
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd";>
  
  <!-- ====================================================================== -->
  <!-- Copyright (C) The Apache Software Foundation. All rights reserved.     -->
  <!--                                                                        -->
  <!-- This software is published under the terms of the Apache Software      -->
  <!-- License version 1.1, a copy of which has been included with this       -->
  <!-- distribution in the LICENSE file.                                      -->
  <!-- ====================================================================== -->
  
  <?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?>  
  
  <svg xmlns="http://www.w3.org/2000/svg"; 
       xmlns:xlink="http://www.w3.org/1999/xlink";
       xmlns:cb="http://www.example.org/gui/checkbox";
       id="body" width="450" height="500" viewBox="0 0 450 500">
  
    <title>Dynamic test of CSS selectors</title>
    <text x="50%" y="45" class="title">Dynamic test of CSS selectors</text>
  
    <style type="text/css"><![CDATA[
      text.button {
      fill: #00F;
      }
  
      text + text.button {
      fill: #888;
      }
  
      text + g > text {
        fill: #F00;
      }
  
      g > text {
        fill: #0F0;
      }
  
      g.xxx > text { fill: #F0F; }
  
      [id=test4] > text { fill: #80F; }
  
      g + [id=foo] > text { fill: #808; }
  
      .checkbox > path { fill: none; stroke: black; stroke-width: 2; }
      .checkbox > rect { fill: white; stroke: black; stroke-width: 1; }
      .checkbox[selected=true] > path { visibility: visible;}
      .checkbox[selected=false] > path { visibility: hidden; }
      ]]></style>
  
    <script type="text/ecmascript"><![CDATA[
      var svgns = "http://www.w3.org/2000/svg";;
  
      function insertTextEvt(evt, x, y) {
         insertText(evt.currentTarget, x, y);
      }
  
      function removeTargetEvt(evt) {
         removeTarget(evt.currentTarget);
      }
  
      function setAttributeEvt(evt, attr, val) {
        evt.currentTarget.setAttribute(attr, val);
      }
  
      function removeTarget(e) {
         e.parentNode.removeChild(e);
      }
  
      function insertText(e, x, y) {
         var t = document.createElementNS(svgns, "text");
         t.setAttribute("x", x);
         t.setAttribute("y", y);
         t.appendChild(document.createTextNode("Inserted"));
         e.parentNode.insertBefore(t, e);
      }
  
      function toggleSelectedEvt(evt) {
        toggleSelected(evt.currentTarget);
      }
      function toggleSelected(e) {
         var sel = e.getAttribute("selected");
         if (sel == "true") {
           e.setAttribute("selected", "false");
         } else {
           e.setAttribute("selected", "true");
         }
      }
  
      function regardStart() {
        var e;
        removeTarget(document.getElementById("rm1"))
        insertText(document.getElementById("in1"), '10', '75');
  
        removeTarget(document.getElementById("rm2"))
        insertText(document.getElementById("in2"), '10', '125');
  
        document.getElementById("test3").setAttribute("class", "xxx");
        document.getElementById("test4").setAttribute("class", "");
        document.getElementById("test5").setAttribute("id", "foo");
        regardTestInstance.scriptDone();
        toggleSelected(document.getElementById("cb"));
      }
    ]]></script>
  
    <g/>
    <text id="rm1" x="10" y="100" onclick="removeTargetEvt(evt)">Click me</text>
    <text x="100" y="100" class="button">Do I change?</text>
  
    <g/>
    <text id="in1" x="100" y="125" class="button" 
          onclick="insertTextEvt(evt, '10', '125')">Click Me!</text>
  
    <g/>
    <text id="rm2" x="10" y="150" onclick="removeTargetEvt(evt)">Click me</text>
    <g id="test1">
      <text id="ct" x="100" y="150">Child Text</text>
    </g>
  
    <g/>
    <g id="in2" onclick="insertTextEvt(evt, '10', '175')">
      <text id="ct2" x="100" y="175">Click me</text>
    </g>
  
    <g id="test3" onclick="setAttributeEvt(evt, 'class', 'xxx')">
      <text id="ct3" x="10" y="200">Click me</text>
    </g>
  
    <g id="test4" class="xxx" onclick="setAttributeEvt(evt, 'class', '')">
      <text id="ct4" x="100" y="200">Click me</text>
    </g>
  
    <g id="test5" class="xxx" onclick="setAttributeEvt(evt, 'id', 'foo')">
      <text id="ct5" x="200" y="200">Click me</text>
    </g>
  
    <g id="cb" class="checkbox" selected="true" transform="translate(10, 225)"
       onclick="toggleSelected(evt)">
      <rect width="15" height="15" fill="white" stroke="black"/>
      <path d="M3,3 L12,12 M12,3 L3,12"/>
    </g>
  
  </svg>
  
  
  
  1.1                  xml-batik/samples/tests/spec/styling/styleElement.svg
  
  Index: styleElement.svg
  ===================================================================
  <?xml version="1.0" standalone="no"?>
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd";>
  
  <!-- ====================================================================== -->
  <!-- Copyright (C) The Apache Software Foundation. All rights reserved.     -->
  <!--                                                                        -->
  <!-- This software is published under the terms of the Apache Software      -->
  <!-- License version 1.1, a copy of which has been included with this       -->
  <!-- distribution in the LICENSE file.                                      -->
  <!-- ====================================================================== -->
  
  <!-- ====================================================================== -->
  <!-- Modification of a circle attributes                                    -->
  <!--                                                                        -->
  <!-- @author [EMAIL PROTECTED]                                               -->
  <!-- @version $Id: styleElement.svg,v 1.1 2003/07/20 22:32:30 deweese Exp $ -->
  <!-- ====================================================================== -->
  
  <?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?>  
  
  <svg id="body" width="450" height="500" viewBox="0 0 450 500"
       xmlns="http://www.w3.org/2000/svg"; 
       xmlns:xlink="http://www.w3.org/1999/xlink";>
  
    <style type="text/css">
      rect { stroke="black" }
    </style>
  
  <!-- The '.blue' will be applied as the comment characters will be ignored.
       the '.green' rule will not be as the parser will abort on the invalid
       'TEST' content because the CDATA block hides the XML comments from
       the XML parser. --> 
  
    <style type="text/css"><![CDATA[
      <!-- .blue { fill: blue } -->
      <!-- TEST -->
      .green { fill: green }
      /*end of css */
    ]]></style>
  
  <!-- Only .yellow will be applied .purple will be stripped by the
       XML parser (Note no CDATA block). --> 
  
    <style type="text/css">
      <!-- .purple { fill: purple } -->
      <!-- TEST -->
      .yellow { fill: yellow }
      /* end of css */
    </style>
  
    <title>Test of XML comments in &lt;style&gt; elements</title>
    <text x="50%" y="50" class="title"
      >Test of XML comments in &lt;style&gt; elements</text>
    <g id="test-content" >
      <rect class="blue" x="10" y="100" width="100" height="50"/>
      <text x="150" y="125">class="blue"</text>
  
      <rect class="green" x="10" y="175" width="100" height="50"/>
      <text x="150" y="200">class="green"</text>
  
      <rect class="purple" x="10" y="250" width="100" height="50"/>
      <text x="150" y="275">class="purple"</text>
  
      <rect class="yellow" x="10" y="325" width="100" height="50"/>
      <text x="150" y="350">class="yellow"</text>
    </g>
  </svg>
  
  
  
  
  1.24      +121 -182  xml-batik/sources/org/apache/batik/css/engine/CSSEngine.java
  
  Index: CSSEngine.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/engine/CSSEngine.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- CSSEngine.java    16 Jul 2003 00:46:50 -0000      1.23
  +++ CSSEngine.java    20 Jul 2003 22:32:30 -0000      1.24
  @@ -1693,20 +1693,7 @@
               }
   
               if (removed) {
  -                // Invalidate all the values.
  -                elt.setComputedStyleMap(null, null);
  -
  -                firePropertiesChangedEvent(elt, ALL_PROPERTIES);
  -                    
  -                Node c = getImportedChild(elt);
  -                if (c != null) {
  -                    propagateChanges(c, ALL_PROPERTIES);
  -                }
  -                for (Node n = elt.getFirstChild();
  -                     n != null;
  -                     n = n.getNextSibling()) {
  -                    propagateChanges(n, ALL_PROPERTIES);
  -                }
  +                invalidateProperties(elt, null);
               } else {
                   int count = 0;
               
  @@ -1754,17 +1741,7 @@
                               props[count++] = i;
                           }
                       }
  -                    firePropertiesChangedEvent(elt, props);
  -                    
  -                    Node c = getImportedChild(elt);
  -                    if (c != null) {
  -                        propagateChanges(c, props);
  -                    }
  -                    for (Node n = elt.getFirstChild();
  -                         n != null;
  -                         n = n.getNextSibling()) {
  -                        propagateChanges(n, props);
  -                    }
  +                    invalidateProperties(elt, props);
                   }
               }
               break;
  @@ -1789,137 +1766,141 @@
           style.putComputed(n, false);
       }
   
  -    /**
  -     * Invalidates all the stylable elements descendant of the given
  -     * node, and the node.
  -     */
  -    protected void invalidateTreeProperties(Node node) {
  -        if (node instanceof CSSStylableElement) {
  -            CSSStylableElement elt = (CSSStylableElement)node;
  -            StyleMap style = elt.getComputedStyleMap(null);
  -            if (style != null) {
  -                elt.setComputedStyleMap(null, null);
  -                firePropertiesChangedEvent(elt, ALL_PROPERTIES);
  -            }
  -        }
  -
  -        Node c = getImportedChild(node);
  -        if (c != null) {
  -            propagateChanges(c, ALL_PROPERTIES);
  -        }
  -        for (Node n = node.getFirstChild();
  -             n != null;
  -             n = n.getNextSibling()) {
  -            invalidateTreeProperties(n);
  -        }
  -    }
   
       /**
        * Invalidates all the properties of the given node.
        */
  -    protected void invalidateProperties(Node node) {
  -        if (node instanceof CSSStylableElement) {
  -            CSSStylableElement elt = (CSSStylableElement)node;
  -            StyleMap style = elt.getComputedStyleMap(null);
  -            if (style != null) {
  -                elt.setComputedStyleMap(null, null);
  -                firePropertiesChangedEvent(elt, ALL_PROPERTIES);
  +    protected void invalidateProperties(Node node, int [] properties) {
  +        if (!(node instanceof CSSStylableElement))
  +            return;  // Not Stylable sub tree
  +        // System.err.println("Node id: " + 
  +        //                    ((Element)node).getAttribute("id"));
  +
  +        CSSStylableElement elt = (CSSStylableElement)node;
  +        StyleMap style = elt.getComputedStyleMap(null);
  +        if (style == null)
  +            return;  // Nothing to invalidate.
  +        
  +        StyleMap newStyle = getCascadedStyleMap(elt, null);
  +        elt.setComputedStyleMap(null, newStyle);
  +        boolean [] diffs = new boolean[getNumberOfProperties()];
  +        int count =0;
  +        if (properties != null) {
  +            for (int i=0; i<properties.length; i++)
  +                diffs[properties[i]] = true;
  +            count = properties.length;
  +        }
  +
  +        for (int i=0; i<diffs.length; i++) {
  +            if (diffs[i]) continue; // Already marked changed.
  +
  +            Value nv = newStyle.getValue(i);
  +            Value ov = null;
  +            if (!style.isNullCascaded(i)) {
  +                ov = style.getValue(i);
  +                if (ov instanceof ComputedValue) {
  +                    ov = ((ComputedValue)ov).getCascadedValue();
  +                }
               }
  -        }
   
  -        Node c = getImportedChild(node);
  -        if (c != null) {
  -            propagateChanges(c, ALL_PROPERTIES);
  +            if (nv == ov) continue;
  +            if ((nv == null) || 
  +                (!nv.equals(ov) && !nv.getCssText().equals(ov.getCssText()))) {
  +                count++;
  +                diffs[i] = true;
  +            }
           }
  -        for (Node n = node.getFirstChild();
  -             n != null;
  -             n = n.getNextSibling()) {
  -            propagateChanges(n, ALL_PROPERTIES);
  +        int []props = null;
  +        if (count != 0) {
  +            props = new int[count];
  +            count = 0;
  +            for (int i=0; i<diffs.length; i++) {
  +                if (diffs[i])
  +                    props[count++] = i;
  +            }
           }
  +        propagateChanges(elt, props);
       }
   
       /**
        * Propagates the changes that occurs on the parent of the given node.
        */
       protected void propagateChanges(Node node, int[] props) {
  -        if (node instanceof CSSStylableElement) {
  -            CSSStylableElement elt = (CSSStylableElement)node;
  -            StyleMap style = elt.getComputedStyleMap(null);
  -            if (style != null) {
  -                boolean[] updated =
  -                    styleDeclarationUpdateHandler.updatedProperties;
  -                for (int i = getNumberOfProperties() - 1; i >= 0; --i) {
  -                    updated[i] = false;
  -                }
  +        if (!(node instanceof CSSStylableElement))
  +            return;
  +        CSSStylableElement elt = (CSSStylableElement)node;
  +        StyleMap style = elt.getComputedStyleMap(null);
  +        if (style != null) {
  +            boolean[] updated =
  +                styleDeclarationUpdateHandler.updatedProperties;
  +            for (int i = getNumberOfProperties() - 1; i >= 0; --i) {
  +                updated[i] = false;
  +            }
  +            if (props != null) {
                   for (int i = props.length - 1; i >= 0; --i) {
                       int idx = props[i];
  -                    if (style.isComputed(idx) &&
  -                        style.isParentRelative(idx)) {
  -                        updated[idx] = true;
  -                        clearComputedValue(style, idx);
  -                    }
  +                    updated[idx] = true;
                   }
  +            }
   
  -                // Invalidate the relative values
  -                boolean fs = (fontSizeIndex == -1)
  -                    ? false
  -                    : updated[fontSizeIndex];
  -                boolean lh = (lineHeightIndex == -1)
  -                    ? false
  -                    : updated[lineHeightIndex];
  -                boolean cl = (colorIndex == -1)
  -                    ? false
  -                    : updated[colorIndex];
  -                int count = 0;
  -
  -                for (int i = getNumberOfProperties() - 1; i >= 0; --i) {
  -                    if (!updated[i]) {
  -                        if (style.isComputed(i)) {
  -                            if (fs && style.isFontSizeRelative(i)) {
  -                                updated[i] = true;
  -                                count++;
  -                                clearComputedValue(style, i);
  -                            }
  -                            if (lh && style.isLineHeightRelative(i)) {
  -                                updated[i] = true;
  -                                count++;
  -                                clearComputedValue(style, i);
  -                            }
  -                            if (cl && style.isColorRelative(i)) {
  -                                updated[i] = true;
  -                                count++;
  -                                clearComputedValue(style, i);
  -                            }
  -                        }
  -                    } else {
  +            // Invalidate the relative values
  +            boolean fs = (fontSizeIndex == -1)
  +                ? false
  +                : updated[fontSizeIndex];
  +            boolean lh = (lineHeightIndex == -1)
  +                ? false
  +                : updated[lineHeightIndex];
  +            boolean cl = (colorIndex == -1)
  +                ? false
  +                : updated[colorIndex];
  +            int count = 0;
  +
  +            for (int i = getNumberOfProperties() - 1; i >= 0; --i) {
  +                if (updated[i]) {
  +                    count++;
  +                    continue;
  +                }
  +                if (style.isComputed(i)) {
  +                    if (fs && style.isFontSizeRelative(i)) {
  +                        updated[i] = true;
  +                        count++;
  +                        clearComputedValue(style, i);
  +                    }
  +                    if (lh && style.isLineHeightRelative(i)) {
  +                        updated[i] = true;
  +                        count++;
  +                        clearComputedValue(style, i);
  +                    }
  +                    if (cl && style.isColorRelative(i)) {
  +                        updated[i] = true;
                           count++;
  +                        clearComputedValue(style, i);
                       }
                   }
  +            }
   
  -                if (count > 0) {
  -                    props = new int[count];
  -                    count = 0;
  -                    for (int i = getNumberOfProperties() - 1; i >= 0; --i) {
  -                        if (updated[i]) {
  -                            props[count++] = i;
  -                        }
  +            if (count == 0) {
  +                props = null;
  +            } else {
  +                props = new int[count];
  +                count = 0;
  +                for (int i = getNumberOfProperties() - 1; i >= 0; --i) {
  +                    if (updated[i]) {
  +                        props[count++] = i;
                       }
  -                    firePropertiesChangedEvent(elt, props);
  -                } else {
  -                    props = null;
                   }
  +                firePropertiesChangedEvent(elt, props);
               }
           }
  -        if (props != null) {
  -            Node c = getImportedChild(node);
  -            if (c != null) {
  -                propagateChanges(c, props);
  -            }
  -            for (Node n = node.getFirstChild();
  -                 n != null;
  -                 n = n.getNextSibling()) {
  -                propagateChanges(n, props);
  -            }
  +
  +        Node c = getImportedChild(node);
  +        if (c != null) {
  +            invalidateProperties(c, props);
  +        }
  +        for (Node n = node.getFirstChild();
  +             n != null;
  +             n = n.getNextSibling()) {
  +            invalidateProperties(n, props);
           }
       }
   
  @@ -1976,6 +1957,7 @@
                                                      StyleMap style,
                                                      String property,
                                                      MutationEvent evt) {
  +        // System.err.println("update: " + property);
           int idx = getPropertyIndex(property);
   
           if (style.isImportant(idx)) {
  @@ -1991,8 +1973,6 @@
               return;
           }
           
  -        boolean comp = style.isComputed(idx);
  -
           switch (evt.getAttrChange()) {
           case MutationEvent.ADDITION:
           case MutationEvent.MODIFICATION:
  @@ -2021,26 +2001,7 @@
               break;
   
           case MutationEvent.REMOVAL:
  -            // Invalidate all the values.
  -            elt.setComputedStyleMap(null, null);
  -            
  -            firePropertiesChangedEvent(elt, ALL_PROPERTIES);
  -                    
  -            Node c = getImportedChild(elt);
  -            if (c != null) {
  -                propagateChanges(c, ALL_PROPERTIES);
  -            }
  -            for (Node n = elt.getFirstChild();
  -                 n != null;
  -                 n = n.getNextSibling()) {
  -                propagateChanges(n, ALL_PROPERTIES);
  -            }
  -            return;
  -        }
  -
  -        if (!comp) {
  -            // The previous value was not computed: nobody is
  -            // interested by this property modifications
  +            invalidateProperties(elt, null);
               return;
           }
   
  @@ -2087,17 +2048,8 @@
                   props[count++] = i;
               }
           }
  -        firePropertiesChangedEvent(elt, props);
   
  -        Node c = getImportedChild(elt);
  -        if (c != null) {
  -            propagateChanges(c, props);
  -        }
  -        for (Node n = elt.getFirstChild();
  -             n != null;
  -             n = n.getNextSibling()) {
  -            propagateChanges(n, props);
  -        }
  +        invalidateProperties(elt, props);
       }
   
       /**
  @@ -2111,7 +2063,7 @@
                   styleSheetNodes = null;
   
                   // Invalidate all the CSSStylableElements in the document.
  -                invalidateTreeProperties(document.getDocumentElement());
  +                invalidateProperties(document.getDocumentElement(), null);
                   return;
               }
               if (et instanceof CSSStylableElement) {
  @@ -2121,7 +2073,7 @@
                   for (Node n = ((Node)evt.getTarget()).getNextSibling();
                        n != null;
                        n = n.getNextSibling()) {
  -                    invalidateProperties(n);
  +                    invalidateProperties(n, null);
                   }
               }
           }
  @@ -2159,7 +2111,7 @@
                   styleSheetNodes = null;
   
                   // Invalidate all the CSSStylableElements in the document.
  -                invalidateTreeProperties(document.getDocumentElement());
  +                invalidateProperties(document.getDocumentElement(), null);
               } else if (removedStylableElementSibling != null) {
                   // Invalidate the CSSStylableElement siblings, to
                   // correctly match the adjacent selectors and
  @@ -2167,7 +2119,7 @@
                   for (Node n = removedStylableElementSibling;
                        n != null;
                        n = n.getNextSibling()) {
  -                    invalidateProperties(n);
  +                    invalidateProperties(n, null);
                   }
                   removedStylableElementSibling = null;
               }
  @@ -2184,7 +2136,7 @@
                   styleSheetNodes = null;
   
                   // Invalidate all the CSSStylableElements in the document.
  -                invalidateTreeProperties(document.getDocumentElement());
  +                invalidateProperties(document.getDocumentElement(), null);
               }
           }
       }
  @@ -2250,20 +2202,7 @@
                   selectorAttributes.contains(name)) {
                   // An attribute has been modified, invalidate all the
                   // properties to correctly match attribute selectors.
  -
  -                elt.setComputedStyleMap(null, null);
  -
  -                firePropertiesChangedEvent(elt, ALL_PROPERTIES);
  -                
  -                Node c = getImportedChild(elt);
  -                if (c != null) {
  -                    propagateChanges(c, ALL_PROPERTIES);
  -                }
  -                for (Node n = elt.getFirstChild();
  -                     n != null;
  -                     n = n.getNextSibling()) {
  -                    propagateChanges(n, ALL_PROPERTIES);
  -                }
  +                invalidateProperties(elt, null);
               }
           }
       }
  
  
  
  1.19      +14 -3     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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- UpdateTracker.java        16 Jul 2003 23:46:27 -0000      1.18
  +++ UpdateTracker.java        20 Jul 2003 22:32:30 -0000      1.19
  @@ -56,6 +56,7 @@
           while (i.hasNext()) {
               WeakReference gnWRef = (WeakReference)i.next();
               GraphicsNode  gn     = (GraphicsNode)gnWRef.get();
  +            //GraphicsNode  srcGN  = gn;
   
               // if the weak ref has been cleared then this node is no
               // longer part of the GVT tree (and the change should be
  @@ -131,6 +132,8 @@
                   //       srcORgn + "\n" + srcNRgn + "\n");
                   // <!>
                   Shape oRgn = srcORgn;
  +                // System.err.println("src: " + srcORgn);
  +                // System.err.println("GN: " + srcGN);
                   if (oat != null){
                       oRgn = oat.createTransformedShape(srcORgn);
                   }
  @@ -218,11 +221,13 @@
           }
   
           GraphicsNode chngSrc = gnce.getChangeSrc();
  -        Rectangle2D rgn;
  +        Rectangle2D rgn = null;
           if (chngSrc != null) {
               // A child node is moving in the tree so assign it's dirty
               // regions to this node before it moves.
  -            rgn = new ChngSrcRect(getNodeDirtyRegion(chngSrc));
  +            Rectangle2D drgn = getNodeDirtyRegion(chngSrc);
  +            if (drgn != null)
  +                rgn = new ChngSrcRect(drgn);
           } else {
               // Otherwise just use gn's current region.
               rgn = gn.getBounds();
  @@ -233,6 +238,12 @@
               if (r2d != null) r2d = r2d.createUnion(rgn);
               else             r2d = rgn;
           }
  +
  +        // if ((gn instanceof CompositeGraphicsNode) && 
  +        //     (r2d.getWidth() > 200)) {
  +        //     new Exception("Adding Large: " + gn).printStackTrace();
  +        // }
  +
           // Store the bounds for the future.
           fromBounds.put(gnWRef, r2d);
       }
  
  
  
  1.16      +38 -49    
xml-batik/sources/org/apache/batik/script/rhino/WindowWrapper.java
  
  Index: WindowWrapper.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/script/rhino/WindowWrapper.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- WindowWrapper.java        9 Jul 2003 02:10:11 -0000       1.15
  +++ WindowWrapper.java        20 Jul 2003 22:32:31 -0000      1.16
  @@ -370,34 +370,9 @@
                                  final String mime,
                                  final String content) {
               try {
  -                interpreter.callHandler(function,
  -                    new RhinoInterpreter.ArgumentsBuilder() {
  -                        public Object[] buildArguments() {
  -                            try {
  -                                Object[] arguments = new Object[1];
  -                                ScriptableObject so =
  -                                    (ScriptableObject)interpreter.evaluate
  -                                    (new StringReader("new Object()"));
  -                                so.put("success", so,
  -                                       (success) ?
  -                                       Boolean.TRUE : Boolean.FALSE);
  -                                if (mime != null) {
  -                                    so.put("contentType", so,
  -                                           Context.toObject(mime, scope));
  -                                }
  -                                if (content != null) {
  -                                    so.put("content", so,
  -                                           Context.toObject(content, scope));
  -                                }
  -                                arguments[0] = so;
  -                                return arguments;
  -                            } catch (IOException e) {
  -                                throw new WrappedException(e);
  -                            } catch (InterpreterException e) {
  -                                throw new WrappedException(e);
  -                            }
  -                        }
  -                    });
  +                interpreter.callHandler
  +                    (function,
  +                     new GetURLDoneArgBuilder(success, mime, content, scope));
               } catch (JavaScriptException e) {
                   throw new WrappedException(e);
               }
  @@ -451,30 +426,44 @@
               try {
                   interpreter.callMethod
                       (object, COMPLETE,
  -                     new RhinoInterpreter.ArgumentsBuilder() {
  -                         public Object[] buildArguments() {
  -                             Object[] arguments = new Object[1];
  -                             ScriptableObject so =
  -                                 new NativeObject();
  -                             so.put("success", so,
  -                                    (success) ?
  -                                    Boolean.TRUE : Boolean.FALSE);
  -                             if (mime != null) {
  -                                 so.put("contentType", so,
  -                                        Context.toObject(mime, scope));
  -                             }
  -                             if (content != null) {
  -                                 so.put("content", so,
  -                                        Context.toObject(content, scope));
  -                             }
  -                             arguments[0] = so;
  -                             return arguments;
  -                         }
  -                     });
  +                     new GetURLDoneArgBuilder(success, mime, content, scope));
               } catch (JavaScriptException e) {
                   Context.exit();
                   throw new WrappedException(e);
               }
           }
       }
  +
  +    static class GetURLDoneArgBuilder 
  +        implements RhinoInterpreter.ArgumentsBuilder {
  +        boolean success;
  +        String mime, content;
  +        ScriptableObject scope;
  +        public GetURLDoneArgBuilder(boolean success, 
  +                                    String mime, String content,
  +                                    ScriptableObject scope) {
  +            this.success = success;
  +            this.mime    = mime;
  +            this.content = content;
  +            this.scope   = scope;
  +        }
  +
  +        public Object[] buildArguments() {
  +            Object[] arguments = new Object[1];
  +            ScriptableObject so = new NativeObject();
  +            so.put("success", so,
  +                   (success) ? Boolean.TRUE : Boolean.FALSE);
  +            if (mime != null) {
  +                so.put("contentType", so,
  +                       Context.toObject(mime, scope));
  +            }
  +            if (content != null) {
  +                so.put("content", so,
  +                       Context.toObject(content, scope));
  +            }
  +            arguments[0] = so;
  +            return arguments;
  +        }
  +    }
  +    
   }
  
  
  
  1.109     +11 -9     
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.108
  retrieving revision 1.109
  diff -u -r1.108 -r1.109
  --- samplesRendering.xml      16 Jul 2003 00:46:50 -0000      1.108
  +++ samplesRendering.xml      20 Jul 2003 22:32:31 -0000      1.109
  @@ -253,10 +253,18 @@
            <test id="samples/tests/spec/styling/alternateStylesheet.svg" />
            <test id="samples/tests/spec/styling/cssMedia.svg" />
            <test id="samples/tests/spec/styling/cssMediaList.svg" />
  -         <test id="samples/tests/spec/styling/smiley.svg" />
            <test id="samples/tests/spec/styling/emptyStyle.svg" />
  +         <test id="samples/tests/spec/styling/smiley.svg" />
  +         <test id="samples/tests/spec/styling/styleElement.svg" />
   
           <!-- Alternate stylesheet tests -->
  +        <!-- Sample tests, media test -->
  +        <testGroup id="media" 
class="org.apache.batik.test.svg.SVGMediaRenderingAccuracyTest">
  +            <test id="samples/tests/spec/styling/cssMedia.svg-Screen" />
  +            <test id="samples/tests/spec/styling/cssMedia.svg-Print" />
  +            <test id="samples/tests/spec/styling/cssMedia.svg-Projection" />
  +        </testGroup>
  +
           <testGroup id="alternate" 
class="org.apache.batik.test.svg.SVGAlternateStyleSheetRenderingAccuracyTest">
               <test id="samples/tests/spec/styling/alternateStylesheet.svg-Hot" />
               <test id="samples/tests/spec/styling/alternateStylesheet.svg-Cold" />
  @@ -267,13 +275,6 @@
               <test id="samples/tests/spec/styling/smiley.svg-Oups" />
           </testGroup>
   
  -        <!-- Sample tests, media test -->
  -        <testGroup id="media" 
class="org.apache.batik.test.svg.SVGMediaRenderingAccuracyTest">
  -            <test id="samples/tests/spec/styling/cssMedia.svg-Screen" />
  -            <test id="samples/tests/spec/styling/cssMedia.svg-Print" />
  -            <test id="samples/tests/spec/styling/cssMedia.svg-Projection" />
  -        </testGroup>
  -
       </testGroup>
   
       <testGroup id="tests.spec.text">
  @@ -369,5 +370,6 @@
           <test id="samples/tests/spec/scripting/rootSizeChange.svg" />
           <test id="samples/tests/spec/scripting/rectResizeOnClick.svg" />
           <test id="samples/tests/spec/scripting/setProperty.svg" />
  +        <test id="samples/tests/spec/scripting/styling.svg" />
       </testGroup>
   </testSuite>
  
  
  

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

Reply via email to