summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorkitfox2012-09-29 07:21:33 +0200
committerkitfox2012-09-29 07:21:33 +0200
commita3164a1079b2caf136b629cd8614fe1a73215469 (patch)
treee29687407dd57ac73e272b79523fc081bbd77058 /src
parentUpdating JNLP. (diff)
downloadsvg-salamander-core-a3164a1079b2caf136b629cd8614fe1a73215469.tar.gz
svg-salamander-core-a3164a1079b2caf136b629cd8614fe1a73215469.tar.xz
svg-salamander-core-a3164a1079b2caf136b629cd8614fe1a73215469.zip
Now avoiding reentering XML parser when USE tags reference other documents.
git-svn-id: https://svn.java.net/svn/svgsalamander~svn/trunk/svg-core@126 7dc7fa77-23fb-e6ad-8e2e-c86bd48ed22b
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/kitfox/svg/SVGElement.java16
-rw-r--r--src/main/java/com/kitfox/svg/SVGLoader.java17
-rw-r--r--src/main/java/com/kitfox/svg/SVGUniverse.java6
-rw-r--r--src/main/java/com/kitfox/svg/Use.java48
4 files changed, 59 insertions, 28 deletions
diff --git a/src/main/java/com/kitfox/svg/SVGElement.java b/src/main/java/com/kitfox/svg/SVGElement.java
index 7398ea9..4375a89 100644
--- a/src/main/java/com/kitfox/svg/SVGElement.java
+++ b/src/main/java/com/kitfox/svg/SVGElement.java
@@ -391,14 +391,14 @@ abstract public class SVGElement implements Serializable
*/
public void loaderEndElement(SVGLoaderHelper helper) throws SVGParseException
{
- try
- {
- build();
- }
- catch (SVGException se)
- {
- throw new SVGParseException(se);
- }
+// try
+// {
+// build();
+// }
+// catch (SVGException se)
+// {
+// throw new SVGParseException(se);
+// }
}
/**
diff --git a/src/main/java/com/kitfox/svg/SVGLoader.java b/src/main/java/com/kitfox/svg/SVGLoader.java
index c86978d..857ff5b 100644
--- a/src/main/java/com/kitfox/svg/SVGLoader.java
+++ b/src/main/java/com/kitfox/svg/SVGLoader.java
@@ -228,16 +228,25 @@ public class SVGLoader extends DefaultHandler
svgEle.loaderEndElement(helper);
SVGElement parent = null;
- if (buildStack.size() != 0) parent = (SVGElement)buildStack.getLast();
+ if (buildStack.size() != 0)
+ {
+ parent = (SVGElement)buildStack.getLast();
+ }
//else loadRoot = (SVGElement)svgEle;
- if (parent != null) parent.loaderAddChild(helper, svgEle);
- else diagram.setRoot((SVGRoot)svgEle);
+ if (parent != null)
+ {
+ parent.loaderAddChild(helper, svgEle);
+ }
+ else
+ {
+ diagram.setRoot((SVGRoot)svgEle);
+ }
}
catch (Exception e)
{
-e.printStackTrace();
+ e.printStackTrace();
throw new SAXException(e);
}
}
diff --git a/src/main/java/com/kitfox/svg/SVGUniverse.java b/src/main/java/com/kitfox/svg/SVGUniverse.java
index f59e0d1..c68dc79 100644
--- a/src/main/java/com/kitfox/svg/SVGUniverse.java
+++ b/src/main/java/com/kitfox/svg/SVGUniverse.java
@@ -431,7 +431,10 @@ public class SVGUniverse implements Serializable
try
{
URI uri = new URI(docRoot.toString());
- if (loadedDocs.containsKey(uri) && !forceLoad) return uri;
+ if (loadedDocs.containsKey(uri) && !forceLoad)
+ {
+ return uri;
+ }
InputStream is = docRoot.openStream();
return loadSVG(uri, new InputSource(createDocumentInputStream(is)));
@@ -574,6 +577,7 @@ public class SVGUniverse implements Serializable
// SAXParser saxParser = factory.newSAXParser();
// saxParser.parse(new InputSource(new BufferedReader(is)), handler);
+ handler.getLoadedDiagram().updateTime(curTime);
return xmlBase;
}
catch (SAXParseException sex)
diff --git a/src/main/java/com/kitfox/svg/Use.java b/src/main/java/com/kitfox/svg/Use.java
index 3229482..897fdba 100644
--- a/src/main/java/com/kitfox/svg/Use.java
+++ b/src/main/java/com/kitfox/svg/Use.java
@@ -45,7 +45,8 @@ public class Use extends ShapeElement {
float width = 1f;
float height = 1f;
- SVGElement href = null;
+// SVGElement href = null;
+ URI href = null;
AffineTransform refXform;
@@ -94,18 +95,31 @@ public class Use extends ShapeElement {
StyleAttribute sty = new StyleAttribute();
- if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits();
+ if (getPres(sty.setName("x")))
+ {
+ x = sty.getFloatValueWithUnits();
+ }
- if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits();
+ if (getPres(sty.setName("y")))
+ {
+ y = sty.getFloatValueWithUnits();
+ }
- if (getPres(sty.setName("width"))) width = sty.getFloatValueWithUnits();
+ if (getPres(sty.setName("width")))
+ {
+ width = sty.getFloatValueWithUnits();
+ }
- if (getPres(sty.setName("height"))) height = sty.getFloatValueWithUnits();
+ if (getPres(sty.setName("height")))
+ {
+ height = sty.getFloatValueWithUnits();
+ }
if (getPres(sty.setName("xlink:href")))
{
URI src = sty.getURIValue(getXMLBase());
- href = diagram.getUniverse().getElement(src);
+ href = src;
+// href = diagram.getUniverse().getElement(src);
}
//Determine use offset/scale
@@ -121,9 +135,11 @@ public class Use extends ShapeElement {
AffineTransform oldXform = g.getTransform();
g.transform(refXform);
- if (href == null || !(href instanceof RenderableElement)) return;
+ SVGElement ref = diagram.getUniverse().getElement(href);
+
+ if (ref == null || !(ref instanceof RenderableElement)) return;
- RenderableElement rendEle = (RenderableElement)href;
+ RenderableElement rendEle = (RenderableElement)ref;
rendEle.pushParentContext(this);
rendEle.render(g);
rendEle.popParentContext();
@@ -135,9 +151,10 @@ public class Use extends ShapeElement {
public Shape getShape()
{
- if (href instanceof ShapeElement)
+ SVGElement ref = diagram.getUniverse().getElement(href);
+ if (ref instanceof ShapeElement)
{
- Shape shape = ((ShapeElement)href).getShape();
+ Shape shape = ((ShapeElement)ref).getShape();
shape = refXform.createTransformedShape(shape);
shape = shapeToParent(shape);
return shape;
@@ -148,9 +165,10 @@ public class Use extends ShapeElement {
public Rectangle2D getBoundingBox() throws SVGException
{
- if (href instanceof ShapeElement)
+ SVGElement ref = diagram.getUniverse().getElement(href);
+ if (ref instanceof ShapeElement)
{
- ShapeElement shapeEle = (ShapeElement)href;
+ ShapeElement shapeEle = (ShapeElement)ref;
shapeEle.pushParentContext(this);
Rectangle2D bounds = shapeEle.getBoundingBox();
shapeEle.popParentContext();
@@ -222,10 +240,10 @@ public class Use extends ShapeElement {
if (getPres(sty.setName("xlink:href")))
{
URI src = sty.getURIValue(getXMLBase());
- SVGElement newVal = diagram.getUniverse().getElement(src);
- if (newVal != href)
+// SVGElement newVal = diagram.getUniverse().getElement(src);
+ if (!src.equals(href))
{
- href = newVal;
+ href = src;
shapeChange = true;
}
}