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]