deweese     2003/12/14 10:01:11

  Modified:    sources/org/apache/batik/bridge SVGUseElementBridge.java
               sources/org/apache/batik/css/engine CSSEngine.java
                        CSSImportedElementRoot.java
               sources/org/apache/batik/dom/svg
                        SVGOMCSSImportedElementRoot.java
                        SVGStylableElement.java
  Log:
  1) No longer recascades elements in use tree from foreign documents
     (when it did it would use the local documents style sheets - currently
      there is no way for those elements to change anyway).
  2) Class/Method typo fixes from Cameron McCormack (thanks!)
  
  Revision  Changes    Path
  1.39      +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.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- SVGUseElementBridge.java  14 Dec 2003 15:14:57 -0000      1.38
  +++ SVGUseElementBridge.java  14 Dec 2003 18:01:11 -0000      1.39
  @@ -196,7 +196,7 @@
   
           // attach the referenced element to the current document
           SVGOMCSSImportedElementRoot root;
  -        root = new SVGOMCSSImportedElementRoot(document, e);
  +        root = new SVGOMCSSImportedElementRoot(document, e, isLocal);
           root.appendChild(localRefElement);
   
           SVGOMUseElement ue = (SVGOMUseElement)e;
  
  
  
  1.37      +71 -55    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.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- CSSEngine.java    5 Dec 2003 18:32:37 -0000       1.36
  +++ CSSEngine.java    14 Dec 2003 18:01:11 -0000      1.37
  @@ -158,14 +158,11 @@
       /**
        * Returns the imported child of the given node, if any.
        */
  -    public static Node getImportedChild(Node node) {
  +    public static CSSImportedElementRoot getImportedChild(Node node) {
           if (node instanceof CSSImportNode) {
               CSSImportNode inode = (CSSImportNode)node;
               CSSImportedElementRoot r = inode.getCSSImportedElementRoot();
  -            if (r == null) {
  -                return null;
  -            }
  -            return r.getFirstChild();
  +            return r;
           }
           return null;
       }
  @@ -926,15 +923,15 @@
        * Interface for people interesting in having 'primary' properties
        * set.  Shorthand properties will be expanded "automatically".
        */
  -    public interface MainPropertyReciever {
  +    public interface MainPropertyReceiver {
           /**
            * Called with a non-shorthand property name and it's value.
            */
  -        public void setMainPoperty(String name, Value v, boolean important);
  +        public void setMainProperty(String name, Value v, boolean important);
       };
   
       public void setMainProperties
  -        (CSSStylableElement elt, final MainPropertyReciever dst,
  +        (CSSStylableElement elt, final MainPropertyReceiver dst,
            String pname, String value, boolean important){
           try {
               element = elt;
  @@ -947,7 +944,7 @@
                           if (idx != -1) {
                               ValueManager vm = valueManagers[idx];
                               Value v = vm.createValue(lu, CSSEngine.this);
  -                            dst.setMainPoperty(pname, v, important);
  +                            dst.setMainProperty(pname, v, important);
                               return;
                           }
                           idx = getShorthandIndex(pname);
  @@ -1844,7 +1841,7 @@
               }
   
               if (removed) {
  -                invalidateProperties(elt, null, updated);
  +                invalidateProperties(elt, null, updated, true);
               } else {
                   int count = 0;
                   // Invalidate the relative values
  @@ -1879,7 +1876,7 @@
                               props[count++] = i;
                           }
                       }
  -                    invalidateProperties(elt, props, null);
  +                    invalidateProperties(elt, props, null, true);
                   }
               }
               break;
  @@ -1907,10 +1904,12 @@
   
       /**
        * Invalidates all the properties of the given node.
  +     * 
        */
       protected void invalidateProperties(Node node, 
                                           int [] properties, 
  -                                        boolean [] updated) {
  +                                        boolean [] updated,
  +                                        boolean recascade) {
   
           if (!(node instanceof CSSStylableElement))
               return;  // Not Stylable sub tree
  @@ -1920,8 +1919,6 @@
           if (style == null)
               return;  // Nothing to invalidate.
           
  -        StyleMap newStyle = getCascadedStyleMap(elt, null);
  -        elt.setComputedStyleMap(null, newStyle);
           boolean [] diffs = new boolean[getNumberOfProperties()];
           if (updated != null) {
               for (int i=0; i< updated.length; i++) {
  @@ -1934,35 +1931,42 @@
               }
           }
           int count =0;
  -        for (int i=0; i< diffs.length; i++) {
  -            if (diffs[i])
  -                count++;
  -        }
  -
  -        for (int i=0; i<diffs.length; i++) {
  -            if (diffs[i]) continue; // Already marked changed.
  +        if (!recascade) {
  +            for (int i=0; i<diffs.length; i++) {
  +                if (diffs[i])
  +                    count++;
  +            }
  +        } else {
  +            StyleMap newStyle = getCascadedStyleMap(elt, null);
  +            elt.setComputedStyleMap(null, newStyle);
  +            for (int i=0; i<diffs.length; i++) {
  +                if (diffs[i]) {
  +                    count++;
  +                    continue; // Already marked changed.
  +                }
   
  -            // Value nv = getComputedStyle(elt, null, i);
  -            Value nv = newStyle.getValue(i);
  -            Value ov = null;
  -            if (!style.isNullCascaded(i)) {
  -                ov = style.getValue(i);
  -                if (ov instanceof ComputedValue) {
  -                    ov = ((ComputedValue)ov).getCascadedValue();
  +                // Value nv = getComputedStyle(elt, null, i);
  +                Value nv = newStyle.getValue(i);
  +                Value ov = null;
  +                if (!style.isNullCascaded(i)) {
  +                    ov = style.getValue(i);
  +                    if (ov instanceof ComputedValue) {
  +                        ov = ((ComputedValue)ov).getCascadedValue();
  +                    }
                   }
  -            }
   
  -            if (nv == ov) continue;
  -            if ((nv != null) && (ov != null)) {
  -                if (nv.equals(ov)) continue;
  -                String ovCssText = ov.getCssText();
  -                String nvCssText = nv.getCssText();
  -                if ((nvCssText == ovCssText) ||
  -                    ((nvCssText != null) && nvCssText.equals(ovCssText)))
  -                    continue;
  +                if (nv == ov) continue;
  +                if ((nv != null) && (ov != null)) {
  +                    if (nv.equals(ov)) continue;
  +                    String ovCssText = ov.getCssText();
  +                    String nvCssText = nv.getCssText();
  +                    if ((nvCssText == ovCssText) ||
  +                        ((nvCssText != null) && nvCssText.equals(ovCssText)))
  +                        continue;
  +                }
  +                count++;
  +                diffs[i] = true;
               }
  -            count++;
  -            diffs[i] = true;
           }
           int []props = null;
           if (count != 0) {
  @@ -1973,13 +1977,18 @@
                       props[count++] = i;
               }
           }
  -        propagateChanges(elt, props);
  +        propagateChanges(elt, props, recascade);
       }
   
       /**
        * Propagates the changes that occurs on the parent of the given node.
  +     * Props is a list of known 'changed' properties.
  +     * If recascade is true then the stylesheets will be applied
  +     * again to see if the any new rules apply (or old rules don't
  +     * apply).
        */
  -    protected void propagateChanges(Node node, int[] props) {
  +    protected void propagateChanges(Node node, int[] props, 
  +                                    boolean recascade) {
           if (!(node instanceof CSSStylableElement))
               return;
           CSSStylableElement elt = (CSSStylableElement)node;
  @@ -2059,14 +2068,21 @@
               }
           }
   
  -        Node c = getImportedChild(node);
  -        if (c != null) {
  -            invalidateProperties(c, inherited, null);
  +        CSSImportedElementRoot ier = getImportedChild(node);
  +        if (ier != null) {
  +            Node c = ier.getFirstChild();
  +            // Don't recascade trees that have been imported.
  +            // If you do it will use the stylesheets from this
  +            // document instead of the original document.  Also
  +            // currently there isn't any supported way to modify
  +            // the content imported from the other document so
  +            // the cascade can't change.
  +            invalidateProperties(c, inherited, null, ier.getIsLocal());
           }
           for (Node n = node.getFirstChild();
                n != null;
                n = n.getNextSibling()) {
  -            invalidateProperties(n, inherited, null);
  +            invalidateProperties(n, inherited, null, recascade);
           }
       }
   
  @@ -2169,7 +2185,7 @@
           case MutationEvent.REMOVAL: 
               {
                   int [] invalid = { idx };
  -                invalidateProperties(elt, invalid, null);
  +                invalidateProperties(elt, invalid, null, true);
                   return;
               }
           }
  @@ -2207,7 +2223,7 @@
               }
           }
   
  -        invalidateProperties(elt, props, null);
  +        invalidateProperties(elt, props, null, true);
       }
   
       /**
  @@ -2221,7 +2237,7 @@
                   styleSheetNodes = null;
                   // Invalidate all the CSSStylableElements in the document.
                   invalidateProperties(document.getDocumentElement(), 
  -                                     null, null);
  +                                     null, null, true);
                   return;
               }
               if (et instanceof CSSStylableElement) {
  @@ -2231,7 +2247,7 @@
                   for (Node n = ((Node)evt.getTarget()).getNextSibling();
                        n != null;
                        n = n.getNextSibling()) {
  -                    invalidateProperties(n, null, null);
  +                    invalidateProperties(n, null, null, true);
                   }
               }
           }
  @@ -2270,7 +2286,7 @@
   
                   // Invalidate all the CSSStylableElements in the document.
                   invalidateProperties(document.getDocumentElement(), 
  -                                     null, null);
  +                                     null, null, true);
               } else if (removedStylableElementSibling != null) {
                   // Invalidate the CSSStylableElement siblings, to
                   // correctly match the adjacent selectors and
  @@ -2278,7 +2294,7 @@
                   for (Node n = removedStylableElementSibling;
                        n != null;
                        n = n.getNextSibling()) {
  -                    invalidateProperties(n, null, null);
  +                    invalidateProperties(n, null, null, true);
                   }
                   removedStylableElementSibling = null;
               }
  @@ -2295,7 +2311,7 @@
                   styleSheetNodes = null;
                   // Invalidate all the CSSStylableElements in the document.
                   invalidateProperties(document.getDocumentElement(), 
  -                                     null, null);
  +                                     null, null, true);
               }
           }
       }
  @@ -2354,11 +2370,11 @@
                   selectorAttributes.contains(name)) {
                   // An attribute has been modified, invalidate all the
                   // properties to correctly match attribute selectors.
  -                invalidateProperties(elt, null, null);
  +                invalidateProperties(elt, null, null, true);
                   for (Node n = elt.getNextSibling();
                        n != null;
                        n = n.getNextSibling()) {
  -                    invalidateProperties(n, null, null);
  +                    invalidateProperties(n, null, null, true);
                   }
               }
           }
  
  
  
  1.3       +6 -1      
xml-batik/sources/org/apache/batik/css/engine/CSSImportedElementRoot.java
  
  Index: CSSImportedElementRoot.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/css/engine/CSSImportedElementRoot.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CSSImportedElementRoot.java       8 Aug 2003 11:38:54 -0000       1.2
  +++ CSSImportedElementRoot.java       14 Dec 2003 18:01:11 -0000      1.3
  @@ -69,4 +69,9 @@
        */
       Element getCSSParentElement();
   
  +    /**
  +     * Returns true if the imported element is local to
  +     * the owning document.
  +     */
  +    boolean getIsLocal();
   }
  
  
  
  1.4       +19 -2     
xml-batik/sources/org/apache/batik/dom/svg/SVGOMCSSImportedElementRoot.java
  
  Index: SVGOMCSSImportedElementRoot.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGOMCSSImportedElementRoot.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGOMCSSImportedElementRoot.java  8 Aug 2003 11:38:59 -0000       1.3
  +++ SVGOMCSSImportedElementRoot.java  14 Dec 2003 18:01:11 -0000      1.4
  @@ -73,6 +73,12 @@
       protected Element cssParentElement;
   
       /**
  +     * Indicates if the imported css element is from
  +     * this document.
  +     */
  +    protected boolean isLocal;
  +
  +    /**
        * Creates a new DocumentFragment object.
        */
       protected SVGOMCSSImportedElementRoot() {
  @@ -82,9 +88,11 @@
        * Creates a new DocumentFragment object.
        */
       public SVGOMCSSImportedElementRoot(AbstractDocument owner,
  -                                       Element parent) {
  +                                       Element parent,
  +                                       boolean isLocal) {
        ownerDocument = owner;
           cssParentElement = parent;
  +        this.isLocal = isLocal;
       }
   
       /**
  @@ -108,6 +116,15 @@
        */
       public Element getCSSParentElement() {
           return cssParentElement;
  +    }
  +
  +
  +    /**
  +     * Returns true if the imported CSS tree is from this
  +     * 'owner' document.
  +     */
  +    public boolean getIsLocal() {
  +        return isLocal;
       }
   
       /**
  
  
  
  1.13      +3 -3      
xml-batik/sources/org/apache/batik/dom/svg/SVGStylableElement.java
  
  Index: SVGStylableElement.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGStylableElement.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- SVGStylableElement.java   31 Oct 2003 22:39:41 -0000      1.12
  +++ SVGStylableElement.java   14 Dec 2003 18:01:11 -0000      1.13
  @@ -543,7 +543,7 @@
           implements LiveAttributeValue,
                      CSSOMSVGStyleDeclaration.ValueProvider,
                      CSSOMSVGStyleDeclaration.ModificationHandler, 
  -                   CSSEngine.MainPropertyReciever {
  +                   CSSEngine.MainPropertyReceiver {
           
           /**
            * The associated CSS object.
  @@ -679,7 +679,7 @@
               }
           }
   
  -        public void setMainPoperty(String name, Value v, boolean important) {
  +        public void setMainProperty(String name, Value v, boolean important) {
               int idx = cssEngine.getPropertyIndex(name);
               if (idx == -1) 
                   return;   // unknown property
  
  
  

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

Reply via email to