7089914: Focus on image icons are not visible in javaws cache with high contrast mode

Reviewed-by: rupashka
This commit is contained in:
Sean Chou 2012-02-16 17:42:09 +04:00 committed by Pavel Porvatov
parent 7c6f3c6cb2
commit 40d87232e6
3 changed files with 101 additions and 4 deletions

View File

@ -55,7 +55,6 @@ import javax.swing.text.DefaultEditorKit;
import java.awt.Font; import java.awt.Font;
import java.awt.Color; import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.security.AccessController; import java.security.AccessController;
@ -523,6 +522,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel
Object ScrollbarBackgroundColor = new DesktopProperty( Object ScrollbarBackgroundColor = new DesktopProperty(
"win.scrollbar.backgroundColor", "win.scrollbar.backgroundColor",
table.get("scrollbar")); table.get("scrollbar"));
Object buttonFocusColor = new FocusColorProperty();
Object TextBackground = new XPColorValue(Part.EP_EDIT, null, Prop.FILLCOLOR, Object TextBackground = new XPColorValue(Part.EP_EDIT, null, Prop.FILLCOLOR,
WindowBackgroundColor); WindowBackgroundColor);
@ -629,7 +629,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel
"Button.highlight", ControlHighlightColor, "Button.highlight", ControlHighlightColor,
"Button.disabledForeground", InactiveTextColor, "Button.disabledForeground", InactiveTextColor,
"Button.disabledShadow", ControlHighlightColor, "Button.disabledShadow", ControlHighlightColor,
"Button.focus", black, "Button.focus", buttonFocusColor,
"Button.dashedRectGapX", new XPValue(Integer.valueOf(3), Integer.valueOf(5)), "Button.dashedRectGapX", new XPValue(Integer.valueOf(3), Integer.valueOf(5)),
"Button.dashedRectGapY", new XPValue(Integer.valueOf(3), Integer.valueOf(4)), "Button.dashedRectGapY", new XPValue(Integer.valueOf(3), Integer.valueOf(4)),
"Button.dashedRectGapWidth", new XPValue(Integer.valueOf(6), Integer.valueOf(10)), "Button.dashedRectGapWidth", new XPValue(Integer.valueOf(6), Integer.valueOf(10)),
@ -652,7 +652,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel
"CheckBox.darkShadow", ControlDarkShadowColor, "CheckBox.darkShadow", ControlDarkShadowColor,
"CheckBox.light", ControlLightColor, "CheckBox.light", ControlLightColor,
"CheckBox.highlight", ControlHighlightColor, "CheckBox.highlight", ControlHighlightColor,
"CheckBox.focus", black, "CheckBox.focus", buttonFocusColor,
"CheckBox.focusInputMap", "CheckBox.focusInputMap",
new UIDefaults.LazyInputMap(new Object[] { new UIDefaults.LazyInputMap(new Object[] {
"SPACE", "pressed", "SPACE", "pressed",
@ -1007,7 +1007,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel
"RadioButton.darkShadow", ControlDarkShadowColor, "RadioButton.darkShadow", ControlDarkShadowColor,
"RadioButton.light", ControlLightColor, "RadioButton.light", ControlLightColor,
"RadioButton.highlight", ControlHighlightColor, "RadioButton.highlight", ControlHighlightColor,
"RadioButton.focus", black, "RadioButton.focus", buttonFocusColor,
"RadioButton.focusInputMap", "RadioButton.focusInputMap",
new UIDefaults.LazyInputMap(new Object[] { new UIDefaults.LazyInputMap(new Object[] {
"SPACE", "pressed", "SPACE", "pressed",
@ -2614,4 +2614,19 @@ public class WindowsLookAndFeel extends BasicLookAndFeel
} }
} }
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;
}
}
} }

View File

@ -89,6 +89,11 @@ public class WindowsRadioButtonUI extends BasicRadioButtonUI
} }
} }
protected void uninstallDefaults(AbstractButton b) {
super.uninstallDefaults(b);
initialized = false;
}
protected Color getFocusColor() { protected Color getFocusColor() {
return focusColor; return focusColor;
} }

View File

@ -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);
}
}
});
}
}