// Copyright 2000, CERN, Geneva, Switzerland. package org.freehep.swing.plaf.metal; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.io.Serializable; import javax.swing.ButtonModel; import javax.swing.Icon; import javax.swing.JMenu; import javax.swing.plaf.UIResource; import javax.swing.plaf.metal.MetalLookAndFeel; import org.freehep.swing.JTriStateMenuItem; /** * * @author Mark Donszelmann * @version $Id: CheckBoxMenuItemIcon.java 8584 2006-08-10 23:06:37Z duns $ */ public class CheckBoxMenuItemIcon implements Icon, UIResource, Serializable { static private final Dimension menuCheckIconSize = new Dimension( 10, 10 ); public void paintIcon( Component c, Graphics g, int x, int y ) { JTriStateMenuItem b = (JTriStateMenuItem) c; ButtonModel model = b.getModel(); int state = b.getTriState(); 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 ) { g.setColor( MetalLookAndFeel.getControlInfo() ); g.drawLine( 0, 0, 8, 0 ); g.drawLine( 0, 0, 0, 8 ); g.drawLine( 8, 2, 8, 8 ); g.drawLine( 2, 8, 8, 8 ); g.setColor( MetalLookAndFeel.getPrimaryControl() ); g.drawLine( 1, 1, 7, 1 ); g.drawLine( 1, 1, 1, 7 ); g.drawLine( 9, 1, 9, 9 ); g.drawLine( 1, 9, 9, 9 ); } else { g.setColor( MetalLookAndFeel.getControlDarkShadow() ); g.drawLine( 0, 0, 8, 0 ); g.drawLine( 0, 0, 0, 8 ); g.drawLine( 8, 2, 8, 8 ); g.drawLine( 2, 8, 8, 8 ); g.setColor( MetalLookAndFeel.getControlHighlight() ); g.drawLine( 1, 1, 7, 1 ); g.drawLine( 1, 1, 1, 7 ); g.drawLine( 9, 1, 9, 9 ); g.drawLine( 1, 9, 9, 9 ); } } else { g.setColor( MetalLookAndFeel.getMenuDisabledForeground() ); g.drawRect( 0, 0, 8, 8 ); } if ( isSelected ) { if ( isEnabled ) { if (state == -1) { g.setColor( MetalLookAndFeel.getControlShadow() ); g.fillRect( 1, 1, 8, 8); } if ( model.isArmed() || ( c instanceof JMenu && model.isSelected() ) ) { g.setColor( MetalLookAndFeel.getMenuSelectedForeground() ); } else { g.setColor( b.getForeground() ); } } else { g.setColor( MetalLookAndFeel.getMenuDisabledForeground() ); } g.drawLine( 2, 2, 2, 6 ); g.drawLine( 3, 2, 3, 6 ); g.drawLine( 4, 4, 8, 0 ); g.drawLine( 4, 5, 9, 0 ); } g.translate( -x, -y ); } public int getIconWidth() { return menuCheckIconSize.width; } public int getIconHeight() { return menuCheckIconSize.height; } }