/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cismap.commons.gui.layerwidget.test; import java.awt.BasicStroke; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics2D; import java.awt.Paint; import java.awt.RenderingHints; import java.awt.SystemColor; import java.awt.geom.*; import java.awt.image.*; import java.util.*; /** * A BufferedImage of one of four types of arrow (up, down, left or right) drawn to the size specified on the * constructor. * * @version $Revision$, $Date$ */ public class CArrowImage extends BufferedImage { //~ Static fields/initializers --------------------------------------------- // Constants... public static final int ARROW_UP = 0; public static final int ARROW_DOWN = 1; public static final int ARROW_LEFT = 2; public static final int ARROW_RIGHT = 3; //~ Instance fields -------------------------------------------------------- // Member variables... private GeneralPath _pathArrow = new GeneralPath(); //~ Constructors ----------------------------------------------------------- /** * Constructor... * * @param nArrowDirection DOCUMENT ME! */ public CArrowImage(final int nArrowDirection) { this(15, 9, nArrowDirection); } /** * Creates a new CArrowImage object. * * @param nWidth DOCUMENT ME! * @param nHeight DOCUMENT ME! * @param nArrowDirection DOCUMENT ME! */ public CArrowImage(final int nWidth, final int nHeight, final int nArrowDirection) { super(nWidth, nHeight, TYPE_INT_ARGB_PRE); // Set the width, height and image type final Map map = new HashMap(); map.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); map.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); final RenderingHints hints = new RenderingHints(map); final Graphics2D g2 = this.createGraphics(); // Create a graphics context for this buffered image g2.setRenderingHints(hints); final float h = getHeight(); final float w = getWidth(); final float w13 = w / 3; final float w12 = w / 2; final float w23 = w * 2 / 3; final float h13 = h / 3; final float h12 = h / 2; final float h23 = h * 2 / 3; switch (nArrowDirection) { case ARROW_UP: { _pathArrow.moveTo(w12, h12); _pathArrow.lineTo(w12, 0); _pathArrow.lineTo(w, h - 1); _pathArrow.lineTo(0, h - 1); _pathArrow.closePath(); g2.setPaint(new GradientPaint( w13, h13, SystemColor.controlLtHighlight, w, h - 1, SystemColor.controlShadow)); g2.fill(_pathArrow); g2.setColor(SystemColor.controlDkShadow); g2.draw(new Line2D.Float(0, h - 1, w, h - 1)); g2.setColor(SystemColor.controlShadow); g2.draw(new Line2D.Float(w12, 0, w, h - 1)); g2.setColor(SystemColor.controlLtHighlight); g2.draw(new Line2D.Float(0, h - 1, w12, 0)); break; } case ARROW_DOWN: { _pathArrow.moveTo(w12, h12); _pathArrow.lineTo(w, 0); _pathArrow.lineTo(w12, h - 1); _pathArrow.closePath(); g2.setPaint(new GradientPaint( 0, 0, SystemColor.controlLtHighlight, w23, h23, SystemColor.controlShadow)); g2.fill(_pathArrow); g2.setColor(SystemColor.controlDkShadow); g2.draw(new Line2D.Float(w, 0, w12, h - 1)); g2.setColor(SystemColor.controlShadow); g2.draw(new Line2D.Float(w12, h - 1, 0, 0)); g2.setColor(SystemColor.controlLtHighlight); g2.draw(new Line2D.Float(0, 0, w, 0)); break; } case ARROW_LEFT: { _pathArrow.moveTo(w - 1, h13); _pathArrow.lineTo(w13, h13); _pathArrow.lineTo(w13, 0); _pathArrow.lineTo(0, h12); _pathArrow.lineTo(w13, h - 1); _pathArrow.lineTo(w13, h23); _pathArrow.lineTo(w - 1, h23); _pathArrow.closePath(); g2.setPaint(new GradientPaint( 0, 0, Color.white, // SystemColor.controlLtHighlight, 0, h, SystemColor.controlShadow)); g2.fill(_pathArrow); _pathArrow.reset(); _pathArrow.moveTo(w13, 0); _pathArrow.lineTo(w13, h13); _pathArrow.moveTo(w - 1, h13); _pathArrow.lineTo(w - 1, h23); _pathArrow.lineTo(w13, h23); _pathArrow.lineTo(w13, h - 1); g2.setColor(SystemColor.controlDkShadow); g2.draw(_pathArrow); g2.setColor(SystemColor.controlShadow); g2.draw(new Line2D.Float(0, h12, w13, h - 1)); _pathArrow.reset(); _pathArrow.moveTo(0, h12); _pathArrow.lineTo(w13, 0); _pathArrow.moveTo(w13, h13); _pathArrow.lineTo(w - 1, h13); g2.setColor(SystemColor.controlLtHighlight); g2.draw(_pathArrow); break; } case ARROW_RIGHT: default: { _pathArrow.moveTo(0, h13); _pathArrow.lineTo(w23, h13); _pathArrow.lineTo(w23, 0); _pathArrow.lineTo(w - 1, h12); _pathArrow.lineTo(w23, h - 1); _pathArrow.lineTo(w23, h23); _pathArrow.lineTo(0, h23); _pathArrow.closePath(); g2.setPaint(new GradientPaint( 0, 0, Color.white, // SystemColor.controlLtHighlight, 0, h, SystemColor.controlShadow)); g2.fill(_pathArrow); _pathArrow.reset(); _pathArrow.moveTo(0, h23); _pathArrow.lineTo(w23, h23); _pathArrow.moveTo(w23, h - 1); _pathArrow.lineTo(w - 1, h12); g2.setColor(SystemColor.controlDkShadow); g2.draw(_pathArrow); g2.setColor(SystemColor.controlShadow); g2.draw(new Line2D.Float(w - 1, h12, w23, 0)); _pathArrow.reset(); _pathArrow.moveTo(w23, 0); _pathArrow.lineTo(w23, h13); _pathArrow.lineTo(0, h13); _pathArrow.lineTo(0, h23); _pathArrow.moveTo(w23, h23); _pathArrow.lineTo(w23, h - 1); g2.setColor(SystemColor.controlLtHighlight); g2.draw(_pathArrow); break; } } } }