deweese 2004/12/15 02:50:30
Modified: sources/org/apache/batik/bridge BridgeContext.java
SVGUseElementBridge.java
sources/org/apache/batik/dom/svg
SVGOMTextContentElement.java
sources/org/apache/batik/gvt/renderer
StrokingTextPainter.java
Log:
1) Fixed a small memory leak when changing xlink:href on a
use referencing a local element.
2) Implemented textLength to return the value of
getComputedTextLength when the textLength attribute is not
set.
Revision Changes Path
1.80 +4 -1
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.79
retrieving revision 1.80
diff -u -r1.79 -r1.80
--- BridgeContext.java 18 Nov 2004 01:46:53 -0000 1.79
+++ BridgeContext.java 15 Dec 2004 10:50:29 -0000 1.80
@@ -1018,14 +1018,17 @@
extends CleanerThread.SoftReferenceCleared {
Object mememto;
Set set;
+ // String refStr;
SoftReferenceMememto(Object ref, Object mememto, Set set) {
super(ref);
+ // refStr = ref.toString();
this.mememto = mememto;
this.set = set;
}
public void cleared() {
synchronized (set) {
+ // System.err.println("SRClear: " + refStr);
set.remove(mememto);
mememto = null;
set = null;
1.46 +28 -28
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.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- SVGUseElementBridge.java 30 Nov 2004 03:23:58 -0000 1.45
+++ SVGUseElementBridge.java 15 Dec 2004 10:50:29 -0000 1.46
@@ -177,6 +177,14 @@
root = new SVGOMCSSImportedElementRoot(document, e, isLocal);
root.appendChild(localRefElement);
+ if (gn == null) {
+ gn = new CompositeGraphicsNode();
+ } else {
+ int s = gn.size();
+ for (int i=0; i<s; i++)
+ gn.remove(0);
+ }
+
SVGOMUseElement ue = (SVGOMUseElement)e;
Node oldRoot = ue.getCSSImportedElementRoot();
if (oldRoot != null) {
@@ -193,13 +201,6 @@
GraphicsNode refNode = builder.build(ctx, g);
///////////////////////////////////////////////////////////////////////
- if (gn == null) {
- gn = new CompositeGraphicsNode();
- } else {
- int s = gn.size();
- for (int i=0; i<s; i++)
- gn.remove(0);
- }
gn.getChildren().add(refNode);
@@ -221,22 +222,22 @@
if (r != null)
gn.setBackgroundEnable(r);
+ if (l != null) {
+ // Remove event listeners
+ EventTarget target = l.target;
+ target.removeEventListener("DOMAttrModified", l, true);
+ target.removeEventListener("DOMNodeInserted", l, true);
+ target.removeEventListener("DOMNodeRemoved", l, true);
+ target.removeEventListener("DOMCharacterDataModified",l, true);
+ l = null;
+ }
+
///////////////////////////////////////////////////////////////////////
// Handle mutations on content referenced in the same file if
// we are in a dynamic context.
if (isLocal && ctx.isDynamic()) {
- if (l == null) {
- l = new ReferencedElementMutationListener();
- l.target = (EventTarget)refElement;
- } else {
- // Remove event listeners
- EventTarget target = l.target;
- target.removeEventListener("DOMAttrModified", l, true);
- target.removeEventListener("DOMNodeInserted", l, true);
- target.removeEventListener("DOMNodeRemoved", l, true);
- target.removeEventListener("DOMCharacterDataModified",l,
true);
- }
+ l = new ReferencedElementMutationListener();
EventTarget target = (EventTarget)refElement;
l.target = target;
@@ -259,14 +260,6 @@
}
public void dispose() {
- SVGOMUseElement ue = (SVGOMUseElement)e;
- if ((ue != null) &&
- (ue.getCSSImportedElementRoot() != null)) {
- disposeTree(ue.getCSSImportedElementRoot());
- }
-
- super.dispose();
-
if (l != null) {
// Remove event listeners
EventTarget target = l.target;
@@ -274,10 +267,17 @@
target.removeEventListener("DOMNodeInserted", l, true);
target.removeEventListener("DOMNodeRemoved", l, true);
target.removeEventListener("DOMCharacterDataModified",l, true);
+ l = null;
}
+ SVGOMUseElement ue = (SVGOMUseElement)e;
+ if ((ue != null) && (ue.getCSSImportedElementRoot() != null)) {
+ disposeTree(ue.getCSSImportedElementRoot());
+ }
+
+ super.dispose();
+
subCtx = null;
- l = null;
}
/**
1.13 +28 -2
xml-batik/sources/org/apache/batik/dom/svg/SVGOMTextContentElement.java
Index: SVGOMTextContentElement.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGOMTextContentElement.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- SVGOMTextContentElement.java 18 Aug 2004 07:13:18 -0000 1.12
+++ SVGOMTextContentElement.java 15 Dec 2004 10:50:29 -0000 1.13
@@ -23,6 +23,7 @@
import org.w3c.dom.svg.SVGAnimatedBoolean;
import org.w3c.dom.svg.SVGAnimatedEnumeration;
import org.w3c.dom.svg.SVGAnimatedLength;
+import org.w3c.dom.svg.SVGLength;
import org.w3c.dom.svg.SVGPoint;
import org.w3c.dom.svg.SVGRect;
import org.w3c.dom.svg.SVGStringList;
@@ -73,8 +74,33 @@
result = new AbstractSVGAnimatedLength
(this, null, SVG_TEXT_LENGTH_ATTRIBUTE,
SVGOMAnimatedLength.HORIZONTAL_LENGTH) {
+ boolean usedDefault;
+
protected String getDefaultValue() {
- throw new RuntimeException("!!! TODO");
+ usedDefault = true;
+ return ""+getComputedTextLength();
+ }
+
+ public SVGLength getBaseVal() {
+ if (baseVal == null) {
+ baseVal = new SVGTextLength(direction);
+ }
+ return baseVal;
+ }
+
+ class SVGTextLength extends BaseSVGLength {
+ public SVGTextLength(short direction) {
+ super(direction);
+ }
+ protected void revalidate() {
+ usedDefault = false;
+
+ super.revalidate();
+
+ // Since the default value can change w/o notice
+ // always recompute it.
+ if (usedDefault) valid = false;
+ }
}
};
putLiveAttributeValue(null, SVG_TEXT_LENGTH_ATTRIBUTE,
1.54 +2 -2
xml-batik/sources/org/apache/batik/gvt/renderer/StrokingTextPainter.java
Index: StrokingTextPainter.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/gvt/renderer/StrokingTextPainter.java,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -r1.53 -r1.54
--- StrokingTextPainter.java 18 Nov 2004 01:47:00 -0000 1.53
+++ StrokingTextPainter.java 15 Dec 2004 10:50:30 -0000 1.54
@@ -202,7 +202,7 @@
// cache the textRuns so don't need to recalculate
node.setTextRuns(textRuns);
return textRuns;
- }
+ }
public List computeTextRuns(TextNode node,
AttributedCharacterIterator aci,
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]