Just like with the MetalButtonUI, I fixed the conditions under which the
MetalToggleButtonUI paints a gradient:
- the button's background must be a UIResource, otherwise the
application expects the background to be painted.
- the button is neither armed nor pressed. in these cases the button is
painted in the pressed state, which is not gradiented
- the button must be contentAreaFilled. this is normally mapped to
opaque and makes no difference. however, user code can theoretically
override the isContentAreaFilled to not forward to opaque.
- the button must be enabled. otherwise it is painted disabled, which is
not gradiented

2006-03-28  Roman Kennke  <[EMAIL PROTECTED]>

        * javax/swing/plaf/metal/MetalButtonUI.java
        (update): Paint gradient only when the background color
        is not a UIResource and if the button is neither armed nor
        pressed and if the button is contentAreaFilled.

/Roman

-- 
“Improvement makes straight roads, but the crooked roads, without
Improvement, are roads of Genius.” - William Blake
Index: javax/swing/plaf/metal/MetalToggleButtonUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java,v
retrieving revision 1.9
diff -u -1 -0 -r1.9 MetalToggleButtonUI.java
--- javax/swing/plaf/metal/MetalToggleButtonUI.java	10 Mar 2006 22:40:47 -0000	1.9
+++ javax/swing/plaf/metal/MetalToggleButtonUI.java	28 Mar 2006 21:49:59 -0000
@@ -38,26 +38,28 @@
 
 package javax.swing.plaf.metal;
 
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.FontMetrics;
 import java.awt.Graphics;
 import java.awt.Rectangle;
 
 import javax.swing.AbstractButton;
+import javax.swing.ButtonModel;
 import javax.swing.JComponent;
 import javax.swing.JToggleButton;
 import javax.swing.SwingConstants;
 import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.UIResource;
 import javax.swing.plaf.basic.BasicButtonUI;
 import javax.swing.plaf.basic.BasicToggleButtonUI;
 
 /**
  * A UI delegate for the [EMAIL PROTECTED] JToggleButton} component.
  */
 public class MetalToggleButtonUI
   extends BasicToggleButtonUI
 {
 
@@ -202,21 +204,26 @@
     g.setColor(saved);    
   }
 
   /**
    * If the property <code>ToggleButton.gradient</code> is set, then a gradient
    * is painted as background, otherwise the normal superclass behaviour is
    * called.
    */
   public void update(Graphics g, JComponent c)
   {
-    if (c.isOpaque() && UIManager.get(getPropertyPrefix() + "gradient") != null)
+    AbstractButton b = (AbstractButton) c;
+    ButtonModel m = b.getModel();
+    if (b.getBackground() instanceof UIResource
+        && b.isContentAreaFilled()
+        && b.isEnabled() && ! m.isArmed() && ! m.isPressed()
+        && UIManager.get(getPropertyPrefix() + "gradient") != null)
       {
         MetalUtils.paintGradient(g, 0, 0, c.getWidth(), c.getHeight(),
                                  SwingConstants.VERTICAL,
                                  getPropertyPrefix() + "gradient");
         paint(g, c);
       }
     else
       super.update(g, c);
   }
   

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

Reply via email to