deweese 2003/06/18 17:32:12
Modified: sources/org/apache/batik/swing/svg JSVGComponent.java
test-resources/org/apache/batik/test samplesRendering.xml
Added: test-references/samples/tests/spec/scripting zeroSize.png
samples/tests/spec/scripting zeroSize.svg
Log:
1) JSVGComponent/Canvas now repaints when it changes size (even when no
viewBox).
2) Test files for modifying zero W/H rect, circle, ellipse
Revision Changes Path
1.71 +48 -44 xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java
Index: JSVGComponent.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -r1.70 -r1.71
--- JSVGComponent.java 17 Jun 2003 01:37:57 -0000 1.70
+++ JSVGComponent.java 19 Jun 2003 00:32:11 -0000 1.71
@@ -677,10 +677,12 @@
protected boolean updateRenderingTransform() {
if ((svgDocument == null) || (gvtRoot == null))
return false;
+
try {
SVGSVGElement elt = svgDocument.getRootElement();
Dimension d = getSize();
Dimension oldD = prevComponentSize;
+ if (oldD == null) oldD = d;
prevComponentSize = d;
if (d.width < 1) d.width = 1;
if (d.height < 1) d.height = 1;
@@ -688,53 +690,55 @@
(fragmentIdentifier, elt, d.width, d.height);
CanvasGraphicsNode cgn = getCanvasGraphicsNode();
AffineTransform vt = cgn.getViewingTransform();
- if (!at.equals(vt)) {
- if (oldD == null)
- oldD = d;
- // Here we map the old center of the component down to
- // the user coodinate system with the old viewing
- // transform and then back to the screen with the
- // new viewing transform. We then adjust the rendering
- // transform so it lands in the same place.
- Point2D pt = new Point2D.Float(oldD.width/2.0f,
- oldD.height/2.0f);
- AffineTransform rendAT = getRenderingTransform();
- if (rendAT != null) {
- try {
- AffineTransform invRendAT = rendAT.createInverse();
- pt = invRendAT.transform(pt, null);
- } catch (NoninvertibleTransformException e) { }
- }
- if (vt != null) {
- try {
- AffineTransform invVT = vt.createInverse();
- pt = invVT.transform(pt, null);
- } catch (NoninvertibleTransformException e) { }
- }
- if (at != null)
- pt = at.transform(pt, null);
- if (rendAT != null)
- pt = rendAT.transform(pt, null);
+ if (at.equals(vt)) {
+ // No new transform
+ // Only repaint if size really changed.
+ return ((oldD.width != d.width) || (oldD.height != d.height));
+ }
- // Now figure out how far we need to shift things
- // to get the center point to line up again.
- float dx = (float)((d.width/2.0f) -pt.getX());
- float dy = (float)((d.height/2.0f)-pt.getY());
- // Round the values to nearest integer.
- dx = (int)((dx < 0)?(dx - .5):(dx + .5));
- dy = (int)((dy < 0)?(dy - .5):(dy + .5));
- if ((dx != 0) || (dy != 0)) {
- rendAT.preConcatenate
- (AffineTransform.getTranslateInstance(dx, dy));
- setRenderingTransform(rendAT, false);
- }
- cgn.setViewingTransform(at);
- return true;
+
+ // Here we map the old center of the component down to
+ // the user coodinate system with the old viewing
+ // transform and then back to the screen with the
+ // new viewing transform. We then adjust the rendering
+ // transform so it lands in the same place.
+ Point2D pt = new Point2D.Float(oldD.width/2.0f,
+ oldD.height/2.0f);
+ AffineTransform rendAT = getRenderingTransform();
+ if (rendAT != null) {
+ try {
+ AffineTransform invRendAT = rendAT.createInverse();
+ pt = invRendAT.transform(pt, null);
+ } catch (NoninvertibleTransformException e) { }
+ }
+ if (vt != null) {
+ try {
+ AffineTransform invVT = vt.createInverse();
+ pt = invVT.transform(pt, null);
+ } catch (NoninvertibleTransformException e) { }
+ }
+ if (at != null)
+ pt = at.transform(pt, null);
+ if (rendAT != null)
+ pt = rendAT.transform(pt, null);
+
+ // Now figure out how far we need to shift things
+ // to get the center point to line up again.
+ float dx = (float)((d.width/2.0f) -pt.getX());
+ float dy = (float)((d.height/2.0f)-pt.getY());
+ // Round the values to nearest integer.
+ dx = (int)((dx < 0)?(dx - .5):(dx + .5));
+ dy = (int)((dy < 0)?(dy - .5):(dy + .5));
+ if ((dx != 0) || (dy != 0)) {
+ rendAT.preConcatenate
+ (AffineTransform.getTranslateInstance(dx, dy));
+ setRenderingTransform(rendAT, false);
}
+ cgn.setViewingTransform(at);
} catch (BridgeException e) {
userAgent.displayError(e);
}
- return false;
+ return true;
}
/**
1.1
xml-batik/test-references/samples/tests/spec/scripting/zeroSize.png
<<Binary file>>
1.97 +2 -1
xml-batik/test-resources/org/apache/batik/test/samplesRendering.xml
Index: samplesRendering.xml
===================================================================
RCS file:
/home/cvs/xml-batik/test-resources/org/apache/batik/test/samplesRendering.xml,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -r1.96 -r1.97
--- samplesRendering.xml 7 Jun 2003 17:19:18 -0000 1.96
+++ samplesRendering.xml 19 Jun 2003 00:32:12 -0000 1.97
@@ -373,6 +373,7 @@
<test id="samples/tests/spec/scripting/visibility.svg" />
<test id="samples/tests/spec/scripting/viewBoxOnLoad.svg" />
<test id="samples/tests/spec/scripting/xyModifOnLoad.svg" />
+ <test id="samples/tests/spec/scripting/zeroSize.svg" />
</testGroup>
</testSuite>
1.1 xml-batik/samples/tests/spec/scripting/zeroSize.svg
Index: zeroSize.svg
===================================================================
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000802//EN"
"http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd">
<!-- ====================================================================== -->
<!-- Copyright (C) The Apache Software Foundation. All rights reserved. -->
<!-- -->
<!-- This software is published under the terms of the Apache Software -->
<!-- License version 1.1, a copy of which has been included with this -->
<!-- distribution in the LICENSE file. -->
<!-- ====================================================================== -->
<!-- ====================================================================== -->
<!-- Modification of a rect's attributes -->
<!-- -->
<!-- @author [EMAIL PROTECTED] -->
<!-- @version $Id: zeroSize.svg,v 1.1 2003/06/19 00:32:12 deweese Exp $ -->
<!-- ====================================================================== -->
<?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?>
<svg id="body" width="450" height="500" viewBox="0 0 450 500">
<title>Resizing zero w/h items 'onload'</title>
<text x="50%" y="45" class="title">Resizing zero w/h items 'onload'</text>
<script type="text/ecmascript"><![CDATA[
function resizeRect(id, w, h) {
var rect = document.getElementById(id);
rect.setAttribute("width", w);
rect.setAttribute("height", h);
}
function resizeCircle(id, r) {
var circle = document.getElementById(id);
circle.setAttribute("r", r);
}
function resizeEllipse(id, rx, ry) {
var ellipse = document.getElementById(id);
ellipse.setAttribute("rx", rx);
ellipse.setAttribute("ry", ry);
}
]]></script>
<linearGradient id="testGrad" gradientUnits="objectBoundingBox"
x1="0" y1="1" x2="1" y2="0">
<stop offset="0" style="stop-color:crimson" />
<stop offset="1" style="stop-color:gold" />
</linearGradient>
<g id="test-content">
<g fill="red" stroke="black" stroke-width="2">
<rect id="r1-1" x="10" y="60" width="0" height="0"
onload="resizeRect('r1-1', '50', '50')"/>
<rect id="r1-2" x="70" y="60" width="50" height="0"
onload="resizeRect('r1-2', '50', '50')"/>
<rect id="r1-3" x="130" y="60" width="0" height="50"
onload="resizeRect('r1-3', '50', '50')"/>
<circle id="c1-1" cx="215" cy="85" r="0"
onload="resizeCircle('c1-1', '25')"/>
<ellipse id="e1-1" cx="275" cy="85" rx="0" ry="0"
onload="resizeEllipse('e1-1', '25', '15')"/>
<ellipse id="e1-2" cx="335" cy="85" rx="25" ry="0"
onload="resizeEllipse('e1-2', '25', '15')"/>
<ellipse id="e1-3" cx="395" cy="85" rx="0" ry="15"
onload="resizeEllipse('e1-3', '25', '15')"/>
</g>
<g fill="url(#testGrad)" stroke="black" stroke-width="2">
<rect id="r2-1" x="10" y="120" width="0" height="0"
onload="resizeRect('r2-1', '50', '50')"/>
<rect id="r2-2" x="70" y="120" width="50" height="0"
onload="resizeRect('r2-2', '50', '50')"/>
<rect id="r2-3" x="130" y="120" width="0" height="50"
onload="resizeRect('r2-3', '50', '50')"/>
<circle id="c2-1" cx="215" cy="145" r="0"
onload="resizeCircle('c2-1', '25')"/>
<ellipse id="e2-1" cx="275" cy="145" rx="0" ry="0"
onload="resizeEllipse('e2-1', '25', '15')"/>
<ellipse id="e2-2" cx="335" cy="145" rx="50" ry="0"
onload="resizeEllipse('e2-2', '25', '15')"/>
<ellipse id="e2-3" cx="395" cy="145" rx="0" ry="50"
onload="resizeEllipse('e2-3', '25', '15')"/>
</g>
<g fill="red" stroke="black" stroke-width="2">
<rect id="r3-1" x="10" y="180" width="50" height="50"
onload="resizeRect('r3-1', '0', '0')"/>
<rect id="r3-2" x="70" y="180" width="50" height="50"
onload="resizeRect('r3-2', '50', '0')"/>
<rect id="r3-3" x="130" y="180" width="50" height="50"
onload="resizeRect('r3-3', '0', '50')"/>
<circle id="c3-1" cx="215" cy="205" r="25"
onload="resizeCircle('c3-1', '0')"/>
<ellipse id="e3-1" cx="275" cy="205" rx="25" ry="15"
onload="resizeEllipse('e3-1', '0', '0')"/>
<ellipse id="e3-2" cx="335" cy="205" rx="25" ry="15"
onload="resizeEllipse('e3-2', '25', '0')"/>
<ellipse id="e3-3" cx="395" cy="205" rx="25" ry="15"
onload="resizeEllipse('e3-3', '0', '15')"/>
</g>
<g fill="url(#testGrad)" stroke="black" stroke-width="2">
<rect id="r4-1" x="10" y="240" width="50" height="50"
onload="resizeRect('r4-1', '0', '0')"/>
<rect id="r4-2" x="70" y="240" width="50" height="50"
onload="resizeRect('r4-2', '50', '0')"/>
<rect id="r4-3" x="130" y="240" width="50" height="50"
onload="resizeRect('r4-3', '0', '50')"/>
<circle id="c4-1" cx="215" cy="265" r="25"
onload="resizeCircle('c4-1', '0')"/>
<ellipse id="e4-1" cx="275" cy="265" rx="25" ry="15"
onload="resizeEllipse('e4-1', '0', '0')"/>
<ellipse id="e4-2" cx="335" cy="265" rx="25" ry="15"
onload="resizeEllipse('e4-2', '25', '0')"/>
<ellipse id="e4-3" cx="395" cy="265" rx="25" ry="15"
onload="resizeEllipse('e4-3', '0', '15')"/>
</g>
</g>
</svg>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]