/*******************************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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;
}
}