|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package javax.swing.plaf.metal; |
|
|
|
import sun.swing.SwingUtilities2; |
|
import sun.awt.AppContext; |
|
|
|
import javax.swing.*; |
|
import javax.swing.border.*; |
|
import javax.swing.plaf.basic.*; |
|
import java.awt.*; |
|
import java.awt.event.*; |
|
import java.beans.*; |
|
import javax.swing.plaf.*; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public class MetalButtonUI extends BasicButtonUI { |
|
// NOTE: These are not really needed, but at this point we can't pull |
|
|
|
protected Color focusColor; |
|
protected Color selectColor; |
|
protected Color disabledTextColor; |
|
|
|
private static final Object METAL_BUTTON_UI_KEY = new Object(); |
|
|
|
// ******************************** |
|
// Create PLAF |
|
|
|
public static ComponentUI createUI(JComponent c) { |
|
AppContext appContext = AppContext.getAppContext(); |
|
MetalButtonUI metalButtonUI = |
|
(MetalButtonUI) appContext.get(METAL_BUTTON_UI_KEY); |
|
if (metalButtonUI == null) { |
|
metalButtonUI = new MetalButtonUI(); |
|
appContext.put(METAL_BUTTON_UI_KEY, metalButtonUI); |
|
} |
|
return metalButtonUI; |
|
} |
|
|
|
// ******************************** |
|
// Install |
|
|
|
public void installDefaults(AbstractButton b) { |
|
super.installDefaults(b); |
|
} |
|
|
|
public void uninstallDefaults(AbstractButton b) { |
|
super.uninstallDefaults(b); |
|
} |
|
|
|
// ******************************** |
|
// Create Listeners |
|
|
|
protected BasicButtonListener createButtonListener(AbstractButton b) { |
|
return super.createButtonListener(b); |
|
} |
|
|
|
|
|
// ******************************** |
|
// Default Accessors |
|
|
|
protected Color getSelectColor() { |
|
selectColor = UIManager.getColor(getPropertyPrefix() + "select"); |
|
return selectColor; |
|
} |
|
|
|
protected Color getDisabledTextColor() { |
|
disabledTextColor = UIManager.getColor(getPropertyPrefix() + |
|
"disabledText"); |
|
return disabledTextColor; |
|
} |
|
|
|
protected Color getFocusColor() { |
|
focusColor = UIManager.getColor(getPropertyPrefix() + "focus"); |
|
return focusColor; |
|
} |
|
|
|
// ******************************** |
|
// Paint |
|
// ******************************** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public void update(Graphics g, JComponent c) { |
|
AbstractButton button = (AbstractButton)c; |
|
if ((c.getBackground() instanceof UIResource) && |
|
button.isContentAreaFilled() && c.isEnabled()) { |
|
ButtonModel model = button.getModel(); |
|
if (!MetalUtils.isToolBarButton(c)) { |
|
if (!model.isArmed() && !model.isPressed() && |
|
MetalUtils.drawGradient( |
|
c, g, "Button.gradient", 0, 0, c.getWidth(), |
|
c.getHeight(), true)) { |
|
paint(g, c); |
|
return; |
|
} |
|
} |
|
else if (model.isRollover() && MetalUtils.drawGradient( |
|
c, g, "Button.gradient", 0, 0, c.getWidth(), |
|
c.getHeight(), true)) { |
|
paint(g, c); |
|
return; |
|
} |
|
} |
|
super.update(g, c); |
|
} |
|
|
|
protected void paintButtonPressed(Graphics g, AbstractButton b) { |
|
if ( b.isContentAreaFilled() ) { |
|
Dimension size = b.getSize(); |
|
g.setColor(getSelectColor()); |
|
g.fillRect(0, 0, size.width, size.height); |
|
} |
|
} |
|
|
|
protected void paintFocus(Graphics g, AbstractButton b, |
|
Rectangle viewRect, Rectangle textRect, Rectangle iconRect){ |
|
|
|
Rectangle focusRect = new Rectangle(); |
|
String text = b.getText(); |
|
boolean isIcon = b.getIcon() != null; |
|
|
|
|
|
if ( text != null && !text.equals( "" ) ) { |
|
if ( !isIcon ) { |
|
focusRect.setBounds( textRect ); |
|
} |
|
else { |
|
focusRect.setBounds( iconRect.union( textRect ) ); |
|
} |
|
} |
|
|
|
else if ( isIcon ) { |
|
focusRect.setBounds( iconRect ); |
|
} |
|
|
|
g.setColor(getFocusColor()); |
|
g.drawRect((focusRect.x-1), (focusRect.y-1), |
|
focusRect.width+1, focusRect.height+1); |
|
|
|
} |
|
|
|
|
|
protected void paintText(Graphics g, JComponent c, Rectangle textRect, String text) { |
|
AbstractButton b = (AbstractButton) c; |
|
ButtonModel model = b.getModel(); |
|
FontMetrics fm = SwingUtilities2.getFontMetrics(c, g); |
|
int mnemIndex = b.getDisplayedMnemonicIndex(); |
|
|
|
|
|
if(model.isEnabled()) { |
|
|
|
g.setColor(b.getForeground()); |
|
} |
|
else { |
|
|
|
g.setColor(getDisabledTextColor()); |
|
} |
|
SwingUtilities2.drawStringUnderlineCharAt(c, g,text,mnemIndex, |
|
textRect.x, textRect.y + fm.getAscent()); |
|
} |
|
} |