blob: 2a716ec11f49d3ec2cc4fb6dcff94588beb643cb [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
*
* https://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.tools.ant.types.optional.imageio;
import org.apache.tools.ant.types.EnumeratedAttribute;
import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.geom.Arc2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
/**
* Draw an arc.
*/
public class Arc extends BasicShape implements DrawOperation {
private int start = 0;
private int stop = 0;
private ArcType type = ArcType.getDefault();
/**
* Set the start of the arc.
* @param start the start of the arc.
*/
public void setStart(int start) {
this.start = start;
}
/**
* Set the stop of the arc.
* @param stop the stop of the arc.
*/
public void setStop(int stop) {
this.stop = stop;
}
/**
* Set the type of arc.
* @param arcType the type to use - open, pie or chord.
*/
public void setType(ArcType arcType) {
type = arcType;
}
/** {@inheritDoc}. */
@Override
public BufferedImage executeDrawOperation() {
BufferedImage bi = new BufferedImage(width + (strokeWidth * 2),
height + (strokeWidth * 2), BufferedImage.TYPE_4BYTE_ABGR_PRE);
Graphics2D graphics = bi.createGraphics();
if (!"transparent".equalsIgnoreCase(stroke)) {
BasicStroke bStroke = new BasicStroke(strokeWidth);
graphics.setColor(ColorMapper.getColorByName(stroke));
graphics.setStroke(bStroke);
graphics.draw(new Arc2D.Double(strokeWidth, strokeWidth, width,
height, start, stop, type.getIndex()));
}
if (!"transparent".equalsIgnoreCase(fill)) {
graphics.setColor(ColorMapper.getColorByName(fill));
graphics.fill(new Arc2D.Double(strokeWidth, strokeWidth,
width, height, start, stop, type.getIndex()));
}
for (ImageOperation instr : instructions) {
if (instr instanceof DrawOperation) {
BufferedImage img = ((DrawOperation) instr).executeDrawOperation();
graphics.drawImage(img, null, 0, 0);
} else if (instr instanceof TransformOperation) {
bi = ((TransformOperation) instr).executeTransformOperation(bi);
graphics = bi.createGraphics();
}
}
return bi;
}
public static class ArcType extends EnumeratedAttribute {
private static final List<String> VALUES = new ArrayList<>();
static {
VALUES.add(Arc2D.OPEN, "open");
VALUES.add(Arc2D.CHORD, "chord");
VALUES.add(Arc2D.PIE, "pie");
}
/**
* Constructor
*/
public ArcType() {
}
/**
* Constructor using a string.
* @param value the value of the attribute
*/
public ArcType(String value) {
setValue(value);
}
/**
* Get the default ArcType value.
* @return the default value.
*/
public static ArcType getDefault() {
return new ArcType(VALUES.get(0));
}
/**
* @see EnumeratedAttribute#getValues()
* {@inheritDoc}.
*/
@Override
public String[] getValues() {
return VALUES.toArray(new String[0]);
}
}
}