blob: 6a258de13d4eca11498cc50323626d036f48fe0f [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2007 The University of Manchester
*
* Modifications to the initial code base are copyright of their
* respective authors, or their employers as appropriate.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
******************************************************************************/
package net.sf.taverna.t2.lang.ui;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.SystemColor;
import java.awt.RenderingHints.Key;
import java.awt.geom.GeneralPath;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
/**
* A BufferedImage of one of four types of arrow (up, down, left or right) drawn
* to the size specified on the constructor.
*/
public class CArrowImage extends BufferedImage {
// 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;
// Member variables...
private GeneralPath _pathArrow = new GeneralPath();
// Constructor...
public CArrowImage(int nArrowDirection) {
this(15, 9, nArrowDirection);
}
public CArrowImage(int nWidth, int nHeight, int nArrowDirection) {
super(nWidth, nHeight, TYPE_INT_ARGB_PRE); // Set the width, height and
// image type
Map<Key, Object> map = new HashMap<Key, Object>();
map.put(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
map.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
RenderingHints hints = new RenderingHints(map);
Graphics2D g2 = this.createGraphics(); // Create a graphics context for
// this buffered image
g2.setRenderingHints(hints);
float h = getHeight();
float w = getWidth();
float w13 = w / 3;
float w12 = w / 2;
float w23 = w * 2 / 3;
float h13 = h / 3;
float h12 = h / 2;
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;
}
}
}
}