In BasicMenuItemUI we were (sometimes) painting the background of
menuitems with the wrong color and sometimes it shouldn't be painted at
all (making the underlying menu shine through). This is fixed with the
attached patch.
Interesting sidenote, Sun's impl doesn't seem to give
menuitem.getBackground() to paintMenuItem(), but instead the
selectionBackground. This is especially important for custom l&f
implementation that rely on this fact.
2006-03-28 Roman Kennke <[EMAIL PROTECTED]>
* javax/swing/plaf/basic/BasicMenuItemUI.java
(paint): Call paintMenuItem with the selectionBackground as
parameter.
(paintBackground): Fixed the condition and color for the
background
painting.
/Roman
Index: javax/swing/plaf/basic/BasicMenuItemUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java,v
retrieving revision 1.43
diff -u -1 -0 -r1.43 BasicMenuItemUI.java
--- javax/swing/plaf/basic/BasicMenuItemUI.java 27 Jan 2006 10:19:59 -0000 1.43
+++ javax/swing/plaf/basic/BasicMenuItemUI.java 28 Mar 2006 10:33:04 -0000
@@ -534,49 +534,51 @@
/**
* Paints given menu item using specified graphics context
*
* @param g
* The graphics context used to paint this menu item
* @param c
* Menu Item to paint
*/
public void paint(Graphics g, JComponent c)
{
- paintMenuItem(g, c, checkIcon, arrowIcon, c.getBackground(),
+ paintMenuItem(g, c, checkIcon, arrowIcon, selectionBackground,
c.getForeground(), defaultTextIconGap);
}
/**
* Paints background of the menu item
*
* @param g
* The graphics context used to paint this menu item
* @param menuItem
* menu item to paint
* @param bgColor
* Background color to use when painting menu item
*/
protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor)
{
// Menu item is considered to be highlighted when it is selected.
// But we don't want to paint the background of JCheckBoxMenuItems
ButtonModel mod = menuItem.getModel();
- if (menuItem.isContentAreaFilled())
+ Color saved = g.getColor();
+ if (mod.isArmed() || ((menuItem instanceof JMenu) && mod.isSelected()))
{
- if ((menuItem.isSelected() && checkIcon == null) || (mod != null &&
- mod.isArmed())
- && (menuItem.getParent() instanceof MenuElement))
- g.setColor(selectionBackground);
- else
- g.setColor(bgColor);
+ g.setColor(bgColor);
g.fillRect(0, 0, menuItem.getWidth(), menuItem.getHeight());
- }
+ }
+ else if (menuItem.isOpaque())
+ {
+ g.setColor(menuItem.getBackground());
+ g.fillRect(0, 0, menuItem.getWidth(), menuItem.getHeight());
+ }
+ g.setColor(saved);
}
/**
* Paints specified menu item
*
* @param g
* The graphics context used to paint this menu item
* @param c
* menu item to paint
* @param checkIcon