/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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;
import javax.swing.*;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.metal.*;
import java.awt.*;
import java.io.Serializable;
/**
* MenuItemIconFactory
*
* @version 1.0
* @author Hans Bickel
*/
public class MenuItemIconFactory implements Serializable {
private static Icon checkBoxMenuItemIcon;
private static Icon radioButtonMenuItemIcon;
private static Icon menuArrowIcon;
static private final Dimension menuCheckIconSize = new Dimension(10, 10);
static private final Dimension menuArrowIconSize = new Dimension(4, 8);
public static Icon getCheckBoxMenuItemIcon() {
if (checkBoxMenuItemIcon == null) {
checkBoxMenuItemIcon = new CheckBoxMenuItemIcon();
}
return checkBoxMenuItemIcon;
}
public static Icon getRadioButtonMenuItemIcon() {
if (radioButtonMenuItemIcon == null) {
radioButtonMenuItemIcon = new RadioButtonMenuItemIcon();
}
return radioButtonMenuItemIcon;
}
public static Icon getMenuArrowIcon() {
if (menuArrowIcon == null) {
menuArrowIcon = new MenuArrowIcon();
}
return menuArrowIcon;
}
private static class CheckBoxMenuItemIcon implements Icon, UIResource, Serializable {
public void paintIcon(Component c, Graphics g, int x, int y) {
JMenuItem item = (JMenuItem)c;
ButtonModel model = item.getModel();
boolean isSelected = model.isSelected();
if (!isSelected)
return;
boolean isEnabled = model.isEnabled();
boolean isPressed = model.isPressed();
boolean isArmed = model.isArmed();
g.translate(x, y);
if (isEnabled) {
if (model.isArmed() || (c instanceof JMenu && model.isSelected())) {
// rollover
g.setColor(Theme.menuIconRolloverColor[Theme.style].getColor());
} else {
// !rollover
g.setColor(Theme.menuIconColor[Theme.style].getColor());
}
} else {
// disabled
g.setColor(Theme.menuIconDisabledColor[Theme.style].getColor());
}
// paint arrow
g.drawLine(2, 4, 2, 6);
g.drawLine(3, 5, 3, 7);
g.drawLine(4, 6, 4, 8);
g.drawLine(5, 5, 5, 7);
g.drawLine(6, 4, 6, 6);
g.drawLine(7, 3, 7, 5);
g.drawLine(8, 2, 8, 4);
if (!isEnabled && Theme.derivedStyle[Theme.style] == Theme.W99_STYLE) {
// white shadow
g.setColor(Theme.menuIconShadowColor[Theme.style].getColor());
g.drawLine(9, 3, 9, 5);
g.drawLine(8, 5, 8, 6);
g.drawLine(7, 6, 7, 7);
g.drawLine(6, 7, 6, 8);
g.drawLine(5, 8, 5, 9);
}
g.translate(-x, -y);
}
public int getIconWidth() {
return menuCheckIconSize.width;
}
public int getIconHeight() {
return menuCheckIconSize.height;
}
}
private static class RadioButtonMenuItemIcon implements Icon, UIResource, Serializable {
public void paintIcon(Component c, Graphics g, int x, int y) {
JMenuItem b = (JMenuItem)c;
ButtonModel model = b.getModel();
boolean isSelected = model.isSelected();
boolean isEnabled = model.isEnabled();
boolean isPressed = model.isPressed();
boolean isArmed = model.isArmed();
g.translate(x, y);
if (isEnabled) {
if (isPressed || isArmed) {
// rollover
g.setColor(Theme.menuIconRolloverColor[Theme.style].getColor());
} else {
// !rollover
g.setColor(Theme.menuIconColor[Theme.style].getColor());
}
} else {
// disabled
g.setColor(Theme.menuIconDisabledColor[Theme.style].getColor());
}
// draw circle
g.drawLine(3, 0, 6, 0);
g.drawLine(9, 3, 9, 6);
g.drawLine(3, 9, 6, 9);
g.drawLine(0, 3, 0, 6);
g.drawLine(1, 1, 2, 1);
g.drawLine(7, 1, 8, 1);
g.drawLine(1, 8, 2, 8);
g.drawLine(7, 8, 8, 8);
g.drawLine(1, 2, 1, 2);
g.drawLine(8, 2, 8, 2);
g.drawLine(1, 7, 1, 7);
g.drawLine(8, 7, 8, 7);
if (isSelected) {
// draw check
g.drawLine(4, 3, 5, 3);
g.drawLine(3, 4, 6, 4);
g.drawLine(3, 5, 6, 5);
g.drawLine(4, 6, 5, 6);
}
g.translate(-x, -y);
}
public int getIconWidth() {
return menuCheckIconSize.width;
}
public int getIconHeight() {
return menuCheckIconSize.height;
}
}
private static class MenuArrowIcon implements Icon, UIResource, Serializable {
public void paintIcon(Component c, Graphics g, int x, int y) {
JMenuItem b = (JMenuItem)c;
ButtonModel model = b.getModel();
g.translate(x, y);
if (!model.isEnabled()) {
g.setColor(Theme.menuDisabledFgColor[Theme.style].getColor());
} else {
if (model.isArmed() || (c instanceof JMenu && model.isSelected())) {
g.setColor(Theme.menuSelectedTextColor[Theme.style].getColor());
} else {
g.setColor(b.getForeground());
}
}
if (c.getComponentOrientation().isLeftToRight()) {
g.drawLine(0, 0, 0, 7);
g.drawLine(1, 1, 1, 6);
g.drawLine(2, 2, 2, 5);
g.drawLine(3, 3, 3, 4);
} else {
g.drawLine(4, 0, 4, 7);
g.drawLine(3, 1, 3, 6);
g.drawLine(2, 2, 2, 5);
g.drawLine(1, 3, 1, 4);
}
g.translate(-x, -y);
}
public int getIconWidth() {
return menuArrowIconSize.width;
}
public int getIconHeight() {
return menuArrowIconSize.height;
}
}
}