/******************************************************************************* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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.borders; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Insets; import javax.swing.AbstractButton; import javax.swing.JButton; import javax.swing.JToggleButton; import javax.swing.border.AbstractBorder; import javax.swing.plaf.UIResource; import de.muntjak.tinylookandfeel.Theme; import de.muntjak.tinylookandfeel.controlpanel.DrawRoutines; /** * TinyButtonBorder is the border for JButton, JToggleButton and JSpinner * buttons. * * @version 1.0 * @author Hans Bickel */ @SuppressWarnings ( { "all" } ) public class TinyButtonBorder extends AbstractBorder implements UIResource { protected final Insets borderInsets = new Insets ( 2, 2, 2, 2 ); /** * Draws the button border for the given component. * * @param mainColor The component to draw its border. * @param g The graphics context. * @param x The x coordinate of the top left corner. * @param y The y coordinate of the top left corner. * @param w The width. * @param h The height. */ public void paintBorder ( Component c, Graphics g, int x, int y, int w, int h ) { switch ( Theme.derivedStyle [ Theme.style ] ) { case Theme.TINY_STYLE : drawTinyBorder ( c, g, x, y, w, h ); break; case Theme.W99_STYLE : drawWinBorder ( c, g, x, y, w, h ); break; case Theme.YQ_STYLE : drawXpBorder ( c, g, x, y, w, h ); break; } } private void drawTinyBorder ( Component c, Graphics g, int x, int y, int w, int h ) { } private void drawWinBorder ( Component c, Graphics g, int x, int y, int w, int h ) { AbstractButton b = ( AbstractButton ) c; boolean isDefault = ( c instanceof JButton ) && ( ( ( JButton ) c ).isDefaultButton () ); if ( b.getModel ().isPressed () || ( ( b instanceof JToggleButton ) && b.isSelected () ) ) { g.setColor ( Color.BLACK ); g.drawRect ( 0, 0, w - 1, h - 1 ); g.setColor ( Theme.buttonDarkColor [ Theme.style ].getColor () ); g.drawRect ( 1, 1, w - 3, h - 3 ); return; } else if ( isDefault && b.isEnabled () ) { g.setColor ( Theme.buttonDefaultColor [ Theme.style ].getColor () ); g.drawRect ( 0, 0, w - 1, h - 1 ); x += 1; y += 1; w -= 1; h -= 1; } if ( !b.isEnabled () ) { g.setColor ( Theme.buttonLightDisabledColor [ Theme.style ].getColor () ); } else { g.setColor ( Theme.buttonLightColor [ Theme.style ].getColor () ); } g.drawLine ( x, y, w - 2, y ); g.drawLine ( x, y + 1, x, h - 2 ); if ( !b.isEnabled () ) { g.setColor ( Theme.buttonBorderDisabledColor [ Theme.style ].getColor () ); } else { g.setColor ( Theme.buttonBorderColor [ Theme.style ].getColor () ); } g.drawLine ( x, h - 1, w - 1, h - 1 ); g.drawLine ( w - 1, y, w - 1, h - 1 ); if ( !b.isEnabled () ) { g.setColor ( Theme.buttonDarkDisabledColor [ Theme.style ].getColor () ); } else { g.setColor ( Theme.buttonDarkColor [ Theme.style ].getColor () ); } g.drawLine ( x + 1, h - 2, w - 2, h - 2 ); g.drawLine ( w - 2, y + 1, w - 2, h - 2 ); } private void drawXpBorder ( Component c, Graphics g, int x, int y, int w, int h ) { AbstractButton b = ( AbstractButton ) c; boolean isDefault = ( c instanceof JButton ) && ( ( ( JButton ) c ).isDefaultButton () ); boolean isComboBoxButton = Boolean.TRUE.equals ( b .getClientProperty ( "isComboBoxButton" ) ); if ( isComboBoxButton ) { if ( !b.isEnabled () ) { DrawRoutines.drawRoundedBorder ( g, Theme.comboBorderDisabledColor [ Theme.style ].getColor (), x, y, w, h ); } else { DrawRoutines.drawRoundedBorder ( g, Theme.comboBorderColor [ Theme.style ].getColor (), x, y, w, h ); if ( b.getModel ().isPressed () ) return; if ( b.getModel ().isRollover () && Theme.comboRollover [ Theme.style ] ) { DrawRoutines .drawRolloverBorder ( g, Theme.buttonRolloverColor [ Theme.style ] .getColor (), x, y, w, h ); } } } else { // it's a normal JButton or a JSpinner button boolean isSpinnerButton = Boolean.TRUE.equals ( b .getClientProperty ( "isSpinnerButton" ) ); boolean paintRollover = ( isSpinnerButton && Theme.spinnerRollover [ Theme.style ] ) || ( !isSpinnerButton && Theme.buttonRollover [ Theme.style ] ); if ( !b.isEnabled () ) { DrawRoutines.drawRoundedBorder ( g, Theme.buttonBorderDisabledColor [ Theme.style ].getColor (), x, y, w, h ); } else { DrawRoutines.drawRoundedBorder ( g, Theme.buttonBorderColor [ Theme.style ].getColor (), x, y, w, h ); if ( b.getModel ().isPressed () ) return; if ( b.getModel ().isRollover () && paintRollover ) { DrawRoutines .drawRolloverBorder ( g, Theme.buttonRolloverColor [ Theme.style ] .getColor (), x, y, w, h ); } else if ( isDefault || ( Theme.buttonFocusBorder [ Theme.style ] && b.isFocusOwner () ) ) { DrawRoutines.drawRolloverBorder ( g, Theme.buttonDefaultColor [ Theme.style ].getColor (), x, y, w, h ); } } } } /** * Gets the border insets for a given component. * * @param c The component to get its border insets. * @return Always returns the same insets as defined in <code>insets</code>. */ public Insets getBorderInsets ( Component c ) { return borderInsets; } }