diff options
author | kitfox | 2012-09-29 07:21:33 +0200 |
---|---|---|
committer | kitfox | 2012-09-29 07:21:33 +0200 |
commit | a3164a1079b2caf136b629cd8614fe1a73215469 (patch) | |
tree | e29687407dd57ac73e272b79523fc081bbd77058 /src | |
parent | Updating JNLP. (diff) | |
download | svg-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.java | 16 | ||||
-rw-r--r-- | src/main/java/com/kitfox/svg/SVGLoader.java | 17 | ||||
-rw-r--r-- | src/main/java/com/kitfox/svg/SVGUniverse.java | 6 | ||||
-rw-r--r-- | src/main/java/com/kitfox/svg/Use.java | 48 |
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;
}
}
|