diff --git a/src/share/classes/javax/swing/plaf/nimbus/skin.laf b/src/share/classes/javax/swing/plaf/nimbus/skin.laf index 208a3b03301619569dd92c55280c4d96a0de31fb..da41a8ba0512799cfd828694544eaea70dbfe767 100644 --- a/src/share/classes/javax/swing/plaf/nimbus/skin.laf +++ b/src/share/classes/javax/swing/plaf/nimbus/skin.laf @@ -13407,7 +13407,7 @@ false NO_CACHING - + @@ -13513,10 +13513,10 @@ - + + + + 2 + + + 1.0 + 1.0 + NORMAL + false + true + + + + + + + + + + 2 + + + 1.0 + 1.0 + NORMAL + false + true + + + + + diff --git a/test/javax/swing/plaf/nimbus/8057791/bug8057791.java b/test/javax/swing/plaf/nimbus/8057791/bug8057791.java new file mode 100644 index 0000000000000000000000000000000000000000..cc31544abc6e384ce09cd33108f0fedab6e39b1a --- /dev/null +++ b/test/javax/swing/plaf/nimbus/8057791/bug8057791.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 8057791 + @summary Selection in JList is drawn with wrong colors in Nimbus L&F + @author Anton Litvinov + @run main bug8057791 + */ + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Rectangle; +import java.awt.image.BufferedImage; +import java.lang.reflect.InvocationTargetException; +import java.util.HashSet; +import javax.swing.DefaultListModel; +import javax.swing.JList; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.plaf.nimbus.NimbusLookAndFeel; + +public class bug8057791 { + public static void main(String[] args) { + try { + UIManager.setLookAndFeel(new NimbusLookAndFeel()); + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + final int listWidth = 50; + final int listHeight = 50; + final int selCellIndex = 0; + + JList list = new JList(); + list.setSize(listWidth, listHeight); + DefaultListModel listModel = new DefaultListModel(); + listModel.add(selCellIndex, "E"); + list.setModel(listModel); + list.setSelectedIndex(selCellIndex); + + BufferedImage img = new BufferedImage(listWidth, listHeight, + BufferedImage.TYPE_INT_ARGB); + Graphics g = img.getGraphics(); + list.paint(g); + g.dispose(); + + Rectangle cellRect = list.getCellBounds(selCellIndex, selCellIndex); + HashSet cellColors = new HashSet(); + int uniqueColorIndex = 0; + for (int x = cellRect.x; x < (cellRect.x + cellRect.width); x++) { + for (int y = cellRect.y; y < (cellRect.y + cellRect.height); y++) { + Color cellColor = new Color(img.getRGB(x, y), true); + if (cellColors.add(cellColor)) { + System.err.println(String.format("Cell color #%d: %s", + uniqueColorIndex++, cellColor)); + } + } + } + + Color selForegroundColor = list.getSelectionForeground(); + Color selBackgroundColor = list.getSelectionBackground(); + if (!cellColors.contains(new Color(selForegroundColor.getRGB(), true))) { + throw new RuntimeException(String.format( + "Selected cell is drawn without selection foreground color '%s'.", + selForegroundColor)); + } + if (!cellColors.contains(new Color(selBackgroundColor.getRGB(), true))) { + throw new RuntimeException(String.format( + "Selected cell is drawn without selection background color '%s'.", + selBackgroundColor)); + } + } + }); + } catch (UnsupportedLookAndFeelException | InterruptedException | InvocationTargetException e) { + throw new RuntimeException(e); + } + } +}