/* * Get Organized - Organize your schedule, course assignments, and grades * Copyright © 2012 Alex Laird * getorganized@alexlaird.com * alexlaird.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* * @(#)ColorPicker.java 1.0 2008-03-01 * * Copyright (c) 2008 Jeremy Wood * E-mail: mickleness@gmail.com * All rights reserved. * * The copyright of this software is owned by Jeremy Wood. * You may not use, copy or modify this software, except in * accordance with the license agreement you entered into with * Jeremy Wood. For details see accompanying license terms. */ package adl.go.gui.colorpicker; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Shape; import javax.swing.SwingConstants; import javax.swing.UIManager; /** * Some static methods for some common painting functions. * * @version 1.0 * @author Jeremy Wood * */ public class PaintUtils { /** * Four shades of white, each with increasing opacity. */ public final static Color[] whites = new Color[] { new Color (255, 255, 255, 50), new Color (255, 255, 255, 100), new Color (255, 255, 255, 150) }; /** * Four shades of black, each with increasing opacity. */ public final static Color[] blacks = new Color[] { new Color (0, 0, 0, 50), new Color (0, 0, 0, 100), new Color (0, 0, 0, 150) }; /** * @return the color used to indicate when a component has focus. By default * this uses the color (64,113,167), but you can override this by calling: * <BR><code>UIManager.put("focusRing",customColor);</code> */ public static Color getFocusRingColor() { Object obj = UIManager.getColor ("focusRing"); if (obj instanceof Color) { return (Color) obj; } return new Color (64, 113, 167); } /** * Paints 3 different strokes around a shape to indicate focus. The widest * stroke is the most transparent, so this achieves a nice "glow" effect. * <P>The catch is that you have to render this underneath the shape, and * the shape should be filled completely. * * @param g the graphics to paint to * @param shape the shape to outline * @param biggestStroke the widest stroke to use. */ public static void paintFocus(Graphics2D g, Shape shape, int biggestStroke) { Color focusColor = getFocusRingColor (); Color[] focusArray = new Color[] { new Color (focusColor.getRed (), focusColor.getGreen (), focusColor.getBlue (), 255), new Color (focusColor.getRed (), focusColor.getGreen (), focusColor.getBlue (), 170), new Color (focusColor.getRed (), focusColor.getGreen (), focusColor.getBlue (), 110) }; g.setStroke (new BasicStroke (biggestStroke)); g.setColor (focusArray[2]); g.draw (shape); g.setStroke (new BasicStroke (biggestStroke - 1)); g.setColor (focusArray[1]); g.draw (shape); g.setStroke (new BasicStroke (biggestStroke - 2)); g.setColor (focusArray[0]); g.draw (shape); g.setStroke (new BasicStroke (1)); } /** * Uses translucent shades of white and black to draw highlights and shadows * around a rectangle, and then frames the rectangle with a shade of gray * (120). <P>This should be called to add a finishing touch on top of * existing graphics. * * @param g the graphics to paint to. * @param r the rectangle to paint. */ public static void drawBevel(Graphics g, Rectangle r) { drawColors (blacks, g, r.x, r.y + r.height, r.x + r.width, r.y + r.height, SwingConstants.SOUTH); drawColors (blacks, g, r.x + r.width, r.y, r.x + r.width, r.y + r.height, SwingConstants.EAST); drawColors (whites, g, r.x, r.y, r.x + r.width, r.y, SwingConstants.NORTH); drawColors (whites, g, r.x, r.y, r.x, r.y + r.height, SwingConstants.WEST); g.setColor (new Color (120, 120, 120)); g.drawRect (r.x, r.y, r.width, r.height); } private static void drawColors(Color[] colors, Graphics g, int x1, int y1, int x2, int y2, int direction) { for (int a = 0; a < colors.length; a++) { g.setColor (colors[colors.length - a - 1]); if (direction == SwingConstants.SOUTH) { g.drawLine (x1, y1 - a, x2, y2 - a); } else if (direction == SwingConstants.NORTH) { g.drawLine (x1, y1 + a, x2, y2 + a); } else if (direction == SwingConstants.EAST) { g.drawLine (x1 - a, y1, x2 - a, y2); } else if (direction == SwingConstants.WEST) { g.drawLine (x1 + a, y1, x2 + a, y2); } } } }