package org.limewire.ui.swing.painter;
import java.awt.Color;
import java.awt.Graphics2D;
import org.jdesktop.application.Resource;
import org.jdesktop.swingx.JXButton;
import org.jdesktop.swingx.painter.AbstractPainter;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.PainterUtils;
/**
* Background painter for an initially unstyled button a clicked state that
* forms a connectable rounded tab for attachment to a popup box
* below.
*/
public class DropDownHeaderButtonBackgroundPainter extends AbstractPainter<JXButton> {
@Resource private Color background = PainterUtils.TRANSPARENT;
@Resource private Color outsideBorder = PainterUtils.TRANSPARENT;
@Resource private Color outsideBorderCurve1 = PainterUtils.TRANSPARENT;
@Resource private Color outsideBorderCurve2 = PainterUtils.TRANSPARENT;
@Resource private Color insideBorder = PainterUtils.TRANSPARENT;
public DropDownHeaderButtonBackgroundPainter() {
GuiUtils.assignResources(this);
this.setCacheable(false);
this.setAntialiasing(true);
}
@Override
protected void doPaint(Graphics2D g, JXButton object, int width, int height) {
// Button is unstyled unless it is selected or pressed
if (object.getModel().isPressed() || object.getModel().isSelected()) {
g.setPaint(background);
g.fillRect(1, 1, width-3, height-2);
g.setPaint(outsideBorder);
g.drawLine(0,3, 0, height-1);
g.drawLine(4,0, width-6, 0);
g.drawLine(width-2, 3, width-2, height-4);
g.drawLine(1,1,1,1);
g.drawLine(width-2-1, 1, width-2-1, 1);
g.setPaint(PainterUtils.lighten(outsideBorder,10));
g.drawLine(width-2, height-3, width-2, height-3);
g.drawLine(3,0,3,0);
g.drawLine(width-5, 0, width-5, 0);
g.setPaint(outsideBorderCurve1);
g.drawLine(0,2,1,2);
g.drawLine(2,0,2,1);
g.drawLine(width-4, 0, width-4, 1);
g.drawLine(width-3, 2, width-2, 2);
g.setPaint(outsideBorderCurve2);
g.drawLine(width-1, height-2, width-1, height-2);
g.setPaint(PainterUtils.lighten(outsideBorderCurve2, 10));
g.drawLine(width-2, height-2, width-2, height-2);
g.setPaint(insideBorder);
g.drawLine(width-3, 3, width-3, height-4);
g.setPaint(PainterUtils.lighten(insideBorder, 10));
g.drawLine(width-3, height-3, width-3, height-3);
}
}
}