package org.limewire.ui.swing.options; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Graphics2D; import java.awt.geom.Point2D; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.SwingConstants; import org.jdesktop.application.Resource; import org.jdesktop.swingx.JXButton; import org.jdesktop.swingx.painter.MattePainter; import org.jdesktop.swingx.painter.Painter; import org.limewire.ui.swing.components.ButtonMattePainter; import org.limewire.ui.swing.options.actions.TabAction; import org.limewire.ui.swing.util.GuiUtils; /** * Paints a main button on the Option Panel. */ public class FancyOptionTabButton extends JXButton { @Resource private Color headerGradientTop; @Resource private Color headerGradientBottom; @Resource private Color fontColor; @Resource private Font font; public FancyOptionTabButton(TabAction action) { super(action); GuiUtils.assignResources(this); setFont(font); setForeground(fontColor); setVerticalTextPosition(SwingConstants.BOTTOM); setHorizontalTextPosition(SwingConstants.CENTER); setIconTextGap(0); setPreferredSize(new Dimension(getPreferredSize().width, 60)); setGradients(headerGradientTop, headerGradientBottom); setFocusPainted(false); setContentAreaFilled(false); setBorder(BorderFactory.createEmptyBorder(4,12,4,12)); setOpaque(false); } public void setGradients(Color topGradient, Color bottomGradient) { getAction().addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { if(evt.getPropertyName().equals(Action.SELECTED_KEY)) { repaint(); } } }); final Painter<JXButton> oldPainter = getBackgroundPainter(); GradientPaint paint = new GradientPaint(new Point2D.Double(0, 0), topGradient, new Point2D.Double(0, 1), bottomGradient, false); setBackgroundPainter(new ButtonMattePainter(new MattePainter(paint, true)) { @Override public void paint(Graphics2D g, JXButton component, int width, int height) { if(Boolean.TRUE.equals(getAction().getValue(Action.SELECTED_KEY))) { super.paint(g, component, width, height-1); } else { oldPainter.paint(g, component, width, height); } } }); } }