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]