Hi,
this patch corrects some minor issues in BasicToolBarUI:

- the border of a button is not saved in a hashtable
- when resetting to the normal value the saved value was not removed from the 
table.
- the object for createRolloverBorder and createNonRolloverBorder is now
retrieved from the UIManager or created from scratch if it does not exist

There are still some things to do to get proper toolbar button painting done.

The ChangeLog:

2006-05-19  Robert Schuster  <[EMAIL PROTECTED]>

        * javax/swing/plaf/basic/BasicToolBarUI.java:
        (createNonRolloverBorder): Rewritten.
        (createRolloverBorder): Rewritten.
        (setToNonRolloverBorder): Store old border instance in hashtable.
        (setToRolloverBorder): Store old border instance in hashtable, use
        AbstractButton instead of JButton in statements.
        (setBorderToNormal): Rewritten.
        * javax/swing/plaf/metal/MetalLookAndFeel.java:
        (initComponentDefaults): Added values for ToolBar.rolloverBorder and
        ToolBar.nonrolloverBorder.

cya
Robert
Index: javax/swing/plaf/basic/BasicToolBarUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicToolBarUI.java,v
retrieving revision 1.23
diff -u -r1.23 BasicToolBarUI.java
--- javax/swing/plaf/basic/BasicToolBarUI.java	18 May 2006 17:07:35 -0000	1.23
+++ javax/swing/plaf/basic/BasicToolBarUI.java	19 May 2006 09:01:03 -0000
@@ -1,5 +1,5 @@
 /* BasicToolBarUI.java --
-   Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+   Copyright (C) 2004, 2005, 2006  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -76,13 +76,11 @@
 import javax.swing.UIManager;
 import javax.swing.border.Border;
 import javax.swing.border.CompoundBorder;
-import javax.swing.border.EmptyBorder;
-import javax.swing.border.EtchedBorder;
 import javax.swing.event.MouseInputListener;
 import javax.swing.plaf.ComponentUI;
 import javax.swing.plaf.ToolBarUI;
 import javax.swing.plaf.UIResource;
-import javax.swing.plaf.metal.MetalBorders;
+import javax.swing.plaf.basic.BasicBorders.ButtonBorder;
 
 /**
  * This is the Basic Look and Feel UI class for JToolBar.
@@ -313,8 +311,19 @@
    */
   protected Border createNonRolloverBorder()
   {
-    return new EtchedBorder();
-  }
+    Border b = UIManager.getBorder("ToolBar.nonrolloverBorder");
+    
+    if (b == null)
+      {
+        b = new CompoundBorder(
+            new ButtonBorder(UIManager.getColor("Button.shadow"),
+                             UIManager.getColor("Button.darkShadow"),
+                             UIManager.getColor("Button.light"),
+                             UIManager.getColor("Button.highlight")),
+            BasicBorders.getMarginBorder());
+      }
+    
+    return b;  }
 
   /**
    * This method creates a new PropertyChangeListener for the JToolBar.
@@ -334,12 +343,19 @@
    */
   protected Border createRolloverBorder()
   {
-    // We can safely assume that the component on which this border
-    // will be installed is a AbstractButton (or subclass). So
-    // a MetalBorders.ButtonBorder will work on it.
-    return new CompoundBorder(
-                              new MetalBorders.ButtonBorder(),
-                              new EmptyBorder(3,3,3,3));
+    Border b = UIManager.getBorder("ToolBar.rolloverBorder");
+    
+    if (b == null)
+      {
+        b = new CompoundBorder(
+            new ButtonBorder(UIManager.getColor("Button.shadow"),
+                             UIManager.getColor("Button.darkShadow"),
+                             UIManager.getColor("Button.light"),
+                             UIManager.getColor("Button.highlight")),
+            BasicBorders.getMarginBorder());
+      }
+    
+    return b;
   }
 
   /**
@@ -759,6 +775,10 @@
       {
 	AbstractButton b = (AbstractButton) c;
 	b.setRolloverEnabled(false);
+
+        // Save old border in hashtable.
+        borders.put(b, b.getBorder());
+        
 	b.setBorder(nonRolloverBorder);
       }
   }
@@ -770,11 +790,11 @@
    */
   protected void setBorderToNormal(Component c)
   {
-    if (c instanceof JButton)
+    if (c instanceof AbstractButton)
       {
-	JButton b = (JButton) c;
-	Border border = (Border) borders.get(b);
-	b.setBorder(border);
+        AbstractButton b = (AbstractButton) c;
+        b.setRolloverEnabled(true);
+        b.setBorder((Border) borders.remove(b));
       }
   }
 
@@ -785,11 +805,15 @@
    */
   protected void setBorderToRollover(Component c)
   {
-    if (c instanceof JButton)
+    if (c instanceof AbstractButton)
       {
-	JButton b = (JButton) c;
-	b.setRolloverEnabled(true);
-	b.setBorder(rolloverBorder);
+        AbstractButton b = (AbstractButton) c;
+        b.setRolloverEnabled(false);
+        
+        // Save old border in hashtable.
+        borders.put(b, b.getBorder());
+        
+        b.setBorder(rolloverBorder);
       }
   }
 
Index: javax/swing/plaf/metal/MetalLookAndFeel.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java,v
retrieving revision 1.82
diff -u -r1.82 MetalLookAndFeel.java
--- javax/swing/plaf/metal/MetalLookAndFeel.java	11 May 2006 17:05:55 -0000	1.82
+++ javax/swing/plaf/metal/MetalLookAndFeel.java	19 May 2006 09:01:04 -0000
@@ -1271,6 +1271,8 @@
       "ToolBar.light", getControlHighlight(),
       "ToolBar.shadow", getControlShadow(),
       "ToolBar.border", new MetalBorders.ToolBarBorder(),
+      "ToolBar.rolloverBorder", MetalBorders.getToolbarButtonBorder(),
+      "ToolBar.nonrolloverBorder", MetalBorders.getToolbarButtonBorder(),
 
       "ToolTip.background", getPrimaryControl(),
       "ToolTip.backgroundInactive", getControl(),

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to