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