diff --git a/src/java/org/apache/xmlgraphics/java2d/ps/PSGraphics2D.java b/src/java/org/apache/xmlgraphics/java2d/ps/PSGraphics2D.java index 225abb5..151f973 100644 --- a/src/java/org/apache/xmlgraphics/java2d/ps/PSGraphics2D.java +++ b/src/java/org/apache/xmlgraphics/java2d/ps/PSGraphics2D.java @@ -37,6 +37,7 @@ import java.awt.Stroke; import java.awt.TexturePaint; import java.awt.geom.AffineTransform; import java.awt.geom.PathIterator; +import java.awt.geom.Area; import java.awt.image.BufferedImage; import java.awt.image.ImageObserver; import java.awt.image.RenderedImage; @@ -430,7 +431,9 @@ public class PSGraphics2D extends AbstractGraphics2D { gen.concatMatrix(trans); } Shape imclip = getClip(); - writeClip(imclip); + if (shouldBeClipped(imclip, s)) { + writeClip(imclip); + } establishColor(getColor()); applyPaint(getPaint(), false); @@ -447,6 +450,22 @@ public class PSGraphics2D extends AbstractGraphics2D { } /** + * Determinates if a shape is included into a clipping region + * @param clip Shape defining the clipping region + * @param s Shape to be drawn + * @return a boolean + */ + public boolean shouldBeClipped(Shape clip, Shape s) { + if (clip == null || s == null) { + return false; + } + Area as = new Area(s); + Area imclip = new Area(clip); + imclip.intersect(as); + return !imclip.equals(as); + } + + /** * Establishes a clipping region * @param s Shape defining the clipping region */ @@ -715,7 +734,9 @@ public class PSGraphics2D extends AbstractGraphics2D { gen.concatMatrix(trans); } Shape imclip = getClip(); - writeClip(imclip); + if (shouldBeClipped(imclip, s)) { + writeClip(imclip); + } establishColor(getColor());