/******************************************************************************* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Tiny Look and Feel * * (C) Copyright 2003 - 2007 Hans Bickel * * For * licensing information and credits, please refer to the * comment in file * de.muntjak.tinylookandfeel.TinyLookAndFeel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package de.muntjak.tinylookandfeel.controlpanel; import java.awt.Color; import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.Image; import java.awt.Transparency; import java.awt.image.BufferedImage; import java.awt.image.ImageObserver; import java.awt.image.PixelGrabber; import javax.swing.ImageIcon; import javax.swing.SwingConstants; import de.muntjak.tinylookandfeel.Theme; /** * DrawRoutines * * @version 1.0 * @author Hans Bickel */ @SuppressWarnings ( { "all" } ) public class DrawRoutines { static final int [][] checkA = { { 53, 66, 78, 99, 115, 136, 144, 156, 165, 177, 189 }, { 66, 78, 99, 115, 136, 144, 156, 165, 177, 189, 202 }, { 78, 99, 0, 0, 0, 0, 0, 0, 0, 202, 210 }, { 99, 115, 0, 0, 0, 0, 0, 0, 0, 210, 214 }, { 115, 136, 0, 0, 0, 0, 0, 0, 0, 214, 226 }, { 136, 144, 0, 0, 0, 0, 0, 0, 0, 226, 230 }, { 144, 156, 0, 0, 0, 0, 0, 0, 0, 230, 239 }, { 156, 165, 0, 0, 0, 0, 0, 0, 0, 239, 243 }, { 165, 177, 0, 0, 0, 0, 0, 0, 0, 243, 247 }, { 177, 189, 202, 210, 214, 226, 230, 239, 243, 247, 251 }, { 189, 202, 210, 214, 226, 230, 239, 243, 247, 251, 255 } }; static final int [][] radioA = { { 0, 0, 78, 99, 115, 136, 144, 156, 165, 0, 0 }, { 0, 78, 99, 115, 136, 144, 156, 165, 177, 189, 0 }, { 78, 99, 115, 136, 92, 48, 92, 177, 189, 202, 210 }, { 99, 115, 136, 0, 0, 0, 0, 0, 202, 210, 214 }, { 115, 136, 92, 0, 0, 0, 0, 0, 128, 214, 226 }, { 136, 144, 48, 0, 0, 0, 0, 0, 64, 226, 230 }, { 144, 156, 92, 0, 0, 0, 0, 0, 128, 230, 239 }, { 156, 165, 177, 0, 0, 0, 0, 0, 230, 239, 243 }, { 165, 177, 189, 202, 128, 64, 128, 230, 239, 243, 247 }, { 0, 189, 202, 210, 214, 226, 230, 239, 243, 247, 0 }, { 0, 0, 210, 214, 226, 230, 239, 243, 247, 0, 0 } }; static GraphicsConfiguration conf; static { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); conf = ge.getDefaultScreenDevice ().getDefaultConfiguration (); } public static void drawBorder ( Graphics g, Color c, int x, int y, int w, int h ) { g.setColor ( c ); g.drawRect ( x, y, w - 1, h - 1 ); } public static void drawEditableComboBorder ( Graphics g, Color c, int x, int y, int w, int h ) { // changed this in 1.3 so the border paints like a // rounded border without a right side g.setColor ( c ); // rect - no right side g.drawLine ( x, y + 3, x, h - 4 ); // left g.drawLine ( x + 3, y, w - 1, y ); // top g.drawLine ( x + 3, h - 1, w - 1, h - 1 ); // bottom // edges verl�ngerungen 1 Color c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 216 ); g.setColor ( c2 ); // oben g.drawLine ( x + 2, y, x + 2, y ); g.drawLine ( x + w - 3, y, x + w - 3, y ); // links g.drawLine ( x, y + 2, x, y + 2 ); g.drawLine ( x, y + h - 3, x, y + h - 3 ); // unten g.drawLine ( x + 2, y + h - 1, x + 2, y + h - 1 ); g.drawLine ( x + w - 3, y + h - 1, x + w - 3, y + h - 1 ); // edges verl�ngerungen 2 c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 130 ); g.setColor ( c2 ); // oben g.drawLine ( x + 1, y, x + 1, y ); // links g.drawLine ( x, y + 1, x, y + 1 ); g.drawLine ( x, y + h - 2, x, y + h - 2 ); // unten g.drawLine ( x + 1, y + h - 1, x + 1, y + h - 1 ); // edges aussen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 24 ); g.setColor ( c2 ); // lo g.drawLine ( x, y, x, y ); // lu g.drawLine ( x, y + h - 1, x, y + h - 1 ); // edges innen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 112 ); g.setColor ( c2 ); // lo g.drawLine ( x + 1, y + 1, x + 1, y + 1 ); c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 104 ); g.setColor ( c2 ); // lu g.drawLine ( x + 1, y + h - 2, x + 1, y + h - 2 ); } public static void drawRoundedBorder ( Graphics g, Color c, int x, int y, int w, int h ) { g.setColor ( c ); // rect g.drawLine ( x + 3, y, x + w - 4, y ); // top g.drawLine ( x + 3, y + h - 1, x + w - 4, y + h - 1 ); // bottom g.drawLine ( x, y + 3, x, y + h - 4 ); // left g.drawLine ( x + w - 1, y + 3, x + w - 1, y + h - 4 ); // right // edges verl�ngerungen 1 Color c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 216 ); g.setColor ( c2 ); // oben g.drawLine ( x + 2, y, x + 2, y ); g.drawLine ( x + w - 3, y, x + w - 3, y ); // links g.drawLine ( x, y + 2, x, y + 2 ); g.drawLine ( x, y + h - 3, x, y + h - 3 ); // unten g.drawLine ( x + 2, y + h - 1, x + 2, y + h - 1 ); g.drawLine ( x + w - 3, y + h - 1, x + w - 3, y + h - 1 ); // rechts g.drawLine ( x + w - 1, y + 2, x + w - 1, y + 2 ); g.drawLine ( x + w - 1, y + h - 3, x + w - 1, y + h - 3 ); // edges verl�ngerungen 2 c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 130 ); g.setColor ( c2 ); // oben g.drawLine ( x + 1, y, x + 1, y ); g.drawLine ( x + w - 2, y, x + w - 2, y ); // links g.drawLine ( x, y + 1, x, y + 1 ); g.drawLine ( x, y + h - 2, x, y + h - 2 ); // unten g.drawLine ( x + 1, y + h - 1, x + 1, y + h - 1 ); g.drawLine ( x + w - 2, y + h - 1, x + w - 2, y + h - 1 ); // rechts g.drawLine ( x + w - 1, y + 1, x + w - 1, y + 1 ); g.drawLine ( x + w - 1, y + h - 2, x + w - 1, y + h - 2 ); // edges aussen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 24 ); g.setColor ( c2 ); // lo g.drawLine ( x, y, x, y ); // ro g.drawLine ( x + w - 1, y, x + w - 1, y ); // lu g.drawLine ( x, y + h - 1, x, y + h - 1 ); // ru g.drawLine ( x + w - 1, y + h - 1, x + w - 1, y + h - 1 ); // edges innen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 112 ); g.setColor ( c2 ); // lo g.drawLine ( x + 1, y + 1, x + 1, y + 1 ); // ro g.drawLine ( x + w - 2, y + 1, x + w - 2, y + 1 ); c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 104 ); g.setColor ( c2 ); // lu g.drawLine ( x + 1, y + h - 2, x + 1, y + h - 2 ); // ru g.drawLine ( x + w - 2, y + h - 2, x + w - 2, y + h - 2 ); } public static synchronized void drawProgressBarBorder ( Graphics g, Color c, int x, int y, int w, int h ) { g.setColor ( c ); // rect g.drawLine ( x + 1, y, x + w - 2, y ); g.drawLine ( x + 1, y + h - 1, x + w - 2, y + h - 1 ); g.drawLine ( x, y + 1, x, y + h - 2 ); g.drawLine ( x + w - 1, y + 1, x + w - 1, y + h - 2 ); // edges innen // lo g.drawLine ( x + 1, y + 1, x + 1, y + 1 ); // ro g.drawLine ( x + w - 2, y + 1, x + w - 2, y + 1 ); // lu g.drawLine ( x + 1, y + h - 2, x + 1, y + h - 2 ); // ru g.drawLine ( x + w - 2, y + h - 2, x + w - 2, y + h - 2 ); } /** * changed in 1.3 */ public static void drawRolloverBorder ( Graphics g, Color c, int x, int y, int w, int h ) { // lowest row g.setColor ( ColorRoutines.darken ( c, 10 ) ); g.drawLine ( x + 2, y + h - 2, x + w - 3, y + h - 2 ); // lowest row - 1 g.setColor ( c ); g.drawLine ( x + 1, y + h - 3, x + w - 2, y + h - 3 ); // highest row + 1 g.setColor ( new Color ( c.getRed (), c.getGreen (), c.getBlue (), 144 ) ); g.drawLine ( x + 2, y + 2, x + w - 3, y + 2 ); // highest row g.setColor ( new Color ( c.getRed (), c.getGreen (), c.getBlue (), 64 ) ); g.drawLine ( x + 2, y + 1, x + w - 3, y + 1 ); // outer left and right // both paint a gradient from c.alpha 255 to c.alpha 64 int inc = ( 255 - 64 ) / ( h - 5 ); // distance to paint int val = 64 + inc; for ( int i = y + 2 ; i < y + h - 3 ; i++ ) { g.setColor ( new Color ( c.getRed (), c.getGreen (), c.getBlue (), val ) ); g.drawLine ( x + 1, i, x + 1, i ); g.drawLine ( x + w - 2, i, x + w - 2, i ); val += inc; } // inner left and right // both paint a gradient from c.alpha 255 to c.alpha 144 inc = ( 255 - 144 ) / ( h - 6 ); // distance to paint val = 144 + inc; for ( int i = y + 3 ; i < y + h - 3 ; i++ ) { g.setColor ( new Color ( c.getRed (), c.getGreen (), c.getBlue (), val ) ); g.drawLine ( x + 2, i, x + 2, i ); g.drawLine ( x + w - 3, i, x + w - 3, i ); val += inc; } } public static void drawRolloverCheckBorder ( Graphics g, Color c, int x, int y, int w, int h ) { g.translate ( x, y ); Color color; for ( int row = 0 ; row < 11 ; row++ ) { for ( int col = 0 ; col < 11 ; col++ ) { if ( checkA [ row ] [ col ] > 0 ) { color = new Color ( c.getRed (), c.getGreen (), c.getBlue (), checkA [ row ] [ col ] ); g.setColor ( color ); g.drawLine ( col + 1, row + 1, col + 1, row + 1 ); } } } g.translate ( -x, -y ); } public static void drawSelectedXpTabBorder ( Graphics g, Color c, int x, int y, int w, int h, int tabPlacement ) { Color c2 = SBChooser.getAdjustedColor ( Theme.tabRolloverColor [ Theme.style ].getColor (), 20, -30 ); g.setColor ( c2 ); Color c3 = ColorRoutines.getAverage ( Theme.backColor [ Theme.style ] .getColor (), c2 ); switch ( tabPlacement ) { case SwingConstants.LEFT : h -= 1; g.drawLine ( x, y + 2, x, y + h - 3 ); // edges g.drawLine ( x + 1, y + 1, x + 1, y + 1 ); g.drawLine ( x + 1, y + h - 2, x + 1, y + h - 2 ); g.drawLine ( x + 2, y, x + 2, y ); g.drawLine ( x + 2, y + h - 1, x + 2, y + h - 1 ); g.setColor ( Theme.tabRolloverColor [ Theme.style ].getColor () ); g.drawLine ( x + 1, y + 2, x + 1, y + h - 3 ); g.drawLine ( x + 2, y + 1, x + 2, y + h - 2 ); // edges g.setColor ( c3 ); // lo g.drawLine ( x, y + 1, x, y + 1 ); g.drawLine ( x + 1, y, x + 1, y ); // lu g.drawLine ( x, y + h - 2, x, y + h - 2 ); g.drawLine ( x + 1, y + h - 1, x + 1, y + h - 1 ); // seiten g.setColor ( c ); g.drawLine ( x + 3, y, x + w - 2, y ); g.drawLine ( x + 3, y + h - 1, x + w - 2, y + h - 1 ); break; case SwingConstants.RIGHT : h -= 1; x -= 2; g.drawLine ( x + w - 1, y + 2, x + w - 1, y + h - 3 ); // edges g.drawLine ( x + w - 2, y + 1, x + w - 2, y + 1 ); g.drawLine ( x + w - 2, y + h - 2, x + w - 2, y + h - 2 ); g.drawLine ( x + w - 3, y, x + w - 3, y ); g.drawLine ( x + w - 3, y + h - 1, x + w - 3, y + h - 1 ); g.setColor ( Theme.tabRolloverColor [ Theme.style ].getColor () ); g.drawLine ( x + w - 2, y + 2, x + w - 2, y + h - 3 ); g.drawLine ( x + w - 3, y + 1, x + w - 3, y + h - 2 ); // edges g.setColor ( c3 ); // ro g.drawLine ( x + w - 1, y + 1, x + w - 1, y + 1 ); g.drawLine ( x + w - 2, y, x + w - 2, y ); // ru g.drawLine ( x + w - 1, y + h - 2, x + w - 1, y + h - 2 ); g.drawLine ( x + w - 2, y + h - 1, x + w - 2, y + h - 1 ); // seiten g.setColor ( c ); g.drawLine ( x, y, x + w - 4, y ); g.drawLine ( x, y + h - 1, x + w - 4, y + h - 1 ); break; case SwingConstants.BOTTOM : w -= 1; y -= 2; g.drawLine ( x + 2, y + h - 1, x + w - 3, y + h - 1 ); // edges g.drawLine ( x + 1, y + h - 2, x + 1, y + h - 2 ); g.drawLine ( x + w - 2, y + h - 2, x + w - 2, y + h - 2 ); g.drawLine ( x, y + h - 3, x, y + h - 3 ); g.drawLine ( x + w - 1, y + h - 3, x + w - 1, y + h - 3 ); g.setColor ( Theme.tabRolloverColor [ Theme.style ].getColor () ); g.drawLine ( x + 2, y + h - 2, x + w - 3, y + h - 2 ); g.drawLine ( x + 1, y + h - 3, x + w - 2, y + h - 3 ); // seiten g.setColor ( c ); g.drawLine ( x, y, x, y + h - 4 ); g.drawLine ( x + w - 1, y, x + w - 1, y + h - 4 ); // edges g.setColor ( c3 ); // lu g.drawLine ( x + 1, y + h - 1, x + 1, y + h - 1 ); g.drawLine ( x, y + h - 2, x, y + h - 2 ); // ru g.drawLine ( x + w - 2, y + h - 1, x + w - 2, y + h - 1 ); g.drawLine ( x + w - 1, y + h - 2, x + w - 1, y + h - 2 ); break; case SwingConstants.TOP : default : w -= 1; g.drawLine ( x + 2, y, x + w - 3, y ); // edges g.drawLine ( x + 1, y + 1, x + 1, y + 1 ); g.drawLine ( x + w - 2, y + 1, x + w - 2, y + 1 ); g.drawLine ( x, y + 2, x, y + 2 ); g.drawLine ( x + w - 1, y + 2, x + w - 1, y + 2 ); g.setColor ( Theme.tabRolloverColor [ Theme.style ].getColor () ); g.drawLine ( x + 2, y + 1, x + w - 3, y + 1 ); g.drawLine ( x + 1, y + 2, x + w - 2, y + 2 ); // edges g.setColor ( c3 ); // lo g.drawLine ( x + 1, y, x + 1, y ); g.drawLine ( x, y + 1, x, y + 1 ); // ro g.drawLine ( x + w - 2, y, x + w - 2, y ); g.drawLine ( x + w - 1, y + 1, x + w - 1, y + 1 ); // seiten g.setColor ( c ); g.drawLine ( x, y + 3, x, y + h - 1 ); g.drawLine ( x + w - 1, y + 3, x + w - 1, y + h - 1 ); } } public static void drawXpTabBorder ( Graphics g, Color c, int x, int y, int w, int h, int tabPlacement ) { Color c2 = null; g.setColor ( c ); switch ( tabPlacement ) { case SwingConstants.LEFT : h -= 1; g.drawLine ( x + 2, y, x + w - 1, y ); g.drawLine ( x + 2, y + h - 1, x + w - 1, y + h - 1 ); g.drawLine ( x, y + 2, x, y + h - 3 ); // edges c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 56 ); g.setColor ( c2 ); // lo g.drawLine ( x, y, x, y ); // lu g.drawLine ( x, y + h - 1, x, y + h - 1 ); // edges verl�ngerungen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 183 ); g.setColor ( c2 ); // oben g.drawLine ( x + 1, y, x + 1, y ); // links g.drawLine ( x, y + 1, x, y + 1 ); g.drawLine ( x, y + h - 2, x, y + h - 2 ); // unten g.drawLine ( x + 1, y + h - 1, x + 1, y + h - 1 ); // edges innen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 76 ); g.setColor ( c2 ); // lo g.drawLine ( x + 1, y + 1, x + 1, y + 1 ); // lu g.drawLine ( x + 1, y + h - 2, x + 1, y + h - 2 ); break; case SwingConstants.RIGHT : h -= 1; x -= 2; g.drawLine ( x, y, x + w - 3, y ); g.drawLine ( x, y + h - 1, x + w - 3, y + h - 1 ); g.drawLine ( x + w - 1, y + 2, x + w - 1, y + h - 3 ); // edges c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 56 ); g.setColor ( c2 ); // ro g.drawLine ( x + w - 1, y, x + w - 1, y ); // ru g.drawLine ( x + w - 1, y + h - 1, x + w - 1, y + h - 1 ); // edges verl�ngerungen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 183 ); g.setColor ( c2 ); // oben g.drawLine ( x + w - 2, y, x + w - 2, y ); // unten g.drawLine ( x + w - 2, y + h - 1, x + w - 2, y + h - 1 ); // rechts g.drawLine ( x + w - 1, y + 1, x + w - 1, y + 1 ); g.drawLine ( x + w - 1, y + h - 2, x + w - 1, y + h - 2 ); // edges innen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 76 ); g.setColor ( c2 ); // ro g.drawLine ( x + w - 2, y + 1, x + w - 2, y + 1 ); // ru g.drawLine ( x + w - 2, y + h - 2, x + w - 2, y + h - 2 ); break; case SwingConstants.BOTTOM : w -= 1; y -= 2; g.drawLine ( x + 2, y + h - 1, x + w - 3, y + h - 1 ); g.drawLine ( x, y, x, y + h - 3 ); g.drawLine ( x + w - 1, y, x + w - 1, y + h - 3 ); // edges c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 56 ); g.setColor ( c2 ); // lu g.drawLine ( x, y + h - 1, x, y + h - 1 ); // ru g.drawLine ( x + w - 1, y + h - 1, x + w - 1, y + h - 1 ); // edges verl�ngerungen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 183 ); g.setColor ( c2 ); // links g.drawLine ( x, y + h - 2, x, y + h - 2 ); // unten g.drawLine ( x + 1, y + h - 1, x + 1, y + h - 1 ); g.drawLine ( x + w - 2, y + h - 1, x + w - 2, y + h - 1 ); // rechts g.drawLine ( x + w - 1, y + h - 2, x + w - 1, y + h - 2 ); // edges innen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 76 ); g.setColor ( c2 ); // lu g.drawLine ( x + 1, y + h - 2, x + 1, y + h - 2 ); // ru g.drawLine ( x + w - 2, y + h - 2, x + w - 2, y + h - 2 ); break; case SwingConstants.TOP : default : w -= 1; g.drawLine ( x + 2, y, x + w - 3, y ); g.drawLine ( x, y + 2, x, y + h - 1 ); g.drawLine ( x + w - 1, y + 2, x + w - 1, y + h - 1 ); // edges c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 56 ); g.setColor ( c2 ); // lo g.drawLine ( x, y, x, y ); // ro g.drawLine ( x + w - 1, y, x + w - 1, y ); // edges verl�ngerungen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 183 ); g.setColor ( c2 ); // oben g.drawLine ( x + 1, y, x + 1, y ); g.drawLine ( x + w - 2, y, x + w - 2, y ); // links g.drawLine ( x, y + 1, x, y + 1 ); // rechts g.drawLine ( x + w - 1, y + 1, x + w - 1, y + 1 ); // edges innen c2 = new Color ( c.getRed (), c.getGreen (), c.getBlue (), 76 ); g.setColor ( c2 ); // lo g.drawLine ( x + 1, y + 1, x + 1, y + 1 ); // ro g.drawLine ( x + w - 2, y + 1, x + w - 2, y + 1 ); } } public static void drawWinTabBorder ( Graphics g, Color c, int x, int y, int w, int h, int tabPlacement ) { Color c2 = null; g.setColor ( Color.WHITE ); switch ( tabPlacement ) { case SwingConstants.LEFT : g.drawLine ( x + 2, y, x + w - 1, y ); g.drawLine ( x + 1, y + 1, x + 1, y + 1 ); g.drawLine ( x, y + 2, x, y + h - 3 ); g.setColor ( c ); g.drawLine ( x + 2, y + h - 2, x + w - 1, y + h - 2 ); g.setColor ( ColorRoutines.darken ( c, 50 ) ); g.drawLine ( x + 2, y + h - 1, x + w - 1, y + h - 1 ); g.drawLine ( x + 1, y + h - 2, x + 1, y + h - 2 ); break; case SwingConstants.RIGHT : g.drawLine ( x + w - 3, y, x, y ); g.drawLine ( x + w - 2, y + 1, x + w - 2, y + 1 ); g.drawLine ( x + w - 1, y + 2, x + w - 1, y + h - 3 ); g.setColor ( c ); g.drawLine ( x + w - 3, y + h - 2, x, y + h - 2 ); g.setColor ( ColorRoutines.darken ( c, 50 ) ); g.drawLine ( x + w - 3, y + h - 1, x, y + h - 1 ); g.drawLine ( x + w - 2, y + h - 2, x + w - 2, y + h - 2 ); break; case SwingConstants.BOTTOM : g.drawLine ( x + 2, y + h - 1, x + w - 3, y + h - 1 ); g.drawLine ( x, y + h - 3, x, y ); g.drawLine ( x + 1, y + h - 2, x + 1, y + h - 2 ); g.setColor ( c ); g.drawLine ( x + w - 2, y + h - 3, x + w - 2, y ); g.setColor ( ColorRoutines.darken ( c, 50 ) ); g.drawLine ( x + w - 1, y + h - 3, x + w - 1, y ); g.drawLine ( x + w - 2, y + h - 2, x + w - 2, y + h - 2 ); break; case SwingConstants.TOP : default : g.drawLine ( x + 2, y, x + w - 3, y ); g.drawLine ( x, y + 2, x, y + h - 1 ); g.drawLine ( x + 1, y + 1, x + 1, y + 1 ); g.setColor ( c ); g.drawLine ( x + w - 2, y + 2, x + w - 2, y + h - 1 ); g.setColor ( ColorRoutines.darken ( c, 50 ) ); g.drawLine ( x + w - 1, y + 2, x + w - 1, y + h - 1 ); g.drawLine ( x + w - 2, y + 1, x + w - 2, y + 1 ); } } public static void drawXpRadioRolloverBorder ( Graphics g, Color c, int x, int y, int w, int h ) { g.translate ( x, y ); Color color; for ( int row = 0 ; row < 11 ; row++ ) { for ( int col = 0 ; col < 11 ; col++ ) { if ( radioA [ row ] [ col ] > 0 ) { color = new Color ( c.getRed (), c.getGreen (), c.getBlue (), radioA [ row ] [ col ] ); g.setColor ( color ); g.drawLine ( col + 1, row + 1, col + 1, row + 1 ); } } } g.translate ( -x, -y ); } public static void drawXpRadioBorder ( Graphics g, Color c, int x, int y, int w, int h ) { g.setColor ( c ); g.drawLine ( x + 6, y, x + 6, y ); g.drawLine ( x + 3, y + 1, x + 3, y + 1 ); g.drawLine ( x + 9, y + 1, x + 9, y + 1 ); g.drawLine ( x + 1, y + 3, x + 1, y + 3 ); g.drawLine ( x + 11, y + 3, x + 11, y + 3 ); g.drawLine ( x, y + 6, x, y + 6 ); g.drawLine ( x + 12, y + 6, x + 12, y + 6 ); g.drawLine ( x + 1, y + 9, x + 1, y + 9 ); g.drawLine ( x + 11, y + 9, x + 11, y + 9 ); g.drawLine ( x + 3, y + 11, x + 3, y + 11 ); g.drawLine ( x + 9, y + 11, x + 9, y + 11 ); g.drawLine ( x + 6, y + 12, x + 6, y + 12 ); // changed alpha value from 193 to 168 in 1.3.05 g.setColor ( ColorRoutines.getAlphaColor ( c, 168 ) ); g.drawLine ( x + 5, y, x + 5, y ); g.drawLine ( x + 7, y, x + 7, y ); g.drawLine ( x + 4, y + 1, x + 4, y + 1 ); g.drawLine ( x + 8, y + 1, x + 8, y + 1 ); g.drawLine ( x + 2, y + 2, x + 2, y + 2 ); g.drawLine ( x + 10, y + 2, x + 10, y + 2 ); g.drawLine ( x + 1, y + 4, x + 1, y + 4 ); g.drawLine ( x + 11, y + 4, x + 11, y + 4 ); g.drawLine ( x, y + 5, x, y + 5 ); g.drawLine ( x + 12, y + 5, x + 12, y + 5 ); g.drawLine ( x, y + 7, x, y + 7 ); g.drawLine ( x + 12, y + 7, x + 12, y + 7 ); g.drawLine ( x + 1, y + 8, x + 1, y + 8 ); g.drawLine ( x + 11, y + 8, x + 11, y + 8 ); g.drawLine ( x + 2, y + 10, x + 2, y + 10 ); g.drawLine ( x + 10, y + 10, x + 10, y + 10 ); g.drawLine ( x + 4, y + 11, x + 4, y + 11 ); g.drawLine ( x + 8, y + 11, x + 8, y + 11 ); g.drawLine ( x + 5, y + 12, x + 5, y + 12 ); g.drawLine ( x + 7, y + 12, x + 7, y + 12 ); g.setColor ( ColorRoutines.getAlphaColor ( c, 64 ) ); g.drawLine ( x + 4, y, x + 4, y ); g.drawLine ( x + 8, y, x + 8, y ); g.drawLine ( x + 2, y + 1, x + 2, y + 1 ); g.drawLine ( x + 2, y + 3, x + 2, y + 3 ); g.drawLine ( x + 10, y + 1, x + 10, y + 1 ); g.drawLine ( x + 10, y + 3, x + 10, y + 3 ); g.drawLine ( x + 5, y + 1, x + 5, y + 1 ); g.drawLine ( x + 7, y + 1, x + 7, y + 1 ); g.drawLine ( x + 1, y + 2, x + 1, y + 2 ); g.drawLine ( x + 1, y + 5, x + 1, y + 5 ); g.drawLine ( x + 1, y + 7, x + 1, y + 7 ); g.drawLine ( x + 11, y + 2, x + 11, y + 2 ); g.drawLine ( x + 3, y + 2, x + 3, y + 2 ); g.drawLine ( x + 9, y + 2, x + 9, y + 2 ); g.drawLine ( x, y + 4, x, y + 4 ); g.drawLine ( x + 12, y + 4, x + 12, y + 4 ); g.drawLine ( x, y + 8, x, y + 8 ); g.drawLine ( x + 12, y + 8, x + 12, y + 8 ); g.drawLine ( x + 2, y + 9, x + 2, y + 9 ); g.drawLine ( x + 10, y + 9, x + 10, y + 9 ); g.drawLine ( x + 1, y + 10, x + 1, y + 10 ); g.drawLine ( x + 11, y + 5, x + 11, y + 5 ); g.drawLine ( x + 11, y + 7, x + 11, y + 7 ); g.drawLine ( x + 11, y + 10, x + 11, y + 10 ); g.drawLine ( x + 3, y + 10, x + 3, y + 10 ); g.drawLine ( x + 9, y + 10, x + 9, y + 10 ); g.drawLine ( x + 2, y + 11, x + 2, y + 11 ); g.drawLine ( x + 10, y + 11, x + 10, y + 11 ); g.drawLine ( x + 5, y + 11, x + 5, y + 11 ); g.drawLine ( x + 7, y + 11, x + 7, y + 11 ); g.drawLine ( x + 4, y + 12, x + 4, y + 12 ); g.drawLine ( x + 8, y + 12, x + 8, y + 12 ); // changed alpha value from 43 to 16 in 1.3.05 g.setColor ( ColorRoutines.getAlphaColor ( c, 16 ) ); g.drawLine ( x + 3, y, x + 3, y ); g.drawLine ( x + 9, y, x + 9, y ); g.drawLine ( x, y + 3, x, y + 3 ); g.drawLine ( x + 12, y + 3, x + 12, y + 3 ); g.drawLine ( x, y + 9, x, y + 9 ); g.drawLine ( x + 12, y + 9, x + 12, y + 9 ); g.drawLine ( x + 3, y + 12, x + 3, y + 12 ); g.drawLine ( x + 9, y + 12, x + 9, y + 12 ); } public static ImageIcon colorize ( Image img, Color c ) { ColorRoutines nc = new ColorRoutines ( c ); int w = img.getWidth ( null ); int h = img.getHeight ( null ); BufferedImage bufferedImg = conf.createCompatibleImage ( w, h, Transparency.TRANSLUCENT ); int [] pixels = new int [ w * h ]; PixelGrabber grabber = new PixelGrabber ( img, 0, 0, w, h, pixels, 0, w ); try { grabber.grabPixels (); } catch ( InterruptedException e ) { System.err.println ( "PixelGrabber interrupted waiting for pixels" ); } if ( ( grabber.getStatus () & ImageObserver.ABORT ) != 0 ) { System.err.println ( "Image fetch aborted or errored." ); } else { for ( int y = 0 ; y < h ; y++ ) { for ( int x = 0 ; x < w ; x++ ) { bufferedImg.setRGB ( x, y, colorize ( pixels [ y * w + x ], nc ) ); } } } return new ImageIcon ( bufferedImg ); } public static ImageIcon colorize ( Image img, int hue, int sat, int bri, boolean preserveGrey ) { ColorRoutines nc = new ColorRoutines ( hue, sat, bri, preserveGrey ); int w = img.getWidth ( null ); int h = img.getHeight ( null ); BufferedImage bufferedImg = conf.createCompatibleImage ( w, h, Transparency.TRANSLUCENT ); int [] pixels = new int [ w * h ]; PixelGrabber grabber = new PixelGrabber ( img, 0, 0, w, h, pixels, 0, w ); try { grabber.grabPixels (); } catch ( InterruptedException e ) { System.err.println ( "PixelGrabber interrupted waiting for pixels" ); } if ( ( grabber.getStatus () & ImageObserver.ABORT ) != 0 ) { System.err.println ( "Image fetch aborted or errored." ); } else { for ( int y = 0 ; y < h ; y++ ) { for ( int x = 0 ; x < w ; x++ ) { bufferedImg.setRGB ( x, y, colorize ( pixels [ y * w + x ], nc ) ); } } } return new ImageIcon ( bufferedImg ); } protected static int colorize ( int px, ColorRoutines nc ) { int a = ( px >> 24 ) & 0xff; if ( a == 0 ) return px; int r = ( px >> 16 ) & 0xff; int g = ( px >> 8 ) & 0xff; int b = px & 0xff; return nc.colorize ( r, g, b, a ); } public static BufferedImage getBufferedImage ( Image img ) { if ( img instanceof BufferedImage ) { return ( BufferedImage ) img; } int w = img.getWidth ( null ); int h = img.getHeight ( null ); BufferedImage img2 = conf.createCompatibleImage ( w, h ); Graphics g = img2.getGraphics (); g.drawImage ( img, 0, 0, w, h, 0, 0, w, h, null ); return img2; } }