/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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.*; import javax.swing.*; import javax.swing.border.AbstractBorder; import javax.swing.plaf.UIResource; import de.muntjak.tinylookandfeel.*; import de.muntjak.tinylookandfeel.controlpanel.DrawRoutines; /** * TinyToolButtonBorder is the border for JButton, JToggleButton and JSpinner buttons. * * @version 1.0 * @author Hans Bickel */ 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); } } }