package magic.ui.screen.card.explorer;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import magic.ui.utility.MagicStyle;
@SuppressWarnings("serial")
public class SplitterButton extends JButton {
private static final int TRIANGLE_WIDTH = 10;
private static final int TRIANGLE_HEIGHT = 12;
private static final int TRIANGLE_PADX = 4;
private boolean isArrowUp = true;
private boolean isMouseOver = false;
private Color defaultColor = getForeground();
public SplitterButton(String text) {
super(text);
setOpaque(true);
setContentAreaFilled(false);
setBorderPainted(false);
setBorder(null);
addMouseListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
super.mouseEntered(e);
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
isMouseOver = true;
defaultColor = getForeground();
setForeground(MagicStyle.getRolloverColor());
repaint();
}
@Override
public void mouseExited(MouseEvent e) {
super.mouseExited(e);
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
isMouseOver = false;
setForeground(defaultColor);
repaint();
}
});
}
public SplitterButton() {
this(null);
}
public void setIsArrowUp(final boolean b) {
this.isArrowUp = b;
isMouseOver = false;
setForeground(defaultColor);
repaint();
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(isMouseOver ? Color.DARK_GRAY.brighter() : Color.DARK_GRAY);
g.fillRect(0, 0, getWidth(), getHeight());
final Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setColor(isMouseOver ? MagicStyle.getRolloverColor() : Color.GRAY);
if (isArrowUp) {
g2d.fillPolygon(getUpTriangle(TRIANGLE_PADX));
g2d.fillPolygon(getUpTriangle(getWidth() - TRIANGLE_WIDTH - TRIANGLE_PADX));
} else {
g2d.fillPolygon(getDownTriangle(TRIANGLE_PADX));
g2d.fillPolygon(getDownTriangle(getWidth() - TRIANGLE_WIDTH - TRIANGLE_PADX));
}
super.paintComponent(g);
}
private Polygon getUpTriangle(final int x) {
final int y = (getHeight() - TRIANGLE_HEIGHT) / 2;
final Polygon p = new Polygon();
p.addPoint(x, getHeight() - y - 1);
p.addPoint(x + (TRIANGLE_WIDTH / 2), y);
p.addPoint(x + TRIANGLE_WIDTH, getHeight() - y - 1);
return p;
};
private Polygon getDownTriangle(final int x) {
final int y = (getHeight() - TRIANGLE_HEIGHT) / 2;
final Polygon p = new Polygon();
p.addPoint(x, y + 1);
p.addPoint(x + (TRIANGLE_WIDTH / 2), getHeight() - y);
p.addPoint(x + TRIANGLE_WIDTH, y + 1);
return p;
};
}