You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by de...@apache.org on 2003/09/04 03:12:49 UTC
cvs commit: xml-batik/sources/org/apache/batik/css/engine CSSEngine.java
deweese 2003/09/03 18:12:49
Modified: sources/org/apache/batik/css/engine CSSEngine.java
Log:
1) Fixed a bug in property change propogation.
Revision Changes Path
1.34 +40 -27 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.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- CSSEngine.java 29 Aug 2003 17:04:31 -0000 1.33
+++ CSSEngine.java 4 Sep 2003 01:12:48 -0000 1.34
@@ -1790,11 +1790,9 @@
}
if (removed) {
- invalidateProperties(elt, null);
+ invalidateProperties(elt, null, updated);
} else {
int count = 0;
-
-
// Invalidate the relative values
boolean fs = (fontSizeIndex == -1)
? false
@@ -1827,7 +1825,7 @@
props[count++] = i;
}
}
- invalidateProperties(elt, props);
+ invalidateProperties(elt, props, null);
}
}
break;
@@ -1856,11 +1854,12 @@
/**
* Invalidates all the properties of the given node.
*/
- protected void invalidateProperties(Node node, int [] properties) {
+ protected void invalidateProperties(Node node,
+ int [] properties,
+ boolean [] updated) {
+
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);
@@ -1870,16 +1869,26 @@
StyleMap newStyle = getCascadedStyleMap(elt, null);
elt.setComputedStyleMap(null, newStyle);
boolean [] diffs = new boolean[getNumberOfProperties()];
- int count =0;
+ if (updated != null) {
+ for (int i=0; i< updated.length; i++) {
+ diffs[i] = updated[i];
+ }
+ }
if (properties != null) {
- for (int i=0; i<properties.length; i++)
+ for (int i=0; i<properties.length; i++) {
diffs[properties[i]] = true;
- count = properties.length;
+ }
+ }
+ 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.
+ // Value nv = getComputedStyle(elt, null, i);
Value nv = newStyle.getValue(i);
Value ov = null;
if (!style.isNullCascaded(i)) {
@@ -1944,8 +1953,8 @@
boolean cl = (colorIndex == -1)
? false
: updated[colorIndex];
- int count = 0;
+ int count = 0;
for (int i = getNumberOfProperties() - 1; i >= 0; --i) {
if (updated[i]) {
count++;
@@ -1998,12 +2007,12 @@
Node c = getImportedChild(node);
if (c != null) {
- invalidateProperties(c, inherited);
+ invalidateProperties(c, inherited, null);
}
for (Node n = node.getFirstChild();
n != null;
n = n.getNextSibling()) {
- invalidateProperties(n, inherited);
+ invalidateProperties(n, inherited, null);
}
}
@@ -2103,9 +2112,12 @@
}
break;
- case MutationEvent.REMOVAL:
- invalidateProperties(elt, null);
- return;
+ case MutationEvent.REMOVAL:
+ {
+ int [] invalid = { idx };
+ invalidateProperties(elt, invalid, null);
+ return;
+ }
}
boolean[] updated = styleDeclarationUpdateHandler.updatedProperties;
@@ -2141,7 +2153,7 @@
}
}
- invalidateProperties(elt, props);
+ invalidateProperties(elt, props, null);
}
/**
@@ -2153,9 +2165,9 @@
EventTarget et = evt.getTarget();
if (et instanceof CSSStyleSheetNode) {
styleSheetNodes = null;
-
// Invalidate all the CSSStylableElements in the document.
- invalidateProperties(document.getDocumentElement(), null);
+ invalidateProperties(document.getDocumentElement(),
+ null, null);
return;
}
if (et instanceof CSSStylableElement) {
@@ -2165,7 +2177,7 @@
for (Node n = ((Node)evt.getTarget()).getNextSibling();
n != null;
n = n.getNextSibling()) {
- invalidateProperties(n, null);
+ invalidateProperties(n, null, null);
}
}
}
@@ -2203,7 +2215,8 @@
styleSheetNodes = null;
// Invalidate all the CSSStylableElements in the document.
- invalidateProperties(document.getDocumentElement(), null);
+ invalidateProperties(document.getDocumentElement(),
+ null, null);
} else if (removedStylableElementSibling != null) {
// Invalidate the CSSStylableElement siblings, to
// correctly match the adjacent selectors and
@@ -2211,7 +2224,7 @@
for (Node n = removedStylableElementSibling;
n != null;
n = n.getNextSibling()) {
- invalidateProperties(n, null);
+ invalidateProperties(n, null, null);
}
removedStylableElementSibling = null;
}
@@ -2226,9 +2239,9 @@
Node n = (Node)evt.getTarget();
if (n.getParentNode() instanceof CSSStyleSheetNode) {
styleSheetNodes = null;
-
// Invalidate all the CSSStylableElements in the document.
- invalidateProperties(document.getDocumentElement(), null);
+ invalidateProperties(document.getDocumentElement(),
+ null, null);
}
}
}
@@ -2284,11 +2297,11 @@
selectorAttributes.contains(name)) {
// An attribute has been modified, invalidate all the
// properties to correctly match attribute selectors.
- invalidateProperties(elt, null);
+ invalidateProperties(elt, null, null);
for (Node n = elt.getNextSibling();
n != null;
n = n.getNextSibling()) {
- invalidateProperties(n, null);
+ invalidateProperties(n, null, null);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org