package org.limewire.ui.swing.painter;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Paint;
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;
public class StatusBarPopupButtonPainter extends AbstractPainter<JXButton> {
private final PopupVisibilityChecker visibilityChecker;
private final Paint activeBackground;
private final Paint activeBorder;
private final DrawMode mode;
@Resource private Color dividerForeground = PainterUtils.TRANSPARENT;
@Resource private Color rolloverBackground = PainterUtils.TRANSPARENT;
@Resource private Color rolloverBorder = PainterUtils.TRANSPARENT;
public StatusBarPopupButtonPainter(PopupVisibilityChecker visibilityChecker,
Paint activeBackground, Paint activeBorder, DrawMode mode) {
GuiUtils.assignResources(this);
this.visibilityChecker = visibilityChecker;
this.activeBackground = activeBackground;
this.activeBorder = activeBorder;
this.mode = mode;
setAntialiasing(false);
setCacheable(false);
}
@Override
protected void doPaint(Graphics2D g, JXButton object, int width, int height) {
if(visibilityChecker.isPopupVisible()) {
g.setPaint(activeBackground);
g.fillRect(0, 0, width, height);
g.setPaint(activeBorder);
g.drawLine(0, 0, 0, height-1);
g.drawLine(0, height-1, width-1, height-1);
g.drawLine(width-1, 0, width-1, height-1);
} else if (object.getModel().isRollover() && object.isEnabled()) {
g.setPaint(rolloverBackground);
g.fillRect(0, 2, width-1, height-2);
g.setPaint(rolloverBorder);
g.drawLine(0, 1, 0, height-1);
g.drawLine(width-1, 1, width-1, height-1);
}
else {
g.setPaint(dividerForeground);
if (mode != DrawMode.LEFT_CONNECTING) {
g.drawLine(0, 3, 0, height-4);
}
if (mode != DrawMode.RIGHT_CONNECTING) {
g.drawLine(width-1, 3, width-1, height-4);
}
}
}
public static interface PopupVisibilityChecker {
boolean isPopupVisible();
}
public enum DrawMode {
NORMAL, LEFT_CONNECTING, RIGHT_CONNECTING;
}
}