This commit is contained in:
David Dehaven 2015-02-17 11:44:51 -08:00
commit c627fa5807
81 changed files with 2766 additions and 537 deletions

View File

@ -60,16 +60,28 @@ ifneq ($(findstring $(OPENJDK_TARGET_OS), windows aix),)
endif
################################################################################
# Copy msvcrXX.dll on windows
# Copy the microsoft runtime libraries on windows
ifeq ($(OPENJDK_TARGET_OS), windows)
MSVCR_TARGET := $(LIB_DST_DIR)/$(notdir $(MSVCR_DLL))
# Chmod to avoid permission issues if bundles are unpacked on unix platforms.
$(MSVCR_TARGET): $(MSVCR_DLL)
$(call install-file)
$(CHMOD) a+rx $@
TARGETS += $(MSVCR_TARGET)
# Chmod to avoid permission issues if bundles are unpacked on unix platforms.
define copy-and-chmod
$(install-file)
$(CHMOD) a+rx $@
endef
# Use separate macro calls in case the source files are not in the same
# directory.
$(eval $(call SetupCopyFiles,COPY_MSVCR, \
DEST := $(LIB_DST_DIR), \
FILES := $(MSVCR_DLL), \
MACRO := copy-and-chmod))
$(eval $(call SetupCopyFiles,COPY_MSVCP, \
DEST := $(LIB_DST_DIR), \
FILES := $(MSVCP_DLL), \
MACRO := copy-and-chmod))
TARGETS += $(COPY_MSVCR) $(COPY_MSVCP)
endif
################################################################################

View File

@ -515,6 +515,77 @@ TARGETS += $(BUILD_LIBJAVAJPEG)
################################################################################
ifeq ($(BUILD_HEADLESS), true)
# Mac and Windows only use the native AWT lib, do not build libawt_headless
ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx),)
LIBAWT_HEADLESS_DIRS := $(JDK_TOPDIR)/src/java.desktop/unix/native/libawt_headless/awt \
$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \
$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/java2d/opengl \
$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/java2d/x11 \
$(JDK_TOPDIR)/src/java.desktop/share/native/common/java2d/opengl \
$(JDK_TOPDIR)/src/java.desktop/share/native/common/font \
#
LIBAWT_HEADLESS_EXCLUDES := medialib
LIBAWT_HEADLESS_CFLAGS := -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop \
$(addprefix -I, $(LIBAWT_HEADLESS_DIRS)) \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d/loops \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image/cvutils \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d/pipe \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image \
-I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt/java2d \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/common/font \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/debug \
-I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/font \
-I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libsunwjdga/ \
$(LIBJAVA_HEADER_FLAGS) \
#
LIBAWT_HEADLESS_REORDER :=
ifeq ($(OPENJDK_TARGET_OS), solaris)
ifneq ($(OPENJDK_TARGET_CPU), x86_64)
LIBAWT_HEADLESS_REORDER := $(JDK_TOPDIR)/make/mapfiles/libawt_headless/reorder-$(OPENJDK_TARGET_CPU)
endif
endif
$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS, \
LIBRARY := awt_headless, \
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
SRC := $(LIBAWT_HEADLESS_DIRS), \
EXCLUDES := $(LIBAWT_HEADLESS_EXCLUDES), \
LANG := C, \
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) \
-DHEADLESS=true \
-DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \
$(CUPS_CFLAGS) \
$(X_CFLAGS) \
$(LIBAWT_HEADLESS_CFLAGS), \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libawt_headless/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \
LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \
LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_ORIGIN)., \
REORDER := $(LIBAWT_HEADLESS_REORDER), \
LDFLAGS_SUFFIX_linux := -ljvm -lawt -lm $(LIBDL) -ljava, \
LDFLAGS_SUFFIX_aix := -ljvm -lawt -ljava,\
LDFLAGS_SUFFIX_solaris := $(LIBDL) -ljvm -lawt -lm -ljava $(LIBCXX) -lc, \
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libawt_headless, \
DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
$(BUILD_LIBAWT_HEADLESS): $(BUILD_LIBAWT)
TARGETS += $(BUILD_LIBAWT_HEADLESS)
endif
endif
################################################################################
LIBFONTMANAGER_SRC := $(JDK_TOPDIR)/src/java.desktop/share/native/libfontmanager \
$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libfontmanager
LIBFONTMANAGER_CFLAGS := \
@ -562,10 +633,6 @@ ifeq ($(OPENJDK_TARGET_OS), linux)
BUILD_LIBFONTMANAGER_ExtensionSubtables.cpp_CXXFLAGS := -fno-strict-aliasing
endif
# Libfontmanager doesn't actually need X_LIBS to link, but if building
# on a Solaris machine without X installed, using a devkit, linking
# to libawt_xawt will fail without the -L parameters from X_LIBS. Filter
# out the -R parameters since they aren't needed.
$(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER, \
LIBRARY := fontmanager, \
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
@ -583,9 +650,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER, \
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
LDFLAGS_SUFFIX := $(BUILD_LIBFONTMANAGER_FONTLIB), \
LDFLAGS_SUFFIX_linux := -lawt $(LIBM) $(LIBCXX) -ljava -ljvm -lc, \
LDFLAGS_SUFFIX_solaris := $(filter-out -R%, $(X_LIBS)) \
-lawt -lawt_xawt -lc $(LIBM) $(LIBCXX) -ljava -ljvm, \
LDFLAGS_SUFFIX_aix := -lawt -lawt_xawt $(LIBM) $(LIBCXX) -ljava -ljvm,\
LDFLAGS_SUFFIX_solaris := -lawt -lawt_headless -lc $(LIBM) $(LIBCXX) -ljava -ljvm, \
LDFLAGS_SUFFIX_aix := -lawt -lawt_headless $(LIBM) $(LIBCXX) -ljava -ljvm,\
LDFLAGS_SUFFIX_macosx := -lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup \
-ljava -ljvm, \
LDFLAGS_SUFFIX_windows := $(WIN_JAVA_LIB) advapi32.lib user32.lib gdi32.lib \
@ -601,7 +667,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER, \
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT)
ifneq (, $(findstring $(OPENJDK_TARGET_OS), solaris aix))
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT_XAWT)
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT_HEADLESS)
endif
TARGETS += $(BUILD_LIBFONTMANAGER)
@ -723,77 +789,6 @@ TARGETS += $(BUILD_LIBJAWT)
################################################################################
ifeq ($(BUILD_HEADLESS), true)
# Mac and Windows only use the native AWT lib, do not build libawt_headless
ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx),)
LIBAWT_HEADLESS_DIRS := $(JDK_TOPDIR)/src/java.desktop/unix/native/libawt_headless/awt \
$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \
$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/java2d/opengl \
$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/java2d/x11 \
$(JDK_TOPDIR)/src/java.desktop/share/native/common/java2d/opengl \
$(JDK_TOPDIR)/src/java.desktop/share/native/common/font \
#
LIBAWT_HEADLESS_EXCLUDES := medialib
LIBAWT_HEADLESS_CFLAGS := -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop \
$(addprefix -I, $(LIBAWT_HEADLESS_DIRS)) \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d/loops \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image/cvutils \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d/pipe \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image \
-I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt/java2d \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/common/font \
-I$(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/debug \
-I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/font \
-I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libsunwjdga/ \
$(LIBJAVA_HEADER_FLAGS) \
#
LIBAWT_HEADLESS_REORDER :=
ifeq ($(OPENJDK_TARGET_OS), solaris)
ifneq ($(OPENJDK_TARGET_CPU), x86_64)
LIBAWT_HEADLESS_REORDER := $(JDK_TOPDIR)/make/mapfiles/libawt_headless/reorder-$(OPENJDK_TARGET_CPU)
endif
endif
$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS, \
LIBRARY := awt_headless, \
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
SRC := $(LIBAWT_HEADLESS_DIRS), \
EXCLUDES := $(LIBAWT_HEADLESS_EXCLUDES), \
LANG := C, \
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) \
-DHEADLESS=true \
-DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \
$(CUPS_CFLAGS) \
$(X_CFLAGS) \
$(LIBAWT_HEADLESS_CFLAGS), \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libawt_headless/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \
LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \
LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_ORIGIN)., \
REORDER := $(LIBAWT_HEADLESS_REORDER), \
LDFLAGS_SUFFIX_linux := -ljvm -lawt -lm $(LIBDL) -ljava, \
LDFLAGS_SUFFIX_aix := -ljvm -lawt -ljava,\
LDFLAGS_SUFFIX_solaris := $(LIBDL) -ljvm -lawt -lm -ljava $(LIBCXX) -lc, \
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libawt_headless, \
DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
$(BUILD_LIBAWT_HEADLESS): $(BUILD_LIBAWT)
TARGETS += $(BUILD_LIBAWT_HEADLESS)
endif
endif
################################################################################
ifndef BUILD_HEADLESS_ONLY
LIBSPLASHSCREEN_DIRS := \

View File

@ -271,6 +271,11 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
# Staticically link with c runtime on windows.
LIBJLI_CFLAGS := $(filter-out -MD, $(LIBJLI_CFLAGS))
LIBJLI_OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE)
# Supply the name of the C runtime lib.
LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"'
ifneq ($(MSVCP_DLL), )
LIBJLI_CFLAGS += -DMSVCP_DLL_NAME='"$(notdir $(MSVCP_DLL))"'
endif
else
LIBJLI_OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE)/jli
endif

View File

@ -1,5 +1,6 @@
java.base
java.compiler
java.datatransfer
java.desktop
java.instrument
java.logging

View File

@ -265,26 +265,17 @@ LoadMSVCRT()
* assumed to be present in the "JRE path" directory. If it is not found
* there (or "JRE path" fails to resolve), skip the explicit load and let
* nature take its course, which is likely to be a failure to execute.
* This is clearly completely specific to the exact compiler version
* which isn't very nice, but its hardly the only place.
* No attempt to look for compiler versions in between 2003 and 2010
* as we aren't supporting building with those.
* The makefiles will provide the correct lib contained in quotes in the
* macro MSVCR_DLL_NAME.
*/
#ifdef _MSC_VER
#if _MSC_VER < 1400
#define CRT_DLL "msvcr71.dll"
#endif
#if _MSC_VER >= 1600
#define CRT_DLL "msvcr100.dll"
#endif
#ifdef CRT_DLL
#ifdef MSVCR_DLL_NAME
if (GetJREPath(crtpath, MAXPATHLEN)) {
if (JLI_StrLen(crtpath) + JLI_StrLen("\\bin\\") +
JLI_StrLen(CRT_DLL) >= MAXPATHLEN) {
JLI_StrLen(MSVCR_DLL_NAME) >= MAXPATHLEN) {
JLI_ReportErrorMessage(JRE_ERROR11);
return JNI_FALSE;
}
(void)JLI_StrCat(crtpath, "\\bin\\" CRT_DLL); /* Add crt dll */
(void)JLI_StrCat(crtpath, "\\bin\\" MSVCR_DLL_NAME); /* Add crt dll */
JLI_TraceLauncher("CRT path is %s\n", crtpath);
if (_access(crtpath, 0) == 0) {
if (LoadLibrary(crtpath) == 0) {
@ -293,8 +284,24 @@ LoadMSVCRT()
}
}
}
#endif /* CRT_DLL */
#endif /* _MSC_VER */
#endif /* MSVCR_DLL_NAME */
#ifdef MSVCP_DLL_NAME
if (GetJREPath(crtpath, MAXPATHLEN)) {
if (JLI_StrLen(crtpath) + JLI_StrLen("\\bin\\") +
JLI_StrLen(MSVCP_DLL_NAME) >= MAXPATHLEN) {
JLI_ReportErrorMessage(JRE_ERROR11);
return JNI_FALSE;
}
(void)JLI_StrCat(crtpath, "\\bin\\" MSVCP_DLL_NAME); /* Add prt dll */
JLI_TraceLauncher("PRT path is %s\n", crtpath);
if (_access(crtpath, 0) == 0) {
if (LoadLibrary(crtpath) == 0) {
JLI_ReportErrorMessage(DLL_ERROR4, crtpath);
return JNI_FALSE;
}
}
}
#endif /* MSVCP_DLL_NAME */
loaded = 1;
}
return JNI_TRUE;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 2015, 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
@ -46,8 +46,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Objects;
import static sun.security.util.SecurityConstants.GET_CLASSLOADER_PERMISSION;
/**
* A {@code DataFlavor} provides meta information about data. {@code DataFlavor}
* is typically used to access data on the clipboard, or during
@ -137,7 +135,7 @@ public class DataFlavor implements Externalizable, Cloneable {
try {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(GET_CLASSLOADER_PERMISSION);
sm.checkPermission(new RuntimePermission("getClassLoader"));
}
ClassLoader loader = ClassLoader.getSystemClassLoader();
try {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2015, 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
@ -215,7 +215,7 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
line = line.substring(0, line.length() - 1) + reader.readLine().trim();
}
int delimiterPosition = line.indexOf('=');
String key = line.substring(0, delimiterPosition).replaceAll("\\ ", " ");
String key = line.substring(0, delimiterPosition).replace("\\ ", " ");
String[] values = line.substring(delimiterPosition + 1, line.length()).split(",");
for (String value : values) {
try {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015, 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
@ -68,8 +68,9 @@ public abstract class AquaBorder implements Border, UIResource {
painter.state.set(size);
}
@Override
public Insets getBorderInsets(final Component c) {
return sizeVariant.margins;
return (Insets) sizeVariant.margins.clone();
}
protected AquaBorder deriveBorderForSize(final Size size) {
@ -130,8 +131,10 @@ public abstract class AquaBorder implements Border, UIResource {
return (focusable != null && focusable instanceof JComponent && ((JComponent)focusable).hasFocus());
}
@Override
public boolean isBorderOpaque() { return false; }
@Override
public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int w, final int h) {
painter.paint(g, c, x, y, w, h);
}

View File

@ -275,7 +275,7 @@ public class AquaComboBoxUI extends BasicComboBoxUI implements Sizeable {
actionMap.put("aquaSelectNext", highlightNextAction);
actionMap.put("aquaSelectPrevious", highlightPreviousAction);
actionMap.put("aquaEnterPressed", triggerSelectionAction);
actionMap.put("enterPressed", triggerSelectionAction);
actionMap.put("aquaSpacePressed", toggleSelectionAction);
actionMap.put("aquaSelectHome", highlightFirstAction);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015, 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
@ -1098,8 +1098,15 @@ public class AquaFileChooserUI extends FileChooserUI {
super(f);
}
public Component getTableCellRendererComponent(final JTable list, final Object value, final boolean isSelected, final boolean cellHasFocus, final int index, final int col) {
super.getTableCellRendererComponent(list, value, isSelected, false, index, col); // No focus border, thanks
public Component getTableCellRendererComponent(final JTable list,
final Object value,
final boolean isSelected,
final boolean cellHasFocus,
final int index,
final int col) {
super.getTableCellRendererComponent(list, value, isSelected, false,
index,
col); // No focus border, thanks
final File file = (File)value;
final JFileChooser fc = getFileChooser();
setText(fc.getName(file));
@ -1115,8 +1122,14 @@ public class AquaFileChooserUI extends FileChooserUI {
super(f);
}
public Component getTableCellRendererComponent(final JTable list, final Object value, final boolean isSelected, final boolean cellHasFocus, final int index, final int col) {
super.getTableCellRendererComponent(list, value, isSelected, false, index, col);
public Component getTableCellRendererComponent(final JTable list,
final Object value,
final boolean isSelected,
final boolean cellHasFocus,
final int index,
final int col) {
super.getTableCellRendererComponent(list, value, isSelected, false,
index, col);
final File file = (File)fFileList.getValueAt(index, 0);
setEnabled(isSelectableInList(file));
final DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT);
@ -1132,14 +1145,17 @@ public class AquaFileChooserUI extends FileChooserUI {
}
}
@Override
public Dimension getPreferredSize(final JComponent c) {
return PREF_SIZE;
return new Dimension(PREF_WIDTH, PREF_HEIGHT);
}
@Override
public Dimension getMinimumSize(final JComponent c) {
return MIN_SIZE;
return new Dimension(MIN_WIDTH, MIN_HEIGHT);
}
@Override
public Dimension getMaximumSize(final JComponent c) {
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
@ -1819,12 +1835,8 @@ public class AquaFileChooserUI extends FileChooserUI {
private static final int PREF_WIDTH = 550;
private static final int PREF_HEIGHT = 400;
private static final Dimension PREF_SIZE = new Dimension(PREF_WIDTH, PREF_HEIGHT);
private static final int MIN_WIDTH = 400;
private static final int MIN_HEIGHT = 250;
private static final Dimension MIN_SIZE = new Dimension(MIN_WIDTH, MIN_HEIGHT);
private static final int LIST_MIN_WIDTH = 400;
private static final int LIST_MIN_HEIGHT = 100;
private static final Dimension LIST_MIN_SIZE = new Dimension(LIST_MIN_WIDTH, LIST_MIN_HEIGHT);

View File

@ -214,7 +214,7 @@ public class AquaKeyBindings {
"PAGE_DOWN", "aquaSelectPageDown",
"HOME", "aquaSelectHome",
"END", "aquaSelectEnd",
"ENTER", "aquaEnterPressed",
"ENTER", "enterPressed",
"UP", "aquaSelectPrevious",
"KP_UP", "aquaSelectPrevious",
"DOWN", "aquaSelectNext",

View File

@ -77,14 +77,72 @@ public final class CFont extends PhysicalFont {
}
private static native long createNativeFont(final String nativeFontName,
final int style,
final boolean isFakeItalic);
final int style);
private static native void disposeNativeFont(final long nativeFontPtr);
private boolean isFakeItalic;
private String nativeFontName;
private long nativeFontPtr;
private native float getWidthNative(final long nativeFontPtr);
private native float getWeightNative(final long nativeFontPtr);
private int fontWidth = -1;
private int fontWeight = -1;
@Override
public int getWidth() {
if (fontWidth == -1) {
// Apple use a range of -1 -> +1, where 0.0 is normal
// OpenType uses a % range from 50% -> 200% where 100% is normal
// and maps these onto the integer values 1->9.
// Since that is what Font2D.getWidth() expects, remap to that.
float fw = getWidthNative(getNativeFontPtr());
if (fw == 0.0) { // short cut the common case
fontWidth = Font2D.FWIDTH_NORMAL;
return fontWidth;
}
fw += 1.0; fw *= 100.0;
if (fw <= 50.0) {
fontWidth = 1;
} else if (fw <= 62.5) {
fontWidth = 2;
} else if (fw <= 75.0) {
fontWidth = 3;
} else if (fw <= 87.5) {
fontWidth = 4;
} else if (fw <= 100.0) {
fontWidth = 5;
} else if (fw <= 112.5) {
fontWidth = 6;
} else if (fw <= 125.0) {
fontWidth = 7;
} else if (fw <= 150.0) {
fontWidth = 8;
} else {
fontWidth = 9;
}
}
return fontWidth;
}
@Override
public int getWeight() {
if (fontWeight == -1) {
// Apple use a range of -1 -> +1, where 0 is medium/regular
// Map this on to the OpenType range of 100->900 where
// 500 is medium/regular.
// We'll actually map to 0->1000 but that's close enough.
float fw = getWeightNative(getNativeFontPtr());
if (fw == 0) {
return Font2D.FWEIGHT_NORMAL;
}
fw += 1.0; fw *= 500;
fontWeight = (int)fw;
}
return fontWeight;
}
// this constructor is called from CFontWrapper.m
public CFont(String name) {
this(name, name);
@ -94,10 +152,11 @@ public final class CFont extends PhysicalFont {
handle = new Font2DHandle(this);
fullName = name;
familyName = inFamilyName;
nativeFontName = inFamilyName;
nativeFontName = fullName;
setStyle();
}
/* Called from CFontManager too */
public CFont(CFont other, String logicalFamilyName) {
handle = new Font2DHandle(this);
fullName = logicalFamilyName;
@ -109,6 +168,7 @@ public final class CFont extends PhysicalFont {
public CFont createItalicVariant() {
CFont font = new CFont(this, familyName);
font.nativeFontName = fullName;
font.fullName =
fullName + (style == Font.BOLD ? "" : "-") + "Italic-Derived";
font.style |= Font.ITALIC;
@ -118,7 +178,7 @@ public final class CFont extends PhysicalFont {
protected synchronized long getNativeFontPtr() {
if (nativeFontPtr == 0L) {
nativeFontPtr = createNativeFont(nativeFontName, style, isFakeItalic);
nativeFontPtr = createNativeFont(nativeFontName, style);
}
return nativeFontPtr;
}

View File

@ -252,13 +252,42 @@ public final class CFontManager extends SunFontManager {
final CFont font = new CFont(fontName, fontFamilyName);
registerGenericFont(font);
}
if ((font.getStyle() & Font.ITALIC) == 0) {
registerGenericFont(font.createItalicVariant(), true);
void registerItalicDerived() {
FontFamily[] famArr = FontFamily.getAllFontFamilies();
for (int i=0; i<famArr.length; i++) {
FontFamily family = famArr[i];
Font2D f2dPlain = family.getFont(Font.PLAIN);
if (f2dPlain != null && !(f2dPlain instanceof CFont)) continue;
Font2D f2dBold = family.getFont(Font.BOLD);
if (f2dBold != null && !(f2dBold instanceof CFont)) continue;
Font2D f2dItalic = family.getFont(Font.ITALIC);
if (f2dItalic != null && !(f2dItalic instanceof CFont)) continue;
Font2D f2dBoldItalic = family.getFont(Font.BOLD|Font.ITALIC);
if (f2dBoldItalic != null && !(f2dBoldItalic instanceof CFont)) continue;
CFont plain = (CFont)f2dPlain;
CFont bold = (CFont)f2dBold;
CFont italic = (CFont)f2dItalic;
CFont boldItalic = (CFont)f2dBoldItalic;
if (bold == null) bold = plain;
if (plain == null && bold == null) continue;
if (italic != null && boldItalic != null) continue;
if (plain != null && italic == null) {
registerGenericFont(plain.createItalicVariant(), true);
}
if (bold != null && boldItalic == null) {
registerGenericFont(bold.createItalicVariant(), true);
}
}
}
Object waitForFontsToBeLoaded = new Object();
private boolean loadedAllFonts = false;
public void loadFonts()
{
synchronized(waitForFontsToBeLoaded)
@ -267,7 +296,11 @@ public final class CFontManager extends SunFontManager {
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Object>() {
public Object run() {
loadNativeFonts();
if (!loadedAllFonts) {
loadNativeFonts();
registerItalicDerived();
loadedAllFonts = true;
}
return null;
}
}

View File

@ -890,9 +890,9 @@ JNF_CLASS_CACHE(jc_CInputMethod, "sun/lwawt/macosx/CInputMethod");
// text, or 'text in progress'. We also need to send the event if we get an insert text out of the blue!
// (i.e., when the user uses the Character palette or Inkwell), or when the string to insert is a complex
// Unicode value.
NSUInteger utf8Length = [aString lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
NSUInteger utf16Length = [aString lengthOfBytesUsingEncoding:NSUTF16StringEncoding];
if ([self hasMarkedText] || !fProcessingKeystroke || (utf8Length > 1)) {
if ([self hasMarkedText] || !fProcessingKeystroke || (utf16Length > 2)) {
JNIEnv *env = [ThreadUtilities getJNIEnv];
static JNF_MEMBER_CACHE(jm_selectPreviousGlyph, jc_CInputMethod, "selectPreviousGlyph", "()V");

View File

@ -35,15 +35,11 @@
#import "AWTStrike.h"
#import "CoreTextSupport.h"
#define DEBUG
@implementation AWTFont
- (id) initWithFont:(NSFont *)font isFakeItalic:(BOOL)isFakeItalic {
- (id) initWithFont:(NSFont *)font {
self = [super init];
if (self) {
fIsFakeItalic = isFakeItalic;
fFont = [font retain];
fNativeCGFont = CTFontCopyGraphicsFont((CTFontRef)font, NULL);
}
@ -72,7 +68,6 @@
+ (AWTFont *) awtFontForName:(NSString *)name
style:(int)style
isFakeItalic:(BOOL)isFakeItalic
{
// create font with family & size
NSFont *nsFont = [NSFont fontWithName:name size:1.0];
@ -95,7 +90,7 @@
nsFont = [[NSFontManager sharedFontManager] convertFont:nsFont toHaveTrait:NSBoldFontMask];
}
return [[[AWTFont alloc] initWithFont:nsFont isFakeItalic:isFakeItalic] autorelease];
return [[[AWTFont alloc] initWithFont:nsFont] autorelease];
}
+ (NSFont *) nsFontForJavaFont:(jobject)javaFont env:(JNIEnv *)env {
@ -354,7 +349,7 @@ JNF_COCOA_EXIT(env);
JNIEXPORT jlong JNICALL
Java_sun_font_CFont_createNativeFont
(JNIEnv *env, jclass clazz,
jstring nativeFontName, jint style, jboolean isFakeItalic)
jstring nativeFontName, jint style)
{
AWTFont *awtFont = nil;
@ -362,8 +357,7 @@ JNF_COCOA_ENTER(env);
awtFont =
[AWTFont awtFontForName:JNFJavaToNSString(env, nativeFontName)
style:style
isFakeItalic:isFakeItalic]; // autoreleased
style:style]; // autoreleased
if (awtFont) {
CFRetain(awtFont); // GC
@ -374,6 +368,52 @@ JNF_COCOA_EXIT(env);
return ptr_to_jlong(awtFont);
}
/*
* Class: sun_font_CFont
* Method: getWidthNative
* Signature: (J)F
*/
JNIEXPORT jfloat JNICALL
Java_sun_font_CFont_getWidthNative
(JNIEnv *env, jobject cfont, jlong awtFontPtr)
{
float widthVal;
JNF_COCOA_ENTER(env);
AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr);
NSFont* nsFont = awtFont->fFont;
NSFontDescriptor *fontDescriptor = nsFont.fontDescriptor;
NSDictionary *fontTraits = [fontDescriptor objectForKey : NSFontTraitsAttribute];
NSNumber *width = [fontTraits objectForKey : NSFontWidthTrait];
widthVal = (float)[width floatValue];
JNF_COCOA_EXIT(env);
return (jfloat)widthVal;
}
/*
* Class: sun_font_CFont
* Method: getWeightNative
* Signature: (J)F
*/
JNIEXPORT jfloat JNICALL
Java_sun_font_CFont_getWeightNative
(JNIEnv *env, jobject cfont, jlong awtFontPtr)
{
float weightVal;
JNF_COCOA_ENTER(env);
AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr);
NSFont* nsFont = awtFont->fFont;
NSFontDescriptor *fontDescriptor = nsFont.fontDescriptor;
NSDictionary *fontTraits = [fontDescriptor objectForKey : NSFontTraitsAttribute];
NSNumber *weight = [fontTraits objectForKey : NSFontWeightTrait];
weightVal = (float)[weight floatValue];
JNF_COCOA_EXIT(env);
return (jfloat)weightVal;
}
/*
* Class: sun_font_CFont
* Method: disposeNativeFont

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2015, 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
@ -43,8 +43,6 @@ import org.w3c.dom.Node;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.awt.image.SampleModel;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.image.ColorModel;
import java.awt.image.IndexColorModel;
@ -1048,7 +1046,13 @@ public class JPEGImageWriter extends ImageWriter {
// Call the writer, who will call back for every scanline
processImageStarted(currentImage);
clearAbortRequest();
cbLock.lock();
try {
processImageStarted(currentImage);
} finally {
cbLock.unlock();
}
boolean aborted = false;
@ -1225,6 +1229,23 @@ public class JPEGImageWriter extends ImageWriter {
}
}
@Override
protected synchronized void clearAbortRequest() {
setThreadLock();
try {
cbLock.check();
if (abortRequested()) {
super.clearAbortRequest();
// reset C structures
resetWriter(structPointer);
// reset the native destination
setDest(structPointer);
}
} finally {
clearThreadLock();
}
}
private void resetInternalState() {
// reset C structures
resetWriter(structPointer);
@ -1652,7 +1673,7 @@ public class JPEGImageWriter extends ImageWriter {
int vsamp0 = specs[0].VsamplingFactor;
for (int i = 1; i < specs.length; i++) {
if ((specs[i].HsamplingFactor != hsamp0) ||
(specs[i].HsamplingFactor != hsamp0))
(specs[i].VsamplingFactor != vsamp0))
return true;
}
return false;

View File

@ -100,7 +100,8 @@ class GTKFileChooserUI extends SynthFileChooserUI {
private static Dimension prefListSize = new Dimension(75, 150);
private static Dimension PREF_SIZE = new Dimension(435, 360);
private static Dimension MIN_SIZE = new Dimension(200, 300);
private static final int MIN_WIDTH = 200;
private static final int MIN_HEIGHT = 300;
private static Dimension ZERO_ACC_SIZE = new Dimension(1, 1);
@ -1052,6 +1053,7 @@ class GTKFileChooserUI extends SynthFileChooserUI {
}
}
@Override
public Dimension getPreferredSize(JComponent c) {
Dimension prefSize = new Dimension(PREF_SIZE);
JComponent accessory = getFileChooser().getAccessory();
@ -1067,10 +1069,12 @@ class GTKFileChooserUI extends SynthFileChooserUI {
}
}
public Dimension getMinimumSize(JComponent x) {
return new Dimension(MIN_SIZE);
@Override
public Dimension getMinimumSize(JComponent x) {
return new Dimension(MIN_WIDTH, MIN_HEIGHT);
}
@Override
public Dimension getMaximumSize(JComponent x) {
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2015, 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
@ -65,8 +65,8 @@ public class MotifFileChooserUI extends BasicFileChooserUI {
private static Dimension WITH_ACCELERATOR_PREF_SIZE = new Dimension(650, 450);
private static Dimension PREF_SIZE = new Dimension(350, 450);
private static Dimension MIN_SIZE = new Dimension(200, 300);
private static final int MIN_WIDTH = 200;
private static final int MIN_HEIGHT = 300;
private static Dimension PREF_ACC_SIZE = new Dimension(10, 10);
private static Dimension ZERO_ACC_SIZE = new Dimension(1, 1);
@ -628,6 +628,7 @@ public class MotifFileChooserUI extends BasicFileChooserUI {
return scrollpane;
}
@Override
public Dimension getPreferredSize(JComponent c) {
Dimension prefSize =
(getFileChooser().getAccessory() != null) ? WITH_ACCELERATOR_PREF_SIZE : PREF_SIZE;
@ -640,10 +641,12 @@ public class MotifFileChooserUI extends BasicFileChooserUI {
}
}
public Dimension getMinimumSize(JComponent x) {
return MIN_SIZE;
@Override
public Dimension getMinimumSize(JComponent x) {
return new Dimension(MIN_WIDTH, MIN_HEIGHT);
}
@Override
public Dimension getMaximumSize(JComponent x) {
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}

View File

@ -93,7 +93,6 @@ public class WindowsFileChooserUI extends BasicFileChooserUI {
private static int MIN_WIDTH = 425;
private static int MIN_HEIGHT = 245;
private static Dimension MIN_SIZE = new Dimension(MIN_WIDTH, MIN_HEIGHT);
private static int LIST_PREF_WIDTH = 444;
private static int LIST_PREF_HEIGHT = 138;
@ -642,6 +641,7 @@ public class WindowsFileChooserUI extends BasicFileChooserUI {
* @return a <code>Dimension</code> specifying the preferred
* width and height of the file chooser
*/
@Override
public Dimension getPreferredSize(JComponent c) {
int prefWidth = PREF_SIZE.width;
Dimension d = c.getLayout().preferredLayoutSize(c);
@ -660,8 +660,9 @@ public class WindowsFileChooserUI extends BasicFileChooserUI {
* @return a <code>Dimension</code> specifying the minimum
* width and height of the file chooser
*/
@Override
public Dimension getMinimumSize(JComponent c) {
return MIN_SIZE;
return new Dimension(MIN_WIDTH, MIN_HEIGHT);
}
/**
@ -671,6 +672,7 @@ public class WindowsFileChooserUI extends BasicFileChooserUI {
* @return a <code>Dimension</code> specifying the maximum
* width and height of the file chooser
*/
@Override
public Dimension getMaximumSize(JComponent c) {
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1995, 2015, 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
@ -1690,15 +1690,6 @@ public abstract class Component implements ImageObserver, MenuContainer,
/* do nothing */
}
/*
* Delete references from LightweightDispatcher of a heavyweight parent
*/
void clearLightweightDispatcherOnRemove(Component removedComponent) {
if (parent != null) {
parent.clearLightweightDispatcherOnRemove(removedComponent);
}
}
/**
* @deprecated As of JDK version 1.1,
* replaced by <code>setVisible(boolean)</code>.
@ -6242,7 +6233,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
/**
* Indicates whether a class or its superclasses override coalesceEvents.
* Must be called with lock on coalesceMap and privileged.
* @see checkCoalsecing
* @see checkCoalescing
*/
private static boolean isCoalesceEventsOverriden(Class<?> clazz) {
assert Thread.holdsLock(coalesceMap);
@ -7083,8 +7074,6 @@ public abstract class Component implements ImageObserver, MenuContainer,
}
synchronized (getTreeLock()) {
clearLightweightDispatcherOnRemove(this);
if (isFocusOwner() && KeyboardFocusManager.isAutoFocusTransferEnabledFor(this)) {
transferFocus(true);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1995, 2015, 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
@ -41,6 +41,7 @@ import java.io.ObjectStreamField;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.security.AccessController;
import java.util.EventListener;
@ -3321,16 +3322,6 @@ public class Container extends Component {
}
}
@Override
void clearLightweightDispatcherOnRemove(Component removedComponent) {
if (dispatcher != null) {
dispatcher.removeReferences(removedComponent);
} else {
//It is a Lightweight Container, should clear parent`s Dispatcher
super.clearLightweightDispatcherOnRemove(removedComponent);
}
}
final Container getTraversalRoot() {
if (isFocusCycleRoot()) {
return findTraversalRoot();
@ -4431,7 +4422,9 @@ class LightweightDispatcher implements java.io.Serializable, AWTEventListener {
LightweightDispatcher(Container nativeContainer) {
this.nativeContainer = nativeContainer;
mouseEventTarget = null;
mouseEventTarget = new WeakReference<>(null);
targetLastEntered = new WeakReference<>(null);
targetLastEnteredDT = new WeakReference<>(null);
eventMask = 0;
}
@ -4442,9 +4435,9 @@ class LightweightDispatcher implements java.io.Serializable, AWTEventListener {
void dispose() {
//System.out.println("Disposing lw dispatcher");
stopListeningForOtherDrags();
mouseEventTarget = null;
targetLastEntered = null;
targetLastEnteredDT = null;
mouseEventTarget.clear();
targetLastEntered.clear();
targetLastEnteredDT.clear();
}
/**
@ -4531,65 +4524,62 @@ class LightweightDispatcher implements java.io.Serializable, AWTEventListener {
trackMouseEnterExit(mouseOver, e);
// 4508327 : MOUSE_CLICKED should only go to the recipient of
// the accompanying MOUSE_PRESSED, so don't reset mouseEventTarget on a
// MOUSE_CLICKED.
if (!isMouseGrab(e) && id != MouseEvent.MOUSE_CLICKED) {
mouseEventTarget = (mouseOver != nativeContainer) ? mouseOver: null;
isCleaned = false;
Component met = mouseEventTarget.get();
// 4508327 : MOUSE_CLICKED should only go to the recipient of
// the accompanying MOUSE_PRESSED, so don't reset mouseEventTarget on a
// MOUSE_CLICKED.
if (!isMouseGrab(e) && id != MouseEvent.MOUSE_CLICKED) {
met = (mouseOver != nativeContainer) ? mouseOver : null;
mouseEventTarget = new WeakReference<>(met);
}
if (mouseEventTarget != null) {
if (met != null) {
switch (id) {
case MouseEvent.MOUSE_ENTERED:
case MouseEvent.MOUSE_EXITED:
break;
case MouseEvent.MOUSE_PRESSED:
retargetMouseEvent(mouseEventTarget, id, e);
break;
case MouseEvent.MOUSE_RELEASED:
retargetMouseEvent(mouseEventTarget, id, e);
break;
case MouseEvent.MOUSE_CLICKED:
// 4508327: MOUSE_CLICKED should never be dispatched to a Component
// other than that which received the MOUSE_PRESSED event. If the
// mouse is now over a different Component, don't dispatch the event.
// The previous fix for a similar problem was associated with bug
// 4155217.
if (mouseOver == mouseEventTarget) {
retargetMouseEvent(mouseOver, id, e);
}
break;
case MouseEvent.MOUSE_MOVED:
retargetMouseEvent(mouseEventTarget, id, e);
break;
case MouseEvent.MOUSE_DRAGGED:
if (isMouseGrab(e)) {
retargetMouseEvent(mouseEventTarget, id, e);
}
break;
case MouseEvent.MOUSE_WHEEL:
// This may send it somewhere that doesn't have MouseWheelEvents
// enabled. In this case, Component.dispatchEventImpl() will
// retarget the event to a parent that DOES have the events enabled.
if (eventLog.isLoggable(PlatformLogger.Level.FINEST) && (mouseOver != null)) {
eventLog.finest("retargeting mouse wheel to " +
case MouseEvent.MOUSE_ENTERED:
case MouseEvent.MOUSE_EXITED:
break;
case MouseEvent.MOUSE_PRESSED:
retargetMouseEvent(met, id, e);
break;
case MouseEvent.MOUSE_RELEASED:
retargetMouseEvent(met, id, e);
break;
case MouseEvent.MOUSE_CLICKED:
// 4508327: MOUSE_CLICKED should never be dispatched to a Component
// other than that which received the MOUSE_PRESSED event. If the
// mouse is now over a different Component, don't dispatch the event.
// The previous fix for a similar problem was associated with bug
// 4155217.
if (mouseOver == met) {
retargetMouseEvent(mouseOver, id, e);
}
break;
case MouseEvent.MOUSE_MOVED:
retargetMouseEvent(met, id, e);
break;
case MouseEvent.MOUSE_DRAGGED:
if (isMouseGrab(e)) {
retargetMouseEvent(met, id, e);
}
break;
case MouseEvent.MOUSE_WHEEL:
// This may send it somewhere that doesn't have MouseWheelEvents
// enabled. In this case, Component.dispatchEventImpl() will
// retarget the event to a parent that DOES have the events enabled.
if (eventLog.isLoggable(PlatformLogger.Level.FINEST) && (mouseOver != null)) {
eventLog.finest("retargeting mouse wheel to " +
mouseOver.getName() + ", " +
mouseOver.getClass());
}
retargetMouseEvent(mouseOver, id, e);
break;
}
retargetMouseEvent(mouseOver, id, e);
break;
//Consuming of wheel events is implemented in "retargetMouseEvent".
if (id != MouseEvent.MOUSE_WHEEL) {
e.consume();
}
//Consuming of wheel events is implemented in "retargetMouseEvent".
if (id != MouseEvent.MOUSE_WHEEL) {
e.consume();
}
} else if (isCleaned && id != MouseEvent.MOUSE_WHEEL) {
//After mouseEventTarget was removed and cleaned should consume all events
//until new mouseEventTarget is found
e.consume();
}
return e.isConsumed();
return e.isConsumed();
}
private boolean processDropTargetEvent(SunDropTargetEvent e) {
@ -4646,15 +4636,16 @@ class LightweightDispatcher implements java.io.Serializable, AWTEventListener {
// drag has an associated drop target. MOUSE_ENTERED comes when the
// mouse is in the native container already. To propagate this event
// properly we should null out targetLastEntered.
targetLastEnteredDT = null;
targetLastEnteredDT.clear();
} else if (id == MouseEvent.MOUSE_ENTERED) {
isMouseDTInNativeContainer = true;
} else if (id == MouseEvent.MOUSE_EXITED) {
isMouseDTInNativeContainer = false;
}
targetLastEnteredDT = retargetMouseEnterExit(targetOver, e,
targetLastEnteredDT,
Component tle = retargetMouseEnterExit(targetOver, e,
targetLastEnteredDT.get(),
isMouseDTInNativeContainer);
targetLastEnteredDT = new WeakReference<>(tle);
}
/*
@ -4680,9 +4671,10 @@ class LightweightDispatcher implements java.io.Serializable, AWTEventListener {
isMouseInNativeContainer = false;
stopListeningForOtherDrags();
}
targetLastEntered = retargetMouseEnterExit(targetOver, e,
targetLastEntered,
Component tle = retargetMouseEnterExit(targetOver, e,
targetLastEntered.get(),
isMouseInNativeContainer);
targetLastEntered = new WeakReference<>(tle);
}
private Component retargetMouseEnterExit(Component targetOver, MouseEvent e,
@ -4944,22 +4936,17 @@ class LightweightDispatcher implements java.io.Serializable, AWTEventListener {
* is null, there are currently no events being forwarded to
* a subcomponent.
*/
private transient Component mouseEventTarget;
private transient WeakReference<Component> mouseEventTarget;
/**
* The last component entered by the {@code MouseEvent}.
*/
private transient Component targetLastEntered;
private transient WeakReference<Component> targetLastEntered;
/**
* The last component entered by the {@code SunDropTargetEvent}.
*/
private transient Component targetLastEnteredDT;
/**
* Indicates whether {@code mouseEventTarget} was removed and nulled
*/
private transient boolean isCleaned;
private transient WeakReference<Component> targetLastEnteredDT;
/**
* Is the mouse over the native container.
@ -5000,17 +4987,4 @@ class LightweightDispatcher implements java.io.Serializable, AWTEventListener {
AWTEvent.MOUSE_EVENT_MASK |
AWTEvent.MOUSE_MOTION_EVENT_MASK |
AWTEvent.MOUSE_WHEEL_EVENT_MASK;
void removeReferences(Component removedComponent) {
if (mouseEventTarget == removedComponent) {
isCleaned = true;
mouseEventTarget = null;
}
if (targetLastEntered == removedComponent) {
targetLastEntered = null;
}
if (targetLastEnteredDT == removedComponent) {
targetLastEnteredDT = null;
}
}
}

View File

@ -182,7 +182,14 @@ public class EventQueue {
private FwDispatcher fwDispatcher;
private static final PlatformLogger eventLog = PlatformLogger.getLogger("java.awt.event.EventQueue");
private static volatile PlatformLogger eventLog;
private static final PlatformLogger getEventLog() {
if(eventLog == null) {
eventLog = PlatformLogger.getLogger("java.awt.event.EventQueue");
}
return eventLog;
}
static {
AWTAccessor.setEventQueueAccessor(
@ -762,8 +769,8 @@ public class EventQueue {
dispatchThread.stopDispatching();
}
} else {
if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
eventLog.fine("Unable to dispatch event: " + event);
if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
getEventLog().fine("Unable to dispatch event: " + event);
}
}
}
@ -860,8 +867,8 @@ public class EventQueue {
* @since 1.2
*/
public void push(EventQueue newEventQueue) {
if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
eventLog.fine("EventQueue.push(" + newEventQueue + ")");
if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
getEventLog().fine("EventQueue.push(" + newEventQueue + ")");
}
pushPopLock.lock();
@ -886,8 +893,8 @@ public class EventQueue {
// Use getNextEventPrivate() as it doesn't call flushPendingEvents()
newEventQueue.postEventPrivate(topQueue.getNextEventPrivate());
} catch (InterruptedException ie) {
if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
eventLog.fine("Interrupted push", ie);
if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
getEventLog().fine("Interrupted push", ie);
}
}
}
@ -925,8 +932,8 @@ public class EventQueue {
* @since 1.2
*/
protected void pop() throws EmptyStackException {
if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
eventLog.fine("EventQueue.pop(" + this + ")");
if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
getEventLog().fine("EventQueue.pop(" + this + ")");
}
pushPopLock.lock();
@ -948,8 +955,8 @@ public class EventQueue {
try {
prevQueue.postEventPrivate(topQueue.getNextEventPrivate());
} catch (InterruptedException ie) {
if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
eventLog.fine("Interrupted pop", ie);
if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
getEventLog().fine("Interrupted pop", ie);
}
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1995, 2015, 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
@ -181,7 +181,7 @@ public class MenuBar extends MenuComponent implements MenuContainer, Accessible
* removed from the menu bar, and replaced with the specified menu.
* @param m the menu to be set as the help menu
*/
public void setHelpMenu(Menu m) {
public void setHelpMenu(final Menu m) {
synchronized (getTreeLock()) {
if (helpMenu == m) {
return;
@ -189,11 +189,11 @@ public class MenuBar extends MenuComponent implements MenuContainer, Accessible
if (helpMenu != null) {
remove(helpMenu);
}
if (m.parent != this) {
add(m);
}
helpMenu = m;
if (m != null) {
if (m.parent != this) {
add(m);
}
m.isHelpMenu = true;
m.parent = this;
MenuBarPeer peer = (MenuBarPeer)this.peer;
@ -242,7 +242,7 @@ public class MenuBar extends MenuComponent implements MenuContainer, Accessible
* @param index the position of the menu to be removed.
* @see java.awt.MenuBar#add(java.awt.Menu)
*/
public void remove(int index) {
public void remove(final int index) {
synchronized (getTreeLock()) {
Menu m = getMenu(index);
menus.removeElementAt(index);
@ -252,6 +252,10 @@ public class MenuBar extends MenuComponent implements MenuContainer, Accessible
m.parent = null;
peer.delMenu(index);
}
if (helpMenu == m) {
helpMenu = null;
m.isHelpMenu = false;
}
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2015, 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
@ -25,26 +25,23 @@
package java.awt.image;
import java.awt.Transparency;
import java.awt.color.ColorSpace;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.ImageCapabilities;
import java.awt.geom.Rectangle2D;
import java.awt.geom.Point2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Transparency;
import java.awt.color.ColorSpace;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Hashtable;
import java.util.Set;
import java.util.Vector;
import sun.awt.image.BytePackedRaster;
import sun.awt.image.ShortComponentRaster;
import sun.awt.image.ByteComponentRaster;
import sun.awt.image.BytePackedRaster;
import sun.awt.image.IntegerComponentRaster;
import sun.awt.image.OffScreenImageSource;
import sun.awt.image.ShortComponentRaster;
/**
*
@ -68,18 +65,14 @@ import sun.awt.image.OffScreenImageSource;
* @see Raster
* @see WritableRaster
*/
public class BufferedImage extends java.awt.Image
implements WritableRenderedImage, Transparency
{
int imageType = TYPE_CUSTOM;
ColorModel colorModel;
WritableRaster raster;
OffScreenImageSource osis;
Hashtable<?, ?> properties;
boolean isAlphaPremultiplied;// If true, alpha has been premultiplied in
// color channels
private int imageType = TYPE_CUSTOM;
private ColorModel colorModel;
private final WritableRaster raster;
private OffScreenImageSource osis;
private Hashtable<String, Object> properties;
/**
* Image Type Constants
@ -328,8 +321,8 @@ public class BufferedImage extends java.awt.Image
0x000000ff, // Blue
0x0 // Alpha
);
raster = colorModel.createCompatibleWritableRaster(width,
height);
raster = colorModel.createCompatibleWritableRaster(width,
height);
}
break;
@ -355,9 +348,8 @@ public class BufferedImage extends java.awt.Image
true, // Alpha Premultiplied
DataBuffer.TYPE_INT
);
raster = colorModel.createCompatibleWritableRaster(width,
height);
raster = colorModel.createCompatibleWritableRaster(width,
height);
}
break;
@ -368,8 +360,8 @@ public class BufferedImage extends java.awt.Image
0x0000ff00, // Green
0x00ff0000 // Blue
);
raster = colorModel.createCompatibleWritableRaster(width,
height);
raster = colorModel.createCompatibleWritableRaster(width,
height);
}
break;
@ -642,7 +634,14 @@ public class BufferedImage extends java.awt.Image
colorModel = cm;
this.raster = raster;
this.properties = properties;
if (properties != null && !properties.isEmpty()) {
this.properties = new Hashtable<>();
for (final Object key : properties.keySet()) {
if (key instanceof String) {
this.properties.put((String) key, properties.get(key));
}
}
}
int numBands = raster.getNumBands();
boolean isAlphaPre = cm.isAlphaPremultiplied();
final boolean isStandard = isStandard(cm, raster);
@ -1272,7 +1271,11 @@ public class BufferedImage extends java.awt.Image
* or <code>null</code> if no property names are recognized.
*/
public String[] getPropertyNames() {
return null;
if (properties == null || properties.isEmpty()) {
return null;
}
final Set<String> keys = properties.keySet();
return keys.toArray(new String[keys.size()]);
}
/**

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2015, 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
@ -2215,10 +2215,7 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl
*/
public boolean imageUpdate(Image img, int infoflags,
int x, int y, int w, int h) {
Icon iconDisplayed = getIcon();
if (iconDisplayed == null) {
return false;
}
Icon iconDisplayed = null;
if (!model.isEnabled()) {
if (model.isSelected()) {
@ -2238,7 +2235,12 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl
iconDisplayed = getSelectedIcon();
}
if (!SwingUtilities.doesIconReferenceImage(iconDisplayed, img)) {
if (iconDisplayed == null) {
iconDisplayed = getIcon();
}
if (iconDisplayed == null
|| !SwingUtilities.doesIconReferenceImage(iconDisplayed, img)) {
// We don't know about this image, disable the notification so
// we don't keep repainting.
return false;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2015, 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
@ -27,22 +27,15 @@ package javax.swing;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Vector;
import java.util.EventListener;
import java.util.Set;
import java.util.Map;
import java.util.HashMap;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.VolatileImage;
import java.awt.Graphics2D;
import java.awt.peer.LightweightPeer;
import java.awt.dnd.DropTarget;
import java.awt.font.FontRenderContext;
import java.beans.PropertyChangeListener;
import java.beans.VetoableChangeListener;
import java.beans.VetoableChangeSupport;
@ -1868,7 +1861,7 @@ public abstract class JComponent extends Container implements Serializable,
/**
* Overrides <code>Container.getAlignmentY</code> to return
* the horizontal alignment.
* the vertical alignment.
*
* @return the value of the <code>alignmentY</code> property
* @see #setAlignmentY
@ -1882,9 +1875,9 @@ public abstract class JComponent extends Container implements Serializable,
}
/**
* Sets the horizontal alignment.
* Sets the vertical alignment.
*
* @param alignmentY the new horizontal alignment
* @param alignmentY the new vertical alignment
* @see #getAlignmentY
* @beaninfo
* description: The preferred vertical alignment of the component.
@ -1897,7 +1890,7 @@ public abstract class JComponent extends Container implements Serializable,
/**
* Overrides <code>Container.getAlignmentX</code> to return
* the vertical alignment.
* the horizontal alignment.
*
* @return the value of the <code>alignmentX</code> property
* @see #setAlignmentX
@ -1911,9 +1904,9 @@ public abstract class JComponent extends Container implements Serializable,
}
/**
* Sets the vertical alignment.
* Sets the horizontal alignment.
*
* @param alignmentX the new vertical alignment
* @param alignmentX the new horizontal alignment
* @see #getAlignmentX
* @beaninfo
* description: The preferred horizontal alignment of the component.

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2015, 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
@ -30,7 +30,6 @@ import java.awt.im.InputContext;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.swing.UIManager;
import javax.swing.event.*;
import javax.swing.plaf.UIResource;
import javax.swing.text.*;
@ -151,7 +150,7 @@ import javax.swing.text.*;
* will be created to handle formatting of numbers:
* <pre>
* JFormattedTextField tf = new JFormattedTextField();
* tf.setValue(new Number(100));
* tf.setValue(100);
* </pre>
* <p>
* <strong>Warning:</strong> As the <code>AbstractFormatter</code> will

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2015, 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
@ -1287,10 +1287,10 @@ public class JSlider extends JComponent implements SwingConstants, Accessible {
return paintTrack;
}
/**
* Determines whether the track is painted on the slider.
* By default, this property is {@code true}.
* Determines whether the track is painted on the slider. By default, this
* property is {@code true}. It is up to the look and feel to honor this
* property, some may choose to ignore it.
*
* @param b whether or not to paint the slider track
* @see #getPaintTrack

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2015, 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
@ -493,7 +493,6 @@ public class JTextArea extends JTextComponent {
* @exception IllegalArgumentException if part of the range is an
* invalid position in the model
* @see #insert
* @see #replaceRange
*/
public void replaceRange(String str, int start, int end) {
if (end < start) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2015, 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
@ -36,10 +36,9 @@ import java.awt.Insets;
import java.awt.Graphics;
import java.awt.KeyboardFocusManager;
import java.awt.*;
import java.util.Vector;
import sun.swing.DefaultLookup;
import sun.swing.UIAction;
import sun.awt.AppContext;
/**
* Basic L&amp;F for a desktop.
@ -49,9 +48,6 @@ import sun.awt.AppContext;
public class BasicDesktopPaneUI extends DesktopPaneUI {
// Old actions forward to an instance of this.
private static final Actions SHARED_ACTION = new Actions();
private static Dimension minSize = new Dimension(0,0);
private static Dimension maxSize = new Dimension(Integer.MAX_VALUE,
Integer.MAX_VALUE);
private Handler handler;
private PropertyChangeListener pcl;
@ -304,13 +300,19 @@ public class BasicDesktopPaneUI extends DesktopPaneUI {
public void paint(Graphics g, JComponent c) {}
public Dimension getPreferredSize(JComponent c) {return null;}
@Override
public Dimension getPreferredSize(JComponent c) {
return null;
}
@Override
public Dimension getMinimumSize(JComponent c) {
return minSize;
}
public Dimension getMaximumSize(JComponent c){
return maxSize;
return new Dimension(0, 0);
}
@Override
public Dimension getMaximumSize(JComponent c) {
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
/**

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2015, 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
@ -92,8 +92,6 @@ public class MetalFileChooserUI extends BasicFileChooserUI {
private static int MIN_WIDTH = 500;
private static int MIN_HEIGHT = 326;
private static Dimension MIN_SIZE = new Dimension(MIN_WIDTH, MIN_HEIGHT);
private static int LIST_PREF_WIDTH = 405;
private static int LIST_PREF_HEIGHT = 135;
private static Dimension LIST_PREF_SIZE = new Dimension(LIST_PREF_WIDTH, LIST_PREF_HEIGHT);
@ -615,6 +613,7 @@ public class MetalFileChooserUI extends BasicFileChooserUI {
* @return a <code>Dimension</code> specifying the preferred
* width and height of the file chooser
*/
@Override
public Dimension getPreferredSize(JComponent c) {
int prefWidth = PREF_SIZE.width;
Dimension d = c.getLayout().preferredLayoutSize(c);
@ -633,8 +632,9 @@ public class MetalFileChooserUI extends BasicFileChooserUI {
* @return a <code>Dimension</code> specifying the minimum
* width and height of the file chooser
*/
@Override
public Dimension getMinimumSize(JComponent c) {
return MIN_SIZE;
return new Dimension(MIN_WIDTH, MIN_HEIGHT);
}
/**
@ -644,6 +644,7 @@ public class MetalFileChooserUI extends BasicFileChooserUI {
* @return a <code>Dimension</code> specifying the maximum
* width and height of the file chooser
*/
@Override
public Dimension getMaximumSize(JComponent c) {
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
@ -654,7 +655,8 @@ public class MetalFileChooserUI extends BasicFileChooserUI {
} else {
JFileChooser fc = getFileChooser();
if ((fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) ||
(fc.isDirectorySelectionEnabled() && fc.isFileSelectionEnabled() && fc.getFileSystemView().isFileSystemRoot(file))) {
(fc.isDirectorySelectionEnabled() && fc.isFileSelectionEnabled()
&& fc.getFileSystemView().isFileSystemRoot(file))) {
return file.getPath();
} else {
return file.getName();

View File

@ -710,8 +710,9 @@ public class GapContent extends GapVector implements AbstractDocument.Content, S
* @param length the length &gt;= 0
* @return the set of instances
*/
protected Vector<UndoPosRef> getPositionsInRange(Vector<UndoPosRef> v,
int offset, int length) {
@SuppressWarnings({"rawtypes", "unchecked"}) // UndoPosRef type cannot be exposed
protected Vector getPositionsInRange(Vector v,
int offset, int length) {
int endOffset = offset + length;
int startIndex;
int endIndex;
@ -758,7 +759,8 @@ public class GapContent extends GapVector implements AbstractDocument.Content, S
*
* @param positions the UndoPosRef instances to reset
*/
protected void updateUndoPositions(Vector<UndoPosRef> positions, int offset,
@SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
protected void updateUndoPositions(Vector positions, int offset,
int length) {
// Find the indexs of the end points.
int endOffset = offset + length;
@ -775,7 +777,7 @@ public class GapContent extends GapVector implements AbstractDocument.Content, S
// Reset the location of the refenences.
for(int counter = positions.size() - 1; counter >= 0; counter--) {
UndoPosRef ref = positions.elementAt(counter);
UndoPosRef ref = (UndoPosRef) positions.elementAt(counter);
ref.resetLocation(endOffset, g1);
}
// We have to resort the marks in the range startIndex to endIndex.
@ -902,7 +904,8 @@ public class GapContent extends GapVector implements AbstractDocument.Content, S
protected String string;
/** An array of instances of UndoPosRef for the Positions in the
* range that was removed, valid after undo. */
protected Vector<UndoPosRef> posRefs;
@SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
protected Vector posRefs;
} // GapContent.InsertUndo
@ -911,6 +914,7 @@ public class GapContent extends GapVector implements AbstractDocument.Content, S
*/
@SuppressWarnings("serial") // JDK-implementation class
class RemoveUndo extends AbstractUndoableEdit {
@SuppressWarnings("unchecked")
protected RemoveUndo(int offset, String string) {
super();
this.offset = offset;
@ -934,6 +938,7 @@ public class GapContent extends GapVector implements AbstractDocument.Content, S
}
}
@SuppressWarnings("unchecked")
public void redo() throws CannotRedoException {
super.redo();
try {

View File

@ -271,11 +271,12 @@ public final class StringContent implements AbstractDocument.Content, Serializab
* @param length the length &gt;= 0
* @return the set of instances
*/
protected Vector<UndoPosRef> getPositionsInRange(Vector<UndoPosRef> v, int offset,
int length) {
@SuppressWarnings({"rawtypes", "unchecked"}) // UndoPosRef type cannot be exposed
protected Vector getPositionsInRange(Vector v, int offset,
int length) {
int n = marks.size();
int end = offset + length;
Vector<UndoPosRef> placeIn = (v == null) ? new Vector<>() : v;
Vector placeIn = (v == null) ? new Vector() : v;
for (int i = 0; i < n; i++) {
PosRec mark = marks.elementAt(i);
if (mark.unused) {
@ -298,9 +299,10 @@ public final class StringContent implements AbstractDocument.Content, Serializab
*
* @param positions the positions of the instances
*/
protected void updateUndoPositions(Vector<UndoPosRef> positions) {
@SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
protected void updateUndoPositions(Vector positions) {
for(int counter = positions.size() - 1; counter >= 0; counter--) {
UndoPosRef ref = positions.elementAt(counter);
UndoPosRef ref = (UndoPosRef) positions.elementAt(counter);
// Check if the Position is still valid.
if(ref.rec.unused) {
positions.removeElementAt(counter);
@ -437,7 +439,8 @@ public final class StringContent implements AbstractDocument.Content, Serializab
protected String string;
// An array of instances of UndoPosRef for the Positions in the
// range that was removed, valid after undo.
protected Vector<UndoPosRef> posRefs;
@SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
protected Vector posRefs;
}
@ -445,6 +448,7 @@ public final class StringContent implements AbstractDocument.Content, Serializab
* UndoableEdit created for removes.
*/
class RemoveUndo extends AbstractUndoableEdit {
@SuppressWarnings("unchecked")
protected RemoveUndo(int offset, String string) {
super();
this.offset = offset;
@ -471,6 +475,7 @@ public final class StringContent implements AbstractDocument.Content, Serializab
}
}
@SuppressWarnings("unchecked")
public void redo() throws CannotRedoException {
super.redo();
try {

View File

@ -157,6 +157,21 @@ public abstract class Font2D {
}
}
public static final int FWIDTH_NORMAL = 5; // OS/2 usWidthClass
public static final int FWEIGHT_NORMAL = 400; // OS/2 usWeightClass
public static final int FWEIGHT_BOLD = 700; // OS/2 usWeightClass
public int getWidth() {
return FWIDTH_NORMAL;
}
public int getWeight() {
if ((style & Font.BOLD) !=0) {
return FWEIGHT_BOLD;
} else {
return FWEIGHT_NORMAL;
}
}
int getRank() {
return fontRank;

View File

@ -27,6 +27,7 @@ package sun.font;
import java.io.File;
import java.awt.Font;
import java.util.Collection;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.Locale;
@ -77,7 +78,7 @@ public class FontFamily {
family.bolditalic = null;
}
if (family.plain == null && family.bold == null &&
family.plain == null && family.bold == null) {
family.italic == null && family.bolditalic == null) {
familyNameMap.remove(name);
}
}
@ -134,7 +135,98 @@ public class FontFamily {
return java.util.Objects.equals(newDir, existDir);
}
/*
* We want a family to be of the same width and prefer medium/normal width.
* Once we find a particular width we accept more of the same width
* until we find one closer to normal when we 'evict' all existing fonts.
* So once we see a 'normal' width font we evict all members that are not
* normal width and then accept only new ones that are normal width.
*
* Once a font passes the width test we subject it to the weight test.
* For Plain we target the weight the closest that is <= NORMAL (400)
* For Bold we target the weight that is closest to BOLD (700).
*
* In the future, rather than discarding these fonts, we should
* extend the family to include these so lookups on these properties
* can locate them, as presently they will only be located by full name
* based lookup.
*/
private int familyWidth = 0;
private boolean preferredWidth(Font2D font) {
int newWidth = font.getWidth();
if (familyWidth == 0) {
familyWidth = newWidth;
return true;
}
if (newWidth == familyWidth) {
return true;
}
if (Math.abs(Font2D.FWIDTH_NORMAL - newWidth) <
Math.abs(Font2D.FWIDTH_NORMAL - familyWidth))
{
if (FontUtilities.debugFonts()) {
FontUtilities.getLogger().info(
"Found more preferred width. New width = " + newWidth +
" Old width = " + familyWidth + " in font " + font +
" nulling out fonts plain: " + plain + " bold: " + bold +
" italic: " + italic + " bolditalic: " + bolditalic);
}
familyWidth = newWidth;
plain = bold = italic = bolditalic = null;
return true;
} else if (FontUtilities.debugFonts()) {
FontUtilities.getLogger().info(
"Family rejecting font " + font +
" of less preferred width " + newWidth);
}
return false;
}
private boolean closerWeight(Font2D currFont, Font2D font, int style) {
if (familyWidth != font.getWidth()) {
return false;
}
if (currFont == null) {
return true;
}
if (FontUtilities.debugFonts()) {
FontUtilities.getLogger().info(
"New weight for style " + style + ". Curr.font=" + currFont +
" New font="+font+" Curr.weight="+ + currFont.getWeight()+
" New weight="+font.getWeight());
}
int newWeight = font.getWeight();
switch (style) {
case Font.PLAIN:
case Font.ITALIC:
return (newWeight <= Font2D.FWEIGHT_NORMAL &&
newWeight > currFont.getWeight());
case Font.BOLD:
case Font.BOLD|Font.ITALIC:
return (Math.abs(newWeight - Font2D.FWEIGHT_BOLD) <
Math.abs(currFont.getWeight() - Font2D.FWEIGHT_BOLD));
default:
return false;
}
}
public void setFont(Font2D font, int style) {
if (FontUtilities.isLogging()) {
FontUtilities.getLogger().info(
"Request to add " + font + " with style " + style +
" to family " + this);
}
/* Allow a lower-rank font only if its a file font
* from the exact same source as any previous font.
*/
@ -152,19 +244,27 @@ public class FontFamily {
switch (style) {
case Font.PLAIN:
plain = font;
if (preferredWidth(font) && closerWeight(plain, font, style)) {
plain = font;
}
break;
case Font.BOLD:
bold = font;
if (preferredWidth(font) && closerWeight(bold, font, style)) {
bold = font;
}
break;
case Font.ITALIC:
italic = font;
if (preferredWidth(font) && closerWeight(italic, font, style)) {
italic = font;
}
break;
case Font.BOLD|Font.ITALIC:
bolditalic = font;
if (preferredWidth(font) && closerWeight(bolditalic, font, style)) {
bolditalic = font;
}
break;
default:
@ -316,6 +416,11 @@ public class FontFamily {
return allLocaleNames.get(name.toLowerCase());
}
public static FontFamily[] getAllFontFamilies() {
Collection<FontFamily> families = familyNameMap.values();
return families.toArray(new FontFamily[0]);
}
public String toString() {
return
"Font family: " + familyName +

View File

@ -963,6 +963,18 @@ public class TrueTypeFont extends FileFont {
setStyle(getTableBuffer(os_2Tag));
}
private int fontWidth = 0;
@Override
public int getWidth() {
return (fontWidth > 0) ? fontWidth : super.getWidth();
}
private int fontWeight = 0;
@Override
public int getWeight() {
return (fontWeight > 0) ? fontWeight : super.getWeight();
}
/* TrueTypeFont can use the fsSelection fields of OS/2 table
* to determine the style. In the unlikely case that doesn't exist,
* can use macStyle in the 'head' table but simpler to
@ -978,8 +990,15 @@ public class TrueTypeFont extends FileFont {
private static final int fsSelectionBoldBit = 0x00020;
private static final int fsSelectionRegularBit = 0x00040;
private void setStyle(ByteBuffer os_2Table) {
if (os_2Table == null) {
return;
}
if (os_2Table.capacity() >= 8) {
fontWeight = os_2Table.getChar(4) & 0xffff;
fontWidth = os_2Table.getChar(6) & 0xffff;
}
/* fsSelection is unsigned short at buffer offset 62 */
if (os_2Table == null || os_2Table.capacity() < 64) {
if (os_2Table.capacity() < 64) {
super.setStyle();
return;
}

View File

@ -1564,7 +1564,7 @@ public class ServiceDialog extends JDialog implements ActionListener {
bmObj = bmTmpObj;
} else {
if (lmObj == null || rmObj == null ||
tmObj == null || rmObj == null) {
tmObj == null || bmObj == null) {
return;
} else {
leftMargin.setValue(lmObj);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2015, 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
@ -31,6 +31,7 @@ import static java.awt.RenderingHints.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.print.PrinterGraphics;
import java.text.BreakIterator;
import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
@ -461,16 +462,15 @@ public class SwingUtilities2 {
}
}
if (needsTextLayout) {
FontRenderContext frc = getFontRenderContext(c, fm);
AttributedString aString = new AttributedString(string);
if (c != null) {
aString.addAttribute(TextAttribute.NUMERIC_SHAPING,
c.getClientProperty(TextAttribute.NUMERIC_SHAPING));
}
LineBreakMeasurer measurer =
new LineBreakMeasurer(aString.getIterator(), frc);
int nChars = measurer.nextOffset(availTextWidth);
string = string.substring(0, nChars);
LineBreakMeasurer measurer = new LineBreakMeasurer(
aString.getIterator(), BreakIterator.getCharacterInstance(),
getFontRenderContext(c, fm));
string = string.substring(0, measurer.nextOffset(availTextWidth));
}
return string + clipString;

View File

@ -1,150 +0,0 @@
/*
* Copyright (c) 2003, 2014, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package sun.awt.X11;
import java.util.logging.*;
import java.text.*;
import java.util.*;
import java.io.*;
/**
* Formatter class providing ANSI output. Based on java.util.logging.SimpleFormatter sources.
*/
public class XAWTFormatter extends java.util.logging.Formatter {
Date dat = new Date();
private final static String format = "{0,date} {0,time}";
private MessageFormat formatter;
private Object args[] = new Object[1];
// Line separator string. This is the value of the line.separator
// property at the moment that the SimpleFormatter was created.
private String lineSeparator = System.lineSeparator();
boolean displayFullRecord = false;
boolean useANSI = false;
boolean showDate = true;
boolean showLevel = true;
boolean swapMethodClass = false;
public XAWTFormatter() {
displayFullRecord = "true".equals(LogManager.getLogManager().getProperty("XAWTFormatter.displayFullRecord"));
useANSI = "true".equals(LogManager.getLogManager().getProperty("XAWTFormatter.useANSI"));
showDate = !"false".equals(LogManager.getLogManager().getProperty("XAWTFormatter.showDate"));
showLevel = !"false".equals(LogManager.getLogManager().getProperty("XAWTFormatter.showLevel"));
swapMethodClass = "true".equals(LogManager.getLogManager().getProperty("XAWTFormatter.swapMethodClass"));
}
/**
* Format the given LogRecord.
* @param record the log record to be formatted.
* @return a formatted log record
*/
public synchronized String format(LogRecord record) {
StringBuffer sb = new StringBuffer();
if (useANSI) {
Level lev = record.getLevel();
if (Level.FINEST.equals(lev)) {
sb.append("");
} else if (Level.FINER.equals(lev)) {
sb.append("");
} else if (Level.FINE.equals(lev)) {
sb.append("");
}
}
if (displayFullRecord) {
if (showDate) {
// Minimize memory allocations here.
dat.setTime(record.getMillis());
args[0] = dat;
StringBuffer text = new StringBuffer();
if (formatter == null) {
formatter = new MessageFormat(format);
}
formatter.format(args, text, null);
sb.append(text);
sb.append(" ");
} else {
sb.append(" ");
}
if (swapMethodClass) {
if (record.getSourceMethodName() != null) {
sb.append(" ");
sb.append(record.getSourceMethodName());
sb.append(" ");
}
if (record.getSourceClassName() != null) {
sb.append(record.getSourceClassName());
} else {
sb.append(record.getLoggerName());
}
} else {
if (record.getSourceClassName() != null) {
sb.append(record.getSourceClassName());
} else {
sb.append(record.getLoggerName());
}
if (record.getSourceMethodName() != null) {
sb.append(" ");
sb.append(record.getSourceMethodName());
sb.append("");
}
}
sb.append(lineSeparator);
}
if (useANSI) {
Level lev = record.getLevel();
if (Level.FINEST.equals(lev)) {
sb.append("");
} else if (Level.FINER.equals(lev)) {
sb.append("");
} else if (Level.FINE.equals(lev)) {
sb.append("");
}
}
if (showLevel) {
sb.append(record.getLevel().getLocalizedName());
sb.append(": ");
}
String message = formatMessage(record);
sb.append(message);
sb.append(lineSeparator);
if (record.getThrown() != null) {
try {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
record.getThrown().printStackTrace(pw);
pw.close();
sb.append(sw.toString());
} catch (Exception ex) {
}
}
if (useANSI) {
sb.append("");
}
return sb.toString();
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2015, 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
@ -25,15 +25,17 @@
package sun.awt.X11;
import sun.awt.EmbeddedFrame;
import java.awt.*;
import java.awt.AWTKeyStroke;
import java.util.logging.Logger;
import java.awt.Toolkit;
import sun.awt.EmbeddedFrame;
import sun.util.logging.PlatformLogger;
@SuppressWarnings("serial") // JDK-implementation class
public class XEmbeddedFrame extends EmbeddedFrame {
private static final Logger log = Logger.getLogger(XEmbeddedFrame.class.getName());
private static final PlatformLogger log =
PlatformLogger.getLogger(XEmbeddedFrame.class.getName());
long handle;
public XEmbeddedFrame() {

View File

@ -180,7 +180,7 @@ public class FcFontConfiguration extends FontConfiguration {
String[] componentFaceNames = cfi[idx].getComponentFaceNames();
FontDescriptor[] ret = new FontDescriptor[componentFaceNames.length];
for (int i = 0; i < componentFaceNames.length; i++) {
ret[i] = new FontDescriptor(componentFaceNames[i], StandardCharsets.UTF_8.newEncoder(), new int[0]);
ret[i] = new FontDescriptor(componentFaceNames[i], StandardCharsets.ISO_8859_1.newEncoder(), new int[0]);
}
return ret;

View File

@ -52,6 +52,7 @@ JNIEXPORT jstring JNICALL Java_sun_awt_windows_WDesktopPeer_ShellExecute
// 6457572: ShellExecute possibly changes FPU control word - saving it here
unsigned oldcontrol87 = _control87(0, 0);
HINSTANCE retval = ::ShellExecute(NULL, verb_c, fileOrUri_c, NULL, NULL, SW_SHOWNORMAL);
DWORD error = ::GetLastError();
_control87(oldcontrol87, 0xffffffff);
JNU_ReleaseStringPlatformChars(env, fileOrUri_j, fileOrUri_c);
@ -65,7 +66,7 @@ JNIEXPORT jstring JNICALL Java_sun_awt_windows_WDesktopPeer_ShellExecute
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
(int)retval,
error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR)&buffer,
0,

View File

@ -0,0 +1,215 @@
/*
* Copyright (c) 2015, 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.
*/
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Checkbox;
import java.awt.Choice;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Label;
import java.awt.List;
import java.awt.Panel;
import java.awt.ScrollPane;
import java.awt.Scrollbar;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.Window;
import java.util.ArrayList;
import java.util.Objects;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JColorChooser;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JPopupMenu;
import javax.swing.JProgressBar;
import javax.swing.JRadioButton;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSlider;
import javax.swing.JSpinner;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.JViewport;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.JTableHeader;
import static javax.swing.UIManager.getInstalledLookAndFeels;
/**
* @test
* @bug 6459798
* @author Sergey Bylokhov
*/
public final class DimensionEncapsulation implements Runnable {
java.util.List<Component> failures = new ArrayList<>();
public static void main(final String[] args) throws Exception {
for (final LookAndFeelInfo laf : getInstalledLookAndFeels()) {
SwingUtilities.invokeAndWait(() -> setLookAndFeel(laf));
SwingUtilities.invokeAndWait(new DimensionEncapsulation());
}
}
@Override
public void run() {
runTest(new Panel());
runTest(new Button());
runTest(new Checkbox());
runTest(new Canvas());
runTest(new Choice());
runTest(new Label());
runTest(new Scrollbar());
runTest(new TextArea());
runTest(new TextField());
runTest(new Dialog(new JFrame()));
runTest(new Frame());
runTest(new Window(new JFrame()));
runTest(new FileDialog(new JFrame()));
runTest(new List());
runTest(new ScrollPane());
runTest(new JFrame());
runTest(new JDialog(new JFrame()));
runTest(new JWindow(new JFrame()));
runTest(new JLabel("hi"));
runTest(new JMenu());
runTest(new JTree());
runTest(new JTable());
runTest(new JMenuItem());
runTest(new JCheckBoxMenuItem());
runTest(new JToggleButton());
runTest(new JSpinner());
runTest(new JSlider());
runTest(Box.createVerticalBox());
runTest(Box.createHorizontalBox());
runTest(new JTextField());
runTest(new JTextArea());
runTest(new JTextPane());
runTest(new JPasswordField());
runTest(new JFormattedTextField());
runTest(new JEditorPane());
runTest(new JButton());
runTest(new JColorChooser());
runTest(new JFileChooser());
runTest(new JCheckBox());
runTest(new JInternalFrame());
runTest(new JDesktopPane());
runTest(new JTableHeader());
runTest(new JLayeredPane());
runTest(new JRootPane());
runTest(new JMenuBar());
runTest(new JOptionPane());
runTest(new JRadioButton());
runTest(new JRadioButtonMenuItem());
runTest(new JPopupMenu());
//runTest(new JScrollBar()); --> don't test defines max and min in
// terms of preferred
runTest(new JScrollPane());
runTest(new JViewport());
runTest(new JSplitPane());
runTest(new JTabbedPane());
runTest(new JToolBar());
runTest(new JSeparator());
runTest(new JProgressBar());
if (!failures.isEmpty()) {
System.out.println("These classes failed");
for (final Component failure : failures) {
System.out.println(failure.getClass());
}
throw new RuntimeException("Test failed");
}
}
public void runTest(final Component c) {
try {
test(c);
c.setMinimumSize(new Dimension(100, 10));
c.setMaximumSize(new Dimension(200, 20));
c.setPreferredSize(new Dimension(300, 30));
test(c);
} catch (final Throwable ignored) {
failures.add(c);
}
}
public void test(final Component component) {
final Dimension psize = component.getPreferredSize();
psize.width += 200;
if (Objects.equals(psize, component.getPreferredSize())) {
throw new RuntimeException("PreferredSize is wrong");
}
final Dimension msize = component.getMaximumSize();
msize.width += 200;
if (Objects.equals(msize, component.getMaximumSize())) {
throw new RuntimeException("MaximumSize is wrong");
}
final Dimension misize = component.getMinimumSize();
misize.width += 200;
if (Objects.equals(misize, component.getMinimumSize())) {
throw new RuntimeException("MinimumSize is wrong");
}
}
private static void setLookAndFeel(final LookAndFeelInfo laf) {
try {
UIManager.setLookAndFeel(laf.getClassName());
System.out.println("LookAndFeel: " + laf.getClassName());
} catch (ClassNotFoundException | InstantiationException |
UnsupportedLookAndFeelException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -0,0 +1,166 @@
/*
* Copyright (c) 2015, 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.
*/
import java.awt.Component;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.Collection;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JColorChooser;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFormattedTextField;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JPopupMenu;
import javax.swing.JProgressBar;
import javax.swing.JRadioButton;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JRootPane;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSlider;
import javax.swing.JSpinner;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.JTableHeader;
import static javax.swing.UIManager.LookAndFeelInfo;
import static javax.swing.UIManager.getInstalledLookAndFeels;
/**
* @test
* @bug 6459800
* @author Sergey Bylokhov
*/
public final class InsetsEncapsulation implements Runnable {
private final Collection<Component> failures = new ArrayList<>();
public static void main(final String[] args) throws Exception {
for (final LookAndFeelInfo laf : getInstalledLookAndFeels()) {
SwingUtilities.invokeAndWait(() -> setLookAndFeel(laf));
SwingUtilities.invokeAndWait(new InsetsEncapsulation());
}
}
@Override
public void run() {
runTest(new JLabel("hi"));
runTest(new JMenu());
runTest(new JTree());
runTest(new JTable());
runTest(new JMenuItem());
runTest(new JCheckBoxMenuItem());
runTest(new JToggleButton());
runTest(new JSpinner());
runTest(new JSlider());
runTest(Box.createVerticalBox());
runTest(Box.createHorizontalBox());
runTest(new JTextField());
runTest(new JTextArea());
runTest(new JTextPane());
runTest(new JPasswordField());
runTest(new JFormattedTextField());
runTest(new JEditorPane());
runTest(new JButton());
runTest(new JColorChooser());
runTest(new JFileChooser());
runTest(new JCheckBox());
runTest(new JInternalFrame());
runTest(new JDesktopPane());
runTest(new JTableHeader());
runTest(new JLayeredPane());
runTest(new JRootPane());
runTest(new JMenuBar());
runTest(new JOptionPane());
runTest(new JRadioButton());
runTest(new JRadioButtonMenuItem());
runTest(new JPopupMenu());
runTest(new JScrollBar());
runTest(new JScrollPane());
runTest(new JViewport());
runTest(new JSplitPane());
runTest(new JTabbedPane());
runTest(new JToolBar());
runTest(new JSeparator());
runTest(new JProgressBar());
if (!failures.isEmpty()) {
System.out.println("These classes failed");
for (final Component failure : failures) {
System.out.println(failure.getClass());
}
throw new RuntimeException("Test failed");
}
}
void runTest(final JComponent component) {
try {
test(component);
} catch (final Throwable ignored) {
failures.add(component);
}
}
void test(final JComponent component) {
final Insets p = component.getInsets();
p.top += 3;
if (p.equals(component.getInsets())) {
throw new RuntimeException("Insets altered by altering Insets!");
}
}
private static void setLookAndFeel(final LookAndFeelInfo laf) {
try {
UIManager.setLookAndFeel(laf.getClassName());
System.out.println("LookAndFeel: " + laf.getClassName());
} catch (ClassNotFoundException | InstantiationException |
UnsupportedLookAndFeelException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -0,0 +1,83 @@
/*
* Copyright (c) 2015, 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 8064934
* @summary Incorrect Exception message from java.awt.Desktop.open()
* @author Dmitry Markov
* @run main bug8064934
*/
import sun.awt.OSInfo;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.security.AccessController;
public class bug8064934 {
private static final String NO_ASSOCIATION_ERROR_MESSAGE = "Error message: No application is associated with" +
" the specified file for this operation.";
public static void main(String[] args) {
// This test is intended only for Windows
if (AccessController.doPrivileged(OSInfo.getOSTypeAction()) != OSInfo.OSType.WINDOWS) {
System.out.println("The test is for Windows platform only");
return;
}
// Test whether Desktop is supported of not
if (!Desktop.isDesktopSupported()) {
System.out.println("Desktop is not supported");
return;
}
Desktop desktop = Desktop.getDesktop();
// Test whether open action is supported or not
if (!desktop.isSupported(Desktop.Action.OPEN)) {
System.out.println("Desktop.Action.OPEN is not supported");
return;
}
File file = null;
try {
file = File.createTempFile("test", ".foo");
if (!file.exists()) {
throw new RuntimeException("Can not create temp file");
}
desktop.open(file);
} catch (IOException ioe) {
String errorMessage = ioe.getMessage().trim();
if (errorMessage != null && !errorMessage.endsWith(NO_ASSOCIATION_ERROR_MESSAGE)) {
throw new RuntimeException("Test FAILED! Wrong Error message: \n" +
"Actual " + errorMessage.substring(errorMessage.indexOf("Error message:")) + "\n" +
"Expected " + NO_ASSOCIATION_ERROR_MESSAGE);
}
} finally {
if (file != null) {
file.delete();
}
}
System.out.println("Test PASSED!");
}
}

View File

@ -0,0 +1,166 @@
/*
* Copyright (c) 2015, 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 8064833
* @summary Test correct font is obtained via famil+style
* @run main HelvLtOblTest
*/
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.image.BufferedImage;
public class HelvLtOblTest extends JComponent {
static Font helvFont = null;
static int[] codes = { 0x23, 0x4a, 0x48, 0x3, 0x4a, 0x55, 0x42, 0x4d,
0x4a, 0x44, 0x3,
0x53, 0x46, 0x45, 0x3, 0x55, 0x46, 0x59, 0x55, };
static String str = "Big italic red text";
public static void main(String[] args) throws Exception {
String os = System.getProperty("os.name");
if (!os.startsWith("Mac")) {
return;
}
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = ge.getAllFonts();
for (int i=0; i<fonts.length; i++) {
if (fonts[i].getPSName().equals("Helvetica-LightOblique")) {
helvFont = fonts[i];
break;
}
}
if (helvFont == null) {
return;
}
final HelvLtOblTest test = new HelvLtOblTest();
SwingUtilities.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add("Center", test);
f.pack();
f.setVisible(true);
});
test.compareImages();
}
public Dimension getPreferredSize() {
return new Dimension(400,400);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
FontRenderContext frc = new FontRenderContext(null, true, true);
Font f = helvFont.deriveFont(Font.PLAIN, 40);
System.out.println("font = " +f.getFontName());
GlyphVector gv = f.createGlyphVector(frc, codes);
g.setFont(f);
g.setColor(Color.white);
g.fillRect(0,0,400,400);
g.setColor(Color.black);
g2.drawGlyphVector(gv, 5,200);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2.drawString(str, 5, 250);
}
void compareImages() {
BufferedImage bi0 = drawText(false);
BufferedImage bi1 = drawText(true);
compare(bi0, bi1);
}
BufferedImage drawText(boolean doGV) {
int w = 400;
int h = 50;
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setColor(Color.white);
g.fillRect(0,0,w,h);
g.setColor(Color.black);
Font f = helvFont.deriveFont(Font.PLAIN, 40);
g.setFont(f);
int x = 5;
int y = h - 10;
if (doGV) {
FontRenderContext frc = new FontRenderContext(null, true, true);
GlyphVector gv = f.createGlyphVector(frc, codes);
g.drawGlyphVector(gv, 5, y);
} else {
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g.drawString(str, x, y);
}
return bi;
}
// Need to allow for minimal rounding error, so allow each component
// to differ by 1.
void compare(BufferedImage bi0, BufferedImage bi1) {
int wid = bi0.getWidth();
int hgt = bi0.getHeight();
for (int x=0; x<wid; x++) {
for (int y=0; y<hgt; y++) {
int rgb0 = bi0.getRGB(x, y);
int rgb1 = bi1.getRGB(x, y);
if (rgb0 == rgb1) continue;
int r0 = (rgb0 & 0xff0000) >> 16;
int r1 = (rgb1 & 0xff0000) >> 16;
int rdiff = r0-r1; if (rdiff<0) rdiff = -rdiff;
int g0 = (rgb0 & 0x00ff00) >> 8;
int g1 = (rgb1 & 0x00ff00) >> 8;
int gdiff = g0-g1; if (gdiff<0) gdiff = -gdiff;
int b0 = (rgb0 & 0x0000ff);
int b1 = (rgb1 & 0x0000ff);
int bdiff = b0-b1; if (bdiff<0) bdiff = -bdiff;
if (rdiff > 1 || gdiff > 1 || bdiff > 1) {
throw new RuntimeException(
"Images differ at x=" + x + " y="+ y + " " +
Integer.toHexString(rgb0) + " vs " +
Integer.toHexString(rgb1));
}
}
}
}
}

View File

@ -0,0 +1,152 @@
/*
* Copyright (c) 2006, 2015, 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.
*/
import java.awt.DisplayMode;
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.util.ArrayList;
import java.util.Random;
import static java.awt.DisplayMode.REFRESH_RATE_UNKNOWN;
/**
* @test
* @bug 6430607
* @summary Test that we throw an exception for incorrect display modes
* @author Dmitri.Trembovetski@Sun.COM area=FullScreen
* @run main/othervm NonExistentDisplayModeTest
* @run main/othervm -Dsun.java2d.noddraw=true NonExistentDisplayModeTest
* @run main/othervm -Dsun.java2d.opengl=true NonExistentDisplayModeTest
*/
public class NonExistentDisplayModeTest {
public static void main(String[] args) {
new NonExistentDisplayModeTest().start();
}
private void start() {
Frame f = new Frame("Testing, please wait..");
f.pack();
GraphicsDevice gd = f.getGraphicsConfiguration().getDevice();
if (!gd.isFullScreenSupported()) {
System.out.println("Exclusive FS mode not supported, test passed.");
f.dispose();
return;
}
gd.setFullScreenWindow(f);
if (!gd.isDisplayChangeSupported()) {
System.out.println("DisplayMode change not supported, test passed.");
f.dispose();
return;
}
DisplayMode dms[] = gd.getDisplayModes();
ArrayList<DisplayMode> dmList = new ArrayList<DisplayMode>(dms.length);
for (DisplayMode dm : dms) {
dmList.add(dm);
}
ArrayList<DisplayMode> nonExistentDms = createNonExistentDMList(dmList);
for (DisplayMode dm : nonExistentDms) {
boolean exThrown = false;
try {
System.out.printf("Testing mode: (%4dx%4d) depth=%3d rate=%d\n",
dm.getWidth(), dm.getHeight(),
dm.getBitDepth(), dm.getRefreshRate());
gd.setDisplayMode(dm);
} catch (IllegalArgumentException e) {
exThrown = true;
}
if (!exThrown) {
gd.setFullScreenWindow(null);
f.dispose();
throw new
RuntimeException("Failed: No exception thrown for dm "+dm);
}
}
gd.setFullScreenWindow(null);
f.dispose();
System.out.println("Test passed.");
}
private static final Random rnd = new Random();
private ArrayList<DisplayMode>
createNonExistentDMList(ArrayList<DisplayMode> dmList)
{
ArrayList<DisplayMode> newList =
new ArrayList<DisplayMode>(dmList.size());
// vary one parameter at a time
int param = 0;
for (DisplayMode dm : dmList) {
param = ++param % 3;
switch (param) {
case 0: {
DisplayMode newDM = deriveSize(dm);
if (!dmList.contains(newDM)) {
newList.add(newDM);
}
break;
}
case 1: {
DisplayMode newDM = deriveDepth(dm);
if (!dmList.contains(newDM)) {
newList.add(newDM);
}
break;
}
case 2: {
if (dm.getRefreshRate() != REFRESH_RATE_UNKNOWN) {
DisplayMode newDM = deriveRR(dm);
if (!dmList.contains(newDM)) {
newList.add(newDM);
}
}
break;
}
}
}
return newList;
}
private static DisplayMode deriveSize(DisplayMode dm) {
int w = dm.getWidth() / 7;
int h = dm.getHeight() / 3;
return new DisplayMode(w, h, dm.getBitDepth(), dm.getRefreshRate());
}
private static DisplayMode deriveRR(DisplayMode dm) {
return new DisplayMode(dm.getWidth(), dm.getHeight(),
dm.getBitDepth(), 777);
}
private static DisplayMode deriveDepth(DisplayMode dm) {
int depth;
if (dm.getBitDepth() == DisplayMode.BIT_DEPTH_MULTI) {
depth = 77;
} else {
depth = DisplayMode.BIT_DEPTH_MULTI;
}
return new DisplayMode(dm.getWidth(), dm.getHeight(),
depth, dm.getRefreshRate());
}
}

View File

@ -0,0 +1,132 @@
/*
* Copyright (c) 2015, 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.
*/
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
/**
* @test
* @bug 6475361
* @author Sergey Bylokhov
*/
public final class RemoveHelpMenu {
public static void main(final String[] args) {
final Frame frame = new Frame("RemoveHelpMenu Test");
try {
frame.pack();
// peer exists
test1(getMenuBar(frame));
test2(getMenuBar(frame));
test3(getMenuBar(frame));
test4(getMenuBar(frame));
} finally {
frame.dispose();
}
// peer is null
test1(getMenuBar(frame));
test2(getMenuBar(frame));
test3(getMenuBar(frame));
test4(getMenuBar(frame));
}
private static MenuBar getMenuBar(final Frame frame) {
final MenuBar menuBar = new MenuBar();
frame.setMenuBar(menuBar);
return menuBar;
}
private static void checkHelpMenu(final Menu menu, final boolean expected) {
final boolean actual = menu.toString().contains("isHelpMenu=true");
if (actual != expected) {
throw new RuntimeException("Incorrect menu type");
}
}
private static void checkMenuCount(final MenuBar bar, final int expected) {
final int actual = bar.getMenuCount();
if (actual != expected) {
throw new RuntimeException("Incorrect menus count");
}
}
private static void checkCurrentMenu(final MenuBar bar, final Menu menu) {
if (bar.getHelpMenu() != menu) {
throw new RuntimeException("Wrong HelpMenu");
}
}
private static void test1(final MenuBar menuBar) {
checkCurrentMenu(menuBar, null);
checkMenuCount(menuBar, 0);
}
private static void test2(final MenuBar menuBar) {
final Menu helpMenu = new Menu("Help Menu");
menuBar.setHelpMenu(helpMenu);
checkCurrentMenu(menuBar, helpMenu);
checkMenuCount(menuBar, 1);
checkHelpMenu(helpMenu, true);
menuBar.remove(helpMenu);
checkCurrentMenu(menuBar, null);
checkMenuCount(menuBar, 0);
checkHelpMenu(helpMenu, false);
}
private static void test3(final MenuBar menuBar) {
final Menu helpMenu1 = new Menu("Help Menu1");
final Menu helpMenu2 = new Menu("Help Menu2");
menuBar.setHelpMenu(helpMenu1);
checkCurrentMenu(menuBar, helpMenu1);
checkMenuCount(menuBar, 1);
checkHelpMenu(helpMenu1, true);
checkHelpMenu(helpMenu2, false);
menuBar.setHelpMenu(helpMenu2);
checkCurrentMenu(menuBar, helpMenu2);
checkMenuCount(menuBar, 1);
checkHelpMenu(helpMenu1, false);
checkHelpMenu(helpMenu2, true);
menuBar.remove(helpMenu2);
checkCurrentMenu(menuBar, null);
checkMenuCount(menuBar, 0);
checkHelpMenu(helpMenu1, false);
checkHelpMenu(helpMenu2, false);
}
private static void test4(final MenuBar menuBar) {
final Menu helpMenu = new Menu("Help Menu");
menuBar.setHelpMenu(helpMenu);
checkCurrentMenu(menuBar, helpMenu);
checkMenuCount(menuBar, 1);
checkHelpMenu(helpMenu, true);
menuBar.setHelpMenu(null);
checkCurrentMenu(menuBar, null);
checkMenuCount(menuBar, 0);
checkHelpMenu(helpMenu, false);
}
}

View File

@ -40,6 +40,7 @@
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.metal.MetalLookAndFeel;
import test.java.awt.regtesthelpers.Util;
public class HWDisappear
@ -109,7 +110,7 @@ public class HWDisappear
// Click on the button.
Point bLoc = b.getLocationOnScreen();
robot.mouseMove(bLoc.x + b.getWidth() / 2, bLoc.y + 5);
robot.mouseMove(bLoc.x + b.getWidth() / 2, bLoc.y + b.getHeight() / 2);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
@ -148,8 +149,9 @@ public class HWDisappear
// instantiated in the same VM. Being static (and using
// static vars), it aint gonna work. Not worrying about
// it for now.
public static void main( String args[] ) throws InterruptedException
public static void main( String args[] ) throws Exception
{
UIManager.setLookAndFeel(new MetalLookAndFeel());
mainThread = Thread.currentThread();
try
{

View File

@ -0,0 +1,94 @@
/*
* Copyright (c) 2015, 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 8061636
* @summary fix for 7079254 changes behavior of MouseListener, MouseMotionListener
* @library ../../regtesthelpers
* @build Util
* @author Alexander Zvegintsev
* @run main RemovedComponentMouseListener
*/
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
import test.java.awt.regtesthelpers.Util;
public class RemovedComponentMouseListener extends JFrame {
static boolean mouseReleasedReceived;
static JButton button;
public RemovedComponentMouseListener() {
JPanel panel = new JPanel();
JPanel buttonPanel = new JPanel();
button = new JButton("Button");
setSize(300, 300);
buttonPanel.add(button);
panel.add(buttonPanel);
setContentPane(panel);
button.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
buttonPanel.remove(button);
panel.add(button);
button.revalidate();
button.repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
mouseReleasedReceived = true;
}
});
setVisible(true);
}
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(() -> {
new RemovedComponentMouseListener();
});
Robot r = Util.createRobot();
r.setAutoDelay(100);
r.waitForIdle();
Util.pointOnComp(button, r);
r.waitForIdle();
r.mousePress(InputEvent.BUTTON1_MASK);
r.waitForIdle();
r.mouseRelease(InputEvent.BUTTON1_MASK);
r.waitForIdle();
if (!mouseReleasedReceived) {
throw new RuntimeException("mouseReleased event was not received");
}
}
}

View File

@ -0,0 +1,136 @@
/*
* Copyright (c) 2015, 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 8068283
@summary Checks that <Alt>+Char accelerators work when pressed in a text component
@author Anton Nashatyrev
@run main AltCharAcceleratorTest
*/
import sun.awt.SunToolkit;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class AltCharAcceleratorTest {
boolean action1 = false;
boolean action2 = false;
CountDownLatch focusLatch = new CountDownLatch(1);
CountDownLatch actionLatch = new CountDownLatch(2);
public AltCharAcceleratorTest() throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("frame");
final JTextField t = new JTextField();
JMenuBar mb = new JMenuBar();
JMenu m1 = new JMenu("File");
JMenuItem i1 = new JMenuItem("Save");
JMenuItem i2 = new JMenuItem("Load");
i1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.ALT_MASK));
i2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.ALT_MASK));
i1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action1!");
action1 = true;
actionLatch.countDown();
}
});
i2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action2!");
action2 = true;
actionLatch.countDown();
}
});
t.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("Focused!");
focusLatch.countDown();
}
});
t.setColumns(10);
t.requestFocusInWindow();
f.setJMenuBar(mb);
mb.add(m1);
m1.add(i1);
m1.add(i2);
f.setLayout(new FlowLayout());
f.add(t);
f.setSize(200, 200);
f.setVisible(true);
}
});
}
void test() throws Exception {
((SunToolkit) Toolkit.getDefaultToolkit()).realSync();
focusLatch.await(5, TimeUnit.SECONDS);
Robot robot = new Robot();
robot.setAutoDelay(100);
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_T);
robot.keyRelease(KeyEvent.VK_T);
robot.keyRelease(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_F);
robot.keyRelease(KeyEvent.VK_F);
robot.keyRelease(KeyEvent.VK_ALT);
actionLatch.await(5, TimeUnit.SECONDS);
if (!action1 || !action2) {
throw new RuntimeException("Actions not performed");
}
System.out.println("Passed.");
}
public static void main(String[] args) throws Exception {
AltCharAcceleratorTest t = new AltCharAcceleratorTest();
t.test();
}
}

View File

@ -0,0 +1,103 @@
/*
* Copyright (c) 2015, 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.
*/
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.Properties;
import static java.awt.image.BufferedImage.TYPE_INT_ARGB;
/**
* @test
* @bug 8066132
* @author Sergey Bylokhov
*/
public final class GetPropertyNames {
static BufferedImage defaultProps = new BufferedImage(1, 1, TYPE_INT_ARGB);
public static void main(final String[] args) {
// default result is null
if (defaultProps.getPropertyNames() != null) {
throw new RuntimeException("PropertyNames should be null");
}
// for null properties result is null
final BufferedImage emptyProps = getBufferedImage(null);
if (emptyProps.getPropertyNames() != null) {
throw new RuntimeException("PropertyNames should be null");
}
// for empty properties result is null
final BufferedImage nullProps = getBufferedImage(new Properties());
if (nullProps.getPropertyNames() != null) {
throw new RuntimeException("PropertyNames should be null");
}
// for non-string keys result is null
final Properties properties = new Properties();
properties.put(1, 1);
properties.put(2, 2);
properties.put(3, 3);
final BufferedImage nonStringProps = getBufferedImage(properties);
if (nonStringProps.getPropertyNames() != null) {
throw new RuntimeException("PropertyNames should be null");
}
// for string keys result is not null
properties.clear();
properties.setProperty("1", "1");
properties.setProperty("2", "2");
validate(getBufferedImage(properties), 2);
// for the mix of strings and objects result is not null
properties.clear();
properties.put(1, 1);
properties.put(2, 2);
properties.put(3, 3);
properties.setProperty("key1", "value1");
properties.setProperty("key2", "value2");
final BufferedImage mixProps = getBufferedImage(properties);
validate(mixProps, 2);
if (!"value1".equals(mixProps.getProperty("key1"))
|| !"value2".equals(mixProps.getProperty("key2"))) {
throw new RuntimeException("Wrong key-value pair");
}
}
private static BufferedImage getBufferedImage(final Properties properties) {
return new BufferedImage(defaultProps.getColorModel(),
defaultProps.getRaster(),
defaultProps.isAlphaPremultiplied(),
properties);
}
private static void validate(final BufferedImage bi, final int expected) {
final String[] names = bi.getPropertyNames();
if (names.length != expected) {
throw new RuntimeException("Wrong number of names");
}
for (final String name : names) {
final Object property = bi.getProperty(name);
if (property == Image.UndefinedProperty || property == null) {
throw new RuntimeException("Unexpected property");
}
}
}
}

View File

@ -0,0 +1,205 @@
/*
* Copyright (c) 2015, 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 8071707 6243376
* @summary Test verifies that EXIF images with differing sampling factors
* are written correctly
*
* @run main MagentaEXIFTest
*/
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.metadata.IIOInvalidTreeException;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.metadata.IIOMetadataNode;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;
import org.w3c.dom.Attr;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class MagentaEXIFTest {
public static void main(final String[] argv) throws Exception {
IIOMetadata jpegmetadata = null;
ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
try {
jpegmetadata = createJPEGMetadata(jpgWriter);
} catch (Exception e) {
throw new RuntimeException(e);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream output = ImageIO.createImageOutputStream(baos);
jpgWriter.setOutput(output);
int w=100, h=100;
BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bi.createGraphics();
g2d.setColor(Color.white);
g2d.fillRect(0, 0, w, h);
IIOImage image = new IIOImage(bi, null, jpegmetadata);
jpgWriter.write(null, image, null);
jpgWriter.dispose();
baos.flush();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ImageInputStream iis = ImageIO.createImageInputStream(bais);
bi = ImageIO.read(iis);
for (int i=0; i<bi.getWidth(); i++) {
for(int j=0; j<bi.getHeight(); j++) {
if (bi.getRGB(i, j) != Color.white.getRGB()) {
throw new RuntimeException("Wrong color : " + Integer.toHexString(bi.getRGB(i, j)));
}
}
}
}
static void displayMetadata(Node node, int level) {
for (int i = 0; i < level; i++) System.out.print(" ");
System.out.print("<" + node.getNodeName());
NamedNodeMap map = node.getAttributes();
if (map != null) { // print attribute values
int length = map.getLength();
for (int i = 0; i < length; i++) {
Node attr = map.item(i);
System.out.print(" " + attr.getNodeName() +
"=\"" + attr.getNodeValue() + "\"");
}
}
Node child = node.getFirstChild();
if (child != null) {
System.out.println(">"); // close current tag
while (child != null) { // emit child tags recursively
displayMetadata(child, level + 1);
child = child.getNextSibling();
}
for (int i = 0; i < level; i++) System.out.print(" ");
System.out.println("</" + node.getNodeName() + ">");
} else {
System.out.println("/>");
}
}
/*
* Construct a JPEG IIOMetadata that has had the JFIF marker removed and
* an APP1 EXIF marker added, and further massaged so that we have differing
* horizontal and vertical sampling factors for one channel.
*/
static IIOMetadata createJPEGMetadata(ImageWriter iw) throws IIOInvalidTreeException {
String jpegMDName = "javax_imageio_jpeg_image_1.0";
ImageWriter imgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
ImageTypeSpecifier ist = new ImageTypeSpecifier(bi);
IIOMetadata metadata = imgWriter.getDefaultImageMetadata(ist, null);
IIOMetadataNode root = new IIOMetadataNode(jpegMDName);
IIOMetadataNode header = new IIOMetadataNode("JPEGvariety");
IIOMetadataNode sequence = new IIOMetadataNode("markerSequence");
root.appendChild(header);
root.appendChild(sequence);
IIOMetadataNode app1 = new IIOMetadataNode("unknown");
app1.setUserObject(new byte[255]);
app1.setAttribute("MarkerTag", "255");
sequence.appendChild(app1);
IIOMetadataNode sof = new IIOMetadataNode("sof");
sof.setAttribute("process", "0");
sof.setAttribute("samplePrecision", "8");
sof.setAttribute("numLines", "100");
sof.setAttribute("samplesPerLine", "100");
sof.setAttribute("numFrameComponents", "3");
IIOMetadataNode c1 = new IIOMetadataNode("componentSpec");
c1.setAttribute("componentId", "1");
c1.setAttribute("HsamplingFactor", "1");
c1.setAttribute("VsamplingFactor", "2");
c1.setAttribute("QtableSelector", "1");
sof.appendChild(c1);
IIOMetadataNode c2 = new IIOMetadataNode("componentSpec");
c2.setAttribute("componentId", "2");
c2.setAttribute("HsamplingFactor", "1");
c2.setAttribute("VsamplingFactor", "1");
c2.setAttribute("QtableSelector", "1");
sof.appendChild(c2);
IIOMetadataNode c3 = new IIOMetadataNode("componentSpec");
c3.setAttribute("componentId", "3");
c3.setAttribute("HsamplingFactor", "1");
c3.setAttribute("VsamplingFactor", "1");
c3.setAttribute("QtableSelector", "1");
sof.appendChild(c3);
sequence.appendChild(sof);
metadata.setFromTree(jpegMDName, root);
IIOMetadata def = imgWriter.getDefaultImageMetadata(ist, null);
metadata.mergeTree(jpegMDName, def.getAsTree(jpegMDName));
Node tree = metadata.getAsTree(jpegMDName);
Node variety = tree.getFirstChild();
Node jfif = variety.getFirstChild();
variety.removeChild(jfif);
sequence = (IIOMetadataNode)tree.getLastChild();
NodeList markers = sequence.getChildNodes();
IIOMetadataNode n, sofNode=null;
for (int i=0;i<markers.getLength();i++) {
n = (IIOMetadataNode)markers.item(i);
if (n.getNodeName().equals("sof")) {
sofNode = n;
break;
}
}
IIOMetadataNode componentSpec = (IIOMetadataNode)sofNode.getFirstChild();
Attr attr = componentSpec.getAttributeNode("HsamplingFactor");
attr.setValue("1");
attr = componentSpec.getAttributeNode("VsamplingFactor");
attr.setValue("2");
metadata.setFromTree(jpegMDName, tree);
String[] names = metadata.getMetadataFormatNames();
int length = names.length;
for (int i = 0; i < length; i++) {
System.out.println( "Format name: " + names[ i ] );
displayMetadata(metadata.getAsTree(names[i]), 0);
}
return metadata;
}
}

View File

@ -0,0 +1,212 @@
/*
* Copyright (c) 2015, 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.
*/
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.event.IIOWriteProgressListener;
import javax.imageio.spi.IIORegistry;
import javax.imageio.spi.ImageWriterSpi;
import javax.imageio.stream.ImageOutputStream;
import static java.awt.image.BufferedImage.TYPE_BYTE_BINARY;
/**
* @test
* @bug 4952954
* @summary abortFlag must be cleared for every ImageWriter.write operation
* @author Sergey Bylokhov
*/
public final class WriteAfterAbort implements IIOWriteProgressListener {
private volatile boolean abortFlag = true;
private volatile boolean isAbortCalled;
private volatile boolean isCompleteCalled;
private volatile boolean isProgressCalled;
private volatile boolean isStartedCalled;
private static final int WIDTH = 100;
private static final int HEIGHT = 100;
private void test(final ImageWriter writer) throws IOException {
// Image initialization
final BufferedImage imageWrite = new BufferedImage(WIDTH, HEIGHT,
TYPE_BYTE_BINARY);
final Graphics2D g = imageWrite.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
g.dispose();
// File initialization
final File file = File.createTempFile("temp", ".img");
file.deleteOnExit();
final FileOutputStream fos = new SkipWriteOnAbortOutputStream(file);
final ImageOutputStream ios = ImageIO.createImageOutputStream(fos);
writer.setOutput(ios);
writer.addIIOWriteProgressListener(this);
// This write will be aborted, and file will not be touched
writer.write(imageWrite);
if (!isStartedCalled) {
throw new RuntimeException("Started should be called");
}
if (!isProgressCalled) {
throw new RuntimeException("Progress should be called");
}
if (!isAbortCalled) {
throw new RuntimeException("Abort should be called");
}
if (isCompleteCalled) {
throw new RuntimeException("Complete should not be called");
}
// Flush aborted data
ios.flush();
// This write should be completed successfully and the file should
// contain correct image data.
abortFlag = false;
isAbortCalled = false;
isCompleteCalled = false;
isProgressCalled = false;
isStartedCalled = false;
writer.write(imageWrite);
if (!isStartedCalled) {
throw new RuntimeException("Started should be called");
}
if (!isProgressCalled) {
throw new RuntimeException("Progress should be called");
}
if (isAbortCalled) {
throw new RuntimeException("Abort should not be called");
}
if (!isCompleteCalled) {
throw new RuntimeException("Complete should be called");
}
writer.dispose();
ios.close();
// Validates content of the file.
final BufferedImage imageRead = ImageIO.read(file);
for (int x = 0; x < WIDTH; ++x) {
for (int y = 0; y < HEIGHT; ++y) {
if (imageRead.getRGB(x, y) != imageWrite.getRGB(x, y)) {
throw new RuntimeException("Test failed.");
}
}
}
}
public static void main(final String[] args) throws IOException {
final IIORegistry registry = IIORegistry.getDefaultInstance();
final Iterator<ImageWriterSpi> iter = registry.getServiceProviders(
ImageWriterSpi.class, provider -> true, true);
// Validates all supported ImageWriters
while (iter.hasNext()) {
final WriteAfterAbort writeAfterAbort = new WriteAfterAbort();
final ImageWriter writer = iter.next().createWriterInstance();
System.out.println("ImageWriter = " + writer);
writeAfterAbort.test(writer);
}
System.out.println("Test passed");
}
// Callbacks
@Override
public void imageComplete(ImageWriter source) {
isCompleteCalled = true;
}
@Override
public void imageProgress(ImageWriter source, float percentageDone) {
isProgressCalled = true;
if (percentageDone > 50 && abortFlag) {
source.abort();
}
}
@Override
public void imageStarted(ImageWriter source, int imageIndex) {
isStartedCalled = true;
}
@Override
public void writeAborted(final ImageWriter source) {
isAbortCalled = true;
}
@Override
public void thumbnailComplete(ImageWriter source) {
}
@Override
public void thumbnailProgress(ImageWriter source, float percentageDone) {
}
@Override
public void thumbnailStarted(ImageWriter source, int imageIndex,
int thumbnailIndex) {
}
/**
* We need to skip writes on abort, because content of the file after abort
* is undefined.
*/
private class SkipWriteOnAbortOutputStream extends FileOutputStream {
SkipWriteOnAbortOutputStream(File file) throws FileNotFoundException {
super(file);
}
@Override
public void write(int b) throws IOException {
if (!abortFlag) {
super.write(b);
}
}
@Override
public void write(byte[] b) throws IOException {
if (!abortFlag) {
super.write(b);
}
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
if (!abortFlag) {
super.write(b, off, len);
}
}
}
}

View File

@ -0,0 +1,120 @@
/*
* Copyright (c) 2014, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.SimpleDoc;
import javax.print.StreamPrintService;
import javax.print.StreamPrintServiceFactory;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;
/*
* @test
* @bug 8067364
* @summary Printing to Postscript doesn't support dieresis
* @build PrintSEUmlauts
* @run main/othervm PrintSEUmlauts
*/
public class PrintSEUmlauts implements Printable {
public static void main(String[] args) throws Exception {
GraphicsEnvironment.getLocalGraphicsEnvironment();
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
String mime = DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType();
StreamPrintServiceFactory[] factories =
StreamPrintServiceFactory.
lookupStreamPrintServiceFactories(flavor, mime);
if (factories.length == 0) {
System.out.println("No print service found.");
return;
}
FileOutputStream output = new FileOutputStream("out.ps");
StreamPrintService service = factories[0].getPrintService(output);
SimpleDoc doc =
new SimpleDoc(new PrintSEUmlauts(),
DocFlavor.SERVICE_FORMATTED.PRINTABLE,
new HashDocAttributeSet());
DocPrintJob job = service.createPrintJob();
job.addPrintJobListener(new PrintJobAdapter() {
@Override
public void printJobCompleted(PrintJobEvent pje) {
testPrintAndExit();
}
});
job.print(doc, new HashPrintRequestAttributeSet());
}
private static final boolean DEBUG = false;
private static void testPrintAndExit() {
String expected = "<e4> 7.44 100.0 100.0 S";
String content = "";
File file = new File("out.ps");
if (!DEBUG) {
file.deleteOnExit();
}
try (FileInputStream stream = new FileInputStream(file)) {
byte[] data = new byte[(int) file.length()];
stream.read(data);
content = new String(data, StandardCharsets.ISO_8859_1);
} catch (IOException ex) {
ex.printStackTrace();
}
if (!content.contains(expected)) {
System.err.println("FAIL");
if (DEBUG) {
System.err.println("printing content");
System.err.println(content);
}
throw new RuntimeException("Expected <e4> to represent 'ä' but not found!");
}
System.err.println("SUCCESS");
}
public int print(Graphics g, PageFormat pf, int pg) {
if (pg > 0) return NO_SUCH_PAGE;
g.drawString("ä", 100, 100);
return PAGE_EXISTS;
}
}

View File

@ -0,0 +1,76 @@
/*
* Copyright (c) 2015, 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.
*/
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import static java.awt.image.BufferedImage.TYPE_INT_RGB;
/**
* @test
* @bug 6573305
* @summary Animated icon should animate when the JButton is pressed.
* @author Sergey Bylokhov
*/
public final class AnimatedIcon {
public static void main(final String[] args) throws Exception {
SwingUtilities.invokeAndWait(() -> {
final BufferedImage bi = new BufferedImage(1, 1, TYPE_INT_RGB);
final ImageIcon icon = new ImageIcon(bi);
final JButton button = new JButton(icon);
// Default icon is set => imageUpdate should return true for it
isAnimated(bi, button);
button.getModel().setPressed(true);
button.getModel().setArmed(true);
isAnimated(bi, button);
button.getModel().setPressed(false);
button.getModel().setArmed(false);
button.getModel().setSelected(true);
isAnimated(bi, button);
button.getModel().setSelected(false);
button.getModel().setRollover(true);
button.setRolloverEnabled(true);
isAnimated(bi, button);
button.getModel().setSelected(true);
isAnimated(bi, button);
// Default icon is not set => imageUpdate should return true for
// other icons if any
button.setIcon(null);
button.setPressedIcon(icon);
button.getModel().setPressed(true);
button.getModel().setArmed(true);
isAnimated(bi, button);
});
}
private static void isAnimated(BufferedImage bi, JButton button) {
if (!button.imageUpdate(bi, ImageObserver.SOMEBITS, 0, 0, 1, 1)) {
throw new RuntimeException();
}
}
}

View File

@ -38,9 +38,20 @@ public class Test4177735 implements Runnable {
private static final long DELAY = 1000L;
public static void main(String[] args) throws Exception {
int hsvIndex = 0;
int panelsLength;
int finalIndex;
JColorChooser chooser = new JColorChooser();
AbstractColorChooserPanel[] panels = chooser.getChooserPanels();
chooser.setChooserPanels(new AbstractColorChooserPanel[] { panels[1] });
panelsLength = panels.length;
for(int i = 0; i < panelsLength; i++) {
if(panels[i].getDisplayName().equals("HSV")) {
hsvIndex = i;
}
}
finalIndex = Math.min(hsvIndex, panelsLength - 1);
chooser.setChooserPanels(new AbstractColorChooserPanel[] { panels[finalIndex] });
JDialog dialog = show(chooser);
pause(DELAY);

View File

@ -59,7 +59,7 @@ public class bug6824395 {
editorPaneLayer.setUI(layerUI);
scrollPane = new JScrollPane(editorPaneLayer);
scrollPane.setViewportBorder(null);
scrollPane.setPreferredSize(new Dimension(200, 250));
frame.add(scrollPane);

View File

@ -0,0 +1,35 @@
<!--
Copyright (c) 1999, 2015, 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.
-->
<Html>
<Body>
<!--
<H1>Test</H1>
<Center>
<APPLET code="bug4209065.class" WIDTH = 600 HEIGHT = 400>
</APPLET>
</Center>
-->
</Body>
</Html>

View File

@ -0,0 +1,57 @@
/*
* Copyright (c) 1999, 2015, 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.
*/
import java.awt.EventQueue;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;
/**
* @test
* @bug 4209065
* @author Georges Saab
* @run applet/manual=yesno bug4209065.html
*/
public final class bug4209065 extends JApplet {
@Override
public void init() {
try {
EventQueue.invokeAndWait(this::createTabbedPane);
} catch (InterruptedException | InvocationTargetException e) {
throw new RuntimeException(e);
}
}
private void createTabbedPane() {
JTabbedPane tp = new JTabbedPane();
getContentPane().add(tp);
String text = "<html><center>If the style of the text on the tabs matches"
+ "<br>the descriptions, press <em><b>PASS</b></em></center></html>";
tp.addTab("<html><center><font size=+3>big</font></center></html>", new JLabel(text));
tp.addTab("<html><center><font color=red>red</font></center></html>", new JLabel(text));
tp.addTab("<html><center><em><b>Bold Italic!</b></em></center></html>", new JLabel(text));
}
}

View File

@ -0,0 +1,92 @@
/*
* Copyright (c) 2015, 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.
*/
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import static java.awt.image.BufferedImage.TYPE_INT_ARGB;
/**
* @test
* @bug 8015085
* @summary Shortening via " ... " is broken for Strings containing a combining
* diaeresis.
* @author Sergey Bylokhov
*/
public class TestBadBreak {
static JFrame frame;
static Robot robot;
static final String withCombiningDiaeresis = "123p://.aaaaaaaaaaaaaaaaaaaaaa.123/a\u0308" ;
static final String withoutCombiningDiaeresis = "123p://.aaaaaaaaaaaaaaaaaaaaaa.123/\u00E4" ;
public static void main(final String[] args) throws Exception {
robot = new Robot();
final BufferedImage bi1 = new BufferedImage(200, 90, TYPE_INT_ARGB);
final BufferedImage bi2 = new BufferedImage(200, 90, TYPE_INT_ARGB);
test(withCombiningDiaeresis, bi1);
test(withoutCombiningDiaeresis, bi2);
for (int x = 0; x < bi1.getWidth(); ++x) {
for (int y = 0; y < bi1.getHeight(); ++y) {
if (bi1.getRGB(x, y) != bi2.getRGB(x, y)) {
ImageIO.write(bi1, "png", new File("image1.png"));
ImageIO.write(bi2, "png", new File("image2.png"));
throw new RuntimeException("Wrong color");
}
}
}
}
private static void test(final String text, final BufferedImage i1)
throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
frame = new JFrame();
final JLabel label = new JLabel(text) {
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = i1.createGraphics();
super.paintComponent(g2d);
g2d.dispose();
}
};
frame.getContentPane().add(label);
frame.setBounds(200, 200, 200, 90);
}
});
robot.waitForIdle();
SwingUtilities.invokeAndWait(() -> frame.setVisible(true));
robot.waitForIdle();
SwingUtilities.invokeAndWait(frame::dispose);
robot.waitForIdle();
}
}