blob: ca8c4a5b0a0815a8df4a8b32c5fb2cbedbbe08af [file] [log] [blame]
<test title="Clip Testing">
<description>
This test validates the convertion of Java 2D clip into
SVG clipPath definition and attributes
</description>
<description>
The test positions the clip so that it can be visually
represented by doing the following: fill a rectangle
first, then set the clip, then fill the rectangle again
in a different color.
</description>
<javaCode>
<![CDATA[
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// Save original clip
Shape clipShape = g.getClip();
AffineTransform transform = g.getTransform();
g.setPaint(Color.black);
Dimension size = new Dimension(300, 400);
int w=100, h=50;
int vOffset = h + 20;
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D gi = image.createGraphics();
gi.setPaint(Color.white);
gi.fillRect(0, 0, 100, 50);
gi.setPaint(Color.green);
gi.fillRect(0, 0, 50, 25);
gi.setPaint(Color.black);
gi.fillRect(50, 0, 50, 25);
gi.setPaint(Color.red);
gi.fillRect(50, 25, 50, 25);
gi.dispose();
// Set simple clip : does not modify the output
g.clipRect(0, 0, size.width, size.height);
g.drawImage(image, 0, 0, null);
g.setClip(clipShape);
g.drawString("Clip set to device bounds", 110, 25);
g.translate(0, vOffset);
// Intersect current clip with a smaller clip : show only
// the top right corner of the image
g.drawString("Clip set to upper right quarter", 110, 25);
g.clipRect(w/2, 0, w/2, h/2);
g.drawImage(image, 0, 0, null);
// Restore
g.setTransform(transform);
g.setClip(clipShape);
g.translate(0, 2*vOffset);
// Scale before setting the same clip
g.drawString("Clip set to upper right quarter", 110, 15);
g.drawString("after .5 scale", 110, 30);
g.scale(.5, .5);
g.clipRect(w/2, 0, w/2, h/2);
g.drawImage(image, 0, 0, null);
// Restore
g.setTransform(transform);
g.setClip(clipShape);
g.translate(0, 3*vOffset);
// Use a non-rectangle clipping area
g.drawString("Non-Rectagular clip", 110, 25);
Shape circle = new Ellipse2D.Float(0, 0, w, h);
g.clip(circle);
g.drawImage(image, 0, 0, null);
// Restore
g.setTransform(transform);
g.setClip(clipShape);
g.translate(0, 4*vOffset);
// Use a non-rectangle clipping area again,
// after setting a scale transform
g.drawString("Non-Rectagular clip after", 110, 15);
g.drawString(".5 scale", 110, 30);
g.scale(.5, .5);
g.clip(circle);
g.drawImage(image, 0, 0, null);
// Restore
g.setTransform(transform);
g.setClip(clipShape);
g.translate(0, 5*vOffset);
// Use a non-rectangle clipping area again,
// before setting a scale transform
g.drawString("Non-Rectagular clip before", 110, 15);
g.drawString(".5 scale", 110, 30);
g.clip(circle);
g.scale(.5, .5);
g.drawImage(image, 0, 0, null);
]]>
</javaCode>
</test>