blob: 60b4088cde6cedfd2dc68ed13ecf261ff110df67 [file] [log] [blame]
/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package org.apache.batik.svggen;
import java.awt.*;
import java.awt.geom.*;
/**
* This test validates convertion of BasicStroke
*
* @author <a href="mailto:cjolif@ilog.fr">Christophe Jolif</a>
* @author <a href="mailto:vhardy@eng.sun.com">Vincent Hardy</a>
* @version $Id$
*/
public class BStroke implements Painter {
public void paint(Graphics2D g) {
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
/*
* Strokes of varying width
*/
java.awt.BasicStroke[] strokesWidth = {
new java.awt.BasicStroke(2.f),
new java.awt.BasicStroke(4.f),
new java.awt.BasicStroke(8.f),
new java.awt.BasicStroke(16.f)
};
/*
* Strokes of varying termination styles
*/
java.awt.BasicStroke[] strokesCap = {
new java.awt.BasicStroke(15.f, java.awt.BasicStroke.CAP_BUTT, java.awt.BasicStroke.JOIN_BEVEL), // No decoration
new java.awt.BasicStroke(15.f, java.awt.BasicStroke.CAP_SQUARE, java.awt.BasicStroke.JOIN_BEVEL), // Square end
new java.awt.BasicStroke(15.f, java.awt.BasicStroke.CAP_ROUND, java.awt.BasicStroke.JOIN_BEVEL), // Rounded end
};
/*
* Strokes of varying segment connection styles
*/
java.awt.BasicStroke[] strokesJoin = {
new java.awt.BasicStroke(10.f, java.awt.BasicStroke.CAP_SQUARE, java.awt.BasicStroke.JOIN_BEVEL), // Connected with a straight segment
new java.awt.BasicStroke(10.f, java.awt.BasicStroke.CAP_SQUARE, java.awt.BasicStroke.JOIN_MITER), // Extend outlines until they meet
new java.awt.BasicStroke(10.f, java.awt.BasicStroke.CAP_SQUARE, java.awt.BasicStroke.JOIN_ROUND), // Round of corner.
};
/*
* Strokes of varying miterlimits
*/
java.awt.BasicStroke[] strokesMiter = {
new java.awt.BasicStroke(6.f, java.awt.BasicStroke.CAP_SQUARE, java.awt.BasicStroke.JOIN_MITER, 1), // Actually cuts of all angles
new java.awt.BasicStroke(6.f, java.awt.BasicStroke.CAP_SQUARE, java.awt.BasicStroke.JOIN_MITER, 2f), // Cuts off angles less than 60degrees
new java.awt.BasicStroke(6.f, java.awt.BasicStroke.CAP_SQUARE, java.awt.BasicStroke.JOIN_MITER, 10f), // Cuts off angles less than 11 degrees
};
/*
* Srokes with varying dash styles
*/
java.awt.BasicStroke[] strokesDash = {
new java.awt.BasicStroke(8.f,
java.awt.BasicStroke.CAP_BUTT,
java.awt.BasicStroke.JOIN_BEVEL,
8.f,
new float[]{ 6.f, 6.f },
0.f),
new java.awt.BasicStroke(8.f,
java.awt.BasicStroke.CAP_BUTT,
java.awt.BasicStroke.JOIN_BEVEL,
8.f,
new float[]{ 10.f, 4.f },
0.f),
new java.awt.BasicStroke(8.f,
java.awt.BasicStroke.CAP_BUTT,
java.awt.BasicStroke.JOIN_BEVEL,
8.f,
new float[]{ 4.f, 4.f, 10.f, 4.f },
0.f),
new java.awt.BasicStroke(8.f,
java.awt.BasicStroke.CAP_BUTT,
java.awt.BasicStroke.JOIN_BEVEL,
8.f,
new float[]{ 4.f, 4.f, 10.f, 4.f },
4.f)
};
java.awt.geom.AffineTransform defaultTransform = g.getTransform();
// Varying width
g.setPaint(Color.black);
g.drawString("Varying width", 10, 10);
for (BasicStroke aStrokesWidth : strokesWidth) {
g.setStroke(aStrokesWidth);
g.drawLine(10, 30, 10, 80);
g.translate(20, 0);
}
// Varying end caps
g.setTransform(defaultTransform);
g.translate(0, 120);
g.drawString("Varying end caps", 10, 10);
for (BasicStroke aStrokesCap : strokesCap) {
g.setStroke(aStrokesCap);
g.drawLine(15, 30, 15, 80);
g.translate(30, 0);
}
// Varying line joins
GeneralPath needle = new GeneralPath();
needle.moveTo(0, 60);
needle.lineTo(10, 20);
needle.lineTo(20, 60);
g.setTransform(defaultTransform);
g.translate(0, 240);
g.drawString("Varying line joins", 10, 10);
g.translate(20, 20);
for (BasicStroke aStrokesJoin : strokesJoin) {
g.setStroke(aStrokesJoin);
g.draw(needle);
g.translate(35, 0);
}
// Varying miter limit
g.setTransform(defaultTransform);
g.translate(150, 120);
GeneralPath miterShape = new GeneralPath();
miterShape.moveTo(0, 0);
miterShape.lineTo(30, 0);
miterShape.lineTo(30, 60); // 90 degree elbow
miterShape.lineTo(0, 30); // 45 degree elbow.
g.drawString("Varying miter limit", 10, 10);
g.translate(10, 30);
for (BasicStroke aStrokesMiter : strokesMiter) {
g.setStroke(aStrokesMiter);
g.draw(miterShape);
g.translate(40, 0);
}
// Varing dashing patterns
g.setTransform(defaultTransform);
g.translate(150, 0);
g.drawString("Varying dash patterns", 10, 10);
g.translate(20, 0);
for (BasicStroke aStrokesDash : strokesDash) {
g.setStroke(aStrokesDash);
g.drawLine(10, 20, 10, 80);
g.translate(20, 0);
}
}
}