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(),
signature.asc
Description: OpenPGP digital signature
