# HG changeset patch # User rupashka # Date 1329399729 -14400 # Node ID d3620e28371c8acaf8388cd52a036cbd64cf4f7d # Parent 726dedadcc44d480922ce68f36736037f6812de6 7089914: Focus on image icons are not visible in javaws cache with high contrast mode Reviewed-by: rupashka Contributed-by: Sean Chou diff -r 726dedadcc44 -r d3620e28371c jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java Tue Feb 14 18:44:57 2012 +0400 +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java Thu Feb 16 17:42:09 2012 +0400 @@ -55,7 +55,6 @@ import java.awt.Font; import java.awt.Color; -import java.awt.event.KeyEvent; import java.awt.event.ActionEvent; import java.security.AccessController; @@ -523,6 +522,7 @@ Object ScrollbarBackgroundColor = new DesktopProperty( "win.scrollbar.backgroundColor", table.get("scrollbar")); + Object buttonFocusColor = new FocusColorProperty(); Object TextBackground = new XPColorValue(Part.EP_EDIT, null, Prop.FILLCOLOR, WindowBackgroundColor); @@ -629,7 +629,7 @@ "Button.highlight", ControlHighlightColor, "Button.disabledForeground", InactiveTextColor, "Button.disabledShadow", ControlHighlightColor, - "Button.focus", black, + "Button.focus", buttonFocusColor, "Button.dashedRectGapX", new XPValue(Integer.valueOf(3), Integer.valueOf(5)), "Button.dashedRectGapY", new XPValue(Integer.valueOf(3), Integer.valueOf(4)), "Button.dashedRectGapWidth", new XPValue(Integer.valueOf(6), Integer.valueOf(10)), @@ -652,7 +652,7 @@ "CheckBox.darkShadow", ControlDarkShadowColor, "CheckBox.light", ControlLightColor, "CheckBox.highlight", ControlHighlightColor, - "CheckBox.focus", black, + "CheckBox.focus", buttonFocusColor, "CheckBox.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { "SPACE", "pressed", @@ -1007,7 +1007,7 @@ "RadioButton.darkShadow", ControlDarkShadowColor, "RadioButton.light", ControlLightColor, "RadioButton.highlight", ControlHighlightColor, - "RadioButton.focus", black, + "RadioButton.focus", buttonFocusColor, "RadioButton.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { "SPACE", "pressed", @@ -2614,4 +2614,19 @@ } } + private static class FocusColorProperty extends DesktopProperty { + public FocusColorProperty () { + // Fallback value is never used bacause of the configureValue method doesn't return null + super("win.3d.backgroundColor", Color.BLACK); + } + + @Override + protected Object configureValue(Object value) { + if (! ((Boolean)Toolkit.getDefaultToolkit().getDesktopProperty("win.highContrast.on")).booleanValue()){ + return Color.BLACK; + } + return Color.BLACK.equals(value) ? Color.WHITE : Color.BLACK; + } + } + } diff -r 726dedadcc44 -r d3620e28371c jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.java --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.java Tue Feb 14 18:44:57 2012 +0400 +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.java Thu Feb 16 17:42:09 2012 +0400 @@ -89,6 +89,11 @@ } } + protected void uninstallDefaults(AbstractButton b) { + super.uninstallDefaults(b); + initialized = false; + } + protected Color getFocusColor() { return focusColor; } diff -r 726dedadcc44 -r d3620e28371c jdk/test/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI/7089914/bug7089914.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI/7089914/bug7089914.java Thu Feb 16 17:42:09 2012 +0400 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2012 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. + */ + +/* + * Portions Copyright (c) 2012 IBM Corporation + */ + +/* @test + * @bug 7089914 + * @summary Focus on image icons are not visible in javaws cache with high contrast mode + * @author Sean Chou + */ + +import javax.swing.*; +import java.lang.reflect.Field; + +public class bug7089914 { + + public static void main(String[] args) throws Exception { + try { + UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); + } catch (Exception e) { + System.out.println("Not WindowsLookAndFeel, test skipped"); + + return; + } + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + + JRadioButton rb = new JRadioButton(); + + if (!"com.sun.java.swing.plaf.windows.WindowsRadioButtonUI".equals(rb.getUI().getClass().getName())) { + throw new RuntimeException("Unexpected UI class of JRadioButton"); + } + + try { + Field initializedField = rb.getUI().getClass().getDeclaredField("initialized"); + initializedField.setAccessible(true); + + if (!initializedField.getBoolean(rb.getUI())) { + throw new RuntimeException("initialized is false"); + } + + rb.getUI().uninstallUI(rb); + + if (initializedField.getBoolean(rb.getUI())) { + throw new RuntimeException("initialized is true"); + } + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + }); + } +}