/*******************************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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.border.AbstractBorder;
import javax.swing.plaf.UIResource;
import de.muntjak.tinylookandfeel.Theme;
import de.muntjak.tinylookandfeel.TinyFileChooserUI;
import de.muntjak.tinylookandfeel.controlpanel.DrawRoutines;
/**
* TinyToolButtonBorder is the border for JButton, JToggleButton and JSpinner
* buttons.
*
* @version 1.0
* @author Hans Bickel
*/
@SuppressWarnings (
{ "all" } )
public class TinyToolButtonBorder extends AbstractBorder
{
protected final Insets insets = new Insets ( 1, 1, 1, 1 );
/**
* 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;
g.translate ( -x, -y );
g.setColor ( Theme.toolBorderLightColor [ Theme.style ].getColor () );
if ( b.isSelected ()
|| ( b.getModel ().isPressed () && b.getModel ().isRollover () ) )
{
g.drawLine ( 0, h - 1, w - 1, h - 1 );
g.drawLine ( w - 1, 1, w - 1, h - 1 );
}
else
{
g.drawLine ( 0, 0, w - 1, 0 );
g.drawLine ( 0, 1, 0, h - 1 );
}
g.setColor ( Theme.toolBorderDarkColor [ Theme.style ].getColor () );
if ( b.isSelected ()
|| ( b.getModel ().isPressed () && b.getModel ().isRollover () ) )
{
g.drawLine ( 0, 0, w - 1, 0 );
g.drawLine ( 0, 1, 0, h - 1 );
}
else
{
g.drawLine ( 0, h - 1, w - 1, h - 1 );
g.drawLine ( w - 1, 1, w - 1, h - 1 );
}
g.translate ( x, y );
}
private void drawXpBorder ( Component c, Graphics g, int x, int y, int w,
int h )
{
AbstractButton b = ( AbstractButton ) c;
Color col = null;
boolean isFileChooserButton = Boolean.TRUE.equals ( b
.getClientProperty ( TinyFileChooserUI.IS_FILE_CHOOSER_BUTTON_KEY ) );
// New in 1.3.7 (previously only b.getModel().isRollover() evaluated)
boolean isRollover = b.getModel ().isRollover ()
|| b.getModel ().isArmed ();
if ( b.getModel ().isPressed () )
{
if ( isRollover )
{
col = Theme.toolBorderPressedColor [ Theme.style ].getColor ();
}
else
{
if ( b.isSelected () )
{
col = Theme.toolBorderSelectedColor [ Theme.style ].getColor ();
}
else
{
if ( isFileChooserButton )
return; // no border painted
col = Theme.toolBorderColor [ Theme.style ].getColor ();
}
}
}
else if ( isRollover )
{
if ( b.isSelected () )
{
col = Theme.toolBorderSelectedColor [ Theme.style ].getColor ();
}
else
{
col = Theme.toolBorderRolloverColor [ Theme.style ].getColor ();
}
}
else if ( b.isSelected () )
{
col = Theme.toolBorderSelectedColor [ Theme.style ].getColor ();
}
else
{
if ( isFileChooserButton )
return; // no border painted
col = Theme.toolBorderColor [ Theme.style ].getColor ();
}
DrawRoutines.drawRoundedBorder ( g, col, x, y, w, h );
}
/**
* Gets the border insets for a given component.
*
* @return some insets...
*/
public Insets getBorderInsets ( Component c )
{
if ( ! ( c instanceof AbstractButton ) )
return insets;
AbstractButton b = ( AbstractButton ) c;
if ( b.getMargin () == null || ( b.getMargin () instanceof UIResource ) )
{
return new Insets ( Theme.toolMarginTop [ Theme.style ],
Theme.toolMarginLeft [ Theme.style ],
Theme.toolMarginBottom [ Theme.style ],
Theme.toolMarginRight [ Theme.style ] );
}
else
{
Insets margin = b.getMargin ();
return new Insets ( margin.top + 1, margin.left + 1, margin.bottom + 1,
margin.right + 1 );
}
}
}