// Copyright 2001, FreeHEP.
package org.freehep.postscript;
import java.awt.PaintContext;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.TexturePaint;
import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
/**
* Texture Paint for PostScript Processor
*
* @author Mark Donszelmann
* @version $Id: FixedTexturePaint.java 8958 2006-09-12 23:37:43Z duns $
*/
public class FixedTexturePaint extends TexturePaint {
private OperandStack os;
private AffineTransform matrix;
public FixedTexturePaint(OperandStack os, AffineTransform m, BufferedImage texture, Rectangle2D anchor) {
super(texture, anchor);
this.os = os;
matrix = m;
}
public PaintContext createContext(ColorModel cm,
Rectangle deviceBounds,
Rectangle2D userBounds,
AffineTransform xform,
RenderingHints hints) {
AffineTransform mirror;
try {
// calculate Mirror: x = M*ctm --> M = x*ctm-1
mirror = os.gstate().getTransform();
mirror = mirror.createInverse();
mirror.preConcatenate(xform);
} catch (NoninvertibleTransformException e) {
System.err.println("Pattern problem: could not invert matrix");
mirror = xform;
}
AffineTransform at = new AffineTransform();
at.preConcatenate(matrix);
at.preConcatenate(mirror);
return super.createContext(cm, deviceBounds, userBounds, at, hints);
}
}