From 091a1e0179cb264cc2cab6e3b11ea31045c8536d Mon Sep 17 00:00:00 2001 From: kitfox Date: Tue, 29 May 2007 23:33:23 +0000 Subject: Restoring SVG Salamander to it's original code base, and updating build scripts. git-svn-id: https://svn.java.net/svn/svgsalamander~svn/trunk/svg-core@36 7dc7fa77-23fb-e6ad-8e2e-c86bd48ed22b --- .../kitfox/svg/pattern/PatternPaintContext.java | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 src/main/java/com/kitfox/svg/pattern/PatternPaintContext.java (limited to 'src/main/java/com/kitfox/svg/pattern/PatternPaintContext.java') diff --git a/src/main/java/com/kitfox/svg/pattern/PatternPaintContext.java b/src/main/java/com/kitfox/svg/pattern/PatternPaintContext.java new file mode 100644 index 0000000..d7e4c2e --- /dev/null +++ b/src/main/java/com/kitfox/svg/pattern/PatternPaintContext.java @@ -0,0 +1,120 @@ +/* + * PatternPaintContext.java + * + * + * The Salamander Project - 2D and 3D graphics libraries in Java + * Copyright (C) 2004 Mark McKay + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Mark McKay can be contacted at mark@kitfox.com. Salamander and other + * projects can be found at http://www.kitfox.com + * + * Created on April 1, 2004, 3:37 AM + */ + +package com.kitfox.svg.pattern; + +import java.awt.*; +import java.awt.geom.*; +import java.awt.image.*; + +/** + * @author Mark McKay + * @author Mark McKay + */ +public class PatternPaintContext implements PaintContext +{ + BufferedImage source; //Image we're rendering from + Rectangle deviceBounds; //int size of rectangle we're rendering to +// AffineTransform userXform; //xform from user space to device space +// AffineTransform distortXform; //distortion applied to this pattern + + AffineTransform xform; //distortion applied to this pattern + + int sourceWidth; + int sourceHeight; + + //Raster we use to build tile + BufferedImage buf; + + /** Creates a new instance of PatternPaintContext */ + public PatternPaintContext(BufferedImage source, Rectangle deviceBounds, AffineTransform userXform, AffineTransform distortXform) + { +//System.err.println("Bounds " + deviceBounds); + this.source = source; + this.deviceBounds = deviceBounds; + try { +// this.distortXform = distortXform.createInverse(); +// this.userXform = userXform.createInverse(); + +// xform = userXform.createInverse(); +// xform.concatenate(distortXform.createInverse()); + xform = distortXform.createInverse(); + xform.concatenate(userXform.createInverse()); + } + catch (Exception e) { e.printStackTrace(); } + + sourceWidth = source.getWidth(); + sourceHeight = source.getHeight(); + } + + public void dispose() { + } + + public ColorModel getColorModel() { + return source.getColorModel(); + } + + public Raster getRaster(int x, int y, int w, int h) + { +//System.err.println("" + x + ", " + y + ", " + w + ", " + h); + if (buf == null || buf.getWidth() != w || buf.getHeight() != buf.getHeight()) + { + buf = new BufferedImage(w, h, source.getType()); + } + +// Point2D.Float srcPt = new Point2D.Float(), srcPt2 = new Point2D.Float(), destPt = new Point2D.Float(); + Point2D.Float srcPt = new Point2D.Float(), destPt = new Point2D.Float(); + for (int j = 0; j < h; j++) + { + for (int i = 0; i < w; i++) + { + destPt.setLocation(i + x, j + y); + + xform.transform(destPt, srcPt); + +// userXform.transform(destPt, srcPt2); +// distortXform.transform(srcPt2, srcPt); + + int ii = ((int)srcPt.x) % sourceWidth; + if (ii < 0) ii += sourceWidth; + int jj = ((int)srcPt.y) % sourceHeight; + if (jj < 0) jj += sourceHeight; + + buf.setRGB(i, j, source.getRGB(ii, jj)); + } + } + + return buf.getData(); + } + + public static void main(String[] argv) + { + int i = -4; + System.err.println("Hello " + (i % 4)); + } + +} -- cgit v1.2.3-55-g7522