Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Static methods for some common painting functions

/* * @(#)PaintUtils.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. */ import java.awt.*; import javax.swing.*; /** 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);       }     }   } }