deweese 2003/04/01 02:35:39
Modified: samples/tests/spec/scripting xAnimOnClick.svg
sources/org/apache/batik/ext/awt
MultipleGradientPaintContext.java
sources/org/apache/batik/gvt PatternPaint.java
PatternPaintContext.java
Log:
Significant performance improvement for patterns that are filtered or have
filters applied to them (take Batik70 for example).
Revision Changes Path
1.4 +7 -21 xml-batik/samples/tests/spec/scripting/xAnimOnClick.svg
Index: xAnimOnClick.svg
===================================================================
RCS file: /home/cvs/xml-batik/samples/tests/spec/scripting/xAnimOnClick.svg,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- xAnimOnClick.svg 11 Feb 2002 14:42:52 -0000 1.3
+++ xAnimOnClick.svg 1 Apr 2003 10:35:39 -0000 1.4
@@ -25,20 +25,11 @@
<text x="50%" y="45" class="title"><rect> x Animation in 'onclick'</text>
<script type="text/ecmascript">
-
- var r;
- var doc;
- var t;
- var start;
- var end;
- var inc =2;
- var frac=2;
- var cont;
+ var t, start, end, inc, cont, frac=0;
function startAnim(evt, target, xStart, xEnd){
- r = evt.target;
- doc = r.ownerDocument;
- t = doc.getElementById(target);
+ if (cont == 1) return;
+ t = document.getElementById(target);
start = xStart
end = xEnd;
cont = 1;
@@ -51,17 +42,12 @@
function cyclopse() {
t.setAttribute('x', (end-start)*frac/100+start);
- if (frac == 100) {
- inc = -2;
- } else if (frac == 0) {
- inc = 2;
- }
+ if (frac == 100) inc = -2;
+ if (frac == 0) inc = 2;
frac += inc;
- if (cont == 1) {
+ if (cont == 1)
setTimeout('cyclopse()', 50);
- }
}
-
</script>
<g id="test-content">
1.14 +2 -2
xml-batik/sources/org/apache/batik/ext/awt/MultipleGradientPaintContext.java
Index: MultipleGradientPaintContext.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/ext/awt/MultipleGradientPaintContext.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- MultipleGradientPaintContext.java 10 Dec 2002 16:19:17 -0000 1.13
+++ MultipleGradientPaintContext.java 1 Apr 2003 10:35:39 -0000 1.14
@@ -196,7 +196,7 @@
len++;
}
- //if the first gradient stop is not equal to one, fix this condition
+ //if the last gradient stop is not equal to one, fix this condition
if (fractions[fractions.length - 1] != 1f) {
fixLast = true;
len++;
1.11 +48 -15 xml-batik/sources/org/apache/batik/gvt/PatternPaint.java
Index: PatternPaint.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/PatternPaint.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- PatternPaint.java 23 Jan 2002 14:14:08 -0000 1.10
+++ PatternPaint.java 1 Apr 2003 10:35:39 -0000 1.11
@@ -19,6 +19,7 @@
import java.awt.geom.Rectangle2D;
import java.awt.image.ColorModel;
+import java.awt.image.Raster;
import org.apache.batik.gvt.filter.GraphicsNodeRable8Bit;
import org.apache.batik.gvt.filter.GraphicsNodeRable;
@@ -68,6 +69,8 @@
*/
private boolean overflow;
+ private PatternPaintContext lastContext;
+
/**
* Constructs a new <tt>PatternPaint</tt>.
*
@@ -148,29 +151,39 @@
Rectangle2D userBounds,
AffineTransform xform,
RenderingHints hints) {
-
- // System.out.println("userBounds : " + userBounds);
- // System.out.println("patternTransform : " + patternTransform);
-
// Concatenate the patternTransform to xform
if (patternTransform != null) {
xform = new AffineTransform(xform);
xform.concatenate(patternTransform);
-
- try {
- AffineTransform patternTransformInv =
- patternTransform.createInverse();
- userBounds = patternTransformInv.
- createTransformedShape(userBounds).getBounds2D();
- }
- catch(NoninvertibleTransformException e){ }
}
- return new PatternPaintContext(cm, xform,
+ if ((lastContext!= null) &&
+ lastContext.getColorModel().equals(cm)) {
+
+ double p[] = new double[6];
+ double q[] = new double[6];
+ xform.getMatrix(p);
+ lastContext.getUsr2Dev().getMatrix(q);
+ if ((p[0] == q[0]) && (p[1] == q[1]) &&
+ (p[2] == q[2]) && (p[3] == q[3])) {
+ if ((p[4] == q[4]) && (p[5] == q[5]))
+ return lastContext;
+ else
+ return new PatternPaintContextWrapper
+ (lastContext,
+ (int)(q[4]-p[4]+0.5),
+ (int)(q[5]-p[5]+0.5));
+ }
+ }
+ // System.out.println("CreateContext Called: " + this);
+ // System.out.println("CM : " + cm);
+ // System.out.println("xForm : " + xform);
+
+ lastContext = new PatternPaintContext(cm, xform,
hints, tile,
patternRegion,
- userBounds,
overflow);
+ return lastContext;
}
/**
@@ -178,5 +191,25 @@
*/
public int getTransparency(){
return TRANSLUCENT;
+ }
+
+ static class PatternPaintContextWrapper implements PaintContext {
+ PatternPaintContext ppc;
+ int xShift, yShift;
+ PatternPaintContextWrapper(PatternPaintContext ppc,
+ int xShift, int yShift) {
+ this.ppc = ppc;
+ this.xShift = xShift;
+ this.yShift = yShift;
+ }
+
+ public void dispose(){ }
+
+ public ColorModel getColorModel(){
+ return ppc.getColorModel();
+ }
+ public Raster getRaster(int x, int y, int width, int height){
+ return ppc.getRaster(x+xShift, y+yShift, width, height);
+ }
}
}
1.10 +7 -4 xml-batik/sources/org/apache/batik/gvt/PatternPaintContext.java
Index: PatternPaintContext.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/PatternPaintContext.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- PatternPaintContext.java 17 Dec 2001 16:02:17 -0000 1.9
+++ PatternPaintContext.java 1 Apr 2003 10:35:39 -0000 1.10
@@ -58,6 +58,9 @@
*/
private RenderedImage tiled;
+ protected AffineTransform usr2dev;
+
+ public AffineTransform getUsr2Dev() { return usr2dev; }
private static Rectangle EVERYTHING =
new Rectangle(Integer.MIN_VALUE/4, Integer.MIN_VALUE/4,
@@ -67,7 +70,7 @@
* @param destCM ColorModel that receives the paint data
* @param usr2dev user space to device space transform
* @param hints RenderingHints
- * @param userBounds of the region tiled by this paint. In user space.
+ * @param patternRegion region tiled by this paint. In user space.
* @param overflow controls whether the pattern region clips the
* pattern tile
*/
@@ -76,7 +79,6 @@
RenderingHints hints,
Filter tile,
Rectangle2D patternRegion,
- Rectangle2D userBounds,
boolean overflow) {
if(usr2dev == null){
@@ -91,7 +93,8 @@
throw new IllegalArgumentException();
}
- // System.out.println("UsrB: " + userBounds);
+ this.usr2dev = usr2dev;
+
// System.out.println("PatB: " + patternRegion);
// System.out.println("Tile: " + tile);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]