mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 11:04:34 +02:00
Merge
This commit is contained in:
commit
7cee5f2093
455 changed files with 11533 additions and 5142 deletions
|
@ -307,12 +307,6 @@ ifeq ($(OPENJDK_TARGET_OS),aix)
|
||||||
$(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java
|
$(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# The exception handling of swing beaninfo
|
|
||||||
# These resources violates the convention of having code and resources together under
|
|
||||||
# $(JDK_TOPDIR)/src/.../classes directories
|
|
||||||
$(JDK_OUTPUTDIR)/classes/javax/swing/beaninfo/images/%.gif: $(JDK_TOPDIR)/make/data/swingbeaninfo/images/%.gif
|
|
||||||
$(call install-file)
|
|
||||||
|
|
||||||
# The JDK_USER_DEFINED_FILTER is a poor man's incremental build: by specifying
|
# The JDK_USER_DEFINED_FILTER is a poor man's incremental build: by specifying
|
||||||
# JDK_FILTER at the make command line, only a subset of the JDK java files will
|
# JDK_FILTER at the make command line, only a subset of the JDK java files will
|
||||||
# be recompiled. If multiple paths are separated by comma, convert that into a
|
# be recompiled. If multiple paths are separated by comma, convert that into a
|
||||||
|
@ -341,6 +335,7 @@ $(eval $(call SetupJavaCompilation,BUILD_JDK,\
|
||||||
BIN:=$(JDK_OUTPUTDIR)/classes,\
|
BIN:=$(JDK_OUTPUTDIR)/classes,\
|
||||||
COPY:=$(COPY_PATTERNS),\
|
COPY:=$(COPY_PATTERNS),\
|
||||||
COPY_FILES:=$(COPY_FILES),\
|
COPY_FILES:=$(COPY_FILES),\
|
||||||
|
CLEAN_FILES:=$(CLEAN_FILES),\
|
||||||
HEADERS:=$(JDK_OUTPUTDIR)/gensrc_headers,\
|
HEADERS:=$(JDK_OUTPUTDIR)/gensrc_headers,\
|
||||||
ADD_JAVAC_FLAGS:=$(BUILD_JDK_SOURCEPATH)))
|
ADD_JAVAC_FLAGS:=$(BUILD_JDK_SOURCEPATH)))
|
||||||
|
|
||||||
|
@ -378,7 +373,8 @@ ifndef OPENJDK
|
||||||
SETUP := GENERATE_JDKBYTECODE, \
|
SETUP := GENERATE_JDKBYTECODE, \
|
||||||
JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
|
JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
|
||||||
SRC := $(JDK_OUTPUTDIR)/gensrc_ab/32bit, \
|
SRC := $(JDK_OUTPUTDIR)/gensrc_ab/32bit, \
|
||||||
BIN := $(JDK_OUTPUTDIR)/classes_ab/32bit))
|
BIN := $(JDK_OUTPUTDIR)/classes_ab/32bit, \
|
||||||
|
HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))
|
||||||
|
|
||||||
$(BUILD_ACCESSBRIDGE_32): $(BUILD_JDK)
|
$(BUILD_ACCESSBRIDGE_32): $(BUILD_JDK)
|
||||||
|
|
||||||
|
@ -386,7 +382,8 @@ ifndef OPENJDK
|
||||||
SETUP := GENERATE_JDKBYTECODE, \
|
SETUP := GENERATE_JDKBYTECODE, \
|
||||||
JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
|
JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
|
||||||
SRC := $(JDK_OUTPUTDIR)/gensrc_ab/legacy, \
|
SRC := $(JDK_OUTPUTDIR)/gensrc_ab/legacy, \
|
||||||
BIN := $(JDK_OUTPUTDIR)/classes_ab/legacy))
|
BIN := $(JDK_OUTPUTDIR)/classes_ab/legacy, \
|
||||||
|
HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))
|
||||||
|
|
||||||
$(BUILD_ACCESSBRIDGE_LEGACY): $(BUILD_JDK)
|
$(BUILD_ACCESSBRIDGE_LEGACY): $(BUILD_JDK)
|
||||||
|
|
||||||
|
@ -396,7 +393,8 @@ ifndef OPENJDK
|
||||||
SETUP := GENERATE_JDKBYTECODE, \
|
SETUP := GENERATE_JDKBYTECODE, \
|
||||||
JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
|
JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
|
||||||
SRC := $(JDK_OUTPUTDIR)/gensrc_ab/64bit, \
|
SRC := $(JDK_OUTPUTDIR)/gensrc_ab/64bit, \
|
||||||
BIN := $(JDK_OUTPUTDIR)/classes_ab/64bit))
|
BIN := $(JDK_OUTPUTDIR)/classes_ab/64bit, \
|
||||||
|
HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))
|
||||||
|
|
||||||
$(BUILD_ACCESSBRIDGE_64): $(BUILD_JDK)
|
$(BUILD_ACCESSBRIDGE_64): $(BUILD_JDK)
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ include NativeCompilation.gmk
|
||||||
# Setup the java compilers for the JDK build.
|
# Setup the java compilers for the JDK build.
|
||||||
include Setup.gmk
|
include Setup.gmk
|
||||||
|
|
||||||
# Prepare the find cache. Only used on windows.
|
# Prepare the find cache.
|
||||||
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src/share/bin))
|
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src/share/bin))
|
||||||
|
|
||||||
# Build tools
|
# Build tools
|
||||||
|
|
|
@ -35,7 +35,7 @@ include Setup.gmk
|
||||||
# Copy files (can now depend on $(COPY_FILES))
|
# Copy files (can now depend on $(COPY_FILES))
|
||||||
include CopyFiles.gmk
|
include CopyFiles.gmk
|
||||||
|
|
||||||
# Prepare the find cache. Only used if running on windows.
|
# Prepare the find cache.
|
||||||
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src))
|
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src))
|
||||||
|
|
||||||
# Build tools
|
# Build tools
|
||||||
|
|
|
@ -25,121 +25,53 @@
|
||||||
|
|
||||||
# Copy icu and _dict files used by the text break iterator
|
# Copy icu and _dict files used by the text break iterator
|
||||||
|
|
||||||
COPY_PATTERNS = .icu _dict
|
COPY_PATTERNS := .icu _dict .dat _options .js aliasmap .spp .wav .css \
|
||||||
|
.png .gif .xml .dtd .txt oqlhelp.html
|
||||||
|
|
||||||
# Copy config files for com.sun.org.apache.xml.internal.security
|
# These directories should not be copied at all
|
||||||
|
EXCLUDES += \
|
||||||
|
com/sun/org/apache/xml/internal/security/resource/schema \
|
||||||
|
java/awt/doc-files \
|
||||||
|
java/lang/doc-files \
|
||||||
|
javax/swing/doc-files \
|
||||||
|
javax/swing/text/doc-files \
|
||||||
|
javax/swing/plaf/synth/doc-files \
|
||||||
|
javax/swing/undo/doc-files \
|
||||||
|
sun/awt/X11/doc-files \
|
||||||
|
sun/util/cldr/resources \
|
||||||
|
#
|
||||||
|
|
||||||
XMLSECURITY_RESOURCEDIR = $(JDK_TOPDIR)/src/share/classes/com/sun/org/apache/xml/internal/security/resource
|
# These files should never be included
|
||||||
COPY_FILES += \
|
EXFILES += build.xml README.txt version.txt
|
||||||
$(XMLSECURITY_RESOURCEDIR)/config.dtd \
|
|
||||||
$(XMLSECURITY_RESOURCEDIR)/config.xml
|
|
||||||
|
|
||||||
# Copy sun/tools related files into the classes directory.
|
# These icons are handled in GensrcIcons.gmk
|
||||||
|
EXFILES += \
|
||||||
# Extra jstat files
|
sun/awt/X11/java-icon16.png \
|
||||||
JSTAT_RESOURCEDIR = $(JDK_TOPDIR)/src/share/classes/sun/tools/jstat/resources
|
sun/awt/X11/java-icon24.png \
|
||||||
COPY_FILES += \
|
sun/awt/X11/java-icon32.png \
|
||||||
$(JSTAT_RESOURCEDIR)/jstat_options \
|
sun/awt/X11/java-icon48.png \
|
||||||
$(JSTAT_RESOURCEDIR)/jstat_unsupported_options
|
$(wildcard $(JDK_TOPDIR)/src/share/classes/sun/awt/resources/*.png) \
|
||||||
|
#
|
||||||
# Extra jhat files
|
|
||||||
JHAT_RESOURCEDIR = $(JDK_TOPDIR)/src/share/classes/com/sun/tools/hat/resources
|
|
||||||
COPY_FILES += \
|
|
||||||
$(JHAT_RESOURCEDIR)/hat.js \
|
|
||||||
$(JHAT_RESOURCEDIR)/oqlhelp.html \
|
|
||||||
$(JHAT_RESOURCEDIR)/platform_names.txt
|
|
||||||
|
|
||||||
# Extra jrunscript files
|
|
||||||
JRUNSCRIPT_RESOURCEDIR = $(JDK_TOPDIR)/src/share/classes/com/sun/tools/script/shell
|
|
||||||
COPY_FILES += \
|
|
||||||
$(JRUNSCRIPT_RESOURCEDIR)/init.js \
|
|
||||||
$(JRUNSCRIPT_RESOURCEDIR)/messages.properties
|
|
||||||
|
|
||||||
# Extra jvmstat files
|
|
||||||
COPY_FILES += \
|
|
||||||
$(JDK_TOPDIR)/src/share/classes/sun/jvmstat/perfdata/resources/aliasmap
|
|
||||||
|
|
||||||
# JConsole resources
|
|
||||||
JCONSOLE_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/sun/tools/jconsole/resources
|
|
||||||
COPY_FILES += \
|
|
||||||
$(wildcard $(JCONSOLE_RESOURCES_DIR)/*.png) \
|
|
||||||
$(wildcard $(JCONSOLE_RESOURCES_DIR)/*.gif)
|
|
||||||
|
|
||||||
# Print resources
|
|
||||||
PRINT_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/sun/print/resources
|
|
||||||
COPY_FILES += \
|
|
||||||
$(wildcard $(PRINT_RESOURCES_DIR)/*.png)
|
|
||||||
|
|
||||||
# IDN resources
|
|
||||||
COPY_FILES += \
|
|
||||||
$(JDK_TOPDIR)/src/share/classes/sun/net/idn/uidna.spp
|
|
||||||
|
|
||||||
#
|
|
||||||
# Swing plaf resources
|
|
||||||
#
|
|
||||||
SWING_PLAF_WINDOWS_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows
|
|
||||||
COPY_FILES += \
|
|
||||||
$(wildcard $(SWING_PLAF_WINDOWS_RESOURCES_DIR)/icons/*.gif) \
|
|
||||||
$(wildcard $(SWING_PLAF_WINDOWS_RESOURCES_DIR)/icons/*.png)
|
|
||||||
|
|
||||||
ifndef OPENJDK
|
ifndef OPENJDK
|
||||||
SWING_PLAF_WINDOWS_RESOURCES_DIR_CLOSED = $(JDK_TOPDIR)/src/closed/share/classes/com/sun/java/swing/plaf/windows
|
# Theses icons have closed replacements
|
||||||
# Filter out JavaCup32.png from OpenJDK
|
SWING_PLAF_MOTIF_RESOURCES_DIR := $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif
|
||||||
COPY_FILES := $(filter-out $(SWING_PLAF_WINDOWS_RESOURCES_DIR)/icons/JavaCup32.png, $(COPY_FILES))
|
EXFILES += \
|
||||||
# Alter JavaCup32.png from ClosedJDK
|
$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows/icons/JavaCup32.png \
|
||||||
COPY_FILES += \
|
$(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/basic/icons/JavaCup16.png \
|
||||||
$(SWING_PLAF_WINDOWS_RESOURCES_DIR_CLOSED)/icons/JavaCup32.png
|
$(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR)/icons/*.gif) \
|
||||||
|
$(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR)/icons/*.png) \
|
||||||
|
#
|
||||||
|
|
||||||
|
EXFILES += mib_core.txt
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ENABLE_JFR), true)
|
ifeq ($(ENABLE_JFR), true)
|
||||||
JFR_CONFIGURATION_DIR_CLOSED = $(JDK_TOPDIR)/src/closed/share/classes/oracle/jrockit/jfr/settings
|
JFR_CONFIGURATION_DIR_CLOSED := $(JDK_TOPDIR)/src/closed/share/classes/oracle/jrockit/jfr/settings
|
||||||
COPY_FILES += \
|
COPY_FILES += \
|
||||||
$(JFR_CONFIGURATION_DIR_CLOSED)/jfc.xsd
|
$(JFR_CONFIGURATION_DIR_CLOSED)/jfc.xsd
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SWING_PLAF_BASIC_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/basic
|
|
||||||
COPY_FILES += \
|
|
||||||
$(wildcard $(SWING_PLAF_BASIC_RESOURCES_DIR)/icons/*.png)
|
|
||||||
|
|
||||||
ifndef OPENJDK
|
|
||||||
SWING_PLAF_BASIC_RESOURCES_DIR_CLOSED = $(JDK_TOPDIR)/src/closed/share/classes/javax/swing/plaf/basic
|
|
||||||
# Filter out JavaCup16.png from OpenJDK
|
|
||||||
COPY_FILES := $(filter-out $(SWING_PLAF_BASIC_RESOURCES_DIR)/icons/JavaCup16.png, $(COPY_FILES))
|
|
||||||
# Alter JavaCup16.png from ClosedJDK
|
|
||||||
COPY_FILES += \
|
|
||||||
$(SWING_PLAF_BASIC_RESOURCES_DIR_CLOSED)/icons/JavaCup16.png
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef OPENJDK
|
|
||||||
SWING_PLAF_MOTIF_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif
|
|
||||||
COPY_FILES += \
|
|
||||||
$(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR)/icons/*.gif) \
|
|
||||||
$(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR)/icons/*.png)
|
|
||||||
else
|
|
||||||
SWING_PLAF_MOTIF_RESOURCES_DIR_CLOSED = $(JDK_TOPDIR)/src/closed/share/classes/com/sun/java/swing/plaf/motif
|
|
||||||
COPY_FILES += \
|
|
||||||
$(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR_CLOSED)/icons/*.gif) \
|
|
||||||
$(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR_CLOSED)/icons/*.png)
|
|
||||||
endif
|
|
||||||
|
|
||||||
SWING_PLAF_METAL_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/metal
|
|
||||||
COPY_FILES += \
|
|
||||||
$(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/*.gif) \
|
|
||||||
$(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/*.png) \
|
|
||||||
$(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/ocean/*.gif) \
|
|
||||||
$(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/ocean/*.png) \
|
|
||||||
$(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/sounds/*.wav)
|
|
||||||
|
|
||||||
ifneq ($(OPENJDK_TARGET_OS), windows)
|
|
||||||
# Only copy GTK resources on Solaris/Linux
|
|
||||||
SWING_PLAF_GTK_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk
|
|
||||||
COPY_FILES += \
|
|
||||||
$(wildcard $(SWING_PLAF_GTK_RESOURCES_DIR)/icons/*.gif) \
|
|
||||||
$(wildcard $(SWING_PLAF_GTK_RESOURCES_DIR)/icons/*.png) \
|
|
||||||
$(wildcard $(SWING_PLAF_GTK_RESOURCES_DIR)/resources/metacity/SwingFallbackTheme/metacity-1/*.xml)
|
|
||||||
endif
|
|
||||||
# END: Swing plaf resources
|
|
||||||
|
|
||||||
SWING_BEANINFO_RESOURCES_SRC_DIR = $(JDK_TOPDIR)/make/data/swingbeaninfo/images
|
SWING_BEANINFO_RESOURCES_SRC_DIR = $(JDK_TOPDIR)/make/data/swingbeaninfo/images
|
||||||
SWING_BEANINFO_RESOURCES_SRC = $(wildcard $(SWING_BEANINFO_RESOURCES_SRC_DIR)/*.gif)
|
SWING_BEANINFO_RESOURCES_SRC = $(wildcard $(SWING_BEANINFO_RESOURCES_SRC_DIR)/*.gif)
|
||||||
OUT_BEANINFO_RESOURCES = $(patsubst $(SWING_BEANINFO_RESOURCES_SRC_DIR)%, \
|
OUT_BEANINFO_RESOURCES = $(patsubst $(SWING_BEANINFO_RESOURCES_SRC_DIR)%, \
|
||||||
|
@ -147,13 +79,13 @@ OUT_BEANINFO_RESOURCES = $(patsubst $(SWING_BEANINFO_RESOURCES_SRC_DIR)%, \
|
||||||
$(SWING_BEANINFO_RESOURCES_SRC))
|
$(SWING_BEANINFO_RESOURCES_SRC))
|
||||||
|
|
||||||
COPY_EXTRA += $(OUT_BEANINFO_RESOURCES)
|
COPY_EXTRA += $(OUT_BEANINFO_RESOURCES)
|
||||||
# END: Swing beaninfo resources
|
|
||||||
|
|
||||||
# Swing text resources
|
# The exception handling of swing beaninfo
|
||||||
SWING_TEXT_RESOURCEDIR = $(JDK_TOPDIR)/src/share/classes/javax/swing/text
|
# These resources violates the convention of having code and resources together under
|
||||||
COPY_FILES += \
|
# $(JDK_TOPDIR)/src/.../classes directories
|
||||||
$(SWING_TEXT_RESOURCEDIR)/html/default.css \
|
$(JDK_OUTPUTDIR)/classes/javax/swing/beaninfo/images/%.gif: \
|
||||||
$(wildcard $(SWING_TEXT_RESOURCEDIR)/rtf/charsets/*.txt)
|
$(JDK_TOPDIR)/make/data/swingbeaninfo/images/%.gif
|
||||||
|
$(call install-file)
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
#
|
#
|
||||||
|
@ -222,14 +154,7 @@ $(foreach i, $(META-INF_RULES_SERVICES), $(eval $(call addto_meta-inf_services,
|
||||||
COPY_EXTRA += $(OUT_SERVICES_FILES)
|
COPY_EXTRA += $(OUT_SERVICES_FILES)
|
||||||
COPY_EXTRA += $(OUT_SERVICES_FILES_PRINT)
|
COPY_EXTRA += $(OUT_SERVICES_FILES_PRINT)
|
||||||
|
|
||||||
###
|
################################################################################
|
||||||
|
|
||||||
$(JDK_OUTPUTDIR)/classes/sun/nio/cs/ext/sjis0213.dat: $(JDK_OUTPUTDIR)/gensrc/sun/nio/cs/ext/sjis0213.dat
|
|
||||||
$(call install-file)
|
|
||||||
|
|
||||||
COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/sun/nio/cs/ext/sjis0213.dat
|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
JAVAX_SOUND_SRC := $(JDK_TOPDIR)/src/share/classes/com/sun/media/sound/services
|
JAVAX_SOUND_SRC := $(JDK_TOPDIR)/src/share/classes/com/sun/media/sound/services
|
||||||
|
|
||||||
|
@ -248,3 +173,30 @@ COPY_EXTRA += $(addprefix $(JDK_OUTPUTDIR)/classes/META-INF/services/, $(JAVAX_S
|
||||||
JAVAX_SOUND_RULES := $(foreach F, $(JAVAX_SOUND_SRC_FILES), $(JDK_OUTPUTDIR)/classes/META-INF/services/$(notdir $F):$(JAVAX_SOUND_SRC)/$F)
|
JAVAX_SOUND_RULES := $(foreach F, $(JAVAX_SOUND_SRC_FILES), $(JDK_OUTPUTDIR)/classes/META-INF/services/$(notdir $F):$(JAVAX_SOUND_SRC)/$F)
|
||||||
|
|
||||||
$(foreach R, $(JAVAX_SOUND_RULES), $(eval $(call addto_meta-inf_services, $R)))
|
$(foreach R, $(JAVAX_SOUND_RULES), $(eval $(call addto_meta-inf_services, $R)))
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
CLEAN_FILES := $(wildcard \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/imageio/plugins/common/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/java/util/jar/pack/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/jndi/cosnaming/jndiprovider.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/jndi/ldap/jndiprovider.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/org/apache/xml/internal/security/resource/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/rowset/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/tools/script/shell/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/javax/sql/rowset/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/rmi/registry/resources/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/rmi/rmic/resources/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/rmi/server/resources/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/tools/javac/resources/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/tools/jconsole/resources/*.properties \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/tools/serialver/resources/*.properties \
|
||||||
|
)
|
||||||
|
|
||||||
|
# Copy zh_HK files from zh_TW
|
||||||
|
|
||||||
|
$(JDK_OUTPUTDIR)/classes/%_zh_HK.properties: $(JDK_OUTPUTDIR)/classes/%_zh_TW.properties
|
||||||
|
$(install-file)
|
||||||
|
|
||||||
|
COPY_EXTRA += $(patsubst $(JDK_TOPDIR)/src/share/classes/%, $(JDK_OUTPUTDIR)/classes/%, \
|
||||||
|
$(subst _zh_TW,_zh_HK, $(filter %_zh_TW.properties, $(CLEAN_FILES))))
|
||||||
|
|
|
@ -30,9 +30,6 @@ include Setup.gmk
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
# Prepare the find cache. Only used if running on windows.
|
|
||||||
$(eval $(call FillCacheFind, $(JDK_OUTPUTDIR)/classes))
|
|
||||||
|
|
||||||
include Tools.gmk
|
include Tools.gmk
|
||||||
|
|
||||||
include Profiles.gmk
|
include Profiles.gmk
|
||||||
|
|
|
@ -30,7 +30,7 @@ include Setup.gmk
|
||||||
|
|
||||||
default: images
|
default: images
|
||||||
|
|
||||||
# Prepare the find cache. Only used if running on windows.
|
# Prepare the find cache.
|
||||||
$(eval $(call FillCacheFind, \
|
$(eval $(call FillCacheFind, \
|
||||||
$(wildcard $(JDK_OUTPUTDIR)/bin \
|
$(wildcard $(JDK_OUTPUTDIR)/bin \
|
||||||
$(JDK_OUTPUTDIR)/lib \
|
$(JDK_OUTPUTDIR)/lib \
|
||||||
|
|
|
@ -252,7 +252,7 @@ define unzip-sec-file
|
||||||
$(ECHO) Unzipping $(<F)
|
$(ECHO) Unzipping $(<F)
|
||||||
$(MKDIR) -p $(@D)
|
$(MKDIR) -p $(@D)
|
||||||
$(RM) $@
|
$(RM) $@
|
||||||
($(CD) $(JDK_OUTPUTDIR) && $(UNZIP) $< > $@.tmp)
|
($(CD) $(JDK_OUTPUTDIR) && $(UNZIP) -q -o $< > $@.tmp)
|
||||||
$(MV) $@.tmp $@
|
$(MV) $@.tmp $@
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ JAVAC_WARNINGS := -Xlint:-unchecked,-deprecation,-overrides,auxiliaryclass,cast,
|
||||||
# boot jdk to generate tools that need to be run with the boot jdk.
|
# boot jdk to generate tools that need to be run with the boot jdk.
|
||||||
# Thus we force the target bytecode to the previous JDK version.
|
# Thus we force the target bytecode to the previous JDK version.
|
||||||
$(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \
|
$(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \
|
||||||
JVM := $(JAVA), \
|
JVM := $(JAVA_SMALL), \
|
||||||
JAVAC := $(NEW_JAVAC), \
|
JAVAC := $(NEW_JAVAC), \
|
||||||
FLAGS := $(BOOT_JDK_SOURCETARGET) -bootclasspath $(BOOT_RTJAR) $(DISABLE_WARNINGS), \
|
FLAGS := $(BOOT_JDK_SOURCETARGET) -bootclasspath $(BOOT_RTJAR) $(DISABLE_WARNINGS), \
|
||||||
SERVER_DIR := $(SJAVAC_SERVER_DIR), \
|
SERVER_DIR := $(SJAVAC_SERVER_DIR), \
|
||||||
|
@ -60,7 +60,7 @@ $(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE, \
|
||||||
# I.e. the rt.jar, but since rt.jar has not yet been generated
|
# I.e. the rt.jar, but since rt.jar has not yet been generated
|
||||||
# (it will be in "make images") therefore we use classes instead.
|
# (it will be in "make images") therefore we use classes instead.
|
||||||
$(eval $(call SetupJavaCompiler,GENERATE_USINGJDKBYTECODE, \
|
$(eval $(call SetupJavaCompiler,GENERATE_USINGJDKBYTECODE, \
|
||||||
JVM := $(JAVA), \
|
JVM := $(JAVA_SMALL), \
|
||||||
JAVAC := $(NEW_JAVAC), \
|
JAVAC := $(NEW_JAVAC), \
|
||||||
FLAGS := -bootclasspath $(JDK_OUTPUTDIR)/classes $(DISABLE_WARNINGS), \
|
FLAGS := -bootclasspath $(JDK_OUTPUTDIR)/classes $(DISABLE_WARNINGS), \
|
||||||
SERVER_DIR := $(SJAVAC_SERVER_DIR), \
|
SERVER_DIR := $(SJAVAC_SERVER_DIR), \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
# Cache all finds needed for this file. Only used on windows.
|
# Cache all finds needed for this file.
|
||||||
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/make/src/classes))
|
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/make/src/classes))
|
||||||
|
|
||||||
# The exception handling of swing beaninfo which have the own tool directory
|
# The exception handling of swing beaninfo which have the own tool directory
|
||||||
|
@ -48,79 +48,76 @@ $(JDK_OUTPUTDIR)/btclasses/build/tools/deps/refs.allowed: \
|
||||||
BUILD_TOOLS += $(JDK_OUTPUTDIR)/btclasses/build/tools/deps/refs.allowed
|
BUILD_TOOLS += $(JDK_OUTPUTDIR)/btclasses/build/tools/deps/refs.allowed
|
||||||
|
|
||||||
# Add a checksum ("jsum") to the end of a text file. Prevents trivial tampering with class lists.
|
# Add a checksum ("jsum") to the end of a text file. Prevents trivial tampering with class lists.
|
||||||
TOOL_ADDJSUM = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_ADDJSUM = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.addjsum.AddJsum
|
build.tools.addjsum.AddJsum
|
||||||
|
|
||||||
# The buildmetaindex tool creates a meta-index to make core class loaders lazier.
|
# The buildmetaindex tool creates a meta-index to make core class loaders lazier.
|
||||||
TOOL_BUILDMETAINDEX = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_BUILDMETAINDEX = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.buildmetaindex.BuildMetaIndex
|
build.tools.buildmetaindex.BuildMetaIndex
|
||||||
|
|
||||||
TOOL_COMPILEFONTCONFIG = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_COMPILEFONTCONFIG = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.compilefontconfig.CompileFontConfig
|
build.tools.compilefontconfig.CompileFontConfig
|
||||||
|
|
||||||
TOOL_COMPILEPROPERTIES = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_COMPILEPROPERTIES = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.compileproperties.CompileProperties
|
build.tools.compileproperties.CompileProperties
|
||||||
|
|
||||||
TOOL_STRIPPROPERTIES = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_JARREORDER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.stripproperties.StripProperties
|
|
||||||
|
|
||||||
TOOL_JARREORDER = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
|
||||||
build.tools.jarreorder.JarReorder
|
build.tools.jarreorder.JarReorder
|
||||||
|
|
||||||
TOOL_GENERATECHARACTER = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_GENERATECHARACTER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.generatecharacter.GenerateCharacter
|
build.tools.generatecharacter.GenerateCharacter
|
||||||
|
|
||||||
TOOL_CHARACTERNAME = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_CHARACTERNAME = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.generatecharacter.CharacterName
|
build.tools.generatecharacter.CharacterName
|
||||||
|
|
||||||
TOOL_DTDBUILDER = $(JAVA) -Ddtd_home=$(JDK_TOPDIR)/make/data/dtdbuilder \
|
TOOL_DTDBUILDER = $(JAVA_SMALL) -Ddtd_home=$(JDK_TOPDIR)/make/data/dtdbuilder \
|
||||||
-cp $(JDK_OUTPUTDIR)/btclasses build.tools.dtdbuilder.DTDBuilder
|
-cp $(JDK_OUTPUTDIR)/btclasses build.tools.dtdbuilder.DTDBuilder
|
||||||
|
|
||||||
TOOL_GENERATEBREAKITERATORDATA = $(JAVA) \
|
TOOL_GENERATEBREAKITERATORDATA = $(JAVA_SMALL) \
|
||||||
-cp $(JDK_OUTPUTDIR)/btclasses \
|
-cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.generatebreakiteratordata.GenerateBreakIteratorData
|
build.tools.generatebreakiteratordata.GenerateBreakIteratorData
|
||||||
|
|
||||||
TOOL_GENERATECURRENCYDATA = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_GENERATECURRENCYDATA = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.generatecurrencydata.GenerateCurrencyData
|
build.tools.generatecurrencydata.GenerateCurrencyData
|
||||||
|
|
||||||
TOOL_HASHER = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_HASHER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.hasher.Hasher
|
build.tools.hasher.Hasher
|
||||||
|
|
||||||
TOOL_TZDB = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_TZDB = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.tzdb.TzdbZoneRulesCompiler
|
build.tools.tzdb.TzdbZoneRulesCompiler
|
||||||
|
|
||||||
|
|
||||||
# TODO: There are references to the jdwpgen.jar in jdk/make/netbeans/jdwpgen/build.xml
|
# TODO: There are references to the jdwpgen.jar in jdk/make/netbeans/jdwpgen/build.xml
|
||||||
# and nbproject/project.properties in the same dir. Needs to be looked at.
|
# and nbproject/project.properties in the same dir. Needs to be looked at.
|
||||||
TOOL_JDWPGEN = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.jdwpgen.Main
|
TOOL_JDWPGEN = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.jdwpgen.Main
|
||||||
|
|
||||||
# TODO: Lots of files in jdk/make/tools/CharsetMapping dir
|
# TODO: Lots of files in jdk/make/tools/CharsetMapping dir
|
||||||
TOOL_CHARSETMAPPING = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_CHARSETMAPPING = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.charsetmapping.Main $(LOG_INFO)
|
build.tools.charsetmapping.Main $(LOG_INFO)
|
||||||
|
|
||||||
TOOL_SPP = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.spp.Spp
|
TOOL_SPP = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.spp.Spp
|
||||||
|
|
||||||
# Nimbus is used somewhere in the swing build.
|
# Nimbus is used somewhere in the swing build.
|
||||||
TOOL_GENERATENIMBUS = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_GENERATENIMBUS = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.generatenimbus.Generator
|
build.tools.generatenimbus.Generator
|
||||||
|
|
||||||
TOOL_WRAPPERGENERATOR = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_WRAPPERGENERATOR = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.x11wrappergen.WrapperGenerator
|
build.tools.x11wrappergen.WrapperGenerator
|
||||||
|
|
||||||
TOOL_AWT_TOBIN = $(JAVA) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_AWT_TOBIN = $(JAVA_SMALL) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.icondata.awt.ToBin
|
build.tools.icondata.awt.ToBin
|
||||||
|
|
||||||
TOOL_OSX_TOBIN = $(JAVA) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_OSX_TOBIN = $(JAVA_SMALL) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.icondata.osxapp.ToBin
|
build.tools.icondata.osxapp.ToBin
|
||||||
|
|
||||||
TOOL_CLDRCONVERTER = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_CLDRCONVERTER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.cldrconverter.CLDRConverter
|
build.tools.cldrconverter.CLDRConverter
|
||||||
|
|
||||||
TOOL_CHECKDEPS = $(JAVA) -Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR) \
|
TOOL_CHECKDEPS = $(JAVA_SMALL) -Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR) \
|
||||||
-cp $(JDK_OUTPUTDIR)/btclasses:$(JDK_OUTPUTDIR) \
|
-cp $(JDK_OUTPUTDIR)/btclasses:$(JDK_OUTPUTDIR) \
|
||||||
build.tools.deps.CheckDeps
|
build.tools.deps.CheckDeps
|
||||||
|
|
||||||
TOOL_ADDTORESTRICTEDPKGS=$(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \
|
TOOL_ADDTORESTRICTEDPKGS = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
|
||||||
build.tools.addtorestrictedpkgs.AddToRestrictedPkgs
|
build.tools.addtorestrictedpkgs.AddToRestrictedPkgs
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
|
|
|
@ -21,4 +21,4 @@
|
||||||
# or visit www.oracle.com if you need additional information or have any
|
# or visit www.oracle.com if you need additional information or have any
|
||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
tzdata2013i
|
tzdata2014a
|
||||||
|
|
|
@ -1113,8 +1113,13 @@ Rule Zion 1986 only - May 18 0:00 1:00 D
|
||||||
Rule Zion 1986 only - Sep 7 0:00 0 S
|
Rule Zion 1986 only - Sep 7 0:00 0 S
|
||||||
Rule Zion 1987 only - Apr 15 0:00 1:00 D
|
Rule Zion 1987 only - Apr 15 0:00 1:00 D
|
||||||
Rule Zion 1987 only - Sep 13 0:00 0 S
|
Rule Zion 1987 only - Sep 13 0:00 0 S
|
||||||
Rule Zion 1988 only - Apr 9 0:00 1:00 D
|
|
||||||
Rule Zion 1988 only - Sep 3 0:00 0 S
|
# From Avigdor Finkelstein (2014-03-05):
|
||||||
|
# I check the Parliament (Knesset) records and there it's stated that the
|
||||||
|
# [1988] transition should take place on Saturday night, when the Sabbath
|
||||||
|
# ends and changes to Sunday.
|
||||||
|
Rule Zion 1988 only - Apr 10 0:00 1:00 D
|
||||||
|
Rule Zion 1988 only - Sep 4 0:00 0 S
|
||||||
|
|
||||||
# From Ephraim Silverberg
|
# From Ephraim Silverberg
|
||||||
# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22,
|
# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22,
|
||||||
|
|
|
@ -377,16 +377,18 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
|
||||||
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155
|
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155
|
||||||
|
|
||||||
# From the Fijian Government Media Center (2013-08-30) via David Wheeler:
|
# From the Fijian Government Media Center (2013-08-30) via David Wheeler:
|
||||||
# Fiji will start daylight savings on Sunday 27th October, 2013 and end at 3am
|
# Fiji will start daylight savings on Sunday 27th October, 2013 ...
|
||||||
# on Sunday 19th January, 2014.... move clocks forward by one hour from 2am
|
# move clocks forward by one hour from 2am
|
||||||
# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-27th-OCTOBER-201.aspx
|
# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-27th-OCTOBER-201.aspx
|
||||||
#
|
|
||||||
# From Paul Eggert (2013-09-09):
|
# From Steffen Thorsen (2013-01-10):
|
||||||
|
# Fiji will end DST on 2014-01-19 02:00:
|
||||||
|
# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVINGS-TO-END-THIS-MONTH-%281%29.aspx
|
||||||
|
|
||||||
|
# From Paul Eggert (2014-01-10):
|
||||||
# For now, guess that Fiji springs forward the Sunday before the fourth
|
# For now, guess that Fiji springs forward the Sunday before the fourth
|
||||||
# Monday in October. This matches both recent practice and
|
# Monday in October, and springs back the penultimate Sunday in January.
|
||||||
# timeanddate.com's current spring-forward prediction.
|
# This is ad hoc, but matches recent practice.
|
||||||
# For the January 2014 transition we guessed right while timeanddate.com
|
|
||||||
# guessed wrong, so leave the fall-back prediction alone.
|
|
||||||
|
|
||||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||||
Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
|
Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
|
||||||
|
@ -395,7 +397,8 @@ Rule Fiji 2009 only - Nov 29 2:00 1:00 S
|
||||||
Rule Fiji 2010 only - Mar lastSun 3:00 0 -
|
Rule Fiji 2010 only - Mar lastSun 3:00 0 -
|
||||||
Rule Fiji 2010 max - Oct Sun>=21 2:00 1:00 S
|
Rule Fiji 2010 max - Oct Sun>=21 2:00 1:00 S
|
||||||
Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
|
Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
|
||||||
Rule Fiji 2012 max - Jan Sun>=18 3:00 0 -
|
Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
|
||||||
|
Rule Fiji 2014 max - Jan Sun>=18 2:00 0 -
|
||||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||||
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
|
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
|
||||||
12:00 Fiji FJ%sT # Fiji Time
|
12:00 Fiji FJ%sT # Fiji Time
|
||||||
|
|
|
@ -2768,14 +2768,18 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
|
||||||
# According to the articles linked below, Turkey will change into summer
|
# According to the articles linked below, Turkey will change into summer
|
||||||
# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
|
# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
|
||||||
# This change is due to a nationwide exam on 27th.
|
# This change is due to a nationwide exam on 27th.
|
||||||
#
|
|
||||||
# <a href="http://www.worldbulletin.net/?aType=haber&ArticleID=70872">
|
|
||||||
# http://www.worldbulletin.net/?aType=haber&ArticleID=70872
|
# http://www.worldbulletin.net/?aType=haber&ArticleID=70872
|
||||||
# </a>
|
|
||||||
# Turkish:
|
# Turkish:
|
||||||
# <a href="http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373">
|
|
||||||
# http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373
|
# http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373
|
||||||
# </a>
|
|
||||||
|
# From Faruk Pasin (2014-02-14):
|
||||||
|
# The DST for Turkey has been changed for this year because of the
|
||||||
|
# Turkish Local election....
|
||||||
|
# http://www.sabah.com.tr/Ekonomi/2014/02/12/yaz-saatinde-onemli-degisiklik
|
||||||
|
# ... so Turkey will move clocks forward one hour on March 31 at 3:00 a.m.
|
||||||
|
# From Paul Eggert (2014-02-17):
|
||||||
|
# Here is an English-language source:
|
||||||
|
# http://www.worldbulletin.net/turkey/129016/turkey-switches-to-daylight-saving-time-march-31
|
||||||
|
|
||||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||||
Rule Turkey 1916 only - May 1 0:00 1:00 S
|
Rule Turkey 1916 only - May 1 0:00 1:00 S
|
||||||
|
@ -2844,6 +2848,8 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880
|
||||||
2:00 Turkey EE%sT 2007
|
2:00 Turkey EE%sT 2007
|
||||||
2:00 EU EE%sT 2011 Mar 27 1:00u
|
2:00 EU EE%sT 2011 Mar 27 1:00u
|
||||||
2:00 - EET 2011 Mar 28 1:00u
|
2:00 - EET 2011 Mar 28 1:00u
|
||||||
|
2:00 EU EE%sT 2014 Mar 30 1:00u
|
||||||
|
2:00 - EET 2014 Mar 31 1:00u
|
||||||
2:00 EU EE%sT
|
2:00 EU EE%sT
|
||||||
Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
||||||
|
|
||||||
|
@ -2865,19 +2871,13 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
||||||
# approval from 266 deputies.
|
# approval from 266 deputies.
|
||||||
#
|
#
|
||||||
# Ukraine abolishes transter back to the winter time (in Russian)
|
# Ukraine abolishes transter back to the winter time (in Russian)
|
||||||
# <a href="http://news.mail.ru/politics/6861560/">
|
|
||||||
# http://news.mail.ru/politics/6861560/
|
# http://news.mail.ru/politics/6861560/
|
||||||
# </a>
|
|
||||||
#
|
#
|
||||||
# The Ukrainians will no longer change the clock (in Russian)
|
# The Ukrainians will no longer change the clock (in Russian)
|
||||||
# <a href="http://www.segodnya.ua/news/14290482.html">
|
|
||||||
# http://www.segodnya.ua/news/14290482.html
|
# http://www.segodnya.ua/news/14290482.html
|
||||||
# </a>
|
|
||||||
#
|
#
|
||||||
# Deputies cancelled the winter time (in Russian)
|
# Deputies cancelled the winter time (in Russian)
|
||||||
# <a href="http://www.pravda.com.ua/rus/news/2011/09/20/6600616/">
|
|
||||||
# http://www.pravda.com.ua/rus/news/2011/09/20/6600616/
|
# http://www.pravda.com.ua/rus/news/2011/09/20/6600616/
|
||||||
# </a>
|
|
||||||
#
|
#
|
||||||
# From Philip Pizzey (2011-10-18):
|
# From Philip Pizzey (2011-10-18):
|
||||||
# Today my Ukrainian colleagues have informed me that the
|
# Today my Ukrainian colleagues have informed me that the
|
||||||
|
@ -2888,18 +2888,39 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
||||||
# As far as I understand, the recent change to the Ukrainian time zone
|
# As far as I understand, the recent change to the Ukrainian time zone
|
||||||
# (Europe/Kiev) to introduce permanent daylight saving time (similar
|
# (Europe/Kiev) to introduce permanent daylight saving time (similar
|
||||||
# to Russia) was reverted today:
|
# to Russia) was reverted today:
|
||||||
#
|
|
||||||
# <a href="http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995">
|
|
||||||
# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995
|
# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995
|
||||||
# </a>
|
|
||||||
#
|
#
|
||||||
# Also reported by Alexander Bokovoy (2011-10-18) who also noted:
|
# Also reported by Alexander Bokovoy (2011-10-18) who also noted:
|
||||||
# The law documents themselves are at
|
# The law documents themselves are at
|
||||||
#
|
|
||||||
# <a href="http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484">
|
|
||||||
# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
|
# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
|
||||||
# </a>
|
|
||||||
|
|
||||||
|
# From Vladimir in Moscow via Alois Treindl re Kiev time 1991/2 (2014-02-28):
|
||||||
|
# First in Ukraine they changed Time zone from UTC+3 to UTC+2 with DST:
|
||||||
|
# 03 25 1990 02:00 -03.00 1 Time Zone 3 with DST
|
||||||
|
# 07 01 1990 02:00 -02.00 1 Time Zone 2 with DST
|
||||||
|
# * Ukrainian Government's Resolution of 18.06.1990, No. 134.
|
||||||
|
# http://search.ligazakon.ua/l_doc2.nsf/link1/T001500.html
|
||||||
|
#
|
||||||
|
# They did not end DST in September, 1990 (according to the law,
|
||||||
|
# "summer time" was still in action):
|
||||||
|
# 09 30 1990 03:00 -02.00 1 Time Zone 2 with DST
|
||||||
|
# * Ukrainian Government's Resolution of 21.09.1990, No. 272.
|
||||||
|
# http://search.ligazakon.ua/l_doc2.nsf/link1/KP900272.html
|
||||||
|
#
|
||||||
|
# Again no change in March, 1991 ("summer time" in action):
|
||||||
|
# 03 31 1991 02:00 -02.00 1 Time Zone 2 with DST
|
||||||
|
#
|
||||||
|
# DST ended in September 1991 ("summer time" ended):
|
||||||
|
# 09 29 1991 03:00 -02.00 0 Time Zone 2, no DST
|
||||||
|
# * Ukrainian Government's Resolution of 25.09.1991, No. 225.
|
||||||
|
# http://www.uazakon.com/documents/date_21/pg_iwgdoc.htm
|
||||||
|
# This is an answer.
|
||||||
|
#
|
||||||
|
# Since 1992 they had normal DST procedure:
|
||||||
|
# 03 29 1992 02:00 -02.00 1 DST started
|
||||||
|
# 09 27 1992 03:00 -02.00 0 DST ended
|
||||||
|
# * Ukrainian Government's Resolution of 20.03.1992, No. 139.
|
||||||
|
# http://www.uazakon.com/documents/date_8u/pg_grcasa.htm
|
||||||
|
|
||||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||||
# Most of Ukraine since 1970 has been like Kiev.
|
# Most of Ukraine since 1970 has been like Kiev.
|
||||||
|
@ -2910,9 +2931,8 @@ Zone Europe/Kiev 2:02:04 - LMT 1880
|
||||||
2:00 - EET 1930 Jun 21
|
2:00 - EET 1930 Jun 21
|
||||||
3:00 - MSK 1941 Sep 20
|
3:00 - MSK 1941 Sep 20
|
||||||
1:00 C-Eur CE%sT 1943 Nov 6
|
1:00 C-Eur CE%sT 1943 Nov 6
|
||||||
3:00 Russia MSK/MSD 1990
|
3:00 Russia MSK/MSD 1990 Jul 1 2:00
|
||||||
3:00 - MSK 1990 Jul 1 2:00
|
2:00 1:00 EEST 1991 Sep 29 3:00
|
||||||
2:00 - EET 1992
|
|
||||||
2:00 E-Eur EE%sT 1995
|
2:00 E-Eur EE%sT 1995
|
||||||
2:00 EU EE%sT
|
2:00 EU EE%sT
|
||||||
# Ruthenia used CET 1990/1991.
|
# Ruthenia used CET 1990/1991.
|
||||||
|
|
|
@ -414,9 +414,10 @@ Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
|
||||||
# US Pacific time, represented by Los Angeles
|
# US Pacific time, represented by Los Angeles
|
||||||
#
|
#
|
||||||
# California, northern Idaho (Benewah, Bonner, Boundary, Clearwater,
|
# California, northern Idaho (Benewah, Bonner, Boundary, Clearwater,
|
||||||
# Idaho, Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties,
|
# Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, Idaho county
|
||||||
# and the northern three-quarters of Idaho county),
|
# north of the Salmon River, and the towns of Burgdorf and Warren),
|
||||||
# most of Nevada, most of Oregon, and Washington
|
# Nevada (except West Wendover), Oregon (except the northern 3/4 of
|
||||||
|
# Malheur county), and Washington
|
||||||
#
|
#
|
||||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
|
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
|
||||||
Rule CA 1948 only - Mar 14 2:00 1:00 D
|
Rule CA 1948 only - Mar 14 2:00 1:00 D
|
||||||
|
|
|
@ -1298,6 +1298,13 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||||
# start date is 2013-09-08 00:00....
|
# start date is 2013-09-08 00:00....
|
||||||
# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
|
# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
|
||||||
|
|
||||||
|
# From Jose Miguel Garrido (2014-02-19):
|
||||||
|
# Today appeared in the Diario Oficial a decree amending the time change
|
||||||
|
# dates to 2014.
|
||||||
|
# DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
|
||||||
|
# DST Start: first Saturday of September 2014 (Sun 07 Sep 2014 04:00 UTC)
|
||||||
|
# http://www.diariooficial.interior.gob.cl//media/2014/02/19/do-20140219.pdf
|
||||||
|
|
||||||
# NOTE: ChileAQ rules for Antarctic bases are stored separately in the
|
# NOTE: ChileAQ rules for Antarctic bases are stored separately in the
|
||||||
# 'antarctica' file.
|
# 'antarctica' file.
|
||||||
|
|
||||||
|
@ -1631,6 +1638,9 @@ Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
|
||||||
# From Carlos Raul Perasso (2013-03-15):
|
# From Carlos Raul Perasso (2013-03-15):
|
||||||
# The change in Paraguay is now final. Decree number 10780
|
# The change in Paraguay is now final. Decree number 10780
|
||||||
# http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
|
# http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
|
||||||
|
# From Carlos Raul Perasso (2014-02-28):
|
||||||
|
# Decree 1264 can be found at:
|
||||||
|
# http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
|
||||||
Rule Para 2013 max - Mar Sun>=22 0:00 0 -
|
Rule Para 2013 max - Mar Sun>=22 0:00 0 -
|
||||||
|
|
||||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||||
|
@ -1689,18 +1699,19 @@ Zone America/Paramaribo -3:40:40 - LMT 1911
|
||||||
Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
|
Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
|
||||||
-4:00 - AST
|
-4:00 - AST
|
||||||
|
|
||||||
|
# These all agree with Trinidad and Tobago since 1970.
|
||||||
Link America/Port_of_Spain America/Anguilla
|
Link America/Port_of_Spain America/Anguilla
|
||||||
Link America/Port_of_Spain America/Dominica
|
Link America/Port_of_Spain America/Dominica
|
||||||
Link America/Port_of_Spain America/Grenada
|
Link America/Port_of_Spain America/Grenada
|
||||||
Link America/Port_of_Spain America/Guadeloupe
|
Link America/Port_of_Spain America/Guadeloupe
|
||||||
Link America/Port_of_Spain America/Marigot
|
Link America/Port_of_Spain America/Marigot # St Martin (French part)
|
||||||
Link America/Port_of_Spain America/Montserrat
|
Link America/Port_of_Spain America/Montserrat
|
||||||
Link America/Port_of_Spain America/St_Barthelemy
|
Link America/Port_of_Spain America/St_Barthelemy
|
||||||
Link America/Port_of_Spain America/St_Kitts
|
Link America/Port_of_Spain America/St_Kitts # St Kitts & Nevis
|
||||||
Link America/Port_of_Spain America/St_Lucia
|
Link America/Port_of_Spain America/St_Lucia
|
||||||
Link America/Port_of_Spain America/St_Thomas
|
Link America/Port_of_Spain America/St_Thomas # Virgin Islands (US)
|
||||||
Link America/Port_of_Spain America/St_Vincent
|
Link America/Port_of_Spain America/St_Vincent
|
||||||
Link America/Port_of_Spain America/Tortola
|
Link America/Port_of_Spain America/Tortola # Virgin Islands (UK)
|
||||||
|
|
||||||
# Uruguay
|
# Uruguay
|
||||||
# From Paul Eggert (1993-11-18):
|
# From Paul Eggert (1993-11-18):
|
||||||
|
|
|
@ -23,8 +23,10 @@
|
||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
# Prepare the find cache. This is only used on windows.
|
# Prepare the find cache.
|
||||||
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/windows/classes))
|
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src/share/classes \
|
||||||
|
$(JDK_TOPDIR)/src/windows/classes \
|
||||||
|
$(JDK_TOPDIR)/src/macosx/classes))
|
||||||
|
|
||||||
# All .properties files to be compiled are appended to this variable.
|
# All .properties files to be compiled are appended to this variable.
|
||||||
ALL_COMPILED_PROPSOURCES :=
|
ALL_COMPILED_PROPSOURCES :=
|
||||||
|
@ -33,19 +35,10 @@ ALL_COMPILED_PROPJAVAS :=
|
||||||
# The (very long) command line for compilation, stored in a file, prior to use.
|
# The (very long) command line for compilation, stored in a file, prior to use.
|
||||||
COMPILE_PROPCMDLINE :=
|
COMPILE_PROPCMDLINE :=
|
||||||
|
|
||||||
# All .properties files to be cleaned are appended to this variable.
|
|
||||||
ALL_CLEANED_PROPSOURCES :=
|
|
||||||
# All generated cleaned .properties files from cleaning are appended to this variable.
|
|
||||||
ALL_CLEANED_PROPOUTPUT :=
|
|
||||||
# The (very long) command line for cleaning, stored in a file, prior to use.
|
|
||||||
CLEAN_PROPCMDLINE :=
|
|
||||||
|
|
||||||
define add_properties_to_compile
|
define add_properties_to_compile
|
||||||
# $1 is the name of the properties group
|
# $1 is the name of the properties group
|
||||||
# $2 is the files belonging to this group
|
# $2 is the files belonging to this group
|
||||||
# $3 is the super class for the generated java file.
|
# $3 is the super class for the generated java file.
|
||||||
# $4 is a from pattern for translating stripped name from source to target
|
|
||||||
# $5 is the to pattern replacing $3 in the target
|
|
||||||
|
|
||||||
# Strip away prefix and suffix,
|
# Strip away prefix and suffix,
|
||||||
# leaving for example: sun/util/resources/CurrencyNames_sv
|
# leaving for example: sun/util/resources/CurrencyNames_sv
|
||||||
|
@ -53,16 +46,14 @@ define add_properties_to_compile
|
||||||
$$(patsubst $(JDK_TOPDIR)/src/macosx/classes/%.properties, %, \
|
$$(patsubst $(JDK_TOPDIR)/src/macosx/classes/%.properties, %, \
|
||||||
$$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties, %, $2)))
|
$$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties, %, $2)))
|
||||||
|
|
||||||
# Apply optional name transformation, example: hz_TW -> hz_HK
|
|
||||||
$(if $4, $1_PROPPATHS := $$(patsubst $4, $5, $$($1_PROPPATHS)))
|
|
||||||
|
|
||||||
# Accumulate all found properties files.
|
# Accumulate all found properties files.
|
||||||
ALL_COMPILED_PROPSOURCES += $2
|
ALL_COMPILED_PROPSOURCES += $2
|
||||||
|
|
||||||
# Generate the list of to be created java files.
|
# Generate the list of to be created java files.
|
||||||
ALL_COMPILED_PROPJAVAS += $$(patsubst %, $(JDK_OUTPUTDIR)/gensrc/%.java, $$($1_PROPPATHS))
|
ALL_COMPILED_PROPJAVAS += $$(patsubst %, $(JDK_OUTPUTDIR)/gensrc/%.java, $$($1_PROPPATHS))
|
||||||
|
|
||||||
# Now generate a sequence of "-compile ...CurrencyNames_sv.properties ...CurrencyNames_sv.java ListResourceBundle"
|
# Now generate a sequence of
|
||||||
|
# "-compile ...CurrencyNames_sv.properties ...CurrencyNames_sv.java ListResourceBundle"
|
||||||
# suitable to be fed into the CompileProperties command.
|
# suitable to be fed into the CompileProperties command.
|
||||||
COMPILE_PROPCMDLINE += $$(subst _SPACE_,$(SPACE),$$(join $$(addprefix -compile_SPACE_, $2), \
|
COMPILE_PROPCMDLINE += $$(subst _SPACE_,$(SPACE),$$(join $$(addprefix -compile_SPACE_, $2), \
|
||||||
$$(addsuffix _SPACE_$(strip $3), \
|
$$(addsuffix _SPACE_$(strip $3), \
|
||||||
|
@ -70,290 +61,55 @@ define add_properties_to_compile
|
||||||
$$(addsuffix .java, $$($1_PROPPATHS))))))
|
$$(addsuffix .java, $$($1_PROPPATHS))))))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define add_properties_to_clean
|
################################################################################
|
||||||
# $1 is the name of the properties group
|
|
||||||
# $2 is the files belonging to this group
|
|
||||||
# $3 is a from pattern for translating stripped name from source to target
|
|
||||||
# $4 is the to pattern replacing $3 in the target
|
|
||||||
# $5 optional name of extra directory to put properties files in (ex: resources)
|
|
||||||
|
|
||||||
# Strip away prefix and suffix,
|
|
||||||
# leaving for example: sun/util/resources/CurrencyNames_sv
|
|
||||||
$1_PROPPATHS := $$(patsubst $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes/%.properties, %, \
|
|
||||||
$$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties, %, $2))
|
|
||||||
|
|
||||||
# Apply optional name transformation, example: hz_TW -> hz_HK
|
|
||||||
$(if $3, $1_PROPPATHS := $$(patsubst $3, $4, $$($1_PROPPATHS)))
|
|
||||||
|
|
||||||
# Accumulate all found properties files.
|
|
||||||
ALL_CLEANED_PROPSOURCES += $2
|
|
||||||
|
|
||||||
# Generate the list of to be created java files.
|
|
||||||
$1_PROPOUTPUT := $$(patsubst %, $(JDK_OUTPUTDIR)/classes/%.properties, $$($1_PROPPATHS))
|
|
||||||
# If the properties target file isn't in a "resources" dir, add one.
|
|
||||||
ifneq ($5, )
|
|
||||||
$1_PROPOUTPUT := $$(foreach p, $$($1_PROPOUTPUT), $$(dir $$p)$5/$$(notdir $$p))
|
|
||||||
endif
|
|
||||||
|
|
||||||
ALL_CLEANED_PROPOUTPUT += $$($1_PROPOUTPUT)
|
|
||||||
|
|
||||||
# Now generate a sequence of "-clean ...[src]...CurrencyNames_sv.properties ...[build]...CurrencyNames_sv.properties"
|
|
||||||
# suitable to be fed into the StripProperties command.
|
|
||||||
CLEAN_PROPCMDLINE += $$(subst _SPACE_,$(SPACE),$$(join $$(addprefix -clean_SPACE_,$2), \
|
|
||||||
$$(addprefix _SPACE_, $$($1_PROPOUTPUT))))
|
|
||||||
endef
|
|
||||||
|
|
||||||
# Some packages contain pregenerated java files instead of properties files.
|
|
||||||
# But unfortunately not all properties should be converted, some should be
|
|
||||||
# copied....argggghhh.
|
|
||||||
|
|
||||||
# For example:
|
|
||||||
# sun/applet/resources
|
|
||||||
# sun/misc/resources
|
|
||||||
# sun/text/resources
|
|
||||||
# sun/tools/jconsole/resources
|
|
||||||
# sun/tools/native2ascii/resources
|
|
||||||
# sun/util/resources
|
|
||||||
|
|
||||||
# Some packages have properties that need to be converted to java source files.
|
# Some packages have properties that need to be converted to java source files.
|
||||||
|
COMPILE_PROP_SRC_FILES := \
|
||||||
|
$(filter %.properties, $(call CacheFind, \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/accessibility/internal/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/basic/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/metal/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/synth/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/com/sun/tools/jdi/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/awt/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/launcher/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/management/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/print/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/tools/jar/resources \
|
||||||
|
$(JDK_TOPDIR)/src/share/classes/sun/util/logging/resources)) \
|
||||||
|
#
|
||||||
|
|
||||||
#com/apple/laf/resources
|
|
||||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||||
$(eval $(call add_properties_to_compile,COM_APPLE_LAF, \
|
COMPILE_PROP_SRC_FILES += \
|
||||||
$(filter %.properties, \
|
$(filter %.properties, $(call CacheFind, \
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/macosx/classes/com/apple/laf/resources)), \
|
$(JDK_TOPDIR)/src/macosx/classes/com/apple/laf/resources \
|
||||||
ListResourceBundle))
|
$(JDK_TOPDIR)/src/macosx/classes/sun/awt/resources)) \
|
||||||
|
#
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#com/sun/accessibility/internal/resources
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_ACCESSIBILITY, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/accessibility/internal/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_ACCESSIBILITY_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/accessibility/internal/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
#com/sun/imageio/plugins/common
|
|
||||||
$(eval $(call add_properties_to_clean,COM_SUN_IMAGEIO, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/imageio))))
|
|
||||||
#com/sun/java/swing/plaf/gtk/resources
|
|
||||||
ifneq ($(OPENJDK_TARGET_OS), windows)
|
|
||||||
# Only compile GTK resource bundles on Solaris/Linux
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_GTK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_GTK_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
endif
|
|
||||||
#com/sun/java/swing/plaf/motif/resources
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_MOTIF, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_MOTIF_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
#com/sun/java/swing/plaf/windows/resources
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_WINDOWS, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_WINDOWS_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
#com/sun/java/util/jar/pack
|
|
||||||
$(eval $(call add_properties_to_clean,JNDI_COSNAMING, \
|
|
||||||
$(JDK_TOPDIR)/src/share/classes/com/sun/java/util/jar/pack/intrinsic.properties))
|
|
||||||
#com/sun/jndi/cosnaming
|
|
||||||
$(eval $(call add_properties_to_clean,JNDI_COSNAMING, \
|
|
||||||
$(JDK_TOPDIR)/src/share/classes/com/sun/jndi/cosnaming/jndiprovider.properties))
|
|
||||||
#com/sun/jndi/ldap
|
|
||||||
$(eval $(call add_properties_to_clean,JNDI_COSNAMING, \
|
|
||||||
$(JDK_TOPDIR)/src/share/classes/com/sun/jndi/ldap/jndiprovider.properties))
|
|
||||||
|
|
||||||
#com/sun/org/apache/xml/internal/security/resource
|
|
||||||
#FIXME: The "xmlsecurity*.properties" pattern is not ideal; we might want to find
|
|
||||||
#a better way to select the properties files that are needed.
|
|
||||||
$(eval $(call add_properties_to_clean,XML_SECURITY, \
|
|
||||||
$(filter $(JDK_TOPDIR)/src/share/classes/com/sun/org/apache/xml/internal/security/resource/xmlsecurity%.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/org/apache/xml/internal/security/resource))))
|
|
||||||
|
|
||||||
#com/sun/rowset
|
|
||||||
$(eval $(call add_properties_to_clean,COM_SUN_ROWSET, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/rowset))))
|
|
||||||
$(eval $(call add_properties_to_clean,COM_SUN_ROWSET_HK, \
|
|
||||||
$(filter %zh_TW.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/rowset)), \
|
|
||||||
%zh_TW, %zh_HK))
|
|
||||||
|
|
||||||
#com/sun/swing/internal/plaf/basic/resources
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_BASIC, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/basic/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_BASIC_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/basic/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
#com/sun/swing/internal/plaf/metal/resources
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_METAL, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/metal/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_METAL_HK, \
|
|
||||||
$(filter %.properties, $(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/metal/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
#com/sun/swing/internal/plaf/synth/resources
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_SYNTH, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/synth/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_SYNTH_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/synth/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
|
|
||||||
#com/sun/tools/jdi/resources
|
|
||||||
$(eval $(call add_properties_to_compile,COM_SUN_TOOLS_JDI, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/tools/jdi/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
|
|
||||||
#com/sun/tools/script/shell
|
|
||||||
#java/util
|
|
||||||
#javax/sql/rowset
|
|
||||||
$(eval $(call add_properties_to_clean,JAVAX_SQL_ROWSET, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/javax/sql/rowset))))
|
|
||||||
#sun/awt/resources
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_AWT, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/awt/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_AWT_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/awt/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
#sun/awt/windows/
|
|
||||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||||
$(eval $(call add_properties_to_compile,SUN_AWT, \
|
COMPILE_PROP_SRC_FILES += \
|
||||||
$(filter $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows/awtLocalization%.properties, \
|
$(filter %.properties, $(call CacheFind, \
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows)), \
|
$(JDK_TOPDIR)/src/windows/classes/sun/awt/windows)) \
|
||||||
ListResourceBundle))
|
#
|
||||||
$(eval $(call add_properties_to_compile,SUN_AWT_HK, \
|
else # ! windows
|
||||||
$(filter $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows/awtLocalization%.properties, \
|
COMPILE_PROP_SRC_FILES += \
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows)), \
|
$(filter %.properties, $(call CacheFind, \
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk/resources)) \
|
||||||
endif
|
#
|
||||||
# os x specific awt properties
|
|
||||||
ifeq ($(OPENJDK_TARGET_OS),macosx)
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_AWT,\
|
|
||||||
$(filter $(JDK_TOPDIR)/src/macosx/classes/sun/awt/resources/%.properties,\
|
|
||||||
$(call CacheFind,$(JDK_TOPDIR)/src/macosx/classes/sun/awt/resources)),\
|
|
||||||
ListResourceBundle))
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#sun/launcher/resources
|
$(eval $(call add_properties_to_compile,LIST_RESOURCE_BUNDLE, \
|
||||||
$(eval $(call add_properties_to_compile,SUN_LAUNCHER, \
|
$(COMPILE_PROP_SRC_FILES), ListResourceBundle))
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/launcher/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_LAUNCHER_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/launcher/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
#sun/management/resources
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_MANAGEMENT, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/management/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_MANAGEMENT_KH, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/management/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
#sun/print
|
|
||||||
#sun/print/resources
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_PRINT, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/print/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_PRINT_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/print/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
#sun/rmi/registry/resources
|
|
||||||
$(eval $(call add_properties_to_clean,SUN_RMI_REGISTRY, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/rmi/registry/resources))))
|
|
||||||
$(eval $(call add_properties_to_clean,SUN_RMI_REGISTRY_HK, \
|
|
||||||
$(filter %zh_TW.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/rmi/registry/resources)), \
|
|
||||||
%zh_TW, %zh_HK))
|
|
||||||
|
|
||||||
#sun/rmi/rmic/resources
|
|
||||||
$(eval $(call add_properties_to_clean,SUN_RMI_RMIC, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/rmi/rmic/resources))))
|
|
||||||
|
|
||||||
#sun/rmi/server/resources
|
|
||||||
$(eval $(call add_properties_to_clean,SUN_RMI_SERVER, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/rmi/server/resources))))
|
|
||||||
$(eval $(call add_properties_to_clean,SUN_RMI_SERVER_HK, \
|
|
||||||
$(filter %zh_TW.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/rmi/server/resources)), \
|
|
||||||
%zh_TW, %zh_HK))
|
|
||||||
|
|
||||||
# sun/tools/jar/resources
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_TOOLS_JAR, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/tools/jar/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_TOOLS_JAR_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/tools/jar/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
|
|
||||||
#sun/tools/javac/resources
|
|
||||||
# It's unclear if the other localized property files here are supposed to be copied or not
|
|
||||||
# but the old build system didn't copy them.
|
|
||||||
$(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER, \
|
|
||||||
$(filter %javac.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/tools/javac/resources))))
|
|
||||||
|
|
||||||
#sun/tools/jconsole/resources
|
|
||||||
$(eval $(call add_properties_to_clean,SUN_TOOLS_JCONSOLE, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/tools/jconsole/resources))))
|
|
||||||
|
|
||||||
#sun/tools/serialver
|
|
||||||
$(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/tools/serialver)), , ,resources))
|
|
||||||
|
|
||||||
#sun/util/logging/resources
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_UTIL_LOGGING, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/util/logging/resources)), \
|
|
||||||
ListResourceBundle))
|
|
||||||
$(eval $(call add_properties_to_compile,SUN_UTIL_LOGGING_HK, \
|
|
||||||
$(filter %.properties, \
|
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/util/logging/resources)), \
|
|
||||||
ListResourceBundle, %zh_TW, %zh_HK))
|
|
||||||
# sun/util/resources
|
# sun/util/resources
|
||||||
$(eval $(call add_properties_to_compile,SUN_UTIL, \
|
$(eval $(call add_properties_to_compile,SUN_UTIL, \
|
||||||
$(filter %.properties, \
|
$(filter %.properties, \
|
||||||
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/util/resources)), \
|
$(call CacheFind, $(JDK_TOPDIR)/src/share/classes/sun/util/resources)), \
|
||||||
sun.util.resources.LocaleNamesBundle))
|
sun.util.resources.LocaleNamesBundle))
|
||||||
|
|
||||||
|
################################################################################
|
||||||
# Now setup the rule for the generation of the resource bundles.
|
# Now setup the rule for the generation of the resource bundles.
|
||||||
$(JDK_OUTPUTDIR)/gensrc/_the.compiled_properties: $(ALL_COMPILED_PROPSOURCES) $(BUILD_TOOLS)
|
$(JDK_OUTPUTDIR)/gensrc/_the.compiled_properties: $(ALL_COMPILED_PROPSOURCES) $(BUILD_TOOLS)
|
||||||
# Generate all output directories in advance since the build tool does not do that...
|
# Generate all output directories in advance since the build tool does not do that...
|
||||||
|
@ -363,33 +119,31 @@ $(JDK_OUTPUTDIR)/gensrc/_the.compiled_properties: $(ALL_COMPILED_PROPSOURCES) $(
|
||||||
$(TOOL_COMPILEPROPERTIES) -quiet @$(JDK_OUTPUTDIR)/gensrc/_the.cmdline
|
$(TOOL_COMPILEPROPERTIES) -quiet @$(JDK_OUTPUTDIR)/gensrc/_the.cmdline
|
||||||
$(TOUCH) $@
|
$(TOUCH) $@
|
||||||
|
|
||||||
# Now setup the rule for the generation of the cleaned properties.
|
|
||||||
# FIXME: We currently don't handle removed properties incrementally.
|
|
||||||
$(JDK_OUTPUTDIR)/classes/_the.cleaned_properties: $(ALL_CLEANED_PROPSOURCES) $(BUILD_TOOLS)
|
|
||||||
$(RM) $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties.cmdline
|
|
||||||
# Generate all output directories in advance since the build tool does not do that...
|
|
||||||
$(MKDIR) -p $(sort $(dir $(ALL_CLEANED_PROPOUTPUT)))
|
|
||||||
$(ECHO) Copying and cleaning $(words $(ALL_CLEANED_PROPSOURCES)) properties
|
|
||||||
$(call ListPathsSafely,CLEAN_PROPCMDLINE,\n, >> $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties.cmdline)
|
|
||||||
$(TOOL_STRIPPROPERTIES) @$(JDK_OUTPUTDIR)/classes/_the.cleaned_properties.cmdline
|
|
||||||
$(TOUCH) $@
|
|
||||||
|
|
||||||
$(ALL_COMPILED_PROPJAVAS): $(JDK_OUTPUTDIR)/gensrc/_the.compiled_properties
|
$(ALL_COMPILED_PROPJAVAS): $(JDK_OUTPUTDIR)/gensrc/_the.compiled_properties
|
||||||
|
|
||||||
$(ALL_CLEANED_PROPOUTPUT): $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties
|
################################################################################
|
||||||
|
# Some zh_HK resources are just copies of zh_TW
|
||||||
|
|
||||||
|
define convert_tw_to_hk
|
||||||
# Some zh_HK resources are just copied of zh_TW
|
|
||||||
$(JDK_OUTPUTDIR)/gensrc/%_zh_HK.java: $(JDK_TOPDIR)/src/share/classes/%_zh_TW.java
|
|
||||||
$(MKDIR) -p $(@D)
|
$(MKDIR) -p $(@D)
|
||||||
$(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@
|
$(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(JDK_OUTPUTDIR)/gensrc/%_zh_HK.java: $(JDK_TOPDIR)/src/share/classes/%_zh_TW.java
|
||||||
|
$(call convert_tw_to_hk)
|
||||||
|
|
||||||
|
$(JDK_OUTPUTDIR)/gensrc/%_zh_HK.java: $(JDK_OUTPUTDIR)/gensrc/%_zh_TW.java
|
||||||
|
$(call convert_tw_to_hk)
|
||||||
|
|
||||||
ZH_HK_JAVA := sun/applet/resources/MsgAppletViewer_zh_HK.java \
|
ZH_HK_JAVA := sun/applet/resources/MsgAppletViewer_zh_HK.java \
|
||||||
sun/misc/resources/Messages_zh_HK.java \
|
sun/misc/resources/Messages_zh_HK.java \
|
||||||
sun/security/util/AuthResources_zh_HK.java \
|
sun/security/util/AuthResources_zh_HK.java \
|
||||||
sun/security/util/Resources_zh_HK.java
|
sun/security/util/Resources_zh_HK.java
|
||||||
|
|
||||||
ZH_HK_JAVA_FILES := $(addprefix $(JDK_OUTPUTDIR)/gensrc/, $(ZH_HK_JAVA))
|
ZH_HK_JAVA_FILES := $(addprefix $(JDK_OUTPUTDIR)/gensrc/, $(ZH_HK_JAVA)) \
|
||||||
|
$(filter-out $(JDK_OUTPUTDIR)/gensrc/sun/util/resources/zh/%, \
|
||||||
|
$(subst _zh_TW,_zh_HK,$(filter %_zh_TW.java, $(ALL_COMPILED_PROPJAVAS))))
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
|
||||||
GENSRC_PROPERTIES := $(ALL_COMPILED_PROPJAVAS) $(ALL_CLEANED_PROPOUTPUT) $(ZH_HK_JAVA_FILES)
|
GENSRC_PROPERTIES := $(ALL_COMPILED_PROPJAVAS) $(ZH_HK_JAVA_FILES)
|
||||||
|
|
|
@ -1196,7 +1196,6 @@ endif
|
||||||
ifndef BUILD_HEADLESS_ONLY
|
ifndef BUILD_HEADLESS_ONLY
|
||||||
LIBSPLASHSCREEN_DIRS := \
|
LIBSPLASHSCREEN_DIRS := \
|
||||||
$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg \
|
$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg \
|
||||||
$(JDK_TOPDIR)/src/share/native/sun/awt/libpng \
|
|
||||||
$(JDK_TOPDIR)/src/share/native/sun/awt/splashscreen
|
$(JDK_TOPDIR)/src/share/native/sun/awt/splashscreen
|
||||||
|
|
||||||
ifeq ($(USE_EXTERNAL_LIBGIF), true)
|
ifeq ($(USE_EXTERNAL_LIBGIF), true)
|
||||||
|
@ -1206,6 +1205,11 @@ ifndef BUILD_HEADLESS_ONLY
|
||||||
GIFLIB_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/sun/awt/giflib
|
GIFLIB_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/sun/awt/giflib
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(USE_EXTERNAL_LIBPNG), false)
|
||||||
|
LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/sun/awt/libpng
|
||||||
|
LIBPNG_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/sun/awt/libpng
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq ($(OPENJDK_TARGET_OS), macosx)
|
ifneq ($(OPENJDK_TARGET_OS), macosx)
|
||||||
LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/awt/splashscreen
|
LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/awt/splashscreen
|
||||||
else
|
else
|
||||||
|
@ -1268,11 +1272,13 @@ ifndef BUILD_HEADLESS_ONLY
|
||||||
EXCLUDE_FILES := imageioJPEG.c jpegdecoder.c pngtest.c, \
|
EXCLUDE_FILES := imageioJPEG.c jpegdecoder.c pngtest.c, \
|
||||||
LANG := C, \
|
LANG := C, \
|
||||||
OPTIMIZATION := LOW, \
|
OPTIMIZATION := LOW, \
|
||||||
CFLAGS := $(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB) $(GIFLIB_CFLAGS), \
|
CFLAGS := $(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB) \
|
||||||
|
$(GIFLIB_CFLAGS) $(PNG_CFLAGS), \
|
||||||
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libsplashscreen/mapfile-vers, \
|
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libsplashscreen/mapfile-vers, \
|
||||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||||
LDFLAGS_SUFFIX := $(LIBSPLASHSCREEN_LDFLAGS_SUFFIX) $(LIBZ) $(GIFLIB_LDFLAGS), \
|
LDFLAGS_SUFFIX := $(LIBSPLASHSCREEN_LDFLAGS_SUFFIX) $(LIBZ) \
|
||||||
|
$(GIFLIB_LDFLAGS) $(PNG_LIBS), \
|
||||||
LDFLAGS_SUFFIX_solaris := -lc, \
|
LDFLAGS_SUFFIX_solaris := -lc, \
|
||||||
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
|
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
|
||||||
RC_FLAGS := $(RC_FLAGS) \
|
RC_FLAGS := $(RC_FLAGS) \
|
||||||
|
@ -1315,6 +1321,7 @@ ifndef OPENJDK
|
||||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||||
LDFLAGS_SUFFIX := $(LIBM) $(LDFLAGS_JDKLIB_SUFFIX), \
|
LDFLAGS_SUFFIX := $(LIBM) $(LDFLAGS_JDKLIB_SUFFIX), \
|
||||||
|
LDFLAGS_SUFFIX_windows := $(WIN_JAVA_LIB), \
|
||||||
LDFLAGS_SUFFIX_posix := -lm, \
|
LDFLAGS_SUFFIX_posix := -lm, \
|
||||||
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
|
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
|
||||||
RC_FLAGS := $(RC_FLAGS) \
|
RC_FLAGS := $(RC_FLAGS) \
|
||||||
|
|
|
@ -203,7 +203,6 @@ BUILD_LIBRARIES += $(BUILD_LIBJSDT)
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
|
|
||||||
LIBINSTRUMENT_SRC := $(JDK_TOPDIR)/src/share/instrument \
|
LIBINSTRUMENT_SRC := $(JDK_TOPDIR)/src/share/instrument \
|
||||||
$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/io \
|
|
||||||
$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/instrument
|
$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/instrument
|
||||||
|
|
||||||
LIBINSTRUMENT_FILES := \
|
LIBINSTRUMENT_FILES := \
|
||||||
|
@ -218,8 +217,7 @@ LIBINSTRUMENT_FILES := \
|
||||||
JavaExceptions.c \
|
JavaExceptions.c \
|
||||||
PathCharsValidator.c \
|
PathCharsValidator.c \
|
||||||
Reentrancy.c \
|
Reentrancy.c \
|
||||||
Utilities.c \
|
Utilities.c
|
||||||
canonicalize_md.c
|
|
||||||
|
|
||||||
LIBINSTRUMENT_DIR := $(JDK_OUTPUTDIR)/objs/libinstrument
|
LIBINSTRUMENT_DIR := $(JDK_OUTPUTDIR)/objs/libinstrument
|
||||||
LIBINSTRUMENT_CFLAGS := $(CFLAGS_JDKLIB) \
|
LIBINSTRUMENT_CFLAGS := $(CFLAGS_JDKLIB) \
|
||||||
|
@ -239,6 +237,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||||
LIBINSTRUMENT_CFLAGS := $(filter-out -MD, $(LIBINSTRUMENT_CFLAGS))
|
LIBINSTRUMENT_CFLAGS := $(filter-out -MD, $(LIBINSTRUMENT_CFLAGS))
|
||||||
# equivalent of strcasecmp is stricmp on Windows
|
# equivalent of strcasecmp is stricmp on Windows
|
||||||
LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp
|
LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp
|
||||||
|
else
|
||||||
|
LIBINSTRUMENT_LDFLAGS_SUFFIX := -ljava
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT, \
|
$(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT, \
|
||||||
|
|
|
@ -1,288 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2001, 2013, 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 build.tools.stripproperties;
|
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.BufferedWriter;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.OutputStreamWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads a properties file from standard input and writes an equivalent
|
|
||||||
* properties file without comments to standard output.
|
|
||||||
*/
|
|
||||||
public class StripProperties {
|
|
||||||
|
|
||||||
private static void error(String msg, Exception e) {
|
|
||||||
System.err.println("ERROR: stripproperties: " + msg);
|
|
||||||
if ( e != null ) {
|
|
||||||
System.err.println("EXCEPTION: " + e.toString());
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<String> infiles = new ArrayList<String>();
|
|
||||||
private static List<String> outfiles = new ArrayList<String>();
|
|
||||||
|
|
||||||
private static boolean parseOptions(String args[]) {
|
|
||||||
boolean ok = true;
|
|
||||||
|
|
||||||
for ( int i = 0; i < args.length ; i++ ) {
|
|
||||||
if ( "-clean".equals(args[i]) && i+2 < args.length ) {
|
|
||||||
infiles.add(args[++i]);
|
|
||||||
outfiles.add(args[++i]);
|
|
||||||
} else if ( args[i].charAt(0)=='@') {
|
|
||||||
String filename = args[i].substring(1);
|
|
||||||
FileInputStream finput = null;
|
|
||||||
byte contents[] = null;
|
|
||||||
try {
|
|
||||||
finput = new FileInputStream(filename);
|
|
||||||
int byteCount = finput.available();
|
|
||||||
if ( byteCount <= 0 ) {
|
|
||||||
error("The @file is empty", null);
|
|
||||||
ok = false;
|
|
||||||
} else {
|
|
||||||
contents = new byte[byteCount];
|
|
||||||
int bytesRead = finput.read(contents);
|
|
||||||
if ( byteCount != bytesRead ) {
|
|
||||||
error("Cannot read all of @file", null);
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch ( IOException e ) {
|
|
||||||
error("cannot open " + filename, e);
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
if ( finput != null ) {
|
|
||||||
try {
|
|
||||||
finput.close();
|
|
||||||
} catch ( IOException e ) {
|
|
||||||
ok = false;
|
|
||||||
error("cannot close " + filename, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( ok && contents != null ) {
|
|
||||||
String tokens[] = (new String(contents)).split("\\s+");
|
|
||||||
if ( tokens.length > 0 ) {
|
|
||||||
ok = parseOptions(tokens);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !ok ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
infiles.add(args[i]);
|
|
||||||
outfiles.add(args[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean stripFiles(List<String> infiles, List<String> outfiles) {
|
|
||||||
boolean ok = true;
|
|
||||||
Iterator<String> inIter = infiles.iterator();
|
|
||||||
Iterator<String> outIter = outfiles.iterator();
|
|
||||||
|
|
||||||
for (; inIter.hasNext(); ) {
|
|
||||||
String infile = inIter.next();
|
|
||||||
String outfile = outIter.next();
|
|
||||||
|
|
||||||
Properties prop = new Properties();
|
|
||||||
InputStream in = null;
|
|
||||||
try {
|
|
||||||
in = new BufferedInputStream(new FileInputStream(infile));
|
|
||||||
prop.load(in);
|
|
||||||
} catch ( FileNotFoundException e ) {
|
|
||||||
error("Cannot access file " + infile, e);
|
|
||||||
ok = false;
|
|
||||||
} catch ( IOException e ) {
|
|
||||||
error("IO exception processing file " + infile, e);
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
if ( in != null ) {
|
|
||||||
try {
|
|
||||||
in.close();
|
|
||||||
} catch ( IOException e ) {
|
|
||||||
error("IO exception closing file " + infile, e);
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !ok ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
OutputStream out = null;
|
|
||||||
try {
|
|
||||||
out = new FileOutputStream(outfile);
|
|
||||||
storeProperties(prop, out);
|
|
||||||
out.flush();
|
|
||||||
} catch ( IOException e ) {
|
|
||||||
error("IO exception processing file " + outfile, e);
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
if ( out != null ) {
|
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
} catch ( IOException e ) {
|
|
||||||
error("IO exception closing file " + outfile, e);
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !ok ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Strip the properties filenames supplied, replacing their contents.
|
|
||||||
* @param args Names of properties files to process and replace contents
|
|
||||||
*/
|
|
||||||
public static void main(String args[]) {
|
|
||||||
boolean ok = parseOptions(args);
|
|
||||||
if ( !ok || !stripFiles(infiles, outfiles) ) {
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- code below here is adapted from java.util.Properties ---
|
|
||||||
|
|
||||||
private static final String specialSaveChars = "=: \t\r\n\f#!";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Converts unicodes to encoded \uxxxx
|
|
||||||
* and writes out any of the characters in specialSaveChars
|
|
||||||
* with a preceding slash
|
|
||||||
*/
|
|
||||||
private static String saveConvert(String theString, boolean escapeSpace) {
|
|
||||||
int len = theString.length();
|
|
||||||
StringBuffer outBuffer = new StringBuffer(len*2);
|
|
||||||
|
|
||||||
for(int x=0; x<len; x++) {
|
|
||||||
char aChar = theString.charAt(x);
|
|
||||||
switch(aChar) {
|
|
||||||
case ' ':
|
|
||||||
if (x == 0 || escapeSpace) {
|
|
||||||
outBuffer.append('\\');
|
|
||||||
}
|
|
||||||
outBuffer.append(' ');
|
|
||||||
break;
|
|
||||||
case '\\':
|
|
||||||
outBuffer.append('\\');
|
|
||||||
outBuffer.append('\\');
|
|
||||||
break;
|
|
||||||
case '\t':
|
|
||||||
outBuffer.append('\\');
|
|
||||||
outBuffer.append('t');
|
|
||||||
break;
|
|
||||||
case '\n':
|
|
||||||
outBuffer.append('\\');
|
|
||||||
outBuffer.append('n');
|
|
||||||
break;
|
|
||||||
case '\r':
|
|
||||||
outBuffer.append('\\');
|
|
||||||
outBuffer.append('r');
|
|
||||||
break;
|
|
||||||
case '\f':
|
|
||||||
outBuffer.append('\\');
|
|
||||||
outBuffer.append('f');
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if ((aChar < 0x0020) || (aChar == 0x007e) || (aChar > 0x00ff)) {
|
|
||||||
outBuffer.append('\\');
|
|
||||||
outBuffer.append('u');
|
|
||||||
outBuffer.append(toHex((aChar >> 12) & 0xF));
|
|
||||||
outBuffer.append(toHex((aChar >> 8) & 0xF));
|
|
||||||
outBuffer.append(toHex((aChar >> 4) & 0xF));
|
|
||||||
outBuffer.append(toHex( aChar & 0xF));
|
|
||||||
} else {
|
|
||||||
if (specialSaveChars.indexOf(aChar) != -1) {
|
|
||||||
outBuffer.append('\\');
|
|
||||||
}
|
|
||||||
outBuffer.append(aChar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return outBuffer.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes the content of <code>properties</code> to <code>out</code>.
|
|
||||||
* The format is that of Properties.store with the following modifications:
|
|
||||||
* <ul>
|
|
||||||
* <li>No header or date is written
|
|
||||||
* <li>Latin-1 characters are written as single bytes, not escape sequences
|
|
||||||
* <li>Line breaks are indicated by a single \n independent of platform
|
|
||||||
* <ul>
|
|
||||||
*/
|
|
||||||
private static void storeProperties(Properties properties, OutputStream out)
|
|
||||||
throws IOException {
|
|
||||||
BufferedWriter awriter;
|
|
||||||
awriter = new BufferedWriter(new OutputStreamWriter(out, "8859_1"));
|
|
||||||
for (Enumeration<Object> e = properties.keys(); e.hasMoreElements();) {
|
|
||||||
String key = (String)e.nextElement();
|
|
||||||
String val = (String)properties.get(key);
|
|
||||||
key = saveConvert(key, true);
|
|
||||||
|
|
||||||
/* No need to escape embedded and trailing spaces for value, hence
|
|
||||||
* pass false to flag.
|
|
||||||
*/
|
|
||||||
val = saveConvert(val, false);
|
|
||||||
writeln(awriter, key + "=" + val);
|
|
||||||
}
|
|
||||||
awriter.flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void writeln(BufferedWriter bw, String s) throws IOException {
|
|
||||||
bw.write(s);
|
|
||||||
bw.write("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a nibble to a hex character
|
|
||||||
* @param nibble the nibble to convert.
|
|
||||||
*/
|
|
||||||
private static char toHex(int nibble) {
|
|
||||||
return hexDigit[(nibble & 0xF)];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** A table of hex digits */
|
|
||||||
private static final char[] hexDigit = {
|
|
||||||
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -28,6 +28,9 @@ package apple.laf;
|
||||||
import com.apple.laf.AquaImageFactory.NineSliceMetrics;
|
import com.apple.laf.AquaImageFactory.NineSliceMetrics;
|
||||||
|
|
||||||
import apple.laf.JRSUIConstants.*;
|
import apple.laf.JRSUIConstants.*;
|
||||||
|
import sun.security.action.GetPropertyAction;
|
||||||
|
|
||||||
|
import java.security.AccessController;
|
||||||
|
|
||||||
public class JRSUIUtils {
|
public class JRSUIUtils {
|
||||||
static boolean isLeopard = isMacOSXLeopard();
|
static boolean isLeopard = isMacOSXLeopard();
|
||||||
|
@ -47,7 +50,7 @@ public class JRSUIUtils {
|
||||||
|
|
||||||
static boolean currentMacOSXVersionMatchesGivenVersionRange(final int version, final boolean inclusive, final boolean matchBelow, final boolean matchAbove) {
|
static boolean currentMacOSXVersionMatchesGivenVersionRange(final int version, final boolean inclusive, final boolean matchBelow, final boolean matchAbove) {
|
||||||
// split the "10.x.y" version number
|
// split the "10.x.y" version number
|
||||||
String osVersion = System.getProperty("os.version");
|
String osVersion = AccessController.doPrivileged(new GetPropertyAction("os.version"));
|
||||||
String[] fragments = osVersion.split("\\.");
|
String[] fragments = osVersion.split("\\.");
|
||||||
|
|
||||||
// sanity check the "10." part of the version
|
// sanity check the "10." part of the version
|
||||||
|
|
|
@ -42,7 +42,6 @@ import javax.swing.filechooser.*;
|
||||||
import javax.swing.plaf.*;
|
import javax.swing.plaf.*;
|
||||||
import javax.swing.table.*;
|
import javax.swing.table.*;
|
||||||
|
|
||||||
import sun.swing.AbstractFilterComboBoxModel;
|
|
||||||
import sun.swing.SwingUtilities2;
|
import sun.swing.SwingUtilities2;
|
||||||
|
|
||||||
public class AquaFileChooserUI extends FileChooserUI {
|
public class AquaFileChooserUI extends FileChooserUI {
|
||||||
|
@ -1267,9 +1266,70 @@ public class AquaFileChooserUI extends FileChooserUI {
|
||||||
/**
|
/**
|
||||||
* Data model for a type-face selection combo-box.
|
* Data model for a type-face selection combo-box.
|
||||||
*/
|
*/
|
||||||
protected class FilterComboBoxModel extends AbstractFilterComboBoxModel {
|
protected class FilterComboBoxModel extends AbstractListModel<FileFilter> implements ComboBoxModel<FileFilter>,
|
||||||
protected JFileChooser getFileChooser() {
|
PropertyChangeListener {
|
||||||
return AquaFileChooserUI.this.getFileChooser();
|
protected FileFilter[] filters;
|
||||||
|
protected FilterComboBoxModel() {
|
||||||
|
super();
|
||||||
|
filters = getFileChooser().getChoosableFileFilters();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void propertyChange(PropertyChangeEvent e) {
|
||||||
|
String prop = e.getPropertyName();
|
||||||
|
if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {
|
||||||
|
filters = (FileFilter[]) e.getNewValue();
|
||||||
|
fireContentsChanged(this, -1, -1);
|
||||||
|
} else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
|
||||||
|
fireContentsChanged(this, -1, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectedItem(Object filter) {
|
||||||
|
if(filter != null) {
|
||||||
|
getFileChooser().setFileFilter((FileFilter) filter);
|
||||||
|
fireContentsChanged(this, -1, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getSelectedItem() {
|
||||||
|
// Ensure that the current filter is in the list.
|
||||||
|
// NOTE: we shouldnt' have to do this, since JFileChooser adds
|
||||||
|
// the filter to the choosable filters list when the filter
|
||||||
|
// is set. Lets be paranoid just in case someone overrides
|
||||||
|
// setFileFilter in JFileChooser.
|
||||||
|
FileFilter currentFilter = getFileChooser().getFileFilter();
|
||||||
|
boolean found = false;
|
||||||
|
if(currentFilter != null) {
|
||||||
|
for (FileFilter filter : filters) {
|
||||||
|
if (filter == currentFilter) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(found == false) {
|
||||||
|
getFileChooser().addChoosableFileFilter(currentFilter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return getFileChooser().getFileFilter();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
if(filters != null) {
|
||||||
|
return filters.length;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public FileFilter getElementAt(int index) {
|
||||||
|
if(index > getSize() - 1) {
|
||||||
|
// This shouldn't happen. Try to recover gracefully.
|
||||||
|
return getFileChooser().getFileFilter();
|
||||||
|
}
|
||||||
|
if(filters != null) {
|
||||||
|
return filters[index];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -295,7 +295,14 @@ public class AquaIcon {
|
||||||
}
|
}
|
||||||
|
|
||||||
Image createImage() {
|
Image createImage() {
|
||||||
return AquaUtils.getCImageCreator().createSystemImageFromSelector(selector, getIconWidth(), getIconHeight());
|
int w = getIconWidth();
|
||||||
|
int h = getIconHeight();
|
||||||
|
return new AquaImageFactory.MultiResolutionIconImage(
|
||||||
|
AquaUtils.getCImageCreator().createSystemImageFromSelector(
|
||||||
|
selector, w, h),
|
||||||
|
AquaUtils.getCImageCreator().createSystemImageFromSelector(
|
||||||
|
selector, 2 * w, 2 * h)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,10 @@ import com.apple.laf.AquaIcon.JRSUIControlSpec;
|
||||||
import com.apple.laf.AquaIcon.SystemIcon;
|
import com.apple.laf.AquaIcon.SystemIcon;
|
||||||
import com.apple.laf.AquaUtils.RecyclableObject;
|
import com.apple.laf.AquaUtils.RecyclableObject;
|
||||||
import com.apple.laf.AquaUtils.RecyclableSingleton;
|
import com.apple.laf.AquaUtils.RecyclableSingleton;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import sun.awt.image.MultiResolutionBufferedImage;
|
||||||
|
import sun.awt.image.MultiResolutionImage;
|
||||||
|
|
||||||
public class AquaImageFactory {
|
public class AquaImageFactory {
|
||||||
public static IconUIResource getConfirmImageIcon() {
|
public static IconUIResource getConfirmImageIcon() {
|
||||||
|
@ -120,28 +124,48 @@ public class AquaImageFactory {
|
||||||
|
|
||||||
private static final int kAlertIconSize = 64;
|
private static final int kAlertIconSize = 64;
|
||||||
static IconUIResource getAppIconCompositedOn(final Image background) {
|
static IconUIResource getAppIconCompositedOn(final Image background) {
|
||||||
final double scaleFactor = 1.0; // revise for HiDPI
|
|
||||||
|
|
||||||
final int kAlertSubIconSize = (int)(kAlertIconSize * 0.5 * scaleFactor);
|
final BufferedImage iconImage = getAppIconImageCompositedOn(background, 1);
|
||||||
final int kAlertSubIconInset = (int)(kAlertIconSize * scaleFactor) - kAlertSubIconSize;
|
|
||||||
final Icon smallAppIconScaled = new AquaIcon.CachingScalingIcon(kAlertSubIconSize, kAlertSubIconSize) {
|
if (background instanceof MultiResolutionIconImage) {
|
||||||
|
BufferedImage background2x
|
||||||
|
= ((MultiResolutionIconImage) background).resolutionVariant;
|
||||||
|
BufferedImage icon2xImage = getAppIconImageCompositedOn(background2x, 2);
|
||||||
|
|
||||||
|
return new IconUIResource(new ImageIcon(
|
||||||
|
new MultiResolutionIconImage(iconImage, icon2xImage)));
|
||||||
|
}
|
||||||
|
return new IconUIResource(new ImageIcon(iconImage));
|
||||||
|
}
|
||||||
|
|
||||||
|
static BufferedImage getAppIconImageCompositedOn(final Image background, int scaleFactor) {
|
||||||
|
|
||||||
|
final int scaledAlertIconSize = kAlertIconSize * scaleFactor;
|
||||||
|
final int kAlertSubIconSize = (int) (scaledAlertIconSize * 0.5);
|
||||||
|
final int kAlertSubIconInset = scaledAlertIconSize - kAlertSubIconSize;
|
||||||
|
final Icon smallAppIconScaled = new AquaIcon.CachingScalingIcon(
|
||||||
|
kAlertSubIconSize, kAlertSubIconSize) {
|
||||||
Image createImage() {
|
Image createImage() {
|
||||||
return getThisApplicationsIcon(kAlertSubIconSize, kAlertSubIconSize);
|
return getThisApplicationsIcon(kAlertSubIconSize, kAlertSubIconSize);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
final BufferedImage image = new BufferedImage(kAlertIconSize, kAlertIconSize, BufferedImage.TYPE_INT_ARGB);
|
final BufferedImage image = new BufferedImage(scaledAlertIconSize,
|
||||||
|
scaledAlertIconSize, BufferedImage.TYPE_INT_ARGB);
|
||||||
final Graphics g = image.getGraphics();
|
final Graphics g = image.getGraphics();
|
||||||
g.drawImage(background, 0, 0, (int)(kAlertIconSize * scaleFactor), (int)(kAlertIconSize * scaleFactor), null);
|
g.drawImage(background, 0, 0,
|
||||||
|
scaledAlertIconSize, scaledAlertIconSize, null);
|
||||||
if (g instanceof Graphics2D) {
|
if (g instanceof Graphics2D) {
|
||||||
// improves icon rendering quality in Quartz
|
// improves icon rendering quality in Quartz
|
||||||
((Graphics2D)g).setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
|
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_RENDERING,
|
||||||
|
RenderingHints.VALUE_RENDER_QUALITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
smallAppIconScaled.paintIcon(null, g, kAlertSubIconInset, kAlertSubIconInset);
|
smallAppIconScaled.paintIcon(null, g,
|
||||||
|
kAlertSubIconInset, kAlertSubIconInset);
|
||||||
g.dispose();
|
g.dispose();
|
||||||
|
|
||||||
return new IconUIResource(new ImageIcon(image));
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IconUIResource getTreeFolderIcon() {
|
public static IconUIResource getTreeFolderIcon() {
|
||||||
|
@ -207,7 +231,7 @@ public class AquaImageFactory {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Image getInstance() {
|
protected Image getInstance() {
|
||||||
return Toolkit.getDefaultToolkit().getImage("NSImage://" + namedImage);
|
return getNSIcon(namedImage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,11 +295,27 @@ public class AquaImageFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Icon getMenuItemCheckIcon() {
|
public static Icon getMenuItemCheckIcon() {
|
||||||
return new InvertableImageIcon(AquaUtils.generateLightenedImage(Toolkit.getDefaultToolkit().getImage("NSImage://NSMenuItemSelection"), 25));
|
return new InvertableImageIcon(AquaUtils.generateLightenedImage(
|
||||||
|
getNSIcon("NSMenuItemSelection"), 25));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Icon getMenuItemDashIcon() {
|
public static Icon getMenuItemDashIcon() {
|
||||||
return new InvertableImageIcon(AquaUtils.generateLightenedImage(Toolkit.getDefaultToolkit().getImage("NSImage://NSMenuMixedState"), 25));
|
return new InvertableImageIcon(AquaUtils.generateLightenedImage(
|
||||||
|
getNSIcon("NSMenuMixedState"), 25));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Image getNSIcon(String imageName) {
|
||||||
|
Image icon = Toolkit.getDefaultToolkit()
|
||||||
|
.getImage("NSImage://" + imageName);
|
||||||
|
|
||||||
|
if (icon instanceof MultiResolutionImage) {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
Image icon2x = AquaUtils.getCImageCreator().createImageFromName(
|
||||||
|
imageName, 2 * icon.getWidth(null), 2 * icon.getHeight(null));
|
||||||
|
return new MultiResolutionBufferedImage(
|
||||||
|
BufferedImage.TYPE_INT_ARGB_PRE, 0, icon, icon2x);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class NineSliceMetrics {
|
public static class NineSliceMetrics {
|
||||||
|
@ -484,4 +524,29 @@ public class AquaImageFactory {
|
||||||
public static Color getSelectionInactiveForegroundColorUIResource() {
|
public static Color getSelectionInactiveForegroundColorUIResource() {
|
||||||
return new SystemColorProxy(LWCToolkit.getAppleColor(LWCToolkit.INACTIVE_SELECTION_FOREGROUND_COLOR));
|
return new SystemColorProxy(LWCToolkit.getAppleColor(LWCToolkit.INACTIVE_SELECTION_FOREGROUND_COLOR));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class MultiResolutionIconImage extends BufferedImage
|
||||||
|
implements MultiResolutionImage {
|
||||||
|
|
||||||
|
BufferedImage resolutionVariant;
|
||||||
|
|
||||||
|
public MultiResolutionIconImage(BufferedImage image, BufferedImage resolutionVariant) {
|
||||||
|
super(image.getWidth(), image.getHeight(), image.getType());
|
||||||
|
this.resolutionVariant = resolutionVariant;
|
||||||
|
Graphics g = getGraphics();
|
||||||
|
g.drawImage(image, 0, 0, null);
|
||||||
|
g.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Image getResolutionVariant(int width, int height) {
|
||||||
|
return ((width <= getWidth() && height <= getHeight()))
|
||||||
|
? this : resolutionVariant;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Image> getResolutionVariants() {
|
||||||
|
return Arrays.asList(this, resolutionVariant);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ import sun.security.action.GetPropertyAction;
|
||||||
import sun.swing.SwingUtilities2;
|
import sun.swing.SwingUtilities2;
|
||||||
|
|
||||||
import com.apple.laf.AquaImageFactory.SlicedImageControl;
|
import com.apple.laf.AquaImageFactory.SlicedImageControl;
|
||||||
|
import sun.awt.image.MultiResolutionBufferedImage;
|
||||||
|
|
||||||
final class AquaUtils {
|
final class AquaUtils {
|
||||||
|
|
||||||
|
@ -123,6 +124,13 @@ final class AquaUtils {
|
||||||
|
|
||||||
static Image generateLightenedImage(final Image image, final int percent) {
|
static Image generateLightenedImage(final Image image, final int percent) {
|
||||||
final GrayFilter filter = new GrayFilter(true, percent);
|
final GrayFilter filter = new GrayFilter(true, percent);
|
||||||
|
return (image instanceof MultiResolutionBufferedImage)
|
||||||
|
? ((MultiResolutionBufferedImage) image).map(
|
||||||
|
rv -> generateLightenedImage(rv, filter))
|
||||||
|
: generateLightenedImage(image, filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Image generateLightenedImage(Image image, ImageFilter filter) {
|
||||||
final ImageProducer prod = new FilteredImageSource(image.getSource(), filter);
|
final ImageProducer prod = new FilteredImageSource(image.getSource(), filter);
|
||||||
return Toolkit.getDefaultToolkit().createImage(prod);
|
return Toolkit.getDefaultToolkit().createImage(prod);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -30,9 +30,6 @@ import java.awt.BufferCapabilities;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.GraphicsConfiguration;
|
|
||||||
import java.awt.GraphicsDevice;
|
|
||||||
import java.awt.GraphicsEnvironment;
|
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.ImageCapabilities;
|
import java.awt.ImageCapabilities;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
|
@ -80,23 +77,34 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
|
||||||
private ContextCapabilities oglCaps;
|
private ContextCapabilities oglCaps;
|
||||||
private OGLContext context;
|
private OGLContext context;
|
||||||
private final Object disposerReferent = new Object();
|
private final Object disposerReferent = new Object();
|
||||||
|
private final int maxTextureSize;
|
||||||
|
|
||||||
private static native boolean initCGL();
|
private static native boolean initCGL();
|
||||||
private static native long getCGLConfigInfo(int displayID, int visualnum,
|
private static native long getCGLConfigInfo(int displayID, int visualnum,
|
||||||
int swapInterval);
|
int swapInterval);
|
||||||
private static native int getOGLCapabilities(long configInfo);
|
private static native int getOGLCapabilities(long configInfo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns GL_MAX_TEXTURE_SIZE from the shared opengl context. Must be
|
||||||
|
* called under OGLRQ lock, because this method change current context.
|
||||||
|
*
|
||||||
|
* @return GL_MAX_TEXTURE_SIZE
|
||||||
|
*/
|
||||||
|
private static native int nativeGetMaxTextureSize();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
cglAvailable = initCGL();
|
cglAvailable = initCGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
private CGLGraphicsConfig(CGraphicsDevice device, int pixfmt,
|
private CGLGraphicsConfig(CGraphicsDevice device, int pixfmt,
|
||||||
long configInfo, ContextCapabilities oglCaps)
|
long configInfo, int maxTextureSize,
|
||||||
{
|
ContextCapabilities oglCaps) {
|
||||||
super(device);
|
super(device);
|
||||||
|
|
||||||
this.pixfmt = pixfmt;
|
this.pixfmt = pixfmt;
|
||||||
this.pConfigInfo = configInfo;
|
this.pConfigInfo = configInfo;
|
||||||
this.oglCaps = oglCaps;
|
this.oglCaps = oglCaps;
|
||||||
|
this.maxTextureSize = maxTextureSize;
|
||||||
context = new OGLContext(OGLRenderQueue.getInstance(), this);
|
context = new OGLContext(OGLRenderQueue.getInstance(), this);
|
||||||
|
|
||||||
// add a record to the Disposer so that we destroy the native
|
// add a record to the Disposer so that we destroy the native
|
||||||
|
@ -126,6 +134,7 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
long cfginfo = 0;
|
long cfginfo = 0;
|
||||||
|
int textureSize = 0;
|
||||||
final String ids[] = new String[1];
|
final String ids[] = new String[1];
|
||||||
OGLRenderQueue rq = OGLRenderQueue.getInstance();
|
OGLRenderQueue rq = OGLRenderQueue.getInstance();
|
||||||
rq.lock();
|
rq.lock();
|
||||||
|
@ -138,11 +147,14 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
|
||||||
cfginfo = getCGLConfigInfo(device.getCGDisplayID(), pixfmt,
|
cfginfo = getCGLConfigInfo(device.getCGDisplayID(), pixfmt,
|
||||||
kOpenGLSwapInterval);
|
kOpenGLSwapInterval);
|
||||||
if (cfginfo != 0L) {
|
if (cfginfo != 0L) {
|
||||||
|
textureSize = nativeGetMaxTextureSize();
|
||||||
|
// 7160609: GL still fails to create a square texture of this
|
||||||
|
// size. Half should be safe enough.
|
||||||
|
// Explicitly not support a texture more than 2^14, see 8010999.
|
||||||
|
textureSize = textureSize <= 16384 ? textureSize / 2 : 8192;
|
||||||
OGLContext.setScratchSurface(cfginfo);
|
OGLContext.setScratchSurface(cfginfo);
|
||||||
rq.flushAndInvokeNow(new Runnable() {
|
rq.flushAndInvokeNow(() -> {
|
||||||
public void run() {
|
|
||||||
ids[0] = OGLContext.getOGLIdString();
|
ids[0] = OGLContext.getOGLIdString();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -154,8 +166,7 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
|
||||||
|
|
||||||
int oglCaps = getOGLCapabilities(cfginfo);
|
int oglCaps = getOGLCapabilities(cfginfo);
|
||||||
ContextCapabilities caps = new OGLContextCaps(oglCaps, ids[0]);
|
ContextCapabilities caps = new OGLContextCaps(oglCaps, ids[0]);
|
||||||
|
return new CGLGraphicsConfig(device, pixfmt, cfginfo, textureSize, caps);
|
||||||
return new CGLGraphicsConfig(device, pixfmt, cfginfo, caps);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCGLAvailable() {
|
public static boolean isCGLAvailable() {
|
||||||
|
@ -246,8 +257,6 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
|
||||||
} finally {
|
} finally {
|
||||||
rq.unlock();
|
rq.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTotalDisplayBounds();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -421,57 +430,15 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
|
||||||
AccelDeviceEventNotifier.removeListener(l);
|
AccelDeviceEventNotifier.removeListener(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Rectangle totalDisplayBounds = new Rectangle();
|
|
||||||
|
|
||||||
private static void updateTotalDisplayBounds() {
|
|
||||||
synchronized (totalDisplayBounds) {
|
|
||||||
Rectangle virtualBounds = new Rectangle();
|
|
||||||
for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) {
|
|
||||||
for (GraphicsConfiguration gc : gd.getConfigurations()) {
|
|
||||||
virtualBounds = virtualBounds.union(gc.getBounds());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
totalDisplayBounds.setBounds(virtualBounds);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 7160609: GL still fails to create a square texture of this size,
|
|
||||||
// so we use this value to cap the total display bounds.
|
|
||||||
native private static int getMaxTextureSize();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxTextureWidth() {
|
public int getMaxTextureWidth() {
|
||||||
//Temporary disable this logic and use some magic constrain.
|
return Math.max(maxTextureSize / getDevice().getScaleFactor(),
|
||||||
/*
|
getBounds().width);
|
||||||
int width;
|
|
||||||
|
|
||||||
synchronized (totalDisplayBounds) {
|
|
||||||
if (totalDisplayBounds.width == 0) {
|
|
||||||
updateTotalDisplayBounds();
|
|
||||||
}
|
|
||||||
width = totalDisplayBounds.width;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.min(width, getMaxTextureSize());
|
|
||||||
*/
|
|
||||||
return getMaxTextureSize() / (getDevice().getScaleFactor() * 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxTextureHeight() {
|
public int getMaxTextureHeight() {
|
||||||
//Temporary disable this logic and use some magic constrain.
|
return Math.max(maxTextureSize / getDevice().getScaleFactor(),
|
||||||
/*
|
getBounds().height);
|
||||||
int height;
|
|
||||||
|
|
||||||
synchronized (totalDisplayBounds) {
|
|
||||||
if (totalDisplayBounds.height == 0) {
|
|
||||||
updateTotalDisplayBounds();
|
|
||||||
}
|
|
||||||
height = totalDisplayBounds.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.min(height, getMaxTextureSize());
|
|
||||||
*/
|
|
||||||
return getMaxTextureSize() / (getDevice().getScaleFactor() * 2);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,16 +168,16 @@ final class LWChoicePeer extends LWComponentPeer<Choice, JComboBox<String>>
|
||||||
@Override
|
@Override
|
||||||
public void firePopupMenuWillBecomeVisible() {
|
public void firePopupMenuWillBecomeVisible() {
|
||||||
super.firePopupMenuWillBecomeVisible();
|
super.firePopupMenuWillBecomeVisible();
|
||||||
SwingUtilities.invokeLater(new Runnable() {
|
SwingUtilities.invokeLater(() -> {
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
JPopupMenu popupMenu = getPopupMenu();
|
JPopupMenu popupMenu = getPopupMenu();
|
||||||
if (popupMenu != null) {
|
// Need to override the invoker for proper grab handling
|
||||||
if (popupMenu.getInvoker() != LWChoicePeer.this.getTarget()) {
|
if (popupMenu != null && popupMenu.getInvoker() != getTarget()) {
|
||||||
|
// The popup is now visible with correct location
|
||||||
|
// Save it and restore after toggling visibility and changing invoker
|
||||||
|
Point loc = popupMenu.getLocationOnScreen();
|
||||||
|
SwingUtilities.convertPointFromScreen(loc, this);
|
||||||
popupMenu.setVisible(false);
|
popupMenu.setVisible(false);
|
||||||
popupMenu.show(LWChoicePeer.this.getTarget(), 0, 0);
|
popupMenu.show(getTarget(), loc.x, loc.y);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -28,17 +28,16 @@ package sun.lwawt;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.List;
|
import java.awt.List;
|
||||||
import java.awt.datatransfer.*;
|
import java.awt.datatransfer.*;
|
||||||
import java.awt.dnd.*;
|
|
||||||
import java.awt.dnd.peer.*;
|
|
||||||
import java.awt.image.*;
|
import java.awt.image.*;
|
||||||
import java.awt.peer.*;
|
import java.awt.peer.*;
|
||||||
import java.security.*;
|
import java.security.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import sun.awt.*;
|
import sun.awt.*;
|
||||||
import sun.lwawt.macosx.*;
|
|
||||||
import sun.print.*;
|
import sun.print.*;
|
||||||
|
|
||||||
|
import static sun.lwawt.LWWindowPeer.PeerType;
|
||||||
|
|
||||||
public abstract class LWToolkit extends SunToolkit implements Runnable {
|
public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
|
|
||||||
private final static int STATE_NONE = 0;
|
private final static int STATE_NONE = 0;
|
||||||
|
@ -114,7 +113,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
/*
|
/*
|
||||||
* Sends a request to stop the message pump.
|
* Sends a request to stop the message pump.
|
||||||
*/
|
*/
|
||||||
public void shutdown() {
|
public final void shutdown() {
|
||||||
setRunState(STATE_SHUTDOWN);
|
setRunState(STATE_SHUTDOWN);
|
||||||
platformShutdown();
|
platformShutdown();
|
||||||
}
|
}
|
||||||
|
@ -145,7 +144,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
notifyAll();
|
notifyAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isTerminating() {
|
public final boolean isTerminating() {
|
||||||
return getRunState() >= STATE_SHUTDOWN;
|
return getRunState() >= STATE_SHUTDOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +161,8 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
@Override
|
||||||
|
public final void run() {
|
||||||
setRunState(STATE_INIT);
|
setRunState(STATE_INIT);
|
||||||
platformInit();
|
platformInit();
|
||||||
AWTAutoShutdown.notifyToolkitThreadFree();
|
AWTAutoShutdown.notifyToolkitThreadFree();
|
||||||
|
@ -214,80 +214,51 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
* Note that LWWindowPeer implements WindowPeer, FramePeer
|
* Note that LWWindowPeer implements WindowPeer, FramePeer
|
||||||
* and DialogPeer interfaces.
|
* and DialogPeer interfaces.
|
||||||
*/
|
*/
|
||||||
private LWWindowPeer createDelegatedPeer(Window target, PlatformComponent platformComponent,
|
protected LWWindowPeer createDelegatedPeer(Window target,
|
||||||
PlatformWindow platformWindow, LWWindowPeer.PeerType peerType)
|
PlatformComponent platformComponent,
|
||||||
{
|
PlatformWindow platformWindow,
|
||||||
|
PeerType peerType) {
|
||||||
LWWindowPeer peer = new LWWindowPeer(target, platformComponent, platformWindow, peerType);
|
LWWindowPeer peer = new LWWindowPeer(target, platformComponent, platformWindow, peerType);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
peer.initialize();
|
peer.initialize();
|
||||||
return peer;
|
return peer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private LWLightweightFramePeer createDelegatedLwPeer(LightweightFrame target,
|
@Override
|
||||||
PlatformComponent platformComponent,
|
public final FramePeer createLightweightFrame(LightweightFrame target) {
|
||||||
PlatformWindow platformWindow)
|
PlatformComponent platformComponent = createLwPlatformComponent();
|
||||||
{
|
PlatformWindow platformWindow = createPlatformWindow(PeerType.LW_FRAME);
|
||||||
LWLightweightFramePeer peer = new LWLightweightFramePeer(target, platformComponent, platformWindow);
|
LWLightweightFramePeer peer = new LWLightweightFramePeer(target,
|
||||||
|
platformComponent,
|
||||||
|
platformWindow);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
peer.initialize();
|
peer.initialize();
|
||||||
return peer;
|
return peer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FramePeer createLightweightFrame(LightweightFrame target) {
|
public final WindowPeer createWindow(Window target) {
|
||||||
PlatformComponent platformComponent = createLwPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.LW_FRAME);
|
PlatformWindow platformWindow = createPlatformWindow(PeerType.SIMPLEWINDOW);
|
||||||
return createDelegatedLwPeer(target, platformComponent, platformWindow);
|
return createDelegatedPeer(target, platformComponent, platformWindow, PeerType.SIMPLEWINDOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WindowPeer createWindow(Window target) {
|
public final FramePeer createFrame(Frame target) {
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.SIMPLEWINDOW);
|
PlatformWindow platformWindow = createPlatformWindow(PeerType.FRAME);
|
||||||
return createDelegatedPeer(target, platformComponent, platformWindow, LWWindowPeer.PeerType.SIMPLEWINDOW);
|
return createDelegatedPeer(target, platformComponent, platformWindow, PeerType.FRAME);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FramePeer createFrame(Frame target) {
|
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
|
||||||
PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.FRAME);
|
|
||||||
return createDelegatedPeer(target, platformComponent, platformWindow, LWWindowPeer.PeerType.FRAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LWWindowPeer createEmbeddedFrame(CEmbeddedFrame target) {
|
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
|
||||||
PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.EMBEDDED_FRAME);
|
|
||||||
return createDelegatedPeer(target, platformComponent, platformWindow, LWWindowPeer.PeerType.EMBEDDED_FRAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LWWindowPeer createEmbeddedFrame(CViewEmbeddedFrame target) {
|
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
|
||||||
PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.VIEW_EMBEDDED_FRAME);
|
|
||||||
return createDelegatedPeer(target, platformComponent, platformWindow, LWWindowPeer.PeerType.VIEW_EMBEDDED_FRAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CPrinterDialogPeer createCPrinterDialog(CPrinterDialog target) {
|
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
|
||||||
PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.DIALOG);
|
|
||||||
CPrinterDialogPeer peer = new CPrinterDialogPeer(target, platformComponent, platformWindow);
|
|
||||||
targetCreatedPeer(target, peer);
|
|
||||||
return peer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DialogPeer createDialog(Dialog target) {
|
public DialogPeer createDialog(Dialog target) {
|
||||||
if (target instanceof CPrinterDialog) {
|
|
||||||
return createCPrinterDialog((CPrinterDialog)target);
|
|
||||||
}
|
|
||||||
|
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.DIALOG);
|
PlatformWindow platformWindow = createPlatformWindow(PeerType.DIALOG);
|
||||||
return createDelegatedPeer(target, platformComponent, platformWindow, LWWindowPeer.PeerType.DIALOG);
|
return createDelegatedPeer(target, platformComponent, platformWindow, PeerType.DIALOG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FileDialogPeer createFileDialog(FileDialog target) {
|
public final FileDialogPeer createFileDialog(FileDialog target) {
|
||||||
FileDialogPeer peer = createFileDialogPeer(target);
|
FileDialogPeer peer = createFileDialogPeer(target);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
return peer;
|
return peer;
|
||||||
|
@ -296,7 +267,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
// ---- LIGHTWEIGHT COMPONENT PEERS ---- //
|
// ---- LIGHTWEIGHT COMPONENT PEERS ---- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ButtonPeer createButton(Button target) {
|
public final ButtonPeer createButton(Button target) {
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWButtonPeer peer = new LWButtonPeer(target, platformComponent);
|
LWButtonPeer peer = new LWButtonPeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -305,7 +276,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CheckboxPeer createCheckbox(Checkbox target) {
|
public final CheckboxPeer createCheckbox(Checkbox target) {
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWCheckboxPeer peer = new LWCheckboxPeer(target, platformComponent);
|
LWCheckboxPeer peer = new LWCheckboxPeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -314,12 +285,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
|
public final ChoicePeer createChoice(Choice target) {
|
||||||
throw new RuntimeException("not implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ChoicePeer createChoice(Choice target) {
|
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWChoicePeer peer = new LWChoicePeer(target, platformComponent);
|
LWChoicePeer peer = new LWChoicePeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -328,7 +294,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LabelPeer createLabel(Label target) {
|
public final LabelPeer createLabel(Label target) {
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWLabelPeer peer = new LWLabelPeer(target, platformComponent);
|
LWLabelPeer peer = new LWLabelPeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -337,7 +303,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CanvasPeer createCanvas(Canvas target) {
|
public final CanvasPeer createCanvas(Canvas target) {
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWCanvasPeer<?, ?> peer = new LWCanvasPeer<>(target, platformComponent);
|
LWCanvasPeer<?, ?> peer = new LWCanvasPeer<>(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -346,7 +312,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ListPeer createList(List target) {
|
public final ListPeer createList(List target) {
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWListPeer peer = new LWListPeer(target, platformComponent);
|
LWListPeer peer = new LWListPeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -355,22 +321,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MenuPeer createMenu(Menu target) {
|
public final PanelPeer createPanel(Panel target) {
|
||||||
throw new RuntimeException("not implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MenuBarPeer createMenuBar(MenuBar target) {
|
|
||||||
throw new RuntimeException("not implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MenuItemPeer createMenuItem(MenuItem target) {
|
|
||||||
throw new RuntimeException("not implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PanelPeer createPanel(Panel target) {
|
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWPanelPeer peer = new LWPanelPeer(target, platformComponent);
|
LWPanelPeer peer = new LWPanelPeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -379,12 +330,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PopupMenuPeer createPopupMenu(PopupMenu target) {
|
public final ScrollPanePeer createScrollPane(ScrollPane target) {
|
||||||
throw new RuntimeException("not implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ScrollPanePeer createScrollPane(ScrollPane target) {
|
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWScrollPanePeer peer = new LWScrollPanePeer(target, platformComponent);
|
LWScrollPanePeer peer = new LWScrollPanePeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -393,7 +339,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ScrollbarPeer createScrollbar(Scrollbar target) {
|
public final ScrollbarPeer createScrollbar(Scrollbar target) {
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWScrollBarPeer peer = new LWScrollBarPeer(target, platformComponent);
|
LWScrollBarPeer peer = new LWScrollBarPeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -402,7 +348,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TextAreaPeer createTextArea(TextArea target) {
|
public final TextAreaPeer createTextArea(TextArea target) {
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWTextAreaPeer peer = new LWTextAreaPeer(target, platformComponent);
|
LWTextAreaPeer peer = new LWTextAreaPeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -411,7 +357,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TextFieldPeer createTextField(TextField target) {
|
public final TextFieldPeer createTextField(TextField target) {
|
||||||
PlatformComponent platformComponent = createPlatformComponent();
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
LWTextFieldPeer peer = new LWTextFieldPeer(target, platformComponent);
|
LWTextFieldPeer peer = new LWTextFieldPeer(target, platformComponent);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
|
@ -422,56 +368,51 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
// ---- NON-COMPONENT PEERS ---- //
|
// ---- NON-COMPONENT PEERS ---- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ColorModel getColorModel() throws HeadlessException {
|
public final ColorModel getColorModel() throws HeadlessException {
|
||||||
return GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getColorModel();
|
return GraphicsEnvironment.getLocalGraphicsEnvironment()
|
||||||
|
.getDefaultScreenDevice()
|
||||||
|
.getDefaultConfiguration().getColorModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isDesktopSupported() {
|
public final boolean isDesktopSupported() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected DesktopPeer createDesktopPeer(Desktop target) {
|
public final KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() {
|
||||||
return new CDesktopPeer();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) {
|
|
||||||
DragSourceContextPeer dscp = CDragSourceContextPeer.createDragSourceContextPeer(dge);
|
|
||||||
|
|
||||||
return dscp;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() {
|
|
||||||
return LWKeyboardFocusManagerPeer.getInstance();
|
return LWKeyboardFocusManagerPeer.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized MouseInfoPeer getMouseInfoPeer() {
|
public final synchronized MouseInfoPeer getMouseInfoPeer() {
|
||||||
if (mouseInfoPeer == null) {
|
if (mouseInfoPeer == null) {
|
||||||
mouseInfoPeer = createMouseInfoPeerImpl();
|
mouseInfoPeer = createMouseInfoPeerImpl();
|
||||||
}
|
}
|
||||||
return mouseInfoPeer;
|
return mouseInfoPeer;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected MouseInfoPeer createMouseInfoPeerImpl() {
|
protected final MouseInfoPeer createMouseInfoPeerImpl() {
|
||||||
return new LWMouseInfoPeer();
|
return new LWMouseInfoPeer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public PrintJob getPrintJob(Frame frame, String doctitle, Properties props) {
|
@Override
|
||||||
|
public final PrintJob getPrintJob(Frame frame, String doctitle,
|
||||||
|
Properties props) {
|
||||||
return getPrintJob(frame, doctitle, null, null);
|
return getPrintJob(frame, doctitle, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PrintJob getPrintJob(Frame frame, String doctitle, JobAttributes jobAttributes, PageAttributes pageAttributes) {
|
@Override
|
||||||
|
public final PrintJob getPrintJob(Frame frame, String doctitle,
|
||||||
|
JobAttributes jobAttributes,
|
||||||
|
PageAttributes pageAttributes) {
|
||||||
if (GraphicsEnvironment.isHeadless()) {
|
if (GraphicsEnvironment.isHeadless()) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintJob2D printJob = new PrintJob2D(frame, doctitle, jobAttributes, pageAttributes);
|
PrintJob2D printJob = new PrintJob2D(frame, doctitle, jobAttributes, pageAttributes);
|
||||||
|
|
||||||
if (printJob.printDialog() == false) {
|
if (!printJob.printDialog()) {
|
||||||
printJob = null;
|
printJob = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,27 +420,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RobotPeer createRobot(Robot target, GraphicsDevice screen) {
|
public final Clipboard getSystemClipboard() {
|
||||||
throw new RuntimeException("not implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isTraySupported() {
|
|
||||||
throw new RuntimeException("not implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SystemTrayPeer createSystemTray(SystemTray target) {
|
|
||||||
throw new RuntimeException("not implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TrayIconPeer createTrayIcon(TrayIcon target) {
|
|
||||||
throw new RuntimeException("not implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Clipboard getSystemClipboard() {
|
|
||||||
SecurityManager security = System.getSecurityManager();
|
SecurityManager security = System.getSecurityManager();
|
||||||
if (security != null) {
|
if (security != null) {
|
||||||
security.checkPermission(AWTPermissions.ACCESS_CLIPBOARD_PERMISSION);
|
security.checkPermission(AWTPermissions.ACCESS_CLIPBOARD_PERMISSION);
|
||||||
|
@ -513,7 +434,8 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
return clipboard;
|
return clipboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract SecurityWarningWindow createSecurityWarning(Window ownerWindow, LWWindowPeer ownerPeer);
|
protected abstract SecurityWarningWindow createSecurityWarning(
|
||||||
|
Window ownerWindow, LWWindowPeer ownerPeer);
|
||||||
|
|
||||||
// ---- DELEGATES ---- //
|
// ---- DELEGATES ---- //
|
||||||
|
|
||||||
|
@ -522,7 +444,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
/*
|
/*
|
||||||
* Creates a delegate for the given peer type (window, frame, dialog, etc.)
|
* Creates a delegate for the given peer type (window, frame, dialog, etc.)
|
||||||
*/
|
*/
|
||||||
protected abstract PlatformWindow createPlatformWindow(LWWindowPeer.PeerType peerType);
|
protected abstract PlatformWindow createPlatformWindow(PeerType peerType);
|
||||||
|
|
||||||
protected abstract PlatformComponent createPlatformComponent();
|
protected abstract PlatformComponent createPlatformComponent();
|
||||||
|
|
||||||
|
@ -556,7 +478,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void grab(final Window w) {
|
public final void grab(final Window w) {
|
||||||
final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
|
final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
|
||||||
if (peer != null) {
|
if (peer != null) {
|
||||||
((LWWindowPeer) peer).grab();
|
((LWWindowPeer) peer).grab();
|
||||||
|
@ -564,7 +486,7 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void ungrab(final Window w) {
|
public final void ungrab(final Window w) {
|
||||||
final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
|
final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
|
||||||
if (peer != null) {
|
if (peer != null) {
|
||||||
((LWWindowPeer) peer).ungrab(false);
|
((LWWindowPeer) peer).ungrab(false);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -629,6 +629,7 @@ public class LWWindowPeer
|
||||||
final boolean isNewDevice = updateGraphicsDevice();
|
final boolean isNewDevice = updateGraphicsDevice();
|
||||||
if (resized || isNewDevice) {
|
if (resized || isNewDevice) {
|
||||||
replaceSurfaceData();
|
replaceSurfaceData();
|
||||||
|
updateMinimumSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Third, COMPONENT_MOVED/COMPONENT_RESIZED/PAINT events
|
// Third, COMPONENT_MOVED/COMPONENT_RESIZED/PAINT events
|
||||||
|
@ -1046,7 +1047,9 @@ public class LWWindowPeer
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void displayChanged() {
|
public final void displayChanged() {
|
||||||
updateGraphicsDevice();
|
if (updateGraphicsDevice()) {
|
||||||
|
updateMinimumSize();
|
||||||
|
}
|
||||||
// Replace surface unconditionally, because internal state of the
|
// Replace surface unconditionally, because internal state of the
|
||||||
// GraphicsDevice could be changed.
|
// GraphicsDevice could be changed.
|
||||||
replaceSurfaceData();
|
replaceSurfaceData();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -40,20 +40,23 @@ import sun.awt.datatransfer.*;
|
||||||
* sun.awt.datatransfer.DataTransferer.
|
* sun.awt.datatransfer.DataTransferer.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class CClipboard extends SunClipboard {
|
final class CClipboard extends SunClipboard {
|
||||||
|
|
||||||
public CClipboard(String name) {
|
public CClipboard(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public long getID() {
|
public long getID() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void clearNativeContext() {
|
protected void clearNativeContext() {
|
||||||
// Leaving Empty, as WClipboard.clearNativeContext is empty as well.
|
// Leaving Empty, as WClipboard.clearNativeContext is empty as well.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void setContentsNative(Transferable contents) {
|
protected void setContentsNative(Transferable contents) {
|
||||||
|
|
||||||
// Don't use delayed Clipboard rendering for the Transferable's data.
|
// Don't use delayed Clipboard rendering for the Transferable's data.
|
||||||
|
@ -89,6 +92,39 @@ public class CClipboard extends SunClipboard {
|
||||||
notifyChanged();
|
notifyChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected native long[] getClipboardFormats();
|
||||||
|
@Override
|
||||||
|
protected native byte[] getClipboardData(long format) throws IOException;
|
||||||
|
|
||||||
|
// 1.5 peer method
|
||||||
|
@Override
|
||||||
|
protected void unregisterClipboardViewerChecked() {
|
||||||
|
// no-op because we lack OS support. This requires 4048791, which requires 4048792
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1.5 peer method
|
||||||
|
@Override
|
||||||
|
protected void registerClipboardViewerChecked() {
|
||||||
|
// no-op because we lack OS support. This requires 4048791, which requires 4048792
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1.5 peer method
|
||||||
|
// no-op. This appears to be win32 specific. Filed 4048790 for investigation
|
||||||
|
//protected Transferable createLocaleTransferable(long[] formats) throws IOException;
|
||||||
|
|
||||||
|
private native void declareTypes(long[] formats, SunClipboard newOwner);
|
||||||
|
private native void setData(byte[] data, long format);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invokes native check whether a change count on the general pasteboard is different
|
||||||
|
* than when we set it. The different count value means the current owner lost
|
||||||
|
* pasteboard ownership and someone else put data on the clipboard.
|
||||||
|
* @since 1.7
|
||||||
|
*/
|
||||||
|
native void checkPasteboard();
|
||||||
|
|
||||||
|
/*** Native Callbacks ***/
|
||||||
private void notifyLostOwnership() {
|
private void notifyLostOwnership() {
|
||||||
lostOwnershipImpl();
|
lostOwnershipImpl();
|
||||||
}
|
}
|
||||||
|
@ -100,32 +136,4 @@ public class CClipboard extends SunClipboard {
|
||||||
}
|
}
|
||||||
clipboard.checkChange(clipboard.getClipboardFormats());
|
clipboard.checkChange(clipboard.getClipboardFormats());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected native long[] getClipboardFormats();
|
|
||||||
protected native byte[] getClipboardData(long format) throws IOException;
|
|
||||||
|
|
||||||
// 1.5 peer method
|
|
||||||
protected void unregisterClipboardViewerChecked() {
|
|
||||||
// no-op because we lack OS support. This requires 4048791, which requires 4048792
|
|
||||||
}
|
|
||||||
|
|
||||||
// 1.5 peer method
|
|
||||||
protected void registerClipboardViewerChecked() {
|
|
||||||
// no-op because we lack OS support. This requires 4048791, which requires 4048792
|
|
||||||
}
|
|
||||||
|
|
||||||
// 1.5 peer method
|
|
||||||
// no-op. This appears to be win32 specific. Filed 4048790 for investigation
|
|
||||||
//protected Transferable createLocaleTransferable(long[] formats) throws IOException;
|
|
||||||
|
|
||||||
public native void declareTypes(long[] formats, SunClipboard newOwner);
|
|
||||||
public native void setData(byte[] data, long format);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Invokes native check whether a change count on the general pasteboard is different
|
|
||||||
* than when we set it. The different count value means the current owner lost
|
|
||||||
* pasteboard ownership and someone else put data on the clipboard.
|
|
||||||
* @since 1.7
|
|
||||||
*/
|
|
||||||
public native void checkPasteboard();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,8 @@ public class CCustomCursor extends Cursor {
|
||||||
|
|
||||||
Image fImage;
|
Image fImage;
|
||||||
Point fHotspot;
|
Point fHotspot;
|
||||||
|
int fWidth;
|
||||||
|
int fHeight;
|
||||||
|
|
||||||
public CCustomCursor(final Image cursor, final Point hotSpot, final String name) throws IndexOutOfBoundsException, HeadlessException {
|
public CCustomCursor(final Image cursor, final Point hotSpot, final String name) throws IndexOutOfBoundsException, HeadlessException {
|
||||||
super(name);
|
super(name);
|
||||||
|
@ -50,6 +52,7 @@ public class CCustomCursor extends Cursor {
|
||||||
// Make sure image is fully loaded.
|
// Make sure image is fully loaded.
|
||||||
final Component c = new Canvas(); // for its imageUpdate method
|
final Component c = new Canvas(); // for its imageUpdate method
|
||||||
final MediaTracker tracker = new MediaTracker(c);
|
final MediaTracker tracker = new MediaTracker(c);
|
||||||
|
// MediaTracker loads resolution variants from MultiResolution Toolkit image
|
||||||
tracker.addImage(fImage, 0);
|
tracker.addImage(fImage, 0);
|
||||||
try {
|
try {
|
||||||
tracker.waitForAll();
|
tracker.waitForAll();
|
||||||
|
@ -67,14 +70,14 @@ public class CCustomCursor extends Cursor {
|
||||||
width = height = 1;
|
width = height = 1;
|
||||||
fImage = createTransparentImage(width, height);
|
fImage = createTransparentImage(width, height);
|
||||||
} else {
|
} else {
|
||||||
// Scale image to nearest supported size
|
// Get the nearest supported cursor size
|
||||||
final Dimension nativeSize = toolkit.getBestCursorSize(width, height);
|
final Dimension nativeSize = toolkit.getBestCursorSize(width, height);
|
||||||
if (nativeSize.width != width || nativeSize.height != height) {
|
|
||||||
fImage = fImage.getScaledInstance(nativeSize.width, nativeSize.height, Image.SCALE_DEFAULT);
|
|
||||||
width = nativeSize.width;
|
width = nativeSize.width;
|
||||||
height = nativeSize.height;
|
height = nativeSize.height;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
fWidth = width;
|
||||||
|
fHeight = height;
|
||||||
|
|
||||||
// NOTE: this was removed for 3169146, but in 1.5 the JCK tests for an exception and fails if one isn't thrown.
|
// NOTE: this was removed for 3169146, but in 1.5 the JCK tests for an exception and fails if one isn't thrown.
|
||||||
// See what JBuilder does.
|
// See what JBuilder does.
|
||||||
|
@ -138,6 +141,7 @@ public class CCustomCursor extends Cursor {
|
||||||
// failed to do its job. Return null to keep the cursor unchanged.
|
// failed to do its job. Return null to keep the cursor unchanged.
|
||||||
return 0L;
|
return 0L;
|
||||||
} else {
|
} else {
|
||||||
|
fCImage.resizeRepresentations(fWidth, fHeight);
|
||||||
return fCImage.ptr;
|
return fCImage.ptr;
|
||||||
}
|
}
|
||||||
} catch (IllegalArgumentException iae) {
|
} catch (IllegalArgumentException iae) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -56,11 +56,11 @@ public class CDataTransferer extends DataTransferer {
|
||||||
};
|
};
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Map<String, Long> nameMap = new HashMap<String, Long>(predefinedClipboardNames.length, 1.0f);
|
Map<String, Long> nameMap = new HashMap<>(predefinedClipboardNames.length, 1.0f);
|
||||||
Map<Long, String> formatMap = new HashMap<Long, String>(predefinedClipboardNames.length, 1.0f);
|
Map<Long, String> formatMap = new HashMap<>(predefinedClipboardNames.length, 1.0f);
|
||||||
for (int i = 1; i < predefinedClipboardNames.length; i++) {
|
for (int i = 1; i < predefinedClipboardNames.length; i++) {
|
||||||
nameMap.put(predefinedClipboardNames[i], new Long(i));
|
nameMap.put(predefinedClipboardNames[i], (long) i);
|
||||||
formatMap.put(new Long(i), predefinedClipboardNames[i]);
|
formatMap.put((long) i, predefinedClipboardNames[i]);
|
||||||
}
|
}
|
||||||
predefinedClipboardNameMap = Collections.synchronizedMap(nameMap);
|
predefinedClipboardNameMap = Collections.synchronizedMap(nameMap);
|
||||||
predefinedClipboardFormatMap = Collections.synchronizedMap(formatMap);
|
predefinedClipboardFormatMap = Collections.synchronizedMap(formatMap);
|
||||||
|
@ -77,19 +77,11 @@ public class CDataTransferer extends DataTransferer {
|
||||||
public static final int CF_PNG = 10;
|
public static final int CF_PNG = 10;
|
||||||
public static final int CF_JPEG = 11;
|
public static final int CF_JPEG = 11;
|
||||||
|
|
||||||
public static final Long L_CF_TIFF = predefinedClipboardNameMap.get(predefinedClipboardNames[CF_TIFF]);
|
|
||||||
|
|
||||||
// Image file formats with java.awt.Image representation:
|
|
||||||
private static final Long[] imageFormats = new Long[] {
|
|
||||||
L_CF_TIFF
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
private CDataTransferer() {}
|
private CDataTransferer() {}
|
||||||
|
|
||||||
private static CDataTransferer fTransferer;
|
private static CDataTransferer fTransferer;
|
||||||
|
|
||||||
public static synchronized CDataTransferer getInstanceImpl() {
|
static synchronized CDataTransferer getInstanceImpl() {
|
||||||
if (fTransferer == null) {
|
if (fTransferer == null) {
|
||||||
fTransferer = new CDataTransferer();
|
fTransferer = new CDataTransferer();
|
||||||
}
|
}
|
||||||
|
@ -97,18 +89,22 @@ public class CDataTransferer extends DataTransferer {
|
||||||
return fTransferer;
|
return fTransferer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getDefaultUnicodeEncoding() {
|
public String getDefaultUnicodeEncoding() {
|
||||||
return "utf-16le";
|
return "utf-16le";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isLocaleDependentTextFormat(long format) {
|
public boolean isLocaleDependentTextFormat(long format) {
|
||||||
return format == CF_STRING;
|
return format == CF_STRING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isFileFormat(long format) {
|
public boolean isFileFormat(long format) {
|
||||||
return format == CF_FILE;
|
return format == CF_FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isImageFormat(long format) {
|
public boolean isImageFormat(long format) {
|
||||||
int ifmt = (int)format;
|
int ifmt = (int)format;
|
||||||
switch(ifmt) {
|
switch(ifmt) {
|
||||||
|
@ -122,43 +118,12 @@ public class CDataTransferer extends DataTransferer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Long[] getImageFormatsAsLongArray() {
|
@Override
|
||||||
return imageFormats;
|
public Object translateBytes(byte[] bytes, DataFlavor flavor,
|
||||||
}
|
long format, Transferable transferable) throws IOException {
|
||||||
|
|
||||||
public byte[] translateTransferable(Transferable contents, DataFlavor flavor, long format) throws IOException
|
|
||||||
{
|
|
||||||
byte[] bytes = super.translateTransferable(contents, flavor, format);
|
|
||||||
|
|
||||||
// 9-12-02 VL: we may need to do something like Windows here.
|
|
||||||
//if (format == CF_HTML) {
|
|
||||||
// bytes = HTMLSupport.convertToHTMLFormat(bytes);
|
|
||||||
//}
|
|
||||||
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Object translateBytesOrStream(InputStream stream, byte[] bytes, DataFlavor flavor, long format,
|
|
||||||
Transferable transferable) throws IOException
|
|
||||||
{
|
|
||||||
// 5-28-03 VL: [Radar 3266030]
|
|
||||||
// We need to do like Windows does here.
|
|
||||||
if (format == CF_HTML && flavor.isFlavorTextType()) {
|
|
||||||
if (stream == null) {
|
|
||||||
stream = new ByteArrayInputStream(bytes);
|
|
||||||
bytes = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
stream = new HTMLDecodingInputStream(stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (format == CF_URL && URL.class.equals(flavor.getRepresentationClass()))
|
if (format == CF_URL && URL.class.equals(flavor.getRepresentationClass()))
|
||||||
{
|
{
|
||||||
if (bytes == null) {
|
|
||||||
bytes = inputStreamToByteArray(stream);
|
|
||||||
stream = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String charset = getDefaultTextCharset();
|
String charset = getDefaultTextCharset();
|
||||||
if (transferable != null && transferable.isDataFlavorSupported(javaTextEncodingFlavor)) {
|
if (transferable != null && transferable.isDataFlavorSupported(javaTextEncodingFlavor)) {
|
||||||
try {
|
try {
|
||||||
|
@ -177,7 +142,7 @@ public class CDataTransferer extends DataTransferer {
|
||||||
return super.translateBytes(bytes, flavor, format, transferable);
|
return super.translateBytes(bytes, flavor, format, transferable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
synchronized protected Long getFormatForNativeAsLong(String str) {
|
synchronized protected Long getFormatForNativeAsLong(String str) {
|
||||||
Long format = predefinedClipboardNameMap.get(str);
|
Long format = predefinedClipboardNameMap.get(str);
|
||||||
|
|
||||||
|
@ -202,6 +167,7 @@ public class CDataTransferer extends DataTransferer {
|
||||||
// Get registered native format string for an index, return null if unknown:
|
// Get registered native format string for an index, return null if unknown:
|
||||||
private native String formatForIndex(long index);
|
private native String formatForIndex(long index);
|
||||||
|
|
||||||
|
@Override
|
||||||
protected String getNativeForFormat(long format) {
|
protected String getNativeForFormat(long format) {
|
||||||
String returnValue = null;
|
String returnValue = null;
|
||||||
|
|
||||||
|
@ -209,7 +175,7 @@ public class CDataTransferer extends DataTransferer {
|
||||||
if (format >= 0 && format < predefinedClipboardNames.length) {
|
if (format >= 0 && format < predefinedClipboardNames.length) {
|
||||||
returnValue = predefinedClipboardNames[(int) format];
|
returnValue = predefinedClipboardNames[(int) format];
|
||||||
} else {
|
} else {
|
||||||
Long formatObj = new Long(format);
|
Long formatObj = format;
|
||||||
returnValue = predefinedClipboardFormatMap.get(formatObj);
|
returnValue = predefinedClipboardFormatMap.get(formatObj);
|
||||||
|
|
||||||
// predefinedClipboardFormatMap may not know this format:
|
// predefinedClipboardFormatMap may not know this format:
|
||||||
|
@ -233,10 +199,13 @@ public class CDataTransferer extends DataTransferer {
|
||||||
|
|
||||||
private final ToolkitThreadBlockedHandler handler = new CToolkitThreadBlockedHandler();
|
private final ToolkitThreadBlockedHandler handler = new CToolkitThreadBlockedHandler();
|
||||||
|
|
||||||
|
@Override
|
||||||
public ToolkitThreadBlockedHandler getToolkitThreadBlockedHandler() {
|
public ToolkitThreadBlockedHandler getToolkitThreadBlockedHandler() {
|
||||||
return handler;
|
return handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private native byte[] imageDataToPlatformImageBytes(int[] rData, int nW, int nH);
|
||||||
|
@Override
|
||||||
protected byte[] imageToPlatformBytes(Image image, long format) {
|
protected byte[] imageToPlatformBytes(Image image, long format) {
|
||||||
int w = image.getWidth(null);
|
int w = image.getWidth(null);
|
||||||
int h = image.getHeight(null);
|
int h = image.getHeight(null);
|
||||||
|
@ -252,32 +221,28 @@ public class CDataTransferer extends DataTransferer {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native String[] nativeDragQueryFile(final byte[] bytes);
|
private static native String[] nativeDragQueryFile(final byte[] bytes);
|
||||||
|
@Override
|
||||||
protected String[] dragQueryFile(final byte[] bytes) {
|
protected String[] dragQueryFile(final byte[] bytes) {
|
||||||
if (bytes == null) return null;
|
if (bytes == null) return null;
|
||||||
if (new String(bytes).startsWith("Unsupported type")) return null;
|
if (new String(bytes).startsWith("Unsupported type")) return null;
|
||||||
return nativeDragQueryFile(bytes);
|
return nativeDragQueryFile(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private native byte[] imageDataToPlatformImageBytes(int[] rData, int nW, int nH);
|
private native Image getImageForByteStream(byte[] bytes);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translates a byte array which contains
|
* Translates a byte array which contains
|
||||||
* platform-specific image data in the given format into an Image.
|
* platform-specific image data in the given format into an Image.
|
||||||
*/
|
*/
|
||||||
protected Image platformImageBytesToImage(byte[] bytes, long format)
|
@Override
|
||||||
throws IOException
|
protected Image platformImageBytesToImage(byte[] bytes, long format) throws IOException {
|
||||||
{
|
|
||||||
return getImageForByteStream(bytes);
|
return getImageForByteStream(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private native Image getImageForByteStream(byte[] bytes);
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ByteArrayOutputStream convertFileListToBytes(ArrayList<String> fileList) throws IOException {
|
protected ByteArrayOutputStream convertFileListToBytes(ArrayList<String> fileList) throws IOException {
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
for (int i = 0; i < fileList.size(); i++)
|
for (String file : fileList) {
|
||||||
{
|
byte[] bytes = file.getBytes();
|
||||||
byte[] bytes = fileList.get(i).getBytes();
|
|
||||||
bos.write(bytes, 0, bytes.length);
|
bos.write(bytes, 0, bytes.length);
|
||||||
bos.write(0);
|
bos.write(0);
|
||||||
}
|
}
|
||||||
|
@ -303,246 +268,3 @@ public class CDataTransferer extends DataTransferer {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ---- Code borrowed from WDataTransferer: ----
|
|
||||||
// This will come handy for supporting HTML data.
|
|
||||||
|
|
||||||
final class HTMLSupport {
|
|
||||||
public static final String ENCODING = "UTF-8";
|
|
||||||
|
|
||||||
public static final String VERSION = "Version:";
|
|
||||||
public static final String START_HTML = "StartHTML:";
|
|
||||||
public static final String END_HTML = "EndHTML:";
|
|
||||||
public static final String START_FRAGMENT = "StartFragment:";
|
|
||||||
public static final String END_FRAGMENT = "EndFragment:";
|
|
||||||
public static final String START_FRAGMENT_CMT = "<!--StartFragment-->";
|
|
||||||
public static final String END_FRAGMENT_CMT = "<!--EndFragment-->";
|
|
||||||
public static final String EOLN = "\r\n";
|
|
||||||
|
|
||||||
private static final String VERSION_NUM = "0.9";
|
|
||||||
private static final String HTML_START_END = "-1";
|
|
||||||
|
|
||||||
private static final int PADDED_WIDTH = 10;
|
|
||||||
|
|
||||||
private static final int HEADER_LEN =
|
|
||||||
VERSION.length() + VERSION_NUM.length() + EOLN.length() +
|
|
||||||
START_HTML.length() + HTML_START_END.length() + EOLN.length() +
|
|
||||||
END_HTML.length() + HTML_START_END.length() + EOLN.length() +
|
|
||||||
START_FRAGMENT.length() + PADDED_WIDTH + EOLN.length() +
|
|
||||||
END_FRAGMENT.length() + PADDED_WIDTH + EOLN.length() +
|
|
||||||
START_FRAGMENT_CMT.length() + EOLN.length();
|
|
||||||
private static final String HEADER_LEN_STR =
|
|
||||||
toPaddedString(HEADER_LEN, PADDED_WIDTH);
|
|
||||||
|
|
||||||
private static final String TRAILER = END_FRAGMENT_CMT + EOLN + '\0';
|
|
||||||
|
|
||||||
private static String toPaddedString(int n, int width) {
|
|
||||||
String string = "" + n;
|
|
||||||
int len = string.length();
|
|
||||||
if (n >= 0 && len < width) {
|
|
||||||
char[] array = new char[width - len];
|
|
||||||
Arrays.fill(array, '0');
|
|
||||||
StringBuffer buffer = new StringBuffer();
|
|
||||||
buffer.append(array);
|
|
||||||
buffer.append(string);
|
|
||||||
string = buffer.toString();
|
|
||||||
}
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte[] convertToHTMLFormat(byte[] bytes) {
|
|
||||||
StringBuffer header = new StringBuffer(HEADER_LEN);
|
|
||||||
header.append(VERSION);
|
|
||||||
header.append(VERSION_NUM);
|
|
||||||
header.append(EOLN);
|
|
||||||
header.append(START_HTML);
|
|
||||||
header.append(HTML_START_END);
|
|
||||||
header.append(EOLN);
|
|
||||||
header.append(END_HTML);
|
|
||||||
header.append(HTML_START_END);
|
|
||||||
header.append(EOLN);
|
|
||||||
header.append(START_FRAGMENT);
|
|
||||||
header.append(HEADER_LEN_STR);
|
|
||||||
header.append(EOLN);
|
|
||||||
header.append(END_FRAGMENT);
|
|
||||||
// Strip terminating NUL byte from array
|
|
||||||
header.append(toPaddedString(HEADER_LEN + bytes.length - 1,
|
|
||||||
PADDED_WIDTH));
|
|
||||||
header.append(EOLN);
|
|
||||||
header.append(START_FRAGMENT_CMT);
|
|
||||||
header.append(EOLN);
|
|
||||||
|
|
||||||
byte[] headerBytes = null, trailerBytes = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
headerBytes = new String(header).getBytes(ENCODING);
|
|
||||||
trailerBytes = TRAILER.getBytes(ENCODING);
|
|
||||||
} catch (UnsupportedEncodingException cannotHappen) {
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] retval = new byte[headerBytes.length + bytes.length - 1 +
|
|
||||||
trailerBytes.length];
|
|
||||||
|
|
||||||
System.arraycopy(headerBytes, 0, retval, 0, headerBytes.length);
|
|
||||||
System.arraycopy(bytes, 0, retval, headerBytes.length,
|
|
||||||
bytes.length - 1);
|
|
||||||
System.arraycopy(trailerBytes, 0, retval,
|
|
||||||
headerBytes.length + bytes.length - 1,
|
|
||||||
trailerBytes.length);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This stream takes an InputStream which provides data in CF_HTML format,
|
|
||||||
* strips off the description and context to extract the original HTML data.
|
|
||||||
*/
|
|
||||||
class HTMLDecodingInputStream extends InputStream {
|
|
||||||
|
|
||||||
private final BufferedInputStream bufferedStream;
|
|
||||||
private boolean descriptionParsed = false;
|
|
||||||
private boolean closed = false;
|
|
||||||
private int index;
|
|
||||||
private int end;
|
|
||||||
|
|
||||||
// InputStreamReader uses an 8K buffer. The size is not customizable.
|
|
||||||
public static final int BYTE_BUFFER_LEN = 8192;
|
|
||||||
|
|
||||||
// CharToByteUTF8.getMaxBytesPerChar returns 3, so we should not buffer
|
|
||||||
// more chars than 3 times the number of bytes we can buffer.
|
|
||||||
public static final int CHAR_BUFFER_LEN = BYTE_BUFFER_LEN / 3;
|
|
||||||
|
|
||||||
private static final String FAILURE_MSG =
|
|
||||||
"Unable to parse HTML description: ";
|
|
||||||
private static final String INVALID_MSG = " invalid";
|
|
||||||
|
|
||||||
public HTMLDecodingInputStream(InputStream bytestream) throws IOException {
|
|
||||||
bufferedStream = new BufferedInputStream(bytestream, BYTE_BUFFER_LEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void parseDescription() throws IOException {
|
|
||||||
bufferedStream.mark(BYTE_BUFFER_LEN);
|
|
||||||
|
|
||||||
BufferedReader bufferedReader = new BufferedReader
|
|
||||||
(new InputStreamReader(bufferedStream, HTMLSupport.ENCODING),
|
|
||||||
CHAR_BUFFER_LEN);
|
|
||||||
String version = bufferedReader.readLine().trim();
|
|
||||||
if (version == null || !version.startsWith(HTMLSupport.VERSION)) {
|
|
||||||
// Not MS-compliant HTML text. Return raw text from read().
|
|
||||||
index = 0;
|
|
||||||
end = -1;
|
|
||||||
bufferedStream.reset();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String input;
|
|
||||||
boolean startHTML, endHTML, startFragment, endFragment;
|
|
||||||
startHTML = endHTML = startFragment = endFragment = false;
|
|
||||||
|
|
||||||
try {
|
|
||||||
do {
|
|
||||||
input = bufferedReader.readLine().trim();
|
|
||||||
if (input == null) {
|
|
||||||
close();
|
|
||||||
throw new IOException(FAILURE_MSG);
|
|
||||||
} else if (input.startsWith(HTMLSupport.START_HTML)) {
|
|
||||||
int val = Integer.parseInt
|
|
||||||
(input.substring(HTMLSupport.START_HTML.length(),
|
|
||||||
input.length()).trim());
|
|
||||||
if (val >= 0) {
|
|
||||||
index = val;
|
|
||||||
startHTML = true;
|
|
||||||
} else if (val != -1) {
|
|
||||||
close();
|
|
||||||
throw new IOException(FAILURE_MSG +
|
|
||||||
HTMLSupport.START_HTML +
|
|
||||||
INVALID_MSG);
|
|
||||||
}
|
|
||||||
} else if (input.startsWith(HTMLSupport.END_HTML)) {
|
|
||||||
int val = Integer.parseInt
|
|
||||||
(input.substring(HTMLSupport.END_HTML.length(),
|
|
||||||
input.length()).trim());
|
|
||||||
if (val >= 0) {
|
|
||||||
end = val;
|
|
||||||
endHTML = true;
|
|
||||||
} else if (val != -1) {
|
|
||||||
close();
|
|
||||||
throw new IOException(FAILURE_MSG +
|
|
||||||
HTMLSupport.END_HTML +
|
|
||||||
INVALID_MSG);
|
|
||||||
}
|
|
||||||
} else if (!startHTML && !endHTML &&
|
|
||||||
input.startsWith(HTMLSupport.START_FRAGMENT)) {
|
|
||||||
index = Integer.parseInt
|
|
||||||
(input.substring(HTMLSupport.START_FRAGMENT.length(),
|
|
||||||
input.length()).trim());
|
|
||||||
if (index < 0) {
|
|
||||||
close();
|
|
||||||
throw new IOException(FAILURE_MSG +
|
|
||||||
HTMLSupport.START_FRAGMENT +
|
|
||||||
INVALID_MSG);
|
|
||||||
}
|
|
||||||
startFragment = true;
|
|
||||||
} else if (!startHTML && !endHTML &&
|
|
||||||
input.startsWith(HTMLSupport.END_FRAGMENT)) {
|
|
||||||
end = Integer.parseInt
|
|
||||||
(input.substring(HTMLSupport.END_FRAGMENT.length(),
|
|
||||||
input.length()).trim());
|
|
||||||
if (end < 0) {
|
|
||||||
close();
|
|
||||||
throw new IOException(FAILURE_MSG +
|
|
||||||
HTMLSupport.END_FRAGMENT +
|
|
||||||
INVALID_MSG);
|
|
||||||
}
|
|
||||||
endFragment = true;
|
|
||||||
}
|
|
||||||
} while (!((startHTML && endHTML) ||
|
|
||||||
(startFragment && endFragment)));
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
close();
|
|
||||||
throw new IOException(FAILURE_MSG + e);
|
|
||||||
}
|
|
||||||
|
|
||||||
bufferedStream.reset();
|
|
||||||
|
|
||||||
for (int i = 0; i < index; i++) {
|
|
||||||
if (bufferedStream.read() == -1) {
|
|
||||||
close();
|
|
||||||
throw new IOException(FAILURE_MSG +
|
|
||||||
"Byte stream ends in description.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int read() throws IOException {
|
|
||||||
if (closed) {
|
|
||||||
throw new IOException("Stream closed");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!descriptionParsed) {
|
|
||||||
parseDescription(); // initializes 'index' and 'end'
|
|
||||||
descriptionParsed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (end != -1 && index >= end) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int retval = bufferedStream.read();
|
|
||||||
if (retval == -1) {
|
|
||||||
index = end = 0; // so future read() calls will fail quickly
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
index++;
|
|
||||||
// System.out.print((char)retval);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() throws IOException {
|
|
||||||
if (!closed) {
|
|
||||||
closed = true;
|
|
||||||
bufferedStream.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -141,7 +141,7 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
|
||||||
// Create native dragging source:
|
// Create native dragging source:
|
||||||
final long nativeDragSource = createNativeDragSource(component, nativeViewPtr, transferable, triggerEvent,
|
final long nativeDragSource = createNativeDragSource(component, nativeViewPtr, transferable, triggerEvent,
|
||||||
(int) (dragOrigin.getX()), (int) (dragOrigin.getY()), extModifiers,
|
(int) (dragOrigin.getX()), (int) (dragOrigin.getY()), extModifiers,
|
||||||
clickCount, timestamp, fDragCImage, dragImageOffset.x, dragImageOffset.y,
|
clickCount, timestamp, fDragCImage != null ? fDragCImage.ptr : 0L, dragImageOffset.x, dragImageOffset.y,
|
||||||
getDragSourceContext().getSourceActions(), formats, formatMap);
|
getDragSourceContext().getSourceActions(), formats, formatMap);
|
||||||
|
|
||||||
if (nativeDragSource == 0)
|
if (nativeDragSource == 0)
|
||||||
|
@ -484,7 +484,7 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
|
||||||
// Native support:
|
// Native support:
|
||||||
private native long createNativeDragSource(Component component, long nativePeer, Transferable transferable,
|
private native long createNativeDragSource(Component component, long nativePeer, Transferable transferable,
|
||||||
InputEvent triggerEvent, int dragPosX, int dragPosY, int extModifiers, int clickCount, long timestamp,
|
InputEvent triggerEvent, int dragPosX, int dragPosY, int extModifiers, int clickCount, long timestamp,
|
||||||
CImage nsDragImage, int dragImageOffsetX, int dragImageOffsetY,
|
long nsDragImagePtr, int dragImageOffsetX, int dragImageOffsetY,
|
||||||
int sourceActions, long[] formats, Map formatMap);
|
int sourceActions, long[] formats, Map formatMap);
|
||||||
|
|
||||||
private native void doDragging(long nativeDragSource);
|
private native void doDragging(long nativeDragSource);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -23,17 +23,15 @@
|
||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
package sun.lwawt.macosx;
|
package sun.lwawt.macosx;
|
||||||
|
|
||||||
import sun.lwawt.LWToolkit;
|
import java.awt.AWTKeyStroke;
|
||||||
import sun.lwawt.LWWindowPeer;
|
import java.awt.Point;
|
||||||
import sun.lwawt.macosx.CocoaConstants;
|
import java.awt.Toolkit;
|
||||||
import sun.lwawt.macosx.event.NSEvent;
|
|
||||||
|
|
||||||
import sun.awt.EmbeddedFrame;
|
import sun.awt.EmbeddedFrame;
|
||||||
|
import sun.lwawt.LWWindowPeer;
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
|
||||||
|
|
||||||
public class CEmbeddedFrame extends EmbeddedFrame {
|
public class CEmbeddedFrame extends EmbeddedFrame {
|
||||||
|
|
||||||
|
@ -48,7 +46,7 @@ public class CEmbeddedFrame extends EmbeddedFrame {
|
||||||
|
|
||||||
public void addNotify() {
|
public void addNotify() {
|
||||||
if (getPeer() == null) {
|
if (getPeer() == null) {
|
||||||
LWToolkit toolkit = (LWToolkit)Toolkit.getDefaultToolkit();
|
LWCToolkit toolkit = (LWCToolkit)Toolkit.getDefaultToolkit();
|
||||||
LWWindowPeer peer = toolkit.createEmbeddedFrame(this);
|
LWWindowPeer peer = toolkit.createEmbeddedFrame(this);
|
||||||
setPeer(peer);
|
setPeer(peer);
|
||||||
responder = new CPlatformResponder(peer, true);
|
responder = new CPlatformResponder(peer, true);
|
||||||
|
|
|
@ -46,17 +46,16 @@ class CFileDialog implements FileDialogPeer {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
boolean navigateApps = false;
|
boolean navigateApps = !AccessController.doPrivileged(
|
||||||
|
new GetBooleanAction("apple.awt.use-file-dialog-packages"));
|
||||||
|
boolean chooseDirectories = AccessController.doPrivileged(
|
||||||
|
new GetBooleanAction("apple.awt.fileDialogForDirectories"));
|
||||||
|
|
||||||
int dialogMode = target.getMode();
|
int dialogMode = target.getMode();
|
||||||
|
|
||||||
navigateApps = true;
|
|
||||||
|
|
||||||
String title = target.getTitle();
|
String title = target.getTitle();
|
||||||
if (title == null) {
|
if (title == null) {
|
||||||
title = " ";
|
title = " ";
|
||||||
}
|
}
|
||||||
Boolean chooseDirectories = AccessController.doPrivileged(
|
|
||||||
new GetBooleanAction("apple.awt.fileDialogForDirectories"));
|
|
||||||
|
|
||||||
String[] userFileNames = nativeRunFileDialog(title,
|
String[] userFileNames = nativeRunFileDialog(title,
|
||||||
dialogMode,
|
dialogMode,
|
||||||
|
|
|
@ -31,6 +31,7 @@ import java.awt.image.*;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import sun.awt.image.MultiResolutionImage;
|
||||||
|
|
||||||
import sun.awt.image.SunWritableRaster;
|
import sun.awt.image.SunWritableRaster;
|
||||||
|
|
||||||
|
@ -44,6 +45,7 @@ public class CImage extends CFRetainedResource {
|
||||||
private static native void nativeCopyNSImageIntoArray(long image, int[] buffer, int w, int h);
|
private static native void nativeCopyNSImageIntoArray(long image, int[] buffer, int w, int h);
|
||||||
private static native Dimension2D nativeGetNSImageSize(long image);
|
private static native Dimension2D nativeGetNSImageSize(long image);
|
||||||
private static native void nativeSetNSImageSize(long image, double w, double h);
|
private static native void nativeSetNSImageSize(long image, double w, double h);
|
||||||
|
private static native void nativeResizeNSImageRepresentations(long image, double w, double h);
|
||||||
|
|
||||||
static Creator creator = new Creator();
|
static Creator creator = new Creator();
|
||||||
static Creator getCreator() {
|
static Creator getCreator() {
|
||||||
|
@ -145,6 +147,12 @@ public class CImage extends CFRetainedResource {
|
||||||
|
|
||||||
// This is used to create a CImage from a Image
|
// This is used to create a CImage from a Image
|
||||||
public CImage createFromImage(final Image image) {
|
public CImage createFromImage(final Image image) {
|
||||||
|
if (image instanceof MultiResolutionImage) {
|
||||||
|
List<Image> resolutionVariants
|
||||||
|
= ((MultiResolutionImage) image).getResolutionVariants();
|
||||||
|
return createFromImages(resolutionVariants);
|
||||||
|
}
|
||||||
|
|
||||||
int[] buffer = imageToArray(image, true);
|
int[] buffer = imageToArray(image, true);
|
||||||
if (buffer == null) {
|
if (buffer == null) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -223,4 +231,8 @@ public class CImage extends CFRetainedResource {
|
||||||
if (ptr != 0) nativeSetNSImageSize(ptr, w, h);
|
if (ptr != 0) nativeSetNSImageSize(ptr, w, h);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void resizeRepresentations(double w, double h) {
|
||||||
|
if (ptr != 0) nativeResizeNSImageRepresentations(ptr, w, h);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -28,7 +28,7 @@ package sun.lwawt.macosx;
|
||||||
import sun.awt.SunToolkit;
|
import sun.awt.SunToolkit;
|
||||||
import sun.lwawt.LWWindowPeer;
|
import sun.lwawt.LWWindowPeer;
|
||||||
import sun.lwawt.PlatformEventNotifier;
|
import sun.lwawt.PlatformEventNotifier;
|
||||||
import sun.lwawt.macosx.event.NSEvent;
|
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.event.InputEvent;
|
import java.awt.event.InputEvent;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -31,7 +31,6 @@ import java.awt.geom.Rectangle2D;
|
||||||
import sun.awt.CGraphicsConfig;
|
import sun.awt.CGraphicsConfig;
|
||||||
import sun.awt.CGraphicsEnvironment;
|
import sun.awt.CGraphicsEnvironment;
|
||||||
import sun.lwawt.LWWindowPeer;
|
import sun.lwawt.LWWindowPeer;
|
||||||
import sun.lwawt.macosx.event.NSEvent;
|
|
||||||
|
|
||||||
import sun.java2d.SurfaceData;
|
import sun.java2d.SurfaceData;
|
||||||
import sun.java2d.opengl.CGLLayer;
|
import sun.java2d.opengl.CGLLayer;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -583,7 +583,12 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||||
// setVisible could have changed the native maximized state
|
// setVisible could have changed the native maximized state
|
||||||
deliverZoom(true);
|
deliverZoom(true);
|
||||||
} else {
|
} else {
|
||||||
switch (((Frame)target).getExtendedState()) {
|
int frameState = ((Frame)target).getExtendedState();
|
||||||
|
if ((frameState & Frame.ICONIFIED) != 0) {
|
||||||
|
// Treat all state bit masks with ICONIFIED bit as ICONIFIED state.
|
||||||
|
frameState = Frame.ICONIFIED;
|
||||||
|
}
|
||||||
|
switch (frameState) {
|
||||||
case Frame.ICONIFIED:
|
case Frame.ICONIFIED:
|
||||||
CWrapper.NSWindow.miniaturize(nsWindowPtr);
|
CWrapper.NSWindow.miniaturize(nsWindowPtr);
|
||||||
break;
|
break;
|
||||||
|
@ -608,9 +613,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||||
// Add myself as a child
|
// Add myself as a child
|
||||||
if (owner != null && owner.isVisible()) {
|
if (owner != null && owner.isVisible()) {
|
||||||
CWrapper.NSWindow.addChildWindow(owner.getNSWindowPtr(), nsWindowPtr, CWrapper.NSWindow.NSWindowAbove);
|
CWrapper.NSWindow.addChildWindow(owner.getNSWindowPtr(), nsWindowPtr, CWrapper.NSWindow.NSWindowAbove);
|
||||||
if (target.isAlwaysOnTop()) {
|
applyWindowLevel(target);
|
||||||
CWrapper.NSWindow.setLevel(nsWindowPtr, CWrapper.NSWindow.NSFloatingWindowLevel);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add my own children to myself
|
// Add my own children to myself
|
||||||
|
@ -620,9 +623,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||||
CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
|
CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
|
||||||
if (pw != null && pw.isVisible()) {
|
if (pw != null && pw.isVisible()) {
|
||||||
CWrapper.NSWindow.addChildWindow(nsWindowPtr, pw.getNSWindowPtr(), CWrapper.NSWindow.NSWindowAbove);
|
CWrapper.NSWindow.addChildWindow(nsWindowPtr, pw.getNSWindowPtr(), CWrapper.NSWindow.NSWindowAbove);
|
||||||
if (w.isAlwaysOnTop()) {
|
pw.applyWindowLevel(w);
|
||||||
CWrapper.NSWindow.setLevel(pw.getNSWindowPtr(), CWrapper.NSWindow.NSFloatingWindowLevel);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -788,6 +789,10 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||||
if (prevWindowState == windowState) return;
|
if (prevWindowState == windowState) return;
|
||||||
|
|
||||||
final long nsWindowPtr = getNSWindowPtr();
|
final long nsWindowPtr = getNSWindowPtr();
|
||||||
|
if ((windowState & Frame.ICONIFIED) != 0) {
|
||||||
|
// Treat all state bit masks with ICONIFIED bit as ICONIFIED state.
|
||||||
|
windowState = Frame.ICONIFIED;
|
||||||
|
}
|
||||||
switch (windowState) {
|
switch (windowState) {
|
||||||
case Frame.ICONIFIED:
|
case Frame.ICONIFIED:
|
||||||
if (prevWindowState == Frame.MAXIMIZED_BOTH) {
|
if (prevWindowState == Frame.MAXIMIZED_BOTH) {
|
||||||
|
@ -1041,8 +1046,14 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||||
CWrapper.NSWindow.addChildWindow(nsWindowOwnerPtr, nsWindowSelfPtr, CWrapper.NSWindow.NSWindowAbove);
|
CWrapper.NSWindow.addChildWindow(nsWindowOwnerPtr, nsWindowSelfPtr, CWrapper.NSWindow.NSWindowAbove);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target.isAlwaysOnTop()) {
|
applyWindowLevel(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void applyWindowLevel(Window target) {
|
||||||
|
if (target.isAlwaysOnTop() && target.getType() != Window.Type.POPUP) {
|
||||||
CWrapper.NSWindow.setLevel(getNSWindowPtr(), CWrapper.NSWindow.NSFloatingWindowLevel);
|
CWrapper.NSWindow.setLevel(getNSWindowPtr(), CWrapper.NSWindow.NSFloatingWindowLevel);
|
||||||
|
} else if (target.getType() == Window.Type.POPUP) {
|
||||||
|
CWrapper.NSWindow.setLevel(getNSWindowPtr(), CWrapper.NSWindow.NSPopUpMenuWindowLevel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ import javax.print.attribute.standard.PageRanges;
|
||||||
import sun.java2d.*;
|
import sun.java2d.*;
|
||||||
import sun.print.*;
|
import sun.print.*;
|
||||||
|
|
||||||
public class CPrinterJob extends RasterPrinterJob {
|
final class CPrinterJob extends RasterPrinterJob {
|
||||||
// NOTE: This uses RasterPrinterJob as a base, but it doesn't use
|
// NOTE: This uses RasterPrinterJob as a base, but it doesn't use
|
||||||
// all of the RasterPrinterJob functions. RasterPrinterJob will
|
// all of the RasterPrinterJob functions. RasterPrinterJob will
|
||||||
// break down printing to pieces that aren't necessary under MacOSX
|
// break down printing to pieces that aren't necessary under MacOSX
|
||||||
|
@ -89,6 +89,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* returns true.
|
* returns true.
|
||||||
* @see java.awt.GraphicsEnvironment#isHeadless
|
* @see java.awt.GraphicsEnvironment#isHeadless
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public boolean printDialog() throws HeadlessException {
|
public boolean printDialog() throws HeadlessException {
|
||||||
if (GraphicsEnvironment.isHeadless()) {
|
if (GraphicsEnvironment.isHeadless()) {
|
||||||
throw new HeadlessException();
|
throw new HeadlessException();
|
||||||
|
@ -131,6 +132,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* @see java.awt.GraphicsEnvironment#isHeadless
|
* @see java.awt.GraphicsEnvironment#isHeadless
|
||||||
* @since 1.2
|
* @since 1.2
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public PageFormat pageDialog(PageFormat page) throws HeadlessException {
|
public PageFormat pageDialog(PageFormat page) throws HeadlessException {
|
||||||
if (GraphicsEnvironment.isHeadless()) {
|
if (GraphicsEnvironment.isHeadless()) {
|
||||||
throw new HeadlessException();
|
throw new HeadlessException();
|
||||||
|
@ -156,12 +158,14 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* @return clone of <code>page</code>, altered to describe a default
|
* @return clone of <code>page</code>, altered to describe a default
|
||||||
* <code>PageFormat</code>.
|
* <code>PageFormat</code>.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public PageFormat defaultPage(PageFormat page) {
|
public PageFormat defaultPage(PageFormat page) {
|
||||||
PageFormat newPage = (PageFormat)page.clone();
|
PageFormat newPage = (PageFormat)page.clone();
|
||||||
getDefaultPage(newPage);
|
getDefaultPage(newPage);
|
||||||
return newPage;
|
return newPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void setAttributes(PrintRequestAttributeSet attributes) throws PrinterException {
|
protected void setAttributes(PrintRequestAttributeSet attributes) throws PrinterException {
|
||||||
super.setAttributes(attributes);
|
super.setAttributes(attributes);
|
||||||
|
|
||||||
|
@ -216,7 +220,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void print(PrintRequestAttributeSet attributes) throws PrinterException {
|
public void print(PrintRequestAttributeSet attributes) throws PrinterException {
|
||||||
// NOTE: Some of this code is copied from RasterPrinterJob.
|
// NOTE: Some of this code is copied from RasterPrinterJob.
|
||||||
|
|
||||||
|
@ -343,6 +347,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Returns the resolution in dots per inch across the width
|
* Returns the resolution in dots per inch across the width
|
||||||
* of the page.
|
* of the page.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected double getXRes() {
|
protected double getXRes() {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -352,6 +357,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Returns the resolution in dots per inch down the height
|
* Returns the resolution in dots per inch down the height
|
||||||
* of the page.
|
* of the page.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected double getYRes() {
|
protected double getYRes() {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -362,6 +368,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Value is in device pixels.
|
* Value is in device pixels.
|
||||||
* Not adjusted for orientation of the paper.
|
* Not adjusted for orientation of the paper.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected double getPhysicalPrintableX(Paper p) {
|
protected double getPhysicalPrintableX(Paper p) {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -372,6 +379,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Value is in device pixels.
|
* Value is in device pixels.
|
||||||
* Not adjusted for orientation of the paper.
|
* Not adjusted for orientation of the paper.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected double getPhysicalPrintableY(Paper p) {
|
protected double getPhysicalPrintableY(Paper p) {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -382,6 +390,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Value is in device pixels.
|
* Value is in device pixels.
|
||||||
* Not adjusted for orientation of the paper.
|
* Not adjusted for orientation of the paper.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected double getPhysicalPrintableWidth(Paper p) {
|
protected double getPhysicalPrintableWidth(Paper p) {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -392,6 +401,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Value is in device pixels.
|
* Value is in device pixels.
|
||||||
* Not adjusted for orientation of the paper.
|
* Not adjusted for orientation of the paper.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected double getPhysicalPrintableHeight(Paper p) {
|
protected double getPhysicalPrintableHeight(Paper p) {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -402,6 +412,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Value is in device pixels.
|
* Value is in device pixels.
|
||||||
* Not adjusted for orientation of the paper.
|
* Not adjusted for orientation of the paper.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected double getPhysicalPageWidth(Paper p) {
|
protected double getPhysicalPageWidth(Paper p) {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -412,6 +423,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Value is in device pixels.
|
* Value is in device pixels.
|
||||||
* Not adjusted for orientation of the paper.
|
* Not adjusted for orientation of the paper.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected double getPhysicalPageHeight(Paper p) {
|
protected double getPhysicalPageHeight(Paper p) {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -429,6 +441,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
/**
|
/**
|
||||||
* End a page.
|
* End a page.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected void endPage(PageFormat format, Printable painter, int index) throws PrinterException {
|
protected void endPage(PageFormat format, Printable painter, int index) throws PrinterException {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
throw new PrinterException(sShouldNotReachHere);
|
throw new PrinterException(sShouldNotReachHere);
|
||||||
|
@ -441,6 +454,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* page. The width and height of the band is
|
* page. The width and height of the band is
|
||||||
* specified by the caller.
|
* specified by the caller.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected void printBand(byte[] data, int x, int y, int width, int height) throws PrinterException {
|
protected void printBand(byte[] data, int x, int y, int width, int height) throws PrinterException {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
throw new PrinterException(sShouldNotReachHere);
|
throw new PrinterException(sShouldNotReachHere);
|
||||||
|
@ -450,6 +464,7 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Called by the print() method at the start of
|
* Called by the print() method at the start of
|
||||||
* a print job.
|
* a print job.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected void startDoc() throws PrinterException {
|
protected void startDoc() throws PrinterException {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
throw new PrinterException(sShouldNotReachHere);
|
throw new PrinterException(sShouldNotReachHere);
|
||||||
|
@ -459,12 +474,14 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
* Called by the print() method at the end of
|
* Called by the print() method at the end of
|
||||||
* a print job.
|
* a print job.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected void endDoc() throws PrinterException {
|
protected void endDoc() throws PrinterException {
|
||||||
// NOTE: This is not used in the CPrinterJob code path.
|
// NOTE: This is not used in the CPrinterJob code path.
|
||||||
throw new PrinterException(sShouldNotReachHere);
|
throw new PrinterException(sShouldNotReachHere);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called by cancelDoc */
|
/* Called by cancelDoc */
|
||||||
|
@Override
|
||||||
protected native void abortDoc();
|
protected native void abortDoc();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -502,10 +519,12 @@ public class CPrinterJob extends RasterPrinterJob {
|
||||||
/**
|
/**
|
||||||
* validate the paper size against the current printer.
|
* validate the paper size against the current printer.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected native void validatePaper(Paper origPaper, Paper newPaper );
|
protected native void validatePaper(Paper origPaper, Paper newPaper );
|
||||||
|
|
||||||
// The following methods are CPrinterJob specific.
|
// The following methods are CPrinterJob specific.
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void finalize() {
|
protected void finalize() {
|
||||||
if (fNSPrintInfo != -1) {
|
if (fNSPrintInfo != -1) {
|
||||||
dispose(fNSPrintInfo);
|
dispose(fNSPrintInfo);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -29,7 +29,7 @@ package sun.lwawt.macosx;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.print.*;
|
import java.awt.print.*;
|
||||||
|
|
||||||
public class CPrinterJobDialog extends CPrinterDialog {
|
final class CPrinterJobDialog extends CPrinterDialog {
|
||||||
private Pageable fPageable;
|
private Pageable fPageable;
|
||||||
private boolean fAllowPrintToFile;
|
private boolean fAllowPrintToFile;
|
||||||
|
|
||||||
|
@ -39,5 +39,6 @@ public class CPrinterJobDialog extends CPrinterDialog {
|
||||||
fAllowPrintToFile = allowPrintToFile;
|
fAllowPrintToFile = allowPrintToFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected native boolean showDialog();
|
protected native boolean showDialog();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -29,7 +29,7 @@ package sun.lwawt.macosx;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.print.*;
|
import java.awt.print.*;
|
||||||
|
|
||||||
public class CPrinterPageDialog extends CPrinterDialog {
|
final class CPrinterPageDialog extends CPrinterDialog {
|
||||||
private PageFormat fPage;
|
private PageFormat fPage;
|
||||||
private Printable fPainter;
|
private Printable fPainter;
|
||||||
|
|
||||||
|
@ -39,5 +39,6 @@ public class CPrinterPageDialog extends CPrinterDialog {
|
||||||
fPainter = painter;
|
fPainter = painter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected native boolean showDialog();
|
protected native boolean showDialog();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -40,11 +40,11 @@ public class CPrinterSurfaceData extends OSXSurfaceData{
|
||||||
// public static final SurfaceType IntArgbPQ = SurfaceType.IntArgb.deriveSubType(DESC_INT_ARGB_PQ);
|
// public static final SurfaceType IntArgbPQ = SurfaceType.IntArgb.deriveSubType(DESC_INT_ARGB_PQ);
|
||||||
public static final SurfaceType IntRgbPQ = SurfaceType.IntRgb.deriveSubType(DESC_INT_RGB_PQ);
|
public static final SurfaceType IntRgbPQ = SurfaceType.IntRgb.deriveSubType(DESC_INT_RGB_PQ);
|
||||||
|
|
||||||
public static SurfaceData createData(PageFormat pf, long context) {
|
static SurfaceData createData(PageFormat pf, long context) {
|
||||||
return new CPrinterSurfaceData(CPrinterGraphicsConfig.getConfig(pf), context);
|
return new CPrinterSurfaceData(CPrinterGraphicsConfig.getConfig(pf), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CPrinterSurfaceData(GraphicsConfiguration gc, long context) {
|
private CPrinterSurfaceData(GraphicsConfiguration gc, long context) {
|
||||||
super(IntRgbPQ, gc.getColorModel(), gc, gc.getBounds());
|
super(IntRgbPQ, gc.getColorModel(), gc, gc.getBounds());
|
||||||
initOps(context, this.fGraphicsStates, this.fGraphicsStatesObject, gc.getBounds().width, gc.getBounds().height);
|
initOps(context, this.fGraphicsStates, this.fGraphicsStatesObject, gc.getBounds().width, gc.getBounds().height);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -27,7 +27,6 @@ package sun.lwawt.macosx;
|
||||||
|
|
||||||
import sun.awt.AWTAccessor;
|
import sun.awt.AWTAccessor;
|
||||||
import sun.awt.SunToolkit;
|
import sun.awt.SunToolkit;
|
||||||
import sun.lwawt.macosx.event.NSEvent;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
@ -76,8 +75,9 @@ public class CTrayIcon extends CFRetainedResource implements TrayIconPeer {
|
||||||
menuPeer = (CPopupMenu)popup.getPeer();
|
menuPeer = (CPopupMenu)popup.getPeer();
|
||||||
if (menuPeer == null) {
|
if (menuPeer == null) {
|
||||||
popup.addNotify();
|
popup.addNotify();
|
||||||
|
menuPeer = (CPopupMenu)popup.getPeer();
|
||||||
}
|
}
|
||||||
}catch (Exception e){
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -97,8 +97,13 @@ public class CTrayIcon extends CFRetainedResource implements TrayIconPeer {
|
||||||
//invocation from the AWTTrayIcon.m
|
//invocation from the AWTTrayIcon.m
|
||||||
public long getPopupMenuModel(){
|
public long getPopupMenuModel(){
|
||||||
if(popup == null) {
|
if(popup == null) {
|
||||||
|
PopupMenu popupMenu = target.getPopupMenu();
|
||||||
|
if (popupMenu != null) {
|
||||||
|
popup = popupMenu;
|
||||||
|
} else {
|
||||||
return 0L;
|
return 0L;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return checkAndCreatePopupPeer().getModel();
|
return checkAndCreatePopupPeer().getModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,6 +139,10 @@ public class CTrayIcon extends CFRetainedResource implements TrayIconPeer {
|
||||||
|
|
||||||
dummyFrame.dispose();
|
dummyFrame.dispose();
|
||||||
|
|
||||||
|
if (popup != null) {
|
||||||
|
popup.removeNotify();
|
||||||
|
}
|
||||||
|
|
||||||
LWCToolkit.targetDisposedPeer(target, this);
|
LWCToolkit.targetDisposedPeer(target, this);
|
||||||
target = null;
|
target = null;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -22,14 +22,17 @@
|
||||||
* or visit www.oracle.com if you need additional information or have any
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
package sun.lwawt.macosx;
|
package sun.lwawt.macosx;
|
||||||
|
|
||||||
import java.awt.AWTKeyStroke;
|
import java.awt.AWTKeyStroke;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
import sun.awt.EmbeddedFrame;
|
import sun.awt.EmbeddedFrame;
|
||||||
import sun.lwawt.LWToolkit;
|
|
||||||
import sun.lwawt.LWWindowPeer;
|
import sun.lwawt.LWWindowPeer;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The CViewEmbeddedFrame class is used in the SWT_AWT bridge.
|
* The CViewEmbeddedFrame class is used in the SWT_AWT bridge.
|
||||||
* This is a part of public API and should not be renamed or moved
|
* This is a part of public API and should not be renamed or moved
|
||||||
|
@ -48,7 +51,7 @@ public class CViewEmbeddedFrame extends EmbeddedFrame {
|
||||||
@Override
|
@Override
|
||||||
public void addNotify() {
|
public void addNotify() {
|
||||||
if (getPeer() == null) {
|
if (getPeer() == null) {
|
||||||
LWToolkit toolkit = (LWToolkit) Toolkit.getDefaultToolkit();
|
LWCToolkit toolkit = (LWCToolkit) Toolkit.getDefaultToolkit();
|
||||||
setPeer(toolkit.createEmbeddedFrame(this));
|
setPeer(toolkit.createEmbeddedFrame(this));
|
||||||
}
|
}
|
||||||
super.addNotify();
|
super.addNotify();
|
||||||
|
|
|
@ -247,10 +247,7 @@ public final class CWarningWindow extends CPlatformWindow
|
||||||
nsWindowPtr, CWrapper.NSWindow.NSWindowAbove);
|
nsWindowPtr, CWrapper.NSWindow.NSWindowAbove);
|
||||||
|
|
||||||
// do not allow security warning to be obscured by other windows
|
// do not allow security warning to be obscured by other windows
|
||||||
if (ownerWindow.isAlwaysOnTop()) {
|
applyWindowLevel(ownerWindow);
|
||||||
CWrapper.NSWindow.setLevel(nsWindowPtr,
|
|
||||||
CWrapper.NSWindow.NSFloatingWindowLevel);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -25,73 +25,65 @@
|
||||||
|
|
||||||
package sun.lwawt.macosx;
|
package sun.lwawt.macosx;
|
||||||
|
|
||||||
import java.awt.geom.Rectangle2D;
|
final class CWrapper {
|
||||||
|
|
||||||
public final class CWrapper {
|
|
||||||
private CWrapper() { }
|
private CWrapper() { }
|
||||||
|
|
||||||
public static final class NSWindow {
|
static final class NSWindow {
|
||||||
// NSWindowOrderingMode
|
// NSWindowOrderingMode
|
||||||
public static final int NSWindowAbove = 1;
|
static final int NSWindowAbove = 1;
|
||||||
public static final int NSWindowBelow = -1;
|
static final int NSWindowBelow = -1;
|
||||||
public static final int NSWindowOut = 0;
|
static final int NSWindowOut = 0;
|
||||||
|
|
||||||
// Window level constants
|
// Window level constants
|
||||||
// The number of supported levels: (we'll use more in the future)
|
// The number of supported levels: (we'll use more in the future)
|
||||||
public static final int MAX_WINDOW_LEVELS = 2;
|
static final int MAX_WINDOW_LEVELS = 3;
|
||||||
// The levels: (these are NOT real constants, these are keys. See native code.)
|
// The levels: (these are NOT real constants, these are keys. See native code.)
|
||||||
public static final int NSNormalWindowLevel = 0;
|
static final int NSNormalWindowLevel = 0;
|
||||||
public static final int NSFloatingWindowLevel = 1;
|
static final int NSFloatingWindowLevel = 1;
|
||||||
|
static final int NSPopUpMenuWindowLevel = 2;
|
||||||
|
|
||||||
// 'level' is one of the keys defined above
|
// 'level' is one of the keys defined above
|
||||||
public static native void setLevel(long window, int level);
|
static native void setLevel(long window, int level);
|
||||||
|
|
||||||
public static native void makeKeyAndOrderFront(long window);
|
static native void makeKeyAndOrderFront(long window);
|
||||||
public static native void makeKeyWindow(long window);
|
static native void makeKeyWindow(long window);
|
||||||
public static native void makeMainWindow(long window);
|
static native void makeMainWindow(long window);
|
||||||
public static native boolean canBecomeMainWindow(long window);
|
static native boolean canBecomeMainWindow(long window);
|
||||||
public static native boolean isKeyWindow(long window);
|
static native boolean isKeyWindow(long window);
|
||||||
|
|
||||||
public static native void orderFront(long window);
|
static native void orderFront(long window);
|
||||||
public static native void orderFrontRegardless(long window);
|
static native void orderFrontRegardless(long window);
|
||||||
public static native void orderWindow(long window, int ordered, long relativeTo);
|
static native void orderWindow(long window, int ordered, long relativeTo);
|
||||||
public static native void orderOut(long window);
|
static native void orderOut(long window);
|
||||||
|
|
||||||
public static native void addChildWindow(long parent, long child, int ordered);
|
static native void addChildWindow(long parent, long child, int ordered);
|
||||||
public static native void removeChildWindow(long parent, long child);
|
static native void removeChildWindow(long parent, long child);
|
||||||
|
|
||||||
public static native void setFrame(long window, int x, int y, int w, int h, boolean display);
|
static native void setAlphaValue(long window, float alpha);
|
||||||
|
static native void setOpaque(long window, boolean opaque);
|
||||||
|
static native void setBackgroundColor(long window, long color);
|
||||||
|
|
||||||
public static native void setAlphaValue(long window, float alpha);
|
static native void miniaturize(long window);
|
||||||
public static native void setOpaque(long window, boolean opaque);
|
static native void deminiaturize(long window);
|
||||||
public static native void setBackgroundColor(long window, long color);
|
static native boolean isZoomed(long window);
|
||||||
|
static native void zoom(long window);
|
||||||
|
|
||||||
public static native void miniaturize(long window);
|
static native void makeFirstResponder(long window, long responder);
|
||||||
public static native void deminiaturize(long window);
|
|
||||||
public static native boolean isZoomed(long window);
|
|
||||||
public static native void zoom(long window);
|
|
||||||
|
|
||||||
public static native void makeFirstResponder(long window, long responder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class NSView {
|
static final class NSView {
|
||||||
public static native void addSubview(long view, long subview);
|
static native void addSubview(long view, long subview);
|
||||||
public static native void removeFromSuperview(long view);
|
static native void removeFromSuperview(long view);
|
||||||
|
|
||||||
public static native void setFrame(long view, int x, int y, int w, int h);
|
static native void setFrame(long view, int x, int y, int w, int h);
|
||||||
public static native Rectangle2D frame(long view);
|
static native long window(long view);
|
||||||
public static native long window(long view);
|
|
||||||
|
|
||||||
public static native void setHidden(long view, boolean hidden);
|
static native void setHidden(long view, boolean hidden);
|
||||||
|
|
||||||
public static native void setToolTip(long view, String msg);
|
static native void setToolTip(long view, String msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class NSObject {
|
static final class NSColor {
|
||||||
public static native void release(long object);
|
static native long clearColor();
|
||||||
}
|
|
||||||
|
|
||||||
public static final class NSColor {
|
|
||||||
public static native long clearColor();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -33,20 +33,25 @@ import java.awt.event.InputEvent;
|
||||||
import java.awt.event.InvocationEvent;
|
import java.awt.event.InvocationEvent;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.im.InputMethodHighlight;
|
import java.awt.im.InputMethodHighlight;
|
||||||
|
import java.awt.im.spi.InputMethodDescriptor;
|
||||||
import java.awt.peer.*;
|
import java.awt.peer.*;
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
|
import java.net.URL;
|
||||||
import java.security.*;
|
import java.security.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
|
||||||
import sun.awt.*;
|
import sun.awt.*;
|
||||||
|
import sun.awt.datatransfer.DataTransferer;
|
||||||
import sun.lwawt.*;
|
import sun.lwawt.*;
|
||||||
import sun.lwawt.LWWindowPeer.PeerType;
|
import sun.lwawt.LWWindowPeer.PeerType;
|
||||||
import sun.security.action.GetBooleanAction;
|
import sun.security.action.GetBooleanAction;
|
||||||
|
import sun.awt.image.MultiResolutionImage;
|
||||||
|
|
||||||
import sun.util.CoreResourceBundleControl;
|
import sun.util.CoreResourceBundleControl;
|
||||||
|
|
||||||
class NamedCursor extends Cursor {
|
final class NamedCursor extends Cursor {
|
||||||
NamedCursor(String name) {
|
NamedCursor(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
@ -72,6 +77,7 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
|
|
||||||
ResourceBundle platformResources = java.security.AccessController.doPrivileged(
|
ResourceBundle platformResources = java.security.AccessController.doPrivileged(
|
||||||
new java.security.PrivilegedAction<ResourceBundle>() {
|
new java.security.PrivilegedAction<ResourceBundle>() {
|
||||||
|
@Override
|
||||||
public ResourceBundle run() {
|
public ResourceBundle run() {
|
||||||
ResourceBundle platformResources = null;
|
ResourceBundle platformResources = null;
|
||||||
try {
|
try {
|
||||||
|
@ -109,8 +115,6 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
private static final boolean inAWT;
|
private static final boolean inAWT;
|
||||||
|
|
||||||
public LWCToolkit() {
|
public LWCToolkit() {
|
||||||
SunToolkit.setDataTransfererClassName("sun.lwawt.macosx.CDataTransferer");
|
|
||||||
|
|
||||||
areExtraMouseButtonsEnabled = Boolean.parseBoolean(System.getProperty("sun.awt.enableExtraMouseButtons", "true"));
|
areExtraMouseButtonsEnabled = Boolean.parseBoolean(System.getProperty("sun.awt.enableExtraMouseButtons", "true"));
|
||||||
//set system property if not yet assigned
|
//set system property if not yet assigned
|
||||||
System.setProperty("sun.awt.enableExtraMouseButtons", ""+areExtraMouseButtonsEnabled);
|
System.setProperty("sun.awt.enableExtraMouseButtons", ""+areExtraMouseButtonsEnabled);
|
||||||
|
@ -131,18 +135,20 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
|
|
||||||
private native void loadNativeColors(final int[] systemColors, final int[] appleColors);
|
private native void loadNativeColors(final int[] systemColors, final int[] appleColors);
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void loadSystemColors(final int[] systemColors) {
|
protected void loadSystemColors(final int[] systemColors) {
|
||||||
if (systemColors == null) return;
|
if (systemColors == null) return;
|
||||||
loadNativeColors(systemColors, appleColors);
|
loadNativeColors(systemColors, appleColors);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class AppleSpecificColor extends Color {
|
private static class AppleSpecificColor extends Color {
|
||||||
int index;
|
private final int index;
|
||||||
public AppleSpecificColor(int index) {
|
AppleSpecificColor(int index) {
|
||||||
super(appleColors[index]);
|
super(appleColors[index]);
|
||||||
this.index = index;
|
this.index = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getRGB() {
|
public int getRGB() {
|
||||||
return appleColors[index];
|
return appleColors[index];
|
||||||
}
|
}
|
||||||
|
@ -150,30 +156,18 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns Apple specific colors that we may expose going forward.
|
* Returns Apple specific colors that we may expose going forward.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public static Color getAppleColor(int color) {
|
public static Color getAppleColor(int color) {
|
||||||
return new AppleSpecificColor(color);
|
return new AppleSpecificColor(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void systemColorsChanged() {
|
|
||||||
// This is only called from native code.
|
// This is only called from native code.
|
||||||
EventQueue.invokeLater(new Runnable() {
|
static void systemColorsChanged() {
|
||||||
public void run() {
|
EventQueue.invokeLater(() -> {
|
||||||
AccessController.doPrivileged (new PrivilegedAction<Object>() {
|
AccessController.doPrivileged ((PrivilegedAction<Object>) () -> {
|
||||||
public Object run() {
|
AWTAccessor.getSystemColorAccessor().updateSystemColors();
|
||||||
try {
|
|
||||||
final Method updateColorsMethod = SystemColor.class.getDeclaredMethod("updateSystemColors", new Class[0]);
|
|
||||||
updateColorsMethod.setAccessible(true);
|
|
||||||
updateColorsMethod.invoke(null, new Object[0]);
|
|
||||||
} catch (final Throwable e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
// swallow this if something goes horribly wrong
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,13 +184,44 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
} else if (peerType == PeerType.LW_FRAME) {
|
} else if (peerType == PeerType.LW_FRAME) {
|
||||||
return new CPlatformLWWindow();
|
return new CPlatformLWWindow();
|
||||||
} else {
|
} else {
|
||||||
assert (peerType == PeerType.SIMPLEWINDOW || peerType == PeerType.DIALOG || peerType == PeerType.FRAME);
|
assert (peerType == PeerType.SIMPLEWINDOW
|
||||||
|
|| peerType == PeerType.DIALOG
|
||||||
|
|| peerType == PeerType.FRAME);
|
||||||
return new CPlatformWindow();
|
return new CPlatformWindow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LWWindowPeer createEmbeddedFrame(CEmbeddedFrame target) {
|
||||||
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
|
PlatformWindow platformWindow = createPlatformWindow(PeerType.EMBEDDED_FRAME);
|
||||||
|
return createDelegatedPeer(target, platformComponent, platformWindow, PeerType.EMBEDDED_FRAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
LWWindowPeer createEmbeddedFrame(CViewEmbeddedFrame target) {
|
||||||
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
|
PlatformWindow platformWindow = createPlatformWindow(PeerType.VIEW_EMBEDDED_FRAME);
|
||||||
|
return createDelegatedPeer(target, platformComponent, platformWindow, PeerType.VIEW_EMBEDDED_FRAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CPrinterDialogPeer createCPrinterDialog(CPrinterDialog target) {
|
||||||
|
PlatformComponent platformComponent = createPlatformComponent();
|
||||||
|
PlatformWindow platformWindow = createPlatformWindow(PeerType.DIALOG);
|
||||||
|
CPrinterDialogPeer peer = new CPrinterDialogPeer(target, platformComponent, platformWindow);
|
||||||
|
targetCreatedPeer(target, peer);
|
||||||
|
return peer;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SecurityWarningWindow createSecurityWarning(Window ownerWindow, LWWindowPeer ownerPeer) {
|
public DialogPeer createDialog(Dialog target) {
|
||||||
|
if (target instanceof CPrinterDialog) {
|
||||||
|
return createCPrinterDialog((CPrinterDialog)target);
|
||||||
|
}
|
||||||
|
return super.createDialog(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SecurityWarningWindow createSecurityWarning(Window ownerWindow,
|
||||||
|
LWWindowPeer ownerPeer) {
|
||||||
return new CWarningWindow(ownerWindow, ownerPeer);
|
return new CWarningWindow(ownerWindow, ownerPeer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,13 +273,11 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
PopupMenuPeer peer = new CPopupMenu(target);
|
PopupMenuPeer peer = new CPopupMenu(target);
|
||||||
targetCreatedPeer(target, peer);
|
targetCreatedPeer(target, peer);
|
||||||
return peer;
|
return peer;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SystemTrayPeer createSystemTray(SystemTray target) {
|
public SystemTrayPeer createSystemTray(SystemTray target) {
|
||||||
SystemTrayPeer peer = new CSystemTray();
|
return new CSystemTray();
|
||||||
return peer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -264,57 +287,64 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
return peer;
|
return peer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected DesktopPeer createDesktopPeer(Desktop target) {
|
||||||
|
return new CDesktopPeer();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LWCursorManager getCursorManager() {
|
public LWCursorManager getCursorManager() {
|
||||||
return CCursorManager.getInstance();
|
return CCursorManager.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Cursor createCustomCursor(final Image cursor, final Point hotSpot, final String name) throws IndexOutOfBoundsException, HeadlessException {
|
public Cursor createCustomCursor(final Image cursor, final Point hotSpot,
|
||||||
|
final String name)
|
||||||
|
throws IndexOutOfBoundsException, HeadlessException {
|
||||||
return new CCustomCursor(cursor, hotSpot, name);
|
return new CCustomCursor(cursor, hotSpot, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Dimension getBestCursorSize(final int preferredWidth, final int preferredHeight) throws HeadlessException {
|
public Dimension getBestCursorSize(final int preferredWidth,
|
||||||
|
final int preferredHeight)
|
||||||
|
throws HeadlessException {
|
||||||
return CCustomCursor.getBestCursorSize(preferredWidth, preferredHeight);
|
return CCustomCursor.getBestCursorSize(preferredWidth, preferredHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void platformCleanup() {
|
protected void platformCleanup() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void platformInit() {
|
protected void platformInit() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void platformRunMessage() {
|
protected void platformRunMessage() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void platformShutdown() {
|
protected void platformShutdown() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class OSXPlatformFont extends sun.awt.PlatformFont
|
class OSXPlatformFont extends sun.awt.PlatformFont
|
||||||
{
|
{
|
||||||
public OSXPlatformFont(String name, int style)
|
OSXPlatformFont(String name, int style)
|
||||||
{
|
{
|
||||||
super(name, style);
|
super(name, style);
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
protected char getMissingGlyphCharacter()
|
protected char getMissingGlyphCharacter()
|
||||||
{
|
{
|
||||||
// Follow up for real implementation
|
// Follow up for real implementation
|
||||||
return (char)0xfff8; // see http://developer.apple.com/fonts/LastResortFont/
|
return (char)0xfff8; // see http://developer.apple.com/fonts/LastResortFont/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
public FontPeer getFontPeer(String name, int style) {
|
public FontPeer getFontPeer(String name, int style) {
|
||||||
return new OSXPlatformFont(name, style);
|
return new OSXPlatformFont(name, style);
|
||||||
}
|
}
|
||||||
|
@ -334,7 +364,7 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
@Override
|
@Override
|
||||||
protected void initializeDesktopProperties() {
|
protected void initializeDesktopProperties() {
|
||||||
super.initializeDesktopProperties();
|
super.initializeDesktopProperties();
|
||||||
Map <Object, Object> fontHints = new HashMap<Object, Object>();
|
Map <Object, Object> fontHints = new HashMap<>();
|
||||||
fontHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
fontHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
fontHints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
fontHints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||||
desktopProperties.put(SunToolkit.DESKTOPFONTHINTS, fontHints);
|
desktopProperties.put(SunToolkit.DESKTOPFONTHINTS, fontHints);
|
||||||
|
@ -355,14 +385,8 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
desktopProperties.put("DnD.Cursor.CopyNoDrop", new NamedCursor("DnD.Cursor.CopyNoDrop"));
|
desktopProperties.put("DnD.Cursor.CopyNoDrop", new NamedCursor("DnD.Cursor.CopyNoDrop"));
|
||||||
desktopProperties.put("DnD.Cursor.MoveNoDrop", new NamedCursor("DnD.Cursor.MoveNoDrop"));
|
desktopProperties.put("DnD.Cursor.MoveNoDrop", new NamedCursor("DnD.Cursor.MoveNoDrop"));
|
||||||
desktopProperties.put("DnD.Cursor.LinkNoDrop", new NamedCursor("DnD.Cursor.LinkNoDrop"));
|
desktopProperties.put("DnD.Cursor.LinkNoDrop", new NamedCursor("DnD.Cursor.LinkNoDrop"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The method returns true if some events were processed during that timeout.
|
|
||||||
* @see sun.awt.SunToolkit#syncNativeQueue(long)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean syncNativeQueue(long timeout) {
|
protected boolean syncNativeQueue(long timeout) {
|
||||||
return nativeSyncQueue(timeout);
|
return nativeSyncQueue(timeout);
|
||||||
|
@ -386,7 +410,6 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
@Override
|
@Override
|
||||||
public void sync() {
|
public void sync() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -406,6 +429,7 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
* as Num Lock on PC keyboards is called Clear, doesn't lock
|
* as Num Lock on PC keyboards is called Clear, doesn't lock
|
||||||
* anything and is used for entirely different purpose.
|
* anything and is used for entirely different purpose.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public boolean getLockingKeyState(int keyCode) throws UnsupportedOperationException {
|
public boolean getLockingKeyState(int keyCode) throws UnsupportedOperationException {
|
||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
case KeyEvent.VK_NUM_LOCK:
|
case KeyEvent.VK_NUM_LOCK:
|
||||||
|
@ -425,10 +449,12 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
//Set to true by default.
|
//Set to true by default.
|
||||||
private static boolean areExtraMouseButtonsEnabled = true;
|
private static boolean areExtraMouseButtonsEnabled = true;
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
|
public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
|
||||||
return areExtraMouseButtonsEnabled;
|
return areExtraMouseButtonsEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getNumberOfButtons(){
|
public int getNumberOfButtons(){
|
||||||
return BUTTONS;
|
return BUTTONS;
|
||||||
}
|
}
|
||||||
|
@ -438,6 +464,11 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataTransferer getDataTransferer() {
|
||||||
|
return CDataTransferer.getInstanceImpl();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAlwaysOnTopSupported() {
|
public boolean isAlwaysOnTopSupported() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -482,6 +513,7 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
* @see java.awt.MenuShortcut
|
* @see java.awt.MenuShortcut
|
||||||
* @since JDK1.1
|
* @since JDK1.1
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public int getMenuShortcutKeyMask() {
|
public int getMenuShortcutKeyMask() {
|
||||||
return Event.META_MASK;
|
return Event.META_MASK;
|
||||||
}
|
}
|
||||||
|
@ -489,13 +521,34 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
@Override
|
@Override
|
||||||
public Image getImage(final String filename) {
|
public Image getImage(final String filename) {
|
||||||
final Image nsImage = checkForNSImage(filename);
|
final Image nsImage = checkForNSImage(filename);
|
||||||
if (nsImage != null) return nsImage;
|
if (nsImage != null) {
|
||||||
|
return nsImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (imageCached(filename)) {
|
||||||
return super.getImage(filename);
|
return super.getImage(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
static final String nsImagePrefix = "NSImage://";
|
String fileneame2x = getScaledImageName(filename);
|
||||||
protected Image checkForNSImage(final String imageName) {
|
return (imageExists(fileneame2x))
|
||||||
|
? getImageWithResolutionVariant(filename, fileneame2x)
|
||||||
|
: super.getImage(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Image getImage(URL url) {
|
||||||
|
|
||||||
|
if (imageCached(url)) {
|
||||||
|
return super.getImage(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
URL url2x = getScaledImageURL(url);
|
||||||
|
return (imageExists(url2x))
|
||||||
|
? getImageWithResolutionVariant(url, url2x) : super.getImage(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String nsImagePrefix = "NSImage://";
|
||||||
|
private Image checkForNSImage(final String imageName) {
|
||||||
if (imageName == null) return null;
|
if (imageName == null) return null;
|
||||||
if (!imageName.startsWith(nsImagePrefix)) return null;
|
if (!imageName.startsWith(nsImagePrefix)) return null;
|
||||||
return CImage.getCreator().createImageFromName(imageName.substring(nsImagePrefix.length()));
|
return CImage.getCreator().createImageFromName(imageName.substring(nsImagePrefix.length()));
|
||||||
|
@ -514,8 +567,9 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
synchronized(ret) { return ret[0]; }
|
synchronized(ret) { return ret[0]; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> T invokeAndWait(final Callable<T> callable, Component component) throws Exception {
|
public static <T> T invokeAndWait(final Callable<T> callable,
|
||||||
final CallableWrapper<T> wrapper = new CallableWrapper<T>(callable);
|
Component component) throws Exception {
|
||||||
|
final CallableWrapper<T> wrapper = new CallableWrapper<>(callable);
|
||||||
invokeAndWait(wrapper, component);
|
invokeAndWait(wrapper, component);
|
||||||
return wrapper.getResult();
|
return wrapper.getResult();
|
||||||
}
|
}
|
||||||
|
@ -525,10 +579,11 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
T object;
|
T object;
|
||||||
Exception e;
|
Exception e;
|
||||||
|
|
||||||
public CallableWrapper(final Callable<T> callable) {
|
CallableWrapper(final Callable<T> callable) {
|
||||||
this.callable = callable;
|
this.callable = callable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
object = callable.call();
|
object = callable.call();
|
||||||
|
@ -543,12 +598,16 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kicks an event over to the appropriate eventqueue and waits for it to finish
|
/**
|
||||||
// To avoid deadlocking, we manually run the NSRunLoop while waiting
|
* Kicks an event over to the appropriate eventqueue and waits for it to
|
||||||
// Any selector invoked using ThreadUtilities performOnMainThread will be processed in doAWTRunLoop
|
* finish To avoid deadlocking, we manually run the NSRunLoop while waiting
|
||||||
// The InvocationEvent will call LWCToolkit.stopAWTRunLoop() when finished, which will stop our manual runloop
|
* Any selector invoked using ThreadUtilities performOnMainThread will be
|
||||||
// Does not dispatch native events while in the loop
|
* processed in doAWTRunLoop The InvocationEvent will call
|
||||||
public static void invokeAndWait(Runnable runnable, Component component) throws InvocationTargetException {
|
* LWCToolkit.stopAWTRunLoop() when finished, which will stop our manual
|
||||||
|
* runloop Does not dispatch native events while in the loop
|
||||||
|
*/
|
||||||
|
public static void invokeAndWait(Runnable runnable, Component component)
|
||||||
|
throws InvocationTargetException {
|
||||||
final long mediator = createAWTRunLoopMediator();
|
final long mediator = createAWTRunLoopMediator();
|
||||||
|
|
||||||
InvocationEvent invocationEvent =
|
InvocationEvent invocationEvent =
|
||||||
|
@ -583,7 +642,8 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void invokeLater(Runnable event, Component component) throws InvocationTargetException {
|
public static void invokeLater(Runnable event, Component component)
|
||||||
|
throws InvocationTargetException {
|
||||||
final InvocationEvent invocationEvent =
|
final InvocationEvent invocationEvent =
|
||||||
new InvocationEvent(component != null ? component : Toolkit.getDefaultToolkit(), event);
|
new InvocationEvent(component != null ? component : Toolkit.getDefaultToolkit(), event);
|
||||||
|
|
||||||
|
@ -612,16 +672,18 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
return getSystemEventQueueImpl();
|
return getSystemEventQueueImpl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// DnD support
|
// DnD support
|
||||||
|
|
||||||
public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException {
|
@Override
|
||||||
DragSourceContextPeer dscp = CDragSourceContextPeer.createDragSourceContextPeer(dge);
|
public DragSourceContextPeer createDragSourceContextPeer(
|
||||||
|
DragGestureEvent dge) throws InvalidDnDOperationException {
|
||||||
return dscp;
|
return CDragSourceContextPeer.createDragSourceContextPeer(dge);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends DragGestureRecognizer> T createDragGestureRecognizer(Class<T> abstractRecognizerClass, DragSource ds, Component c, int srcActions, DragGestureListener dgl) {
|
@Override
|
||||||
|
public <T extends DragGestureRecognizer> T createDragGestureRecognizer(
|
||||||
|
Class<T> abstractRecognizerClass, DragSource ds, Component c,
|
||||||
|
int srcActions, DragGestureListener dgl) {
|
||||||
DragGestureRecognizer dgr = null;
|
DragGestureRecognizer dgr = null;
|
||||||
|
|
||||||
// Create a new mouse drag gesture recognizer if we have a class match:
|
// Create a new mouse drag gesture recognizer if we have a class match:
|
||||||
|
@ -635,6 +697,7 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
/**
|
/**
|
||||||
* Returns the default keyboard locale of the underlying operating system
|
* Returns the default keyboard locale of the underlying operating system
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public Locale getDefaultKeyboardLocale() {
|
public Locale getDefaultKeyboardLocale() {
|
||||||
Locale locale = CInputMethod.getNativeLocale();
|
Locale locale = CInputMethod.getNativeLocale();
|
||||||
|
|
||||||
|
@ -645,7 +708,8 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
return locale;
|
return locale;
|
||||||
}
|
}
|
||||||
|
|
||||||
public java.awt.im.spi.InputMethodDescriptor getInputMethodAdapterDescriptor() {
|
@Override
|
||||||
|
public InputMethodDescriptor getInputMethodAdapterDescriptor() {
|
||||||
if (sInputMethodDescriptor == null)
|
if (sInputMethodDescriptor == null)
|
||||||
sInputMethodDescriptor = new CInputMethodDescriptor();
|
sInputMethodDescriptor = new CInputMethodDescriptor();
|
||||||
|
|
||||||
|
@ -661,12 +725,14 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
* @return style attribute map, or null
|
* @return style attribute map, or null
|
||||||
* @since 1.3
|
* @since 1.3
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public Map mapInputMethodHighlight(InputMethodHighlight highlight) {
|
public Map mapInputMethodHighlight(InputMethodHighlight highlight) {
|
||||||
return CInputMethod.mapInputMethodHighlight(highlight);
|
return CInputMethod.mapInputMethodHighlight(highlight);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns key modifiers used by Swing to set up a focus accelerator key stroke.
|
* Returns key modifiers used by Swing to set up a focus accelerator key
|
||||||
|
* stroke.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int getFocusAcceleratorKeyMask() {
|
public int getFocusAcceleratorKeyMask() {
|
||||||
|
@ -674,8 +740,8 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests whether specified key modifiers mask can be used to enter a printable
|
* Tests whether specified key modifiers mask can be used to enter a
|
||||||
* character.
|
* printable character.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean isPrintableCharacterModifiersMask(int mods) {
|
public boolean isPrintableCharacterModifiersMask(int mods) {
|
||||||
|
@ -696,19 +762,18 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
* Returns the value of "sun.awt.disableCALayers" property. Default
|
* Returns the value of "sun.awt.disableCALayers" property. Default
|
||||||
* value is {@code false}.
|
* value is {@code false}.
|
||||||
*/
|
*/
|
||||||
public synchronized static boolean getSunAwtDisableCALayers() {
|
public static synchronized boolean getSunAwtDisableCALayers() {
|
||||||
if (sunAwtDisableCALayers == null) {
|
if (sunAwtDisableCALayers == null) {
|
||||||
sunAwtDisableCALayers = AccessController.doPrivileged(
|
sunAwtDisableCALayers = AccessController.doPrivileged(
|
||||||
new GetBooleanAction("sun.awt.disableCALayers"));
|
new GetBooleanAction("sun.awt.disableCALayers"));
|
||||||
}
|
}
|
||||||
return sunAwtDisableCALayers.booleanValue();
|
return sunAwtDisableCALayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns true if the application (one of its windows) owns keyboard focus.
|
* Returns true if the application (one of its windows) owns keyboard focus.
|
||||||
*/
|
*/
|
||||||
public native boolean isApplicationActive();
|
native boolean isApplicationActive();
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
* Native methods section
|
* Native methods section
|
||||||
|
@ -729,7 +794,7 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
static void doAWTRunLoop(long mediator, boolean processEvents) {
|
static void doAWTRunLoop(long mediator, boolean processEvents) {
|
||||||
doAWTRunLoopImpl(mediator, processEvents, inAWT);
|
doAWTRunLoopImpl(mediator, processEvents, inAWT);
|
||||||
}
|
}
|
||||||
static private native void doAWTRunLoopImpl(long mediator, boolean processEvents, boolean inAWT);
|
private static native void doAWTRunLoopImpl(long mediator, boolean processEvents, boolean inAWT);
|
||||||
static native void stopAWTRunLoop(long mediator);
|
static native void stopAWTRunLoop(long mediator);
|
||||||
|
|
||||||
private native boolean nativeSyncQueue(long timeout);
|
private native boolean nativeSyncQueue(long timeout);
|
||||||
|
@ -773,6 +838,7 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isSwingBackbufferTranslucencySupported() {
|
public boolean isSwingBackbufferTranslucencySupported() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -781,4 +847,36 @@ public final class LWCToolkit extends LWToolkit {
|
||||||
public boolean enableInputMethodsForTextComponent() {
|
public boolean enableInputMethodsForTextComponent() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static URL getScaledImageURL(URL url) {
|
||||||
|
try {
|
||||||
|
String scaledImagePath = getScaledImageName(url.getPath());
|
||||||
|
return scaledImagePath == null ? null : new URL(url.getProtocol(),
|
||||||
|
url.getHost(), url.getPort(), scaledImagePath);
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getScaledImageName(String path) {
|
||||||
|
if (!isValidPath(path)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
int slash = path.lastIndexOf('/');
|
||||||
|
String name = (slash < 0) ? path : path.substring(slash + 1);
|
||||||
|
|
||||||
|
if (name.contains("@2x")) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dot = name.lastIndexOf('.');
|
||||||
|
String name2x = (dot < 0) ? name + "@2x"
|
||||||
|
: name.substring(0, dot) + "@2x" + name.substring(dot);
|
||||||
|
return (slash < 0) ? name2x : path.substring(0, slash + 1) + name2x;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isValidPath(String path) {
|
||||||
|
return !path.isEmpty() && !path.endsWith("/") && !path.endsWith(".");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -23,16 +23,15 @@
|
||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sun.lwawt.macosx.event;
|
package sun.lwawt.macosx;
|
||||||
|
|
||||||
import sun.lwawt.macosx.CocoaConstants;
|
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class representing Cocoa NSEvent class with the fields only necessary for
|
* A class representing Cocoa NSEvent class with the fields only necessary for
|
||||||
* JDK functionality.
|
* JDK functionality.
|
||||||
*/
|
*/
|
||||||
public final class NSEvent {
|
final class NSEvent {
|
||||||
private int type;
|
private int type;
|
||||||
private int modifierFlags;
|
private int modifierFlags;
|
||||||
|
|
||||||
|
@ -50,14 +49,16 @@ public final class NSEvent {
|
||||||
private short keyCode;
|
private short keyCode;
|
||||||
private String charactersIgnoringModifiers;
|
private String charactersIgnoringModifiers;
|
||||||
|
|
||||||
public NSEvent(int type, int modifierFlags, short keyCode, String charactersIgnoringModifiers) {
|
// Called from native
|
||||||
|
NSEvent(int type, int modifierFlags, short keyCode, String charactersIgnoringModifiers) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.modifierFlags = modifierFlags;
|
this.modifierFlags = modifierFlags;
|
||||||
this.keyCode = keyCode;
|
this.keyCode = keyCode;
|
||||||
this.charactersIgnoringModifiers = charactersIgnoringModifiers;
|
this.charactersIgnoringModifiers = charactersIgnoringModifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NSEvent(int type, int modifierFlags, int clickCount, int buttonNumber,
|
// Called from native
|
||||||
|
NSEvent(int type, int modifierFlags, int clickCount, int buttonNumber,
|
||||||
int x, int y, int absX, int absY,
|
int x, int y, int absX, int absY,
|
||||||
double scrollDeltaY, double scrollDeltaX) {
|
double scrollDeltaY, double scrollDeltaX) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
@ -72,51 +73,51 @@ public final class NSEvent {
|
||||||
this.scrollDeltaX = scrollDeltaX;
|
this.scrollDeltaX = scrollDeltaX;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getType() {
|
int getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getModifierFlags() {
|
int getModifierFlags() {
|
||||||
return modifierFlags;
|
return modifierFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getClickCount() {
|
int getClickCount() {
|
||||||
return clickCount;
|
return clickCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getButtonNumber() {
|
int getButtonNumber() {
|
||||||
return buttonNumber;
|
return buttonNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getX() {
|
int getX() {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getY() {
|
int getY() {
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getScrollDeltaY() {
|
double getScrollDeltaY() {
|
||||||
return scrollDeltaY;
|
return scrollDeltaY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getScrollDeltaX() {
|
double getScrollDeltaX() {
|
||||||
return scrollDeltaX;
|
return scrollDeltaX;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAbsX() {
|
int getAbsX() {
|
||||||
return absX;
|
return absX;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAbsY() {
|
int getAbsY() {
|
||||||
return absY;
|
return absY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public short getKeyCode() {
|
short getKeyCode() {
|
||||||
return keyCode;
|
return keyCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCharactersIgnoringModifiers() {
|
String getCharactersIgnoringModifiers() {
|
||||||
return charactersIgnoringModifiers;
|
return charactersIgnoringModifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,7 +132,7 @@ public final class NSEvent {
|
||||||
/*
|
/*
|
||||||
* Converts an NSEvent button number to a MouseEvent constant.
|
* Converts an NSEvent button number to a MouseEvent constant.
|
||||||
*/
|
*/
|
||||||
public static int nsToJavaButton(int buttonNumber) {
|
static int nsToJavaButton(int buttonNumber) {
|
||||||
int jbuttonNumber = buttonNumber + 1;
|
int jbuttonNumber = buttonNumber + 1;
|
||||||
switch (buttonNumber) {
|
switch (buttonNumber) {
|
||||||
case CocoaConstants.kCGMouseButtonLeft:
|
case CocoaConstants.kCGMouseButtonLeft:
|
||||||
|
@ -150,7 +151,7 @@ public final class NSEvent {
|
||||||
/*
|
/*
|
||||||
* Converts NPCocoaEvent types to AWT event types.
|
* Converts NPCocoaEvent types to AWT event types.
|
||||||
*/
|
*/
|
||||||
public static int npToJavaEventType(int npEventType) {
|
static int npToJavaEventType(int npEventType) {
|
||||||
int jeventType = 0;
|
int jeventType = 0;
|
||||||
switch (npEventType) {
|
switch (npEventType) {
|
||||||
case CocoaConstants.NPCocoaEventMouseDown:
|
case CocoaConstants.NPCocoaEventMouseDown:
|
||||||
|
@ -184,7 +185,7 @@ public final class NSEvent {
|
||||||
/*
|
/*
|
||||||
* Converts NSEvent types to AWT event types.
|
* Converts NSEvent types to AWT event types.
|
||||||
*/
|
*/
|
||||||
public static int nsToJavaEventType(int nsEventType) {
|
static int nsToJavaEventType(int nsEventType) {
|
||||||
int jeventType = 0;
|
int jeventType = 0;
|
||||||
switch (nsEventType) {
|
switch (nsEventType) {
|
||||||
case CocoaConstants.NSLeftMouseDown:
|
case CocoaConstants.NSLeftMouseDown:
|
||||||
|
@ -227,31 +228,31 @@ public final class NSEvent {
|
||||||
/*
|
/*
|
||||||
* Converts NSEvent mouse modifiers to AWT mouse modifiers.
|
* Converts NSEvent mouse modifiers to AWT mouse modifiers.
|
||||||
*/
|
*/
|
||||||
public static native int nsToJavaMouseModifiers(int buttonNumber,
|
static native int nsToJavaMouseModifiers(int buttonNumber,
|
||||||
int modifierFlags);
|
int modifierFlags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Converts NSEvent key modifiers to AWT key modifiers.
|
* Converts NSEvent key modifiers to AWT key modifiers.
|
||||||
*/
|
*/
|
||||||
public static native int nsToJavaKeyModifiers(int modifierFlags);
|
static native int nsToJavaKeyModifiers(int modifierFlags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Converts NSEvent key info to AWT key info.
|
* Converts NSEvent key info to AWT key info.
|
||||||
*/
|
*/
|
||||||
public static native boolean nsToJavaKeyInfo(int[] in, int[] out);
|
static native boolean nsToJavaKeyInfo(int[] in, int[] out);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Converts NSEvent key modifiers to AWT key info.
|
* Converts NSEvent key modifiers to AWT key info.
|
||||||
*/
|
*/
|
||||||
public static native void nsKeyModifiersToJavaKeyInfo(int[] in, int[] out);
|
static native void nsKeyModifiersToJavaKeyInfo(int[] in, int[] out);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There is a small number of NS characters that need to be converted
|
* There is a small number of NS characters that need to be converted
|
||||||
* into other characters before we pass them to AWT.
|
* into other characters before we pass them to AWT.
|
||||||
*/
|
*/
|
||||||
public static native char nsToJavaChar(char nsChar, int modifierFlags);
|
static native char nsToJavaChar(char nsChar, int modifierFlags);
|
||||||
|
|
||||||
public static boolean isPopupTrigger(int jmodifiers) {
|
static boolean isPopupTrigger(int jmodifiers) {
|
||||||
final boolean isRightButtonDown = ((jmodifiers & InputEvent.BUTTON3_DOWN_MASK) != 0);
|
final boolean isRightButtonDown = ((jmodifiers & InputEvent.BUTTON3_DOWN_MASK) != 0);
|
||||||
final boolean isLeftButtonDown = ((jmodifiers & InputEvent.BUTTON1_DOWN_MASK) != 0);
|
final boolean isLeftButtonDown = ((jmodifiers & InputEvent.BUTTON1_DOWN_MASK) != 0);
|
||||||
final boolean isControlDown = ((jmodifiers & InputEvent.CTRL_DOWN_MASK) != 0);
|
final boolean isControlDown = ((jmodifiers & InputEvent.CTRL_DOWN_MASK) != 0);
|
|
@ -79,3 +79,5 @@ JFIF=image/x-java-image;class=java.awt.Image
|
||||||
TIFF=image/x-java-image;class=java.awt.Image
|
TIFF=image/x-java-image;class=java.awt.Image
|
||||||
RICH_TEXT=text/rtf
|
RICH_TEXT=text/rtf
|
||||||
HTML=text/html;charset=utf-8;eoln="\r\n";terminators=1
|
HTML=text/html;charset=utf-8;eoln="\r\n";terminators=1
|
||||||
|
URL=application/x-java-url;class=java.net.URL
|
||||||
|
URL=text/uri-list;eoln="\r\n";terminators=1
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -23,6 +23,9 @@
|
||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <jni_util.h>
|
||||||
|
|
||||||
#import "com_apple_laf_AquaFileView.h"
|
#import "com_apple_laf_AquaFileView.h"
|
||||||
|
|
||||||
#import <sys/param.h> // for MAXPATHLEN
|
#import <sys/param.h> // for MAXPATHLEN
|
||||||
|
@ -98,6 +101,7 @@ JNIEXPORT jint JNICALL Java_com_apple_laf_AquaFileView_getNativeLSInfo
|
||||||
JNF_COCOA_ENTER(env);
|
JNF_COCOA_ENTER(env);
|
||||||
|
|
||||||
jbyte *byteArray = (*env)->GetByteArrayElements(env, absolutePath, NULL);
|
jbyte *byteArray = (*env)->GetByteArrayElements(env, absolutePath, NULL);
|
||||||
|
CHECK_NULL_RETURN(byteArray, returnValue);
|
||||||
jsize length = (*env)->GetArrayLength(env, absolutePath);
|
jsize length = (*env)->GetArrayLength(env, absolutePath);
|
||||||
|
|
||||||
// Can't assume that byteArray is NULL terminated and FSPathMakeRef doesn't
|
// Can't assume that byteArray is NULL terminated and FSPathMakeRef doesn't
|
||||||
|
@ -138,6 +142,7 @@ JNIEXPORT jstring JNICALL Java_com_apple_laf_AquaFileView_getNativeDisplayName
|
||||||
JNF_COCOA_ENTER(env);
|
JNF_COCOA_ENTER(env);
|
||||||
|
|
||||||
jbyte *byteArray = (*env)->GetByteArrayElements(env, absolutePath, NULL);
|
jbyte *byteArray = (*env)->GetByteArrayElements(env, absolutePath, NULL);
|
||||||
|
CHECK_NULL_RETURN(byteArray, returnValue);
|
||||||
jsize length = (*env)->GetArrayLength(env, absolutePath);
|
jsize length = (*env)->GetArrayLength(env, absolutePath);
|
||||||
|
|
||||||
// Can't assume that byteArray is NULL terminated and FSPathMakeRef doesn't
|
// Can't assume that byteArray is NULL terminated and FSPathMakeRef doesn't
|
||||||
|
@ -153,7 +158,9 @@ JNF_COCOA_ENTER(env);
|
||||||
Boolean isDirectory = (isDir == JNI_TRUE ? true : false);
|
Boolean isDirectory = (isDir == JNI_TRUE ? true : false);
|
||||||
FSRef ref;
|
FSRef ref;
|
||||||
|
|
||||||
OSErr theErr = FSPathMakeRefWithOptions((const UInt8 *)&arrayCopy, kFSPathMakeRefDoNotFollowLeafSymlink, &ref, &isDirectory);
|
OSErr theErr = FSPathMakeRefWithOptions((const UInt8 *)&arrayCopy,
|
||||||
|
kFSPathMakeRefDoNotFollowLeafSymlink,
|
||||||
|
&ref, &isDirectory);
|
||||||
if (theErr == noErr) {
|
if (theErr == noErr) {
|
||||||
CFStringRef displayName = NULL;
|
CFStringRef displayName = NULL;
|
||||||
|
|
||||||
|
@ -190,6 +197,7 @@ JNF_COCOA_ENTER(env);
|
||||||
size_t maxPathLen = sizeof(pathCString) - 1;
|
size_t maxPathLen = sizeof(pathCString) - 1;
|
||||||
|
|
||||||
jbyte *byteArray = (*env)->GetByteArrayElements(env, pathToAlias, NULL);
|
jbyte *byteArray = (*env)->GetByteArrayElements(env, pathToAlias, NULL);
|
||||||
|
CHECK_NULL_RETURN(byteArray, returnValue);
|
||||||
jsize length = (*env)->GetArrayLength(env, pathToAlias);
|
jsize length = (*env)->GetArrayLength(env, pathToAlias);
|
||||||
|
|
||||||
if (length > maxPathLen) {
|
if (length > maxPathLen) {
|
||||||
|
@ -205,7 +213,8 @@ JNF_COCOA_ENTER(env);
|
||||||
OSErr theErr = FSPathMakeRef(pathCString, &fileRef, &isDirectory);
|
OSErr theErr = FSPathMakeRef(pathCString, &fileRef, &isDirectory);
|
||||||
|
|
||||||
Boolean ignored;
|
Boolean ignored;
|
||||||
theErr = FSResolveAliasFileWithMountFlags(&fileRef, false, &ignored, &ignored, kResolveAliasFileNoUI);
|
theErr = FSResolveAliasFileWithMountFlags(&fileRef, false, &ignored,
|
||||||
|
&ignored, kResolveAliasFileNoUI);
|
||||||
if (theErr == noErr) {
|
if (theErr == noErr) {
|
||||||
UInt8 resolvedPath[MAXPATHLEN];
|
UInt8 resolvedPath[MAXPATHLEN];
|
||||||
theErr = FSRefMakePath(&fileRef, resolvedPath, MAXPATHLEN);
|
theErr = FSRefMakePath(&fileRef, resolvedPath, MAXPATHLEN);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -633,12 +633,12 @@ Java_java_awt_AWTEvent_nativeSetSource
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_lwawt_macosx_event_NSEvent
|
* Class: sun_lwawt_macosx_NSEvent
|
||||||
* Method: nsToJavaMouseModifiers
|
* Method: nsToJavaMouseModifiers
|
||||||
* Signature: (II)I
|
* Signature: (II)I
|
||||||
*/
|
*/
|
||||||
JNIEXPORT jint JNICALL
|
JNIEXPORT jint JNICALL
|
||||||
Java_sun_lwawt_macosx_event_NSEvent_nsToJavaMouseModifiers
|
Java_sun_lwawt_macosx_NSEvent_nsToJavaMouseModifiers
|
||||||
(JNIEnv *env, jclass cls, jint buttonNumber, jint modifierFlags)
|
(JNIEnv *env, jclass cls, jint buttonNumber, jint modifierFlags)
|
||||||
{
|
{
|
||||||
jint jmodifiers = 0;
|
jint jmodifiers = 0;
|
||||||
|
@ -653,12 +653,12 @@ JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_lwawt_macosx_event_NSEvent
|
* Class: sun_lwawt_macosx_NSEvent
|
||||||
* Method: nsToJavaKeyModifiers
|
* Method: nsToJavaKeyModifiers
|
||||||
* Signature: (I)I
|
* Signature: (I)I
|
||||||
*/
|
*/
|
||||||
JNIEXPORT jint JNICALL
|
JNIEXPORT jint JNICALL
|
||||||
Java_sun_lwawt_macosx_event_NSEvent_nsToJavaKeyModifiers
|
Java_sun_lwawt_macosx_NSEvent_nsToJavaKeyModifiers
|
||||||
(JNIEnv *env, jclass cls, jint modifierFlags)
|
(JNIEnv *env, jclass cls, jint modifierFlags)
|
||||||
{
|
{
|
||||||
jint jmodifiers = 0;
|
jint jmodifiers = 0;
|
||||||
|
@ -673,12 +673,12 @@ JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_lwawt_macosx_event_NSEvent
|
* Class: sun_lwawt_macosx_NSEvent
|
||||||
* Method: nsToJavaKeyInfo
|
* Method: nsToJavaKeyInfo
|
||||||
* Signature: ([I[I)Z
|
* Signature: ([I[I)Z
|
||||||
*/
|
*/
|
||||||
JNIEXPORT jboolean JNICALL
|
JNIEXPORT jboolean JNICALL
|
||||||
Java_sun_lwawt_macosx_event_NSEvent_nsToJavaKeyInfo
|
Java_sun_lwawt_macosx_NSEvent_nsToJavaKeyInfo
|
||||||
(JNIEnv *env, jclass cls, jintArray inData, jintArray outData)
|
(JNIEnv *env, jclass cls, jintArray inData, jintArray outData)
|
||||||
{
|
{
|
||||||
BOOL postsTyped = NO;
|
BOOL postsTyped = NO;
|
||||||
|
@ -715,12 +715,12 @@ JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_lwawt_macosx_event_NSEvent
|
* Class: sun_lwawt_macosx_NSEvent
|
||||||
* Method: nsKeyModifiersToJavaKeyInfo
|
* Method: nsKeyModifiersToJavaKeyInfo
|
||||||
* Signature: ([I[I)V
|
* Signature: ([I[I)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_sun_lwawt_macosx_event_NSEvent_nsKeyModifiersToJavaKeyInfo
|
Java_sun_lwawt_macosx_NSEvent_nsKeyModifiersToJavaKeyInfo
|
||||||
(JNIEnv *env, jclass cls, jintArray inData, jintArray outData)
|
(JNIEnv *env, jclass cls, jintArray inData, jintArray outData)
|
||||||
{
|
{
|
||||||
JNF_COCOA_ENTER(env);
|
JNF_COCOA_ENTER(env);
|
||||||
|
@ -753,12 +753,12 @@ JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_lwawt_macosx_event_NSEvent
|
* Class: sun_lwawt_macosx_NSEvent
|
||||||
* Method: nsToJavaChar
|
* Method: nsToJavaChar
|
||||||
* Signature: (CI)C
|
* Signature: (CI)C
|
||||||
*/
|
*/
|
||||||
JNIEXPORT jint JNICALL
|
JNIEXPORT jint JNICALL
|
||||||
Java_sun_lwawt_macosx_event_NSEvent_nsToJavaChar
|
Java_sun_lwawt_macosx_NSEvent_nsToJavaChar
|
||||||
(JNIEnv *env, jclass cls, jchar nsChar, jint modifierFlags)
|
(JNIEnv *env, jclass cls, jchar nsChar, jint modifierFlags)
|
||||||
{
|
{
|
||||||
jchar javaChar = 0;
|
jchar javaChar = 0;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
#import "CDragSource.h"
|
#import "CDragSource.h"
|
||||||
#import "CDropTarget.h"
|
#import "CDropTarget.h"
|
||||||
|
|
||||||
@interface AWTView : NSView<NSTextInputClient> {
|
@interface AWTView : NSView<NSTextInputClient, CDragSourceHolder, CDropTargetHolder> {
|
||||||
@private
|
@private
|
||||||
jobject m_cPlatformView;
|
jobject m_cPlatformView;
|
||||||
|
|
||||||
|
@ -61,14 +61,8 @@
|
||||||
|
|
||||||
- (id) initWithRect:(NSRect) rect platformView:(jobject)cPlatformView windowLayer:(CALayer*)windowLayer;
|
- (id) initWithRect:(NSRect) rect platformView:(jobject)cPlatformView windowLayer:(CALayer*)windowLayer;
|
||||||
- (void) deliverJavaMouseEvent: (NSEvent *) event;
|
- (void) deliverJavaMouseEvent: (NSEvent *) event;
|
||||||
- (void) resetTrackingArea;
|
|
||||||
- (void) deliverJavaKeyEventHelper: (NSEvent *) event;
|
|
||||||
- (jobject) awtComponent:(JNIEnv *)env;
|
- (jobject) awtComponent:(JNIEnv *)env;
|
||||||
|
|
||||||
- (void) setDragSource:(CDragSource *)source;
|
|
||||||
- (void) setDropTarget:(CDropTarget *)target;
|
|
||||||
|
|
||||||
|
|
||||||
// Input method-related events
|
// Input method-related events
|
||||||
- (void)setInputMethod:(jobject)inputMethod;
|
- (void)setInputMethod:(jobject)inputMethod;
|
||||||
- (void)abandonInput;
|
- (void)abandonInput;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -42,6 +42,10 @@
|
||||||
@interface AWTView()
|
@interface AWTView()
|
||||||
@property (retain) CDropTarget *_dropTarget;
|
@property (retain) CDropTarget *_dropTarget;
|
||||||
@property (retain) CDragSource *_dragSource;
|
@property (retain) CDragSource *_dragSource;
|
||||||
|
|
||||||
|
-(void) deliverResize: (NSRect) rect;
|
||||||
|
-(void) resetTrackingArea;
|
||||||
|
-(void) deliverJavaKeyEventHelper: (NSEvent*) event;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// Uncomment this line to see fprintfs of each InputMethod API being called on this View
|
// Uncomment this line to see fprintfs of each InputMethod API being called on this View
|
||||||
|
@ -363,7 +367,7 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||||
// TODO: need consitent way for doing that both with global as well as with local coordinates.
|
// TODO: need consitent way for doing that both with global as well as with local coordinates.
|
||||||
// The reason to do it here is one more native method for getting screen dimension otherwise.
|
// The reason to do it here is one more native method for getting screen dimension otherwise.
|
||||||
|
|
||||||
NSRect screenRect = [[NSScreen mainScreen] frame];
|
NSRect screenRect = [[[NSScreen screens] objectAtIndex:0] frame];
|
||||||
absP.y = screenRect.size.height - absP.y;
|
absP.y = screenRect.size.height - absP.y;
|
||||||
jint clickCount;
|
jint clickCount;
|
||||||
|
|
||||||
|
@ -376,7 +380,7 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||||
clickCount = [event clickCount];
|
clickCount = [event clickCount];
|
||||||
}
|
}
|
||||||
|
|
||||||
static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/event/NSEvent");
|
static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/NSEvent");
|
||||||
static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IIIIIIIIDD)V");
|
static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IIIIIIIIDD)V");
|
||||||
jobject jEvent = JNFNewObject(env, jctor_NSEvent,
|
jobject jEvent = JNFNewObject(env, jctor_NSEvent,
|
||||||
[event type],
|
[event type],
|
||||||
|
@ -393,7 +397,7 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
|
static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
|
||||||
static JNF_MEMBER_CACHE(jm_deliverMouseEvent, jc_PlatformView, "deliverMouseEvent", "(Lsun/lwawt/macosx/event/NSEvent;)V");
|
static JNF_MEMBER_CACHE(jm_deliverMouseEvent, jc_PlatformView, "deliverMouseEvent", "(Lsun/lwawt/macosx/NSEvent;)V");
|
||||||
JNFCallVoidMethod(env, m_cPlatformView, jm_deliverMouseEvent, jEvent);
|
JNFCallVoidMethod(env, m_cPlatformView, jm_deliverMouseEvent, jEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,7 +445,7 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||||
characters = JNFNSToJavaString(env, [event characters]);
|
characters = JNFNSToJavaString(env, [event characters]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/event/NSEvent");
|
static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/NSEvent");
|
||||||
static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IISLjava/lang/String;)V");
|
static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IISLjava/lang/String;)V");
|
||||||
jobject jevent = JNFNewObject(env, jctor_NSEvent,
|
jobject jevent = JNFNewObject(env, jctor_NSEvent,
|
||||||
[event type],
|
[event type],
|
||||||
|
@ -451,7 +455,7 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||||
|
|
||||||
static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
|
static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
|
||||||
static JNF_MEMBER_CACHE(jm_deliverKeyEvent, jc_PlatformView,
|
static JNF_MEMBER_CACHE(jm_deliverKeyEvent, jc_PlatformView,
|
||||||
"deliverKeyEvent", "(Lsun/lwawt/macosx/event/NSEvent;)V");
|
"deliverKeyEvent", "(Lsun/lwawt/macosx/NSEvent;)V");
|
||||||
JNFCallVoidMethod(env, m_cPlatformView, jm_deliverKeyEvent, jevent);
|
JNFCallVoidMethod(env, m_cPlatformView, jm_deliverKeyEvent, jevent);
|
||||||
|
|
||||||
if (characters != NULL) {
|
if (characters != NULL) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
#import <AppKit/AppKit.h>
|
#import <AppKit/AppKit.h>
|
||||||
#import <JavaNativeFoundation/JavaNativeFoundation.h>
|
#import <JavaNativeFoundation/JavaNativeFoundation.h>
|
||||||
|
#import "jni_util.h"
|
||||||
|
|
||||||
#include "ThreadUtilities.h"
|
#include "ThreadUtilities.h"
|
||||||
|
|
||||||
|
@ -172,7 +173,9 @@ JNF_COCOA_ENTER(env);
|
||||||
NSData *tiffImage = [imageRep TIFFRepresentation];
|
NSData *tiffImage = [imageRep TIFFRepresentation];
|
||||||
jsize tiffSize = (jsize)[tiffImage length]; // #warning 64-bit: -length returns NSUInteger, but NewByteArray takes jsize
|
jsize tiffSize = (jsize)[tiffImage length]; // #warning 64-bit: -length returns NSUInteger, but NewByteArray takes jsize
|
||||||
returnValue = (*env)->NewByteArray(env, tiffSize);
|
returnValue = (*env)->NewByteArray(env, tiffSize);
|
||||||
|
CHECK_NULL_RETURN(returnValue, nil);
|
||||||
jbyte *tiffData = (jbyte *)(*env)->GetPrimitiveArrayCritical(env, returnValue, 0);
|
jbyte *tiffData = (jbyte *)(*env)->GetPrimitiveArrayCritical(env, returnValue, 0);
|
||||||
|
CHECK_NULL_RETURN(tiffData, nil);
|
||||||
[tiffImage getBytes:tiffData];
|
[tiffImage getBytes:tiffData];
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, returnValue, tiffData, 0); // Do not use JNI_COMMIT, as that will not free the buffer copy when +ProtectJavaHeap is on.
|
(*env)->ReleasePrimitiveArrayCritical(env, returnValue, tiffData, 0); // Do not use JNI_COMMIT, as that will not free the buffer copy when +ProtectJavaHeap is on.
|
||||||
[imageRep release];
|
[imageRep release];
|
||||||
|
@ -184,12 +187,13 @@ JNF_COCOA_EXIT(env);
|
||||||
|
|
||||||
static jobject getImageForByteStream(JNIEnv *env, jbyteArray sourceData)
|
static jobject getImageForByteStream(JNIEnv *env, jbyteArray sourceData)
|
||||||
{
|
{
|
||||||
if (sourceData == NULL) return NULL;
|
CHECK_NULL_RETURN(sourceData, NULL);
|
||||||
|
|
||||||
jsize sourceSize = (*env)->GetArrayLength(env, sourceData);
|
jsize sourceSize = (*env)->GetArrayLength(env, sourceData);
|
||||||
if (sourceSize == 0) return NULL;
|
if (sourceSize == 0) return NULL;
|
||||||
|
|
||||||
jbyte *sourceBytes = (*env)->GetPrimitiveArrayCritical(env, sourceData, NULL);
|
jbyte *sourceBytes = (*env)->GetPrimitiveArrayCritical(env, sourceData, NULL);
|
||||||
|
CHECK_NULL_RETURN(sourceBytes, NULL);
|
||||||
NSData *rawData = [NSData dataWithBytes:sourceBytes length:sourceSize];
|
NSData *rawData = [NSData dataWithBytes:sourceBytes length:sourceSize];
|
||||||
|
|
||||||
NSImage *newImage = [[NSImage alloc] initWithData:rawData];
|
NSImage *newImage = [[NSImage alloc] initWithData:rawData];
|
||||||
|
@ -197,8 +201,7 @@ static jobject getImageForByteStream(JNIEnv *env, jbyteArray sourceData)
|
||||||
[newImage release];
|
[newImage release];
|
||||||
|
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, sourceData, sourceBytes, JNI_ABORT);
|
(*env)->ReleasePrimitiveArrayCritical(env, sourceData, sourceBytes, JNI_ABORT);
|
||||||
|
CHECK_NULL_RETURN(newImage, NULL);
|
||||||
if (newImage == nil) return NULL;
|
|
||||||
|
|
||||||
// The ownership of the NSImage is passed to the new CImage jobject. No need to release it.
|
// The ownership of the NSImage is passed to the new CImage jobject. No need to release it.
|
||||||
static JNF_CLASS_CACHE(jc_CImage, "sun/lwawt/macosx/CImage");
|
static JNF_CLASS_CACHE(jc_CImage, "sun/lwawt/macosx/CImage");
|
||||||
|
@ -231,7 +234,8 @@ static jobjectArray CreateJavaFilenameArray(JNIEnv *env, NSArray *filenameArray)
|
||||||
if (filenameCount == 0) return nil;
|
if (filenameCount == 0) return nil;
|
||||||
|
|
||||||
// Get the java.lang.String class object:
|
// Get the java.lang.String class object:
|
||||||
jclass stringClazz = (*env)->FindClass(env, "java/lang/String"); // can't be null
|
jclass stringClazz = (*env)->FindClass(env, "java/lang/String");
|
||||||
|
CHECK_NULL_RETURN(stringClazz, nil);
|
||||||
jobject jfilenameArray = (*env)->NewObjectArray(env, filenameCount, stringClazz, NULL); // AWT_THREADING Safe (known object)
|
jobject jfilenameArray = (*env)->NewObjectArray(env, filenameCount, stringClazz, NULL); // AWT_THREADING Safe (known object)
|
||||||
if ((*env)->ExceptionOccurred(env)) {
|
if ((*env)->ExceptionOccurred(env)) {
|
||||||
(*env)->ExceptionDescribe(env);
|
(*env)->ExceptionDescribe(env);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -29,9 +29,15 @@
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
|
|
||||||
|
@class CDragSource;
|
||||||
|
|
||||||
|
@protocol CDragSourceHolder
|
||||||
|
- (void) setDragSource:(CDragSource *)source;
|
||||||
|
@end
|
||||||
|
|
||||||
@interface CDragSource : NSObject {
|
@interface CDragSource : NSObject {
|
||||||
@private
|
@private
|
||||||
NSView* fView;
|
NSView<CDragSourceHolder>* fView;
|
||||||
jobject fComponent;
|
jobject fComponent;
|
||||||
jobject fDragSourceContextPeer;
|
jobject fDragSourceContextPeer;
|
||||||
|
|
||||||
|
@ -53,8 +59,6 @@
|
||||||
jint fDragMouseModifiers;
|
jint fDragMouseModifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (CDragSource *) currentDragSource;
|
|
||||||
|
|
||||||
// Common methods:
|
// Common methods:
|
||||||
- (id) init:(jobject)jDragSourceContextPeer
|
- (id) init:(jobject)jDragSourceContextPeer
|
||||||
component:(jobject)jComponent
|
component:(jobject)jComponent
|
||||||
|
@ -66,7 +70,7 @@
|
||||||
modifiers:(jint)extModifiers
|
modifiers:(jint)extModifiers
|
||||||
clickCount:(jint)clickCount
|
clickCount:(jint)clickCount
|
||||||
timeStamp:(jlong)timeStamp
|
timeStamp:(jlong)timeStamp
|
||||||
dragImage:(jobject)jDragImage
|
dragImage:(jlong)nsDragImagePtr
|
||||||
dragImageOffsetX:(jint)jDragImageOffsetX
|
dragImageOffsetX:(jint)jDragImageOffsetX
|
||||||
dragImageOffsetY:(jint)jDragImageOffsetY
|
dragImageOffsetY:(jint)jDragImageOffsetY
|
||||||
sourceActions:(jint)jSourceActions
|
sourceActions:(jint)jSourceActions
|
||||||
|
@ -84,13 +88,6 @@
|
||||||
- (void)draggedImage:(NSImage *)image movedTo:(NSPoint)screenPoint;
|
- (void)draggedImage:(NSImage *)image movedTo:(NSPoint)screenPoint;
|
||||||
- (BOOL)ignoreModifierKeysWhileDragging;
|
- (BOOL)ignoreModifierKeysWhileDragging;
|
||||||
|
|
||||||
// Updates from the destination to the source
|
|
||||||
- (void) postDragEnter;
|
|
||||||
- (void) postDragExit;
|
|
||||||
|
|
||||||
// Utility
|
|
||||||
- (NSPoint) mapNSScreenPointToJavaWithOffset:(NSPoint) point;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#endif // CDragSource_h
|
#endif // CDragSource_h
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -75,14 +75,17 @@ JNF_CLASS_CACHE(CImageClass, "sun/lwawt/macosx/CImage");
|
||||||
static NSDragOperation sDragOperation;
|
static NSDragOperation sDragOperation;
|
||||||
static NSPoint sDraggingLocation;
|
static NSPoint sDraggingLocation;
|
||||||
|
|
||||||
static CDragSource* sCurrentDragSource;
|
|
||||||
static BOOL sNeedsEnter;
|
static BOOL sNeedsEnter;
|
||||||
|
|
||||||
@implementation CDragSource
|
@interface CDragSource ()
|
||||||
|
// Updates from the destination to the source
|
||||||
|
- (void) postDragEnter;
|
||||||
|
- (void) postDragExit;
|
||||||
|
// Utility
|
||||||
|
- (NSPoint) mapNSScreenPointToJavaWithOffset:(NSPoint) point;
|
||||||
|
@end
|
||||||
|
|
||||||
+ (CDragSource *) currentDragSource {
|
@implementation CDragSource
|
||||||
return sCurrentDragSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id) init:(jobject)jDragSourceContextPeer
|
- (id) init:(jobject)jDragSourceContextPeer
|
||||||
component:(jobject)jComponent
|
component:(jobject)jComponent
|
||||||
|
@ -94,7 +97,7 @@ static BOOL sNeedsEnter;
|
||||||
modifiers:(jint)extModifiers
|
modifiers:(jint)extModifiers
|
||||||
clickCount:(jint)clickCount
|
clickCount:(jint)clickCount
|
||||||
timeStamp:(jlong)timeStamp
|
timeStamp:(jlong)timeStamp
|
||||||
dragImage:(jobject)jDragImage
|
dragImage:(jlong)nsDragImagePtr
|
||||||
dragImageOffsetX:(jint)jDragImageOffsetX
|
dragImageOffsetX:(jint)jDragImageOffsetX
|
||||||
dragImageOffsetY:(jint)jDragImageOffsetY
|
dragImageOffsetY:(jint)jDragImageOffsetY
|
||||||
sourceActions:(jint)jSourceActions
|
sourceActions:(jint)jSourceActions
|
||||||
|
@ -109,26 +112,21 @@ static BOOL sNeedsEnter;
|
||||||
|
|
||||||
// Construct the object if we have a valid model for it:
|
// Construct the object if we have a valid model for it:
|
||||||
if (control != nil) {
|
if (control != nil) {
|
||||||
JNIEnv *env = [ThreadUtilities getJNIEnv];
|
fComponent = jComponent;
|
||||||
fComponent = JNFNewGlobalRef(env, jComponent);
|
fDragSourceContextPeer = jDragSourceContextPeer;
|
||||||
fDragSourceContextPeer = JNFNewGlobalRef(env, jDragSourceContextPeer);
|
fTransferable = jTransferable;
|
||||||
|
fTriggerEvent = jTrigger;
|
||||||
fTransferable = JNFNewGlobalRef(env, jTransferable);
|
|
||||||
fTriggerEvent = JNFNewGlobalRef(env, jTrigger);
|
|
||||||
|
|
||||||
if (jDragImage) {
|
|
||||||
JNF_MEMBER_CACHE(nsImagePtr, CImageClass, "ptr", "J");
|
|
||||||
jlong imgPtr = JNFGetLongField(env, jDragImage, nsImagePtr);
|
|
||||||
fDragImage = (NSImage*) jlong_to_ptr(imgPtr); // Double-casting prevents compiler 'd$|//
|
|
||||||
|
|
||||||
|
if (nsDragImagePtr) {
|
||||||
|
fDragImage = (NSImage*) jlong_to_ptr(nsDragImagePtr);
|
||||||
[fDragImage retain];
|
[fDragImage retain];
|
||||||
}
|
}
|
||||||
|
|
||||||
fDragImageOffset = NSMakePoint(jDragImageOffsetX, jDragImageOffsetY);
|
fDragImageOffset = NSMakePoint(jDragImageOffsetX, jDragImageOffsetY);
|
||||||
|
|
||||||
fSourceActions = jSourceActions;
|
fSourceActions = jSourceActions;
|
||||||
fFormats = JNFNewGlobalRef(env, jFormats);
|
fFormats = jFormats;
|
||||||
fFormatMap = JNFNewGlobalRef(env, jFormatMap);
|
fFormatMap = jFormatMap;
|
||||||
|
|
||||||
fTriggerEventTimeStamp = timeStamp;
|
fTriggerEventTimeStamp = timeStamp;
|
||||||
fDragPos = NSMakePoint(dragPosX, dragPosY);
|
fDragPos = NSMakePoint(dragPosX, dragPosY);
|
||||||
|
@ -515,8 +513,6 @@ static BOOL sNeedsEnter;
|
||||||
fDragKeyModifiers = [DnDUtilities extractJavaExtKeyModifiersFromJavaExtModifiers:fModifiers];
|
fDragKeyModifiers = [DnDUtilities extractJavaExtKeyModifiersFromJavaExtModifiers:fModifiers];
|
||||||
fDragMouseModifiers = [DnDUtilities extractJavaExtMouseModifiersFromJavaExtModifiers:fModifiers];
|
fDragMouseModifiers = [DnDUtilities extractJavaExtMouseModifiersFromJavaExtModifiers:fModifiers];
|
||||||
|
|
||||||
// Set the current DragSource
|
|
||||||
sCurrentDragSource = self;
|
|
||||||
sNeedsEnter = YES;
|
sNeedsEnter = YES;
|
||||||
|
|
||||||
@try {
|
@try {
|
||||||
|
@ -566,8 +562,6 @@ static BOOL sNeedsEnter;
|
||||||
JNF_MEMBER_CACHE(resetHoveringMethod, CDragSourceContextPeerClass, "resetHovering", "()V");
|
JNF_MEMBER_CACHE(resetHoveringMethod, CDragSourceContextPeerClass, "resetHovering", "()V");
|
||||||
JNFCallVoidMethod(env, fDragSourceContextPeer, resetHoveringMethod); // Hust reset static variable
|
JNFCallVoidMethod(env, fDragSourceContextPeer, resetHoveringMethod); // Hust reset static variable
|
||||||
} @finally {
|
} @finally {
|
||||||
// Clear the current DragSource
|
|
||||||
sCurrentDragSource = nil;
|
|
||||||
sNeedsEnter = NO;
|
sNeedsEnter = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -40,30 +40,39 @@
|
||||||
JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_createNativeDragSource
|
JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_createNativeDragSource
|
||||||
(JNIEnv *env, jobject jthis, jobject jcomponent, jlong jnativepeer, jobject jtransferable,
|
(JNIEnv *env, jobject jthis, jobject jcomponent, jlong jnativepeer, jobject jtransferable,
|
||||||
jobject jtrigger, jint jdragposx, jint jdragposy, jint jextmodifiers, jint jclickcount, jlong jtimestamp,
|
jobject jtrigger, jint jdragposx, jint jdragposy, jint jextmodifiers, jint jclickcount, jlong jtimestamp,
|
||||||
jobject jnsdragimage, jint jdragimageoffsetx, jint jdragimageoffsety,
|
jlong nsdragimageptr, jint jdragimageoffsetx, jint jdragimageoffsety,
|
||||||
jint jsourceactions, jlongArray jformats, jobject jformatmap)
|
jint jsourceactions, jlongArray jformats, jobject jformatmap)
|
||||||
{
|
{
|
||||||
id controlObj = (id) jlong_to_ptr(jnativepeer);
|
id controlObj = (id) jlong_to_ptr(jnativepeer);
|
||||||
__block CDragSource* dragSource = nil;
|
__block CDragSource* dragSource = nil;
|
||||||
|
|
||||||
JNF_COCOA_ENTER(env);
|
JNF_COCOA_ENTER(env);
|
||||||
|
|
||||||
|
// Global references are disposed when the DragSource is removed
|
||||||
|
jobject gComponent = JNFNewGlobalRef(env, jcomponent);
|
||||||
|
jobject gDragSourceContextPeer = JNFNewGlobalRef(env, jthis);
|
||||||
|
jobject gTransferable = JNFNewGlobalRef(env, jtransferable);
|
||||||
|
jobject gTriggerEvent = JNFNewGlobalRef(env, jtrigger);
|
||||||
|
jlongArray gFormats = JNFNewGlobalRef(env, jformats);
|
||||||
|
jobject gFormatMap = JNFNewGlobalRef(env, jformatmap);
|
||||||
|
|
||||||
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
|
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
|
||||||
dragSource = [[CDragSource alloc] init:jthis
|
dragSource = [[CDragSource alloc] init:gDragSourceContextPeer
|
||||||
component:jcomponent
|
component:gComponent
|
||||||
control:controlObj
|
control:controlObj
|
||||||
transferable:jtransferable
|
transferable:gTransferable
|
||||||
triggerEvent:jtrigger
|
triggerEvent:gTriggerEvent
|
||||||
dragPosX:jdragposx
|
dragPosX:jdragposx
|
||||||
dragPosY:jdragposy
|
dragPosY:jdragposy
|
||||||
modifiers:jextmodifiers
|
modifiers:jextmodifiers
|
||||||
clickCount:jclickcount
|
clickCount:jclickcount
|
||||||
timeStamp:jtimestamp
|
timeStamp:jtimestamp
|
||||||
dragImage:jnsdragimage
|
dragImage:nsdragimageptr
|
||||||
dragImageOffsetX:jdragimageoffsetx
|
dragImageOffsetX:jdragimageoffsetx
|
||||||
dragImageOffsetY:jdragimageoffsety
|
dragImageOffsetY:jdragimageoffsety
|
||||||
sourceActions:jsourceactions
|
sourceActions:jsourceactions
|
||||||
formats:jformats
|
formats:gFormats
|
||||||
formatMap:jformatmap];
|
formatMap:gFormatMap];
|
||||||
}];
|
}];
|
||||||
JNF_COCOA_EXIT(env);
|
JNF_COCOA_EXIT(env);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -31,9 +31,15 @@
|
||||||
|
|
||||||
@class ControlModel;
|
@class ControlModel;
|
||||||
|
|
||||||
|
@class CDropTarget;
|
||||||
|
|
||||||
|
@protocol CDropTargetHolder
|
||||||
|
- (void) setDropTarget:(CDropTarget *)target;
|
||||||
|
@end
|
||||||
|
|
||||||
@interface CDropTarget : NSObject {
|
@interface CDropTarget : NSObject {
|
||||||
@private
|
@private
|
||||||
NSView* fView;
|
NSView<CDropTargetHolder>* fView;
|
||||||
jobject fComponent;
|
jobject fComponent;
|
||||||
jobject fDropTarget;
|
jobject fDropTarget;
|
||||||
jobject fDropTargetContextPeer;
|
jobject fDropTargetContextPeer;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -143,8 +143,9 @@ JNF_COCOA_ENTER(env);
|
||||||
NSMutableArray * reps = [NSMutableArray arrayWithCapacity: num];
|
NSMutableArray * reps = [NSMutableArray arrayWithCapacity: num];
|
||||||
|
|
||||||
jint * ws = (*env)->GetIntArrayElements(env, widths, NULL);
|
jint * ws = (*env)->GetIntArrayElements(env, widths, NULL);
|
||||||
|
if (ws != NULL) {
|
||||||
jint * hs = (*env)->GetIntArrayElements(env, heights, NULL);
|
jint * hs = (*env)->GetIntArrayElements(env, heights, NULL);
|
||||||
|
if (hs != NULL) {
|
||||||
jsize i;
|
jsize i;
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
jintArray buffer = (*env)->GetObjectArrayElement(env, buffers, i);
|
jintArray buffer = (*env)->GetObjectArrayElement(env, buffers, i);
|
||||||
|
@ -156,8 +157,9 @@ JNF_COCOA_ENTER(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
(*env)->ReleaseIntArrayElements(env, heights, hs, JNI_ABORT);
|
(*env)->ReleaseIntArrayElements(env, heights, hs, JNI_ABORT);
|
||||||
|
}
|
||||||
(*env)->ReleaseIntArrayElements(env, widths, ws, JNI_ABORT);
|
(*env)->ReleaseIntArrayElements(env, widths, ws, JNI_ABORT);
|
||||||
|
}
|
||||||
if ([reps count]) {
|
if ([reps count]) {
|
||||||
NSImage *nsImage = [[NSImage alloc] initWithSize:NSMakeSize(0, 0)];
|
NSImage *nsImage = [[NSImage alloc] initWithSize:NSMakeSize(0, 0)];
|
||||||
[nsImage addRepresentations: reps];
|
[nsImage addRepresentations: reps];
|
||||||
|
@ -320,3 +322,26 @@ JNF_COCOA_ENTER(env);
|
||||||
|
|
||||||
JNF_COCOA_EXIT(env);
|
JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_lwawt_macosx_CImage
|
||||||
|
* Method: nativeResizeNSImageRepresentations
|
||||||
|
* Signature: (JDD)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeResizeNSImageRepresentations
|
||||||
|
(JNIEnv *env, jclass clazz, jlong image, jdouble w, jdouble h)
|
||||||
|
{
|
||||||
|
if (!image) return;
|
||||||
|
NSImage *i = (NSImage *)jlong_to_ptr(image);
|
||||||
|
|
||||||
|
JNF_COCOA_ENTER(env);
|
||||||
|
|
||||||
|
NSImageRep *imageRep = nil;
|
||||||
|
NSArray *imageRepresentations = [i representations];
|
||||||
|
NSEnumerator *imageEnumerator = [imageRepresentations objectEnumerator];
|
||||||
|
while ((imageRep = [imageEnumerator nextObject]) != nil) {
|
||||||
|
[imageRep setSize:NSMakeSize(w, h)];
|
||||||
|
}
|
||||||
|
|
||||||
|
JNF_COCOA_EXIT(env);
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -23,6 +23,9 @@
|
||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#import "jni_util.h"
|
||||||
|
|
||||||
#import <JavaNativeFoundation/JavaNativeFoundation.h>
|
#import <JavaNativeFoundation/JavaNativeFoundation.h>
|
||||||
#import <ApplicationServices/ApplicationServices.h>
|
#import <ApplicationServices/ApplicationServices.h>
|
||||||
|
|
||||||
|
@ -187,9 +190,8 @@ Java_sun_lwawt_macosx_CRobot_mouseEvent
|
||||||
// volatile, otherwise it warns that it might be clobbered by 'longjmp'
|
// volatile, otherwise it warns that it might be clobbered by 'longjmp'
|
||||||
volatile CGPoint point;
|
volatile CGPoint point;
|
||||||
|
|
||||||
// Translate the device relative point into a valid global CGPoint.
|
point.x = mouseLastX;
|
||||||
point.x = mouseLastX + globalDeviceBounds.origin.x;
|
point.y = mouseLastY;
|
||||||
point.y = mouseLastY + globalDeviceBounds.origin.y;
|
|
||||||
|
|
||||||
__block CGMouseButton button = kCGMouseButtonLeft;
|
__block CGMouseButton button = kCGMouseButtonLeft;
|
||||||
__block CGEventType type = kCGEventMouseMoved;
|
__block CGEventType type = kCGEventMouseMoved;
|
||||||
|
@ -343,6 +345,7 @@ Java_sun_lwawt_macosx_CRobot_nativeGetScreenPixels
|
||||||
|
|
||||||
// get a pointer to the Java int array
|
// get a pointer to the Java int array
|
||||||
void *jPixelData = (*env)->GetPrimitiveArrayCritical(env, pixels, 0);
|
void *jPixelData = (*env)->GetPrimitiveArrayCritical(env, pixels, 0);
|
||||||
|
CHECK_NULL(jPixelData);
|
||||||
|
|
||||||
// create a graphics context around the Java int array
|
// create a graphics context around the Java int array
|
||||||
CGColorSpaceRef picColorSpace = CGColorSpaceCreateWithName(
|
CGColorSpaceRef picColorSpace = CGColorSpaceCreateWithName(
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -135,7 +135,7 @@ static NSSize ScaledImageSizeForStatusBar(NSSize imageSize) {
|
||||||
|
|
||||||
clickCount = [event clickCount];
|
clickCount = [event clickCount];
|
||||||
|
|
||||||
static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/event/NSEvent");
|
static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/NSEvent");
|
||||||
static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IIIIIIIIDD)V");
|
static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IIIIIIIIDD)V");
|
||||||
jobject jEvent = JNFNewObject(env, jctor_NSEvent,
|
jobject jEvent = JNFNewObject(env, jctor_NSEvent,
|
||||||
[event type],
|
[event type],
|
||||||
|
@ -152,7 +152,7 @@ static NSSize ScaledImageSizeForStatusBar(NSSize imageSize) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static JNF_CLASS_CACHE(jc_TrayIcon, "sun/lwawt/macosx/CTrayIcon");
|
static JNF_CLASS_CACHE(jc_TrayIcon, "sun/lwawt/macosx/CTrayIcon");
|
||||||
static JNF_MEMBER_CACHE(jm_handleMouseEvent, jc_TrayIcon, "handleMouseEvent", "(Lsun/lwawt/macosx/event/NSEvent;)V");
|
static JNF_MEMBER_CACHE(jm_handleMouseEvent, jc_TrayIcon, "handleMouseEvent", "(Lsun/lwawt/macosx/NSEvent;)V");
|
||||||
JNFCallVoidMethod(env, peer, jm_handleMouseEvent, jEvent);
|
JNFCallVoidMethod(env, peer, jm_handleMouseEvent, jEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -23,37 +23,10 @@
|
||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "CWrapper.h"
|
|
||||||
|
|
||||||
#import <JavaNativeFoundation/JavaNativeFoundation.h>
|
#import <JavaNativeFoundation/JavaNativeFoundation.h>
|
||||||
|
|
||||||
#import "AWTWindow.h"
|
|
||||||
#import "LWCToolkit.h"
|
|
||||||
#import "GeomUtilities.h"
|
|
||||||
#import "ThreadUtilities.h"
|
#import "ThreadUtilities.h"
|
||||||
|
|
||||||
#import "sun_lwawt_macosx_CWrapper_NSWindow.h"
|
#import "sun_lwawt_macosx_CWrapper_NSWindow.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: sun_lwawt_macosx_CWrapper$NSObject
|
|
||||||
* Method: release
|
|
||||||
* Signature: (J)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL
|
|
||||||
Java_sun_lwawt_macosx_CWrapper_00024NSObject_release
|
|
||||||
(JNIEnv *env, jclass cls, jlong objectPtr)
|
|
||||||
{
|
|
||||||
JNF_COCOA_ENTER(env);
|
|
||||||
|
|
||||||
id obj = (id)jlong_to_ptr(objectPtr);
|
|
||||||
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
|
|
||||||
CFRelease(obj);
|
|
||||||
}];
|
|
||||||
|
|
||||||
JNF_COCOA_EXIT(env);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_lwawt_macosx_CWrapper$NSWindow
|
* Class: sun_lwawt_macosx_CWrapper$NSWindow
|
||||||
* Method: makeKeyAndOrderFront
|
* Method: makeKeyAndOrderFront
|
||||||
|
@ -249,6 +222,7 @@ static void initLevels()
|
||||||
dispatch_once(&pred, ^{
|
dispatch_once(&pred, ^{
|
||||||
LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSNormalWindowLevel] = NSNormalWindowLevel;
|
LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSNormalWindowLevel] = NSNormalWindowLevel;
|
||||||
LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSFloatingWindowLevel] = NSFloatingWindowLevel;
|
LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSFloatingWindowLevel] = NSFloatingWindowLevel;
|
||||||
|
LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSPopUpMenuWindowLevel] = NSPopUpMenuWindowLevel;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,8 +282,8 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_removeChildWindow
|
||||||
{
|
{
|
||||||
JNF_COCOA_ENTER(env);
|
JNF_COCOA_ENTER(env);
|
||||||
|
|
||||||
AWTWindow *parent = (AWTWindow *)jlong_to_ptr(parentPtr);
|
NSWindow *parent = (NSWindow *)jlong_to_ptr(parentPtr);
|
||||||
AWTWindow *child = (AWTWindow *)jlong_to_ptr(childPtr);
|
NSWindow *child = (NSWindow *)jlong_to_ptr(childPtr);
|
||||||
[ThreadUtilities performOnMainThread:@selector(removeChildWindow:)
|
[ThreadUtilities performOnMainThread:@selector(removeChildWindow:)
|
||||||
on:parent
|
on:parent
|
||||||
withObject:child
|
withObject:child
|
||||||
|
@ -318,26 +292,6 @@ JNF_COCOA_ENTER(env);
|
||||||
JNF_COCOA_EXIT(env);
|
JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: sun_lwawt_macosx_CWrapper$NSWindow
|
|
||||||
* Method: setFrame
|
|
||||||
* Signature: (JIIIIZ)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL
|
|
||||||
Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setFrame
|
|
||||||
(JNIEnv *env, jclass cls, jlong windowPtr, jint x, jint y, jint w, jint h, jboolean display)
|
|
||||||
{
|
|
||||||
JNF_COCOA_ENTER(env);
|
|
||||||
|
|
||||||
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
|
|
||||||
NSRect frame = NSMakeRect(x, y, w, h);
|
|
||||||
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
|
|
||||||
[window setFrame:frame display:display];
|
|
||||||
}];
|
|
||||||
|
|
||||||
JNF_COCOA_EXIT(env);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_lwawt_macosx_CWrapper$NSWindow
|
* Class: sun_lwawt_macosx_CWrapper$NSWindow
|
||||||
* Method: setAlphaValue
|
* Method: setAlphaValue
|
||||||
|
@ -349,7 +303,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setAlphaValue
|
||||||
{
|
{
|
||||||
JNF_COCOA_ENTER(env);
|
JNF_COCOA_ENTER(env);
|
||||||
|
|
||||||
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
|
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
|
||||||
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
|
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
|
||||||
[window setAlphaValue:(CGFloat)alpha];
|
[window setAlphaValue:(CGFloat)alpha];
|
||||||
}];
|
}];
|
||||||
|
@ -368,7 +322,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setOpaque
|
||||||
{
|
{
|
||||||
JNF_COCOA_ENTER(env);
|
JNF_COCOA_ENTER(env);
|
||||||
|
|
||||||
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
|
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
|
||||||
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
|
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
|
||||||
[window setOpaque:(BOOL)opaque];
|
[window setOpaque:(BOOL)opaque];
|
||||||
}];
|
}];
|
||||||
|
@ -387,7 +341,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setBackgroundColor
|
||||||
{
|
{
|
||||||
JNF_COCOA_ENTER(env);
|
JNF_COCOA_ENTER(env);
|
||||||
|
|
||||||
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
|
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
|
||||||
NSColor *color = (NSColor *)jlong_to_ptr(colorPtr);
|
NSColor *color = (NSColor *)jlong_to_ptr(colorPtr);
|
||||||
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
|
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
|
||||||
[window setBackgroundColor:color];
|
[window setBackgroundColor:color];
|
||||||
|
@ -397,6 +351,7 @@ JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* Class: sun_lwawt_macosx_CWrapper$NSWindow
|
||||||
* Method: miniaturize
|
* Method: miniaturize
|
||||||
* Signature: (J)V
|
* Signature: (J)V
|
||||||
*/
|
*/
|
||||||
|
@ -558,33 +513,6 @@ JNF_COCOA_ENTER(env);
|
||||||
JNF_COCOA_EXIT(env);
|
JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: sun_lwawt_macosx_CWrapper$NSView
|
|
||||||
* Method: frame
|
|
||||||
* Signature: (J)Ljava/awt/Rectangle;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jobject JNICALL
|
|
||||||
Java_sun_lwawt_macosx_CWrapper_00024NSView_frame
|
|
||||||
(JNIEnv *env, jclass cls, jlong viewPtr)
|
|
||||||
{
|
|
||||||
jobject jRect = NULL;
|
|
||||||
|
|
||||||
JNF_COCOA_ENTER(env);
|
|
||||||
|
|
||||||
__block NSRect rect = NSZeroRect;
|
|
||||||
|
|
||||||
NSView *view = (NSView *)jlong_to_ptr(viewPtr);
|
|
||||||
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
|
|
||||||
rect = [view frame];
|
|
||||||
}];
|
|
||||||
|
|
||||||
jRect = NSToJavaRect(env, rect);
|
|
||||||
|
|
||||||
JNF_COCOA_EXIT(env);
|
|
||||||
|
|
||||||
return jRect;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_lwawt_macosx_CWrapper$NSView
|
* Class: sun_lwawt_macosx_CWrapper$NSView
|
||||||
* Method: window
|
* Method: window
|
||||||
|
|
|
@ -200,13 +200,17 @@ Java_sun_lwawt_macosx_LWCToolkit_initIDs
|
||||||
gNumberOfButtons = sun_lwawt_macosx_LWCToolkit_BUTTONS;
|
gNumberOfButtons = sun_lwawt_macosx_LWCToolkit_BUTTONS;
|
||||||
|
|
||||||
jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent");
|
jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent");
|
||||||
|
CHECK_NULL(inputEventClazz);
|
||||||
jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I");
|
jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I");
|
||||||
|
CHECK_NULL(getButtonDownMasksID);
|
||||||
jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID);
|
jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID);
|
||||||
jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE);
|
jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE);
|
||||||
|
CHECK_NULL(tmp);
|
||||||
|
|
||||||
gButtonDownMasks = (jint*)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(jint), gNumberOfButtons);
|
gButtonDownMasks = (jint*)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(jint), gNumberOfButtons);
|
||||||
if (gButtonDownMasks == NULL) {
|
if (gButtonDownMasks == NULL) {
|
||||||
gNumberOfButtons = 0;
|
gNumberOfButtons = 0;
|
||||||
|
(*env)->ReleaseIntArrayElements(env, obj, tmp, JNI_ABORT);
|
||||||
JNU_ThrowOutOfMemoryError(env, NULL);
|
JNU_ThrowOutOfMemoryError(env, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -240,7 +244,7 @@ static UInt32 RGB(NSColor *c) {
|
||||||
return ((ia & 0xFF) << 24) | ((ir & 0xFF) << 16) | ((ig & 0xFF) << 8) | ((ib & 0xFF) << 0);
|
return ((ia & 0xFF) << 24) | ((ir & 0xFF) << 16) | ((ig & 0xFF) << 8) | ((ib & 0xFF) << 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) {
|
BOOL doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) {
|
||||||
jint len = (*env)->GetArrayLength(env, jColors);
|
jint len = (*env)->GetArrayLength(env, jColors);
|
||||||
|
|
||||||
UInt32 colorsArray[len];
|
UInt32 colorsArray[len];
|
||||||
|
@ -254,8 +258,12 @@ void doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) {
|
||||||
}];
|
}];
|
||||||
|
|
||||||
jint *_colors = (*env)->GetPrimitiveArrayCritical(env, jColors, 0);
|
jint *_colors = (*env)->GetPrimitiveArrayCritical(env, jColors, 0);
|
||||||
|
if (_colors == NULL) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
memcpy(_colors, colors, len * sizeof(UInt32));
|
memcpy(_colors, colors, len * sizeof(UInt32));
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, jColors, _colors, 0);
|
(*env)->ReleasePrimitiveArrayCritical(env, jColors, _colors, 0);
|
||||||
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -267,8 +275,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_loadNativeColors
|
||||||
(JNIEnv *env, jobject peer, jintArray jSystemColors, jintArray jAppleColors)
|
(JNIEnv *env, jobject peer, jintArray jSystemColors, jintArray jAppleColors)
|
||||||
{
|
{
|
||||||
JNF_COCOA_ENTER(env);
|
JNF_COCOA_ENTER(env);
|
||||||
doLoadNativeColors(env, jSystemColors, NO);
|
if (doLoadNativeColors(env, jSystemColors, NO)) {
|
||||||
doLoadNativeColors(env, jAppleColors, YES);
|
doLoadNativeColors(env, jAppleColors, YES);
|
||||||
|
}
|
||||||
JNF_COCOA_EXIT(env);
|
JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,10 +142,9 @@ SplashInitPlatform(Splash * splash) {
|
||||||
splash->screenFormat.byteOrder = 1 ? BYTE_ORDER_LSBFIRST : BYTE_ORDER_MSBFIRST;
|
splash->screenFormat.byteOrder = 1 ? BYTE_ORDER_LSBFIRST : BYTE_ORDER_MSBFIRST;
|
||||||
splash->screenFormat.depthBytes = 4;
|
splash->screenFormat.depthBytes = 4;
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^(void) {
|
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^() {
|
||||||
NSApplication * app = [NSApplicationAWT sharedApplication];
|
[NSApplicationAWT runAWTLoopWithApp:[NSApplicationAWT sharedApplication]];
|
||||||
[NSApplicationAWT runAWTLoopWithApp: app];
|
}];
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -433,18 +433,18 @@ Java_sun_java2d_opengl_CGLGraphicsConfig_getOGLCapabilities
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL
|
JNIEXPORT jint JNICALL
|
||||||
Java_sun_java2d_opengl_CGLGraphicsConfig_getMaxTextureSize
|
Java_sun_java2d_opengl_CGLGraphicsConfig_nativeGetMaxTextureSize
|
||||||
(JNIEnv *env, jclass cglgc)
|
(JNIEnv *env, jclass cglgc)
|
||||||
{
|
{
|
||||||
J2dTraceLn(J2D_TRACE_INFO, "CGLGraphicsConfig_getMaxTextureSize");
|
J2dTraceLn(J2D_TRACE_INFO, "CGLGraphicsConfig_nativeGetMaxTextureSize");
|
||||||
|
|
||||||
__block int max = 0;
|
__block int max = 0;
|
||||||
|
|
||||||
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
|
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
|
||||||
[sharedContext makeCurrentContext];
|
[sharedContext makeCurrentContext];
|
||||||
j2d_glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);
|
j2d_glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);
|
||||||
|
[NSOpenGLContext clearCurrentContext];
|
||||||
}];
|
}];
|
||||||
|
|
||||||
return (jint)max;
|
return (jint)max;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -680,7 +680,7 @@ public class BMPImageReader extends ImageReader implements BMPConstants {
|
||||||
gotHeader = true;
|
gotHeader = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator getImageTypes(int imageIndex)
|
public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
checkIndex(imageIndex);
|
checkIndex(imageIndex);
|
||||||
try {
|
try {
|
||||||
|
@ -688,7 +688,7 @@ public class BMPImageReader extends ImageReader implements BMPConstants {
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
throw new IIOException(I18N.getString("BMPImageReader6"), e);
|
throw new IIOException(I18N.getString("BMPImageReader6"), e);
|
||||||
}
|
}
|
||||||
ArrayList list = new ArrayList(1);
|
ArrayList<ImageTypeSpecifier> list = new ArrayList<>(1);
|
||||||
list.add(new ImageTypeSpecifier(originalColorModel,
|
list.add(new ImageTypeSpecifier(originalColorModel,
|
||||||
originalSampleModel));
|
originalSampleModel));
|
||||||
return list.iterator();
|
return list.iterator();
|
||||||
|
@ -912,6 +912,7 @@ public class BMPImageReader extends ImageReader implements BMPConstants {
|
||||||
throw new
|
throw new
|
||||||
IIOException(I18N.getString("BMPImageReader1"));
|
IIOException(I18N.getString("BMPImageReader1"));
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case VERSION_4_8_BIT:
|
case VERSION_4_8_BIT:
|
||||||
switch((int)compression) {
|
switch((int)compression) {
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class BMPImageReaderSpi extends ImageReaderSpi {
|
||||||
entensions,
|
entensions,
|
||||||
mimeType,
|
mimeType,
|
||||||
"com.sun.imageio.plugins.bmp.BMPImageReader",
|
"com.sun.imageio.plugins.bmp.BMPImageReader",
|
||||||
new Class[] { ImageInputStream.class },
|
new Class<?>[] { ImageInputStream.class },
|
||||||
writerSpiNames,
|
writerSpiNames,
|
||||||
false,
|
false,
|
||||||
null, null, null, null,
|
null, null, null, null,
|
||||||
|
|
|
@ -1325,10 +1325,11 @@ public class BMPImageWriter extends ImageWriter implements BMPConstants {
|
||||||
ImageWriteParam bmpParam) throws IOException {
|
ImageWriteParam bmpParam) throws IOException {
|
||||||
String format =
|
String format =
|
||||||
compressionType == BI_JPEG ? "jpeg" : "png";
|
compressionType == BI_JPEG ? "jpeg" : "png";
|
||||||
Iterator iterator = ImageIO.getImageWritersByFormatName(format);
|
Iterator<ImageWriter> iterator =
|
||||||
|
ImageIO.getImageWritersByFormatName(format);
|
||||||
ImageWriter writer = null;
|
ImageWriter writer = null;
|
||||||
if (iterator.hasNext())
|
if (iterator.hasNext())
|
||||||
writer = (ImageWriter)iterator.next();
|
writer = iterator.next();
|
||||||
if (writer != null) {
|
if (writer != null) {
|
||||||
if (embedded_stream == null) {
|
if (embedded_stream == null) {
|
||||||
throw new RuntimeException("No stream for writing embedded image!");
|
throw new RuntimeException("No stream for writing embedded image!");
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class BMPImageWriterSpi extends ImageWriterSpi {
|
||||||
entensions,
|
entensions,
|
||||||
mimeType,
|
mimeType,
|
||||||
"com.sun.imageio.plugins.bmp.BMPImageWriter",
|
"com.sun.imageio.plugins.bmp.BMPImageWriter",
|
||||||
new Class[] { ImageOutputStream.class },
|
new Class<?>[] { ImageOutputStream.class },
|
||||||
readerSpiNames,
|
readerSpiNames,
|
||||||
false,
|
false,
|
||||||
null, null, null, null,
|
null, null, null, null,
|
||||||
|
|
|
@ -91,10 +91,6 @@ public class BMPMetadata extends IIOMetadata implements BMPConstants {
|
||||||
public int green;
|
public int green;
|
||||||
public int blue;
|
public int blue;
|
||||||
|
|
||||||
// Fields from CommentExtension
|
|
||||||
// List of byte[]
|
|
||||||
public List comments = null; // new ArrayList();
|
|
||||||
|
|
||||||
public BMPMetadata() {
|
public BMPMetadata() {
|
||||||
super(true,
|
super(true,
|
||||||
nativeMetadataFormatName,
|
nativeMetadataFormatName,
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class StandardMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
|
|
||||||
public StandardMetadataFormat() {
|
public StandardMetadataFormat() {
|
||||||
super(standardMetadataFormatName, CHILD_POLICY_SOME);
|
super(standardMetadataFormatName, CHILD_POLICY_SOME);
|
||||||
List values;
|
List<String> values;
|
||||||
|
|
||||||
// root -> Chroma
|
// root -> Chroma
|
||||||
addElement("Chroma", standardMetadataFormatName,
|
addElement("Chroma", standardMetadataFormatName,
|
||||||
|
@ -52,7 +52,7 @@ public class StandardMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
addElement("ColorSpaceType", "Chroma",
|
addElement("ColorSpaceType", "Chroma",
|
||||||
CHILD_POLICY_EMPTY);
|
CHILD_POLICY_EMPTY);
|
||||||
|
|
||||||
values = new ArrayList();
|
values = new ArrayList<>();
|
||||||
values.add("XYZ");
|
values.add("XYZ");
|
||||||
values.add("Lab");
|
values.add("Lab");
|
||||||
values.add("Luv");
|
values.add("Luv");
|
||||||
|
@ -164,7 +164,7 @@ public class StandardMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
// root -> Data -> PlanarConfiguration
|
// root -> Data -> PlanarConfiguration
|
||||||
addElement("PlanarConfiguration", "Data", CHILD_POLICY_EMPTY);
|
addElement("PlanarConfiguration", "Data", CHILD_POLICY_EMPTY);
|
||||||
|
|
||||||
values = new ArrayList();
|
values = new ArrayList<>();
|
||||||
values.add("PixelInterleaved");
|
values.add("PixelInterleaved");
|
||||||
values.add("PlaneInterleaved");
|
values.add("PlaneInterleaved");
|
||||||
values.add("LineInterleaved");
|
values.add("LineInterleaved");
|
||||||
|
@ -178,7 +178,7 @@ public class StandardMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
// root -> Data -> SampleFormat
|
// root -> Data -> SampleFormat
|
||||||
addElement("SampleFormat", "Data", CHILD_POLICY_EMPTY);
|
addElement("SampleFormat", "Data", CHILD_POLICY_EMPTY);
|
||||||
|
|
||||||
values = new ArrayList();
|
values = new ArrayList<>();
|
||||||
values.add("SignedIntegral");
|
values.add("SignedIntegral");
|
||||||
values.add("UnsignedIntegral");
|
values.add("UnsignedIntegral");
|
||||||
values.add("Real");
|
values.add("Real");
|
||||||
|
@ -225,7 +225,7 @@ public class StandardMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
addElement("ImageOrientation", "Dimension",
|
addElement("ImageOrientation", "Dimension",
|
||||||
CHILD_POLICY_EMPTY);
|
CHILD_POLICY_EMPTY);
|
||||||
|
|
||||||
values = new ArrayList();
|
values = new ArrayList<>();
|
||||||
values.add("Normal");
|
values.add("Normal");
|
||||||
values.add("Rotate90");
|
values.add("Rotate90");
|
||||||
values.add("Rotate180");
|
values.add("Rotate180");
|
||||||
|
@ -306,7 +306,7 @@ public class StandardMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
// root -> Document -> SubimageInterpretation
|
// root -> Document -> SubimageInterpretation
|
||||||
addElement("SubimageInterpretation", "Document",
|
addElement("SubimageInterpretation", "Document",
|
||||||
CHILD_POLICY_EMPTY);
|
CHILD_POLICY_EMPTY);
|
||||||
values = new ArrayList();
|
values = new ArrayList<>();
|
||||||
values.add("Standalone");
|
values.add("Standalone");
|
||||||
values.add("SinglePage");
|
values.add("SinglePage");
|
||||||
values.add("FullResolution");
|
values.add("FullResolution");
|
||||||
|
@ -418,7 +418,7 @@ public class StandardMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
false,
|
false,
|
||||||
null);
|
null);
|
||||||
|
|
||||||
values = new ArrayList();
|
values = new ArrayList<>();
|
||||||
values.add("none");
|
values.add("none");
|
||||||
values.add("lzw");
|
values.add("lzw");
|
||||||
values.add("zip");
|
values.add("zip");
|
||||||
|
@ -437,7 +437,7 @@ public class StandardMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
// root -> Transparency -> Alpha
|
// root -> Transparency -> Alpha
|
||||||
addElement("Alpha", "Transparency", CHILD_POLICY_EMPTY);
|
addElement("Alpha", "Transparency", CHILD_POLICY_EMPTY);
|
||||||
|
|
||||||
values = new ArrayList();
|
values = new ArrayList<>();
|
||||||
values.add("none");
|
values.add("none");
|
||||||
values.add("premultiplied");
|
values.add("premultiplied");
|
||||||
values.add("nonpremultiplied");
|
values.add("nonpremultiplied");
|
||||||
|
|
|
@ -84,17 +84,17 @@ public class GIFImageMetadata extends GIFMetadata {
|
||||||
|
|
||||||
// Fields from ApplicationExtension
|
// Fields from ApplicationExtension
|
||||||
// List of byte[]
|
// List of byte[]
|
||||||
public List applicationIDs = null; // new ArrayList();
|
public List<byte[]> applicationIDs = null;
|
||||||
|
|
||||||
// List of byte[]
|
// List of byte[]
|
||||||
public List authenticationCodes = null; // new ArrayList();
|
public List<byte[]> authenticationCodes = null;
|
||||||
|
|
||||||
// List of byte[]
|
// List of byte[]
|
||||||
public List applicationData = null; // new ArrayList();
|
public List<byte[]> applicationData = null;
|
||||||
|
|
||||||
// Fields from CommentExtension
|
// Fields from CommentExtension
|
||||||
// List of byte[]
|
// List of byte[]
|
||||||
public List comments = null; // new ArrayList();
|
public List<byte[]> comments = null;
|
||||||
|
|
||||||
protected GIFImageMetadata(boolean standardMetadataFormatSupported,
|
protected GIFImageMetadata(boolean standardMetadataFormatSupported,
|
||||||
String nativeMetadataFormatName,
|
String nativeMetadataFormatName,
|
||||||
|
@ -225,13 +225,13 @@ public class GIFImageMetadata extends GIFMetadata {
|
||||||
for (int i = 0; i < numAppExtensions; i++) {
|
for (int i = 0; i < numAppExtensions; i++) {
|
||||||
IIOMetadataNode appExtNode =
|
IIOMetadataNode appExtNode =
|
||||||
new IIOMetadataNode("ApplicationExtension");
|
new IIOMetadataNode("ApplicationExtension");
|
||||||
byte[] applicationID = (byte[])applicationIDs.get(i);
|
byte[] applicationID = applicationIDs.get(i);
|
||||||
appExtNode.setAttribute("applicationID",
|
appExtNode.setAttribute("applicationID",
|
||||||
toISO8859(applicationID));
|
toISO8859(applicationID));
|
||||||
byte[] authenticationCode = (byte[])authenticationCodes.get(i);
|
byte[] authenticationCode = authenticationCodes.get(i);
|
||||||
appExtNode.setAttribute("authenticationCode",
|
appExtNode.setAttribute("authenticationCode",
|
||||||
toISO8859(authenticationCode));
|
toISO8859(authenticationCode));
|
||||||
byte[] appData = (byte[])applicationData.get(i);
|
byte[] appData = applicationData.get(i);
|
||||||
appExtNode.setUserObject(appData.clone());
|
appExtNode.setUserObject(appData.clone());
|
||||||
node.appendChild(appExtNode);
|
node.appendChild(appExtNode);
|
||||||
}
|
}
|
||||||
|
@ -246,7 +246,7 @@ public class GIFImageMetadata extends GIFMetadata {
|
||||||
for (int i = 0; i < numComments; i++) {
|
for (int i = 0; i < numComments; i++) {
|
||||||
IIOMetadataNode commentNode =
|
IIOMetadataNode commentNode =
|
||||||
new IIOMetadataNode("CommentExtension");
|
new IIOMetadataNode("CommentExtension");
|
||||||
byte[] comment = (byte[])comments.get(i);
|
byte[] comment = comments.get(i);
|
||||||
commentNode.setAttribute("value", toISO8859(comment));
|
commentNode.setAttribute("value", toISO8859(comment));
|
||||||
node.appendChild(commentNode);
|
node.appendChild(commentNode);
|
||||||
}
|
}
|
||||||
|
@ -374,7 +374,7 @@ public class GIFImageMetadata extends GIFMetadata {
|
||||||
if (comments == null) {
|
if (comments == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Iterator commentIter = comments.iterator();
|
Iterator<byte[]> commentIter = comments.iterator();
|
||||||
if (!commentIter.hasNext()) {
|
if (!commentIter.hasNext()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -383,7 +383,7 @@ public class GIFImageMetadata extends GIFMetadata {
|
||||||
IIOMetadataNode node = null; // scratch node
|
IIOMetadataNode node = null; // scratch node
|
||||||
|
|
||||||
while (commentIter.hasNext()) {
|
while (commentIter.hasNext()) {
|
||||||
byte[] comment = (byte[])commentIter.next();
|
byte[] comment = commentIter.next();
|
||||||
String s = null;
|
String s = null;
|
||||||
try {
|
try {
|
||||||
s = new String(comment, "ISO-8859-1");
|
s = new String(comment, "ISO-8859-1");
|
||||||
|
|
|
@ -72,7 +72,7 @@ public class GIFImageReader extends ImageReader {
|
||||||
// A List of Longs indicating the stream positions of the
|
// A List of Longs indicating the stream positions of the
|
||||||
// start of the metadata for each image. Entries are added
|
// start of the metadata for each image. Entries are added
|
||||||
// as needed.
|
// as needed.
|
||||||
List imageStartPosition = new ArrayList();
|
List<Long> imageStartPosition = new ArrayList<>();
|
||||||
|
|
||||||
// Length of metadata for image at 'currIndex', valid only if
|
// Length of metadata for image at 'currIndex', valid only if
|
||||||
// imageMetadata != null.
|
// imageMetadata != null.
|
||||||
|
@ -227,7 +227,8 @@ public class GIFImageReader extends ImageReader {
|
||||||
return new ImageTypeSpecifier(colorModel, sampleModel);
|
return new ImageTypeSpecifier(colorModel, sampleModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator getImageTypes(int imageIndex) throws IIOException {
|
public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex)
|
||||||
|
throws IIOException {
|
||||||
checkIndex(imageIndex);
|
checkIndex(imageIndex);
|
||||||
|
|
||||||
int index = locateImage(imageIndex);
|
int index = locateImage(imageIndex);
|
||||||
|
@ -236,7 +237,7 @@ public class GIFImageReader extends ImageReader {
|
||||||
}
|
}
|
||||||
readMetadata();
|
readMetadata();
|
||||||
|
|
||||||
List l = new ArrayList(1);
|
List<ImageTypeSpecifier> l = new ArrayList<>(1);
|
||||||
|
|
||||||
byte[] colorTable;
|
byte[] colorTable;
|
||||||
if (imageMetadata.localColorTable != null) {
|
if (imageMetadata.localColorTable != null) {
|
||||||
|
@ -605,7 +606,7 @@ public class GIFImageReader extends ImageReader {
|
||||||
int index = Math.min(imageIndex, imageStartPosition.size() - 1);
|
int index = Math.min(imageIndex, imageStartPosition.size() - 1);
|
||||||
|
|
||||||
// Seek to that position
|
// Seek to that position
|
||||||
Long l = (Long)imageStartPosition.get(index);
|
Long l = imageStartPosition.get(index);
|
||||||
stream.seek(l.longValue());
|
stream.seek(l.longValue());
|
||||||
|
|
||||||
// Skip images until at desired index or last image found
|
// Skip images until at desired index or last image found
|
||||||
|
@ -731,7 +732,7 @@ public class GIFImageReader extends ImageReader {
|
||||||
} else if (label == 0xfe) { // Comment extension
|
} else if (label == 0xfe) { // Comment extension
|
||||||
byte[] comment = concatenateBlocks();
|
byte[] comment = concatenateBlocks();
|
||||||
if (imageMetadata.comments == null) {
|
if (imageMetadata.comments == null) {
|
||||||
imageMetadata.comments = new ArrayList();
|
imageMetadata.comments = new ArrayList<>();
|
||||||
}
|
}
|
||||||
imageMetadata.comments.add(comment);
|
imageMetadata.comments.add(comment);
|
||||||
} else if (label == 0xff) { // Application extension
|
} else if (label == 0xff) { // Application extension
|
||||||
|
@ -762,10 +763,10 @@ public class GIFImageReader extends ImageReader {
|
||||||
|
|
||||||
// Init lists if necessary
|
// Init lists if necessary
|
||||||
if (imageMetadata.applicationIDs == null) {
|
if (imageMetadata.applicationIDs == null) {
|
||||||
imageMetadata.applicationIDs = new ArrayList();
|
imageMetadata.applicationIDs = new ArrayList<>();
|
||||||
imageMetadata.authenticationCodes =
|
imageMetadata.authenticationCodes =
|
||||||
new ArrayList();
|
new ArrayList<>();
|
||||||
imageMetadata.applicationData = new ArrayList();
|
imageMetadata.applicationData = new ArrayList<>();
|
||||||
}
|
}
|
||||||
imageMetadata.applicationIDs.add(applicationID);
|
imageMetadata.applicationIDs.add(applicationID);
|
||||||
imageMetadata.authenticationCodes.add(authCode);
|
imageMetadata.authenticationCodes.add(authCode);
|
||||||
|
@ -868,7 +869,7 @@ public class GIFImageReader extends ImageReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the destination image
|
// Initialize the destination image
|
||||||
Iterator imageTypes = getImageTypes(imageIndex);
|
Iterator<ImageTypeSpecifier> imageTypes = getImageTypes(imageIndex);
|
||||||
this.theImage = getDestination(param,
|
this.theImage = getDestination(param,
|
||||||
imageTypes,
|
imageTypes,
|
||||||
imageMetadata.imageWidth,
|
imageMetadata.imageWidth,
|
||||||
|
@ -1031,7 +1032,7 @@ public class GIFImageReader extends ImageReader {
|
||||||
streamMetadata = null;
|
streamMetadata = null;
|
||||||
currIndex = -1;
|
currIndex = -1;
|
||||||
imageMetadata = null;
|
imageMetadata = null;
|
||||||
imageStartPosition = new ArrayList();
|
imageStartPosition = new ArrayList<>();
|
||||||
numImages = -1;
|
numImages = -1;
|
||||||
|
|
||||||
// No need to reinitialize 'block'
|
// No need to reinitialize 'block'
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class GIFImageReaderSpi extends ImageReaderSpi {
|
||||||
suffixes,
|
suffixes,
|
||||||
MIMETypes,
|
MIMETypes,
|
||||||
readerClassName,
|
readerClassName,
|
||||||
new Class[] { ImageInputStream.class },
|
new Class<?>[] { ImageInputStream.class },
|
||||||
writerSpiNames,
|
writerSpiNames,
|
||||||
true,
|
true,
|
||||||
GIFStreamMetadata.nativeMetadataFormatName,
|
GIFStreamMetadata.nativeMetadataFormatName,
|
||||||
|
|
|
@ -1204,9 +1204,9 @@ public class GIFImageWriter extends ImageWriter {
|
||||||
private void writeApplicationExtension(GIFWritableImageMetadata im)
|
private void writeApplicationExtension(GIFWritableImageMetadata im)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
if (im.applicationIDs != null) {
|
if (im.applicationIDs != null) {
|
||||||
Iterator iterIDs = im.applicationIDs.iterator();
|
Iterator<byte[]> iterIDs = im.applicationIDs.iterator();
|
||||||
Iterator iterCodes = im.authenticationCodes.iterator();
|
Iterator<byte[]> iterCodes = im.authenticationCodes.iterator();
|
||||||
Iterator iterData = im.applicationData.iterator();
|
Iterator<byte[]> iterData = im.applicationData.iterator();
|
||||||
|
|
||||||
while (iterIDs.hasNext()) {
|
while (iterIDs.hasNext()) {
|
||||||
try {
|
try {
|
||||||
|
@ -1214,10 +1214,10 @@ public class GIFImageWriter extends ImageWriter {
|
||||||
stream.write(0xff);
|
stream.write(0xff);
|
||||||
|
|
||||||
stream.write(11);
|
stream.write(11);
|
||||||
stream.write((byte[])iterIDs.next(), 0, 8);
|
stream.write(iterIDs.next(), 0, 8);
|
||||||
stream.write((byte[])iterCodes.next(), 0, 3);
|
stream.write(iterCodes.next(), 0, 3);
|
||||||
|
|
||||||
writeBlocks((byte[])iterData.next());
|
writeBlocks(iterData.next());
|
||||||
|
|
||||||
stream.write(0x00);
|
stream.write(0x00);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -1231,11 +1231,11 @@ public class GIFImageWriter extends ImageWriter {
|
||||||
throws IOException {
|
throws IOException {
|
||||||
if (im.comments != null) {
|
if (im.comments != null) {
|
||||||
try {
|
try {
|
||||||
Iterator iter = im.comments.iterator();
|
Iterator<byte[]> iter = im.comments.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
stream.write(0x21);
|
stream.write(0x21);
|
||||||
stream.write(0xfe);
|
stream.write(0xfe);
|
||||||
writeBlocks((byte[])iter.next());
|
writeBlocks(iter.next());
|
||||||
stream.write(0x00);
|
stream.write(0x00);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class GIFImageWriterSpi extends ImageWriterSpi {
|
||||||
suffixes,
|
suffixes,
|
||||||
MIMETypes,
|
MIMETypes,
|
||||||
writerClassName,
|
writerClassName,
|
||||||
new Class[] { ImageOutputStream.class },
|
new Class<?>[] { ImageOutputStream.class },
|
||||||
readerSpiNames,
|
readerSpiNames,
|
||||||
true,
|
true,
|
||||||
GIFWritableStreamMetadata.NATIVE_FORMAT_NAME,
|
GIFWritableStreamMetadata.NATIVE_FORMAT_NAME,
|
||||||
|
|
|
@ -258,14 +258,14 @@ class GIFWritableImageMetadata extends GIFImageMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (applicationIDs == null) {
|
if (applicationIDs == null) {
|
||||||
applicationIDs = new ArrayList();
|
applicationIDs = new ArrayList<>();
|
||||||
authenticationCodes = new ArrayList();
|
authenticationCodes = new ArrayList<>();
|
||||||
applicationData = new ArrayList();
|
applicationData = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
applicationIDs.add(fromISO8859(applicationIDString));
|
applicationIDs.add(fromISO8859(applicationIDString));
|
||||||
authenticationCodes.add(fromISO8859(authenticationCodeString));
|
authenticationCodes.add(fromISO8859(authenticationCodeString));
|
||||||
applicationData.add(applicationExtensionData);
|
applicationData.add((byte[]) applicationExtensionData);
|
||||||
} else if (name.equals("CommentExtensions")) {
|
} else if (name.equals("CommentExtensions")) {
|
||||||
Node commentExtension = node.getFirstChild();
|
Node commentExtension = node.getFirstChild();
|
||||||
if (commentExtension != null) {
|
if (commentExtension != null) {
|
||||||
|
@ -276,7 +276,7 @@ class GIFWritableImageMetadata extends GIFImageMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (comments == null) {
|
if (comments == null) {
|
||||||
comments = new ArrayList();
|
comments = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
String comment =
|
String comment =
|
||||||
|
@ -367,7 +367,7 @@ class GIFWritableImageMetadata extends GIFImageMetadata {
|
||||||
String value = getAttribute(childNode, "value");
|
String value = getAttribute(childNode, "value");
|
||||||
byte[] comment = fromISO8859(value);
|
byte[] comment = fromISO8859(value);
|
||||||
if (comments == null) {
|
if (comments == null) {
|
||||||
comments = new ArrayList();
|
comments = new ArrayList<>();
|
||||||
}
|
}
|
||||||
comments.add(comment);
|
comments.add(comment);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@ import org.w3c.dom.NamedNodeMap;
|
||||||
* A DHT (Define Huffman Table) marker segment.
|
* A DHT (Define Huffman Table) marker segment.
|
||||||
*/
|
*/
|
||||||
class DHTMarkerSegment extends MarkerSegment {
|
class DHTMarkerSegment extends MarkerSegment {
|
||||||
List tables = new ArrayList();
|
List<Htable> tables = new ArrayList<>();
|
||||||
|
|
||||||
DHTMarkerSegment(boolean needFour) {
|
DHTMarkerSegment(boolean needFour) {
|
||||||
super(JPEG.DHT);
|
super(JPEG.DHT);
|
||||||
|
@ -93,11 +93,11 @@ class DHTMarkerSegment extends MarkerSegment {
|
||||||
|
|
||||||
protected Object clone() {
|
protected Object clone() {
|
||||||
DHTMarkerSegment newGuy = (DHTMarkerSegment) super.clone();
|
DHTMarkerSegment newGuy = (DHTMarkerSegment) super.clone();
|
||||||
newGuy.tables = new ArrayList(tables.size());
|
newGuy.tables = new ArrayList<>(tables.size());
|
||||||
Iterator iter = tables.iterator();
|
Iterator<Htable> iter = tables.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
Htable table = (Htable) iter.next();
|
Htable table = iter.next();
|
||||||
newGuy.tables.add(table.clone());
|
newGuy.tables.add((Htable) table.clone());
|
||||||
}
|
}
|
||||||
return newGuy;
|
return newGuy;
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ class DHTMarkerSegment extends MarkerSegment {
|
||||||
IIOMetadataNode getNativeNode() {
|
IIOMetadataNode getNativeNode() {
|
||||||
IIOMetadataNode node = new IIOMetadataNode("dht");
|
IIOMetadataNode node = new IIOMetadataNode("dht");
|
||||||
for (int i= 0; i<tables.size(); i++) {
|
for (int i= 0; i<tables.size(); i++) {
|
||||||
Htable table = (Htable) tables.get(i);
|
Htable table = tables.get(i);
|
||||||
node.appendChild(table.getNativeNode());
|
node.appendChild(table.getNativeNode());
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
|
@ -124,7 +124,7 @@ class DHTMarkerSegment extends MarkerSegment {
|
||||||
System.out.println("Num tables: "
|
System.out.println("Num tables: "
|
||||||
+ Integer.toString(tables.size()));
|
+ Integer.toString(tables.size()));
|
||||||
for (int i= 0; i<tables.size(); i++) {
|
for (int i= 0; i<tables.size(); i++) {
|
||||||
Htable table = (Htable) tables.get(i);
|
Htable table = tables.get(i);
|
||||||
table.print();
|
table.print();
|
||||||
}
|
}
|
||||||
System.out.println();
|
System.out.println();
|
||||||
|
|
|
@ -44,7 +44,7 @@ import org.w3c.dom.NamedNodeMap;
|
||||||
* A DQT (Define Quantization Table) marker segment.
|
* A DQT (Define Quantization Table) marker segment.
|
||||||
*/
|
*/
|
||||||
class DQTMarkerSegment extends MarkerSegment {
|
class DQTMarkerSegment extends MarkerSegment {
|
||||||
List tables = new ArrayList(); // Could be 1 to 4
|
List<Qtable> tables = new ArrayList<>(); // Could be 1 to 4
|
||||||
|
|
||||||
DQTMarkerSegment(float quality, boolean needTwo) {
|
DQTMarkerSegment(float quality, boolean needTwo) {
|
||||||
super(JPEG.DQT);
|
super(JPEG.DQT);
|
||||||
|
@ -86,11 +86,11 @@ class DQTMarkerSegment extends MarkerSegment {
|
||||||
|
|
||||||
protected Object clone() {
|
protected Object clone() {
|
||||||
DQTMarkerSegment newGuy = (DQTMarkerSegment) super.clone();
|
DQTMarkerSegment newGuy = (DQTMarkerSegment) super.clone();
|
||||||
newGuy.tables = new ArrayList(tables.size());
|
newGuy.tables = new ArrayList<>(tables.size());
|
||||||
Iterator iter = tables.iterator();
|
Iterator<Qtable> iter = tables.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
Qtable table = (Qtable) iter.next();
|
Qtable table = iter.next();
|
||||||
newGuy.tables.add(table.clone());
|
newGuy.tables.add((Qtable) table.clone());
|
||||||
}
|
}
|
||||||
return newGuy;
|
return newGuy;
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ class DQTMarkerSegment extends MarkerSegment {
|
||||||
IIOMetadataNode getNativeNode() {
|
IIOMetadataNode getNativeNode() {
|
||||||
IIOMetadataNode node = new IIOMetadataNode("dqt");
|
IIOMetadataNode node = new IIOMetadataNode("dqt");
|
||||||
for (int i= 0; i<tables.size(); i++) {
|
for (int i= 0; i<tables.size(); i++) {
|
||||||
Qtable table = (Qtable) tables.get(i);
|
Qtable table = tables.get(i);
|
||||||
node.appendChild(table.getNativeNode());
|
node.appendChild(table.getNativeNode());
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
|
@ -117,7 +117,7 @@ class DQTMarkerSegment extends MarkerSegment {
|
||||||
System.out.println("Num tables: "
|
System.out.println("Num tables: "
|
||||||
+ Integer.toString(tables.size()));
|
+ Integer.toString(tables.size()));
|
||||||
for (int i= 0; i<tables.size(); i++) {
|
for (int i= 0; i<tables.size(); i++) {
|
||||||
Qtable table = (Qtable) tables.get(i);
|
Qtable table = tables.get(i);
|
||||||
table.print();
|
table.print();
|
||||||
}
|
}
|
||||||
System.out.println();
|
System.out.println();
|
||||||
|
|
|
@ -76,7 +76,7 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
int thumbWidth;
|
int thumbWidth;
|
||||||
int thumbHeight;
|
int thumbHeight;
|
||||||
JFIFThumbRGB thumb = null; // If present
|
JFIFThumbRGB thumb = null; // If present
|
||||||
ArrayList extSegments = new ArrayList();
|
ArrayList<JFIFExtensionMarkerSegment> extSegments = new ArrayList<>();
|
||||||
ICCMarkerSegment iccSegment = null; // optional ICC
|
ICCMarkerSegment iccSegment = null; // optional ICC
|
||||||
private static final int THUMB_JPEG = 0x10;
|
private static final int THUMB_JPEG = 0x10;
|
||||||
private static final int THUMB_PALETTE = 0x11;
|
private static final int THUMB_PALETTE = 0x11;
|
||||||
|
@ -157,11 +157,11 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
protected Object clone() {
|
protected Object clone() {
|
||||||
JFIFMarkerSegment newGuy = (JFIFMarkerSegment) super.clone();
|
JFIFMarkerSegment newGuy = (JFIFMarkerSegment) super.clone();
|
||||||
if (!extSegments.isEmpty()) { // Clone the list with a deep copy
|
if (!extSegments.isEmpty()) { // Clone the list with a deep copy
|
||||||
newGuy.extSegments = new ArrayList();
|
newGuy.extSegments = new ArrayList<>();
|
||||||
for (Iterator iter = extSegments.iterator(); iter.hasNext();) {
|
for (Iterator<JFIFExtensionMarkerSegment> iter =
|
||||||
JFIFExtensionMarkerSegment jfxx =
|
extSegments.iterator(); iter.hasNext();) {
|
||||||
(JFIFExtensionMarkerSegment) iter.next();
|
JFIFExtensionMarkerSegment jfxx = iter.next();
|
||||||
newGuy.extSegments.add(jfxx.clone());
|
newGuy.extSegments.add((JFIFExtensionMarkerSegment) jfxx.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (iccSegment != null) {
|
if (iccSegment != null) {
|
||||||
|
@ -230,9 +230,9 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
if (!extSegments.isEmpty()) {
|
if (!extSegments.isEmpty()) {
|
||||||
IIOMetadataNode JFXXnode = new IIOMetadataNode("JFXX");
|
IIOMetadataNode JFXXnode = new IIOMetadataNode("JFXX");
|
||||||
node.appendChild(JFXXnode);
|
node.appendChild(JFXXnode);
|
||||||
for (Iterator iter = extSegments.iterator(); iter.hasNext();) {
|
for (Iterator<JFIFExtensionMarkerSegment> iter =
|
||||||
JFIFExtensionMarkerSegment seg =
|
extSegments.iterator(); iter.hasNext();) {
|
||||||
(JFIFExtensionMarkerSegment) iter.next();
|
JFIFExtensionMarkerSegment seg = iter.next();
|
||||||
JFXXnode.appendChild(seg.getNativeNode());
|
JFXXnode.appendChild(seg.getNativeNode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -312,8 +312,7 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
}
|
}
|
||||||
index--;
|
index--;
|
||||||
}
|
}
|
||||||
JFIFExtensionMarkerSegment jfxx =
|
JFIFExtensionMarkerSegment jfxx = extSegments.get(index);
|
||||||
(JFIFExtensionMarkerSegment) extSegments.get(index);
|
|
||||||
return jfxx.thumb.getWidth();
|
return jfxx.thumb.getWidth();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,8 +323,7 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
}
|
}
|
||||||
index--;
|
index--;
|
||||||
}
|
}
|
||||||
JFIFExtensionMarkerSegment jfxx =
|
JFIFExtensionMarkerSegment jfxx = extSegments.get(index);
|
||||||
(JFIFExtensionMarkerSegment) extSegments.get(index);
|
|
||||||
return jfxx.thumb.getHeight();
|
return jfxx.thumb.getHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -340,8 +338,7 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
if (thumb != null) {
|
if (thumb != null) {
|
||||||
index--;
|
index--;
|
||||||
}
|
}
|
||||||
JFIFExtensionMarkerSegment jfxx =
|
JFIFExtensionMarkerSegment jfxx = extSegments.get(index);
|
||||||
(JFIFExtensionMarkerSegment) extSegments.get(index);
|
|
||||||
ret = jfxx.thumb.getThumbnail(iis, reader);
|
ret = jfxx.thumb.getThumbnail(iis, reader);
|
||||||
}
|
}
|
||||||
reader.thumbnailComplete();
|
reader.thumbnailComplete();
|
||||||
|
@ -436,13 +433,13 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
* default encoding is used for the extra thumbnails.
|
* default encoding is used for the extra thumbnails.
|
||||||
*/
|
*/
|
||||||
void writeWithThumbs(ImageOutputStream ios,
|
void writeWithThumbs(ImageOutputStream ios,
|
||||||
List thumbnails,
|
List<? extends BufferedImage> thumbnails,
|
||||||
JPEGImageWriter writer) throws IOException {
|
JPEGImageWriter writer) throws IOException {
|
||||||
if (thumbnails != null) {
|
if (thumbnails != null) {
|
||||||
JFIFExtensionMarkerSegment jfxx = null;
|
JFIFExtensionMarkerSegment jfxx = null;
|
||||||
if (thumbnails.size() == 1) {
|
if (thumbnails.size() == 1) {
|
||||||
if (!extSegments.isEmpty()) {
|
if (!extSegments.isEmpty()) {
|
||||||
jfxx = (JFIFExtensionMarkerSegment) extSegments.get(0);
|
jfxx = extSegments.get(0);
|
||||||
}
|
}
|
||||||
writeThumb(ios,
|
writeThumb(ios,
|
||||||
(BufferedImage) thumbnails.get(0),
|
(BufferedImage) thumbnails.get(0),
|
||||||
|
@ -456,7 +453,7 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
for (int i = 0; i < thumbnails.size(); i++) {
|
for (int i = 0; i < thumbnails.size(); i++) {
|
||||||
jfxx = null;
|
jfxx = null;
|
||||||
if (i < extSegments.size()) {
|
if (i < extSegments.size()) {
|
||||||
jfxx = (JFIFExtensionMarkerSegment) extSegments.get(i);
|
jfxx = extSegments.get(i);
|
||||||
}
|
}
|
||||||
writeThumb(ios,
|
writeThumb(ios,
|
||||||
(BufferedImage) thumbnails.get(i),
|
(BufferedImage) thumbnails.get(i),
|
||||||
|
@ -605,7 +602,7 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
* marker segments as necessary.
|
* marker segments as necessary.
|
||||||
*/
|
*/
|
||||||
static void writeDefaultJFIF(ImageOutputStream ios,
|
static void writeDefaultJFIF(ImageOutputStream ios,
|
||||||
List thumbnails,
|
List<? extends BufferedImage> thumbnails,
|
||||||
ICC_Profile iccProfile,
|
ICC_Profile iccProfile,
|
||||||
JPEGImageWriter writer)
|
JPEGImageWriter writer)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
@ -637,9 +634,9 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
System.out.print("Thumbnail Height: ");
|
System.out.print("Thumbnail Height: ");
|
||||||
System.out.println(thumbHeight);
|
System.out.println(thumbHeight);
|
||||||
if (!extSegments.isEmpty()) {
|
if (!extSegments.isEmpty()) {
|
||||||
for (Iterator iter = extSegments.iterator(); iter.hasNext();) {
|
for (Iterator<JFIFExtensionMarkerSegment> iter =
|
||||||
JFIFExtensionMarkerSegment extSegment =
|
extSegments.iterator(); iter.hasNext();) {
|
||||||
(JFIFExtensionMarkerSegment) iter.next();
|
JFIFExtensionMarkerSegment extSegment = iter.next();
|
||||||
extSegment.print();
|
extSegment.print();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1373,7 +1370,7 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
* combining chunks as necessary.
|
* combining chunks as necessary.
|
||||||
*/
|
*/
|
||||||
class ICCMarkerSegment extends MarkerSegment {
|
class ICCMarkerSegment extends MarkerSegment {
|
||||||
ArrayList chunks = null;
|
ArrayList<byte[]> chunks = null;
|
||||||
byte [] profile = null; // The complete profile when it's fully read
|
byte [] profile = null; // The complete profile when it's fully read
|
||||||
// May remain null when writing
|
// May remain null when writing
|
||||||
private static final int ID_SIZE = 12;
|
private static final int ID_SIZE = 12;
|
||||||
|
@ -1428,7 +1425,7 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
// two chunk numbering bytes
|
// two chunk numbering bytes
|
||||||
length -= 2;
|
length -= 2;
|
||||||
buffer.readData(profileData);
|
buffer.readData(profileData);
|
||||||
chunks = new ArrayList();
|
chunks = new ArrayList<>();
|
||||||
chunks.add(profileData);
|
chunks.add(profileData);
|
||||||
chunksRead = 1;
|
chunksRead = 1;
|
||||||
inICC = true;
|
inICC = true;
|
||||||
|
@ -1518,7 +1515,7 @@ class JFIFMarkerSegment extends MarkerSegment {
|
||||||
for (int i = 1; i <= numChunks; i++) {
|
for (int i = 1; i <= numChunks; i++) {
|
||||||
boolean foundIt = false;
|
boolean foundIt = false;
|
||||||
for (int chunk = 0; chunk < chunks.size(); chunk++) {
|
for (int chunk = 0; chunk < chunks.size(); chunk++) {
|
||||||
byte [] chunkData = (byte []) chunks.get(chunk);
|
byte [] chunkData = chunks.get(chunk);
|
||||||
if (chunkData[0] == i) { // Right one
|
if (chunkData[0] == i) { // Right one
|
||||||
System.arraycopy(chunkData, 2,
|
System.arraycopy(chunkData, 2,
|
||||||
profile, index,
|
profile, index,
|
||||||
|
|
|
@ -82,7 +82,7 @@ public class JPEGImageMetadataFormat extends JPEGMetadataFormat {
|
||||||
"2",
|
"2",
|
||||||
"0", "255",
|
"0", "255",
|
||||||
true, true);
|
true, true);
|
||||||
List resUnits = new ArrayList();
|
List<String> resUnits = new ArrayList<>();
|
||||||
resUnits.add("0");
|
resUnits.add("0");
|
||||||
resUnits.add("1");
|
resUnits.add("1");
|
||||||
resUnits.add("2");
|
resUnits.add("2");
|
||||||
|
@ -125,7 +125,7 @@ public class JPEGImageMetadataFormat extends JPEGMetadataFormat {
|
||||||
addElement("JFIFthumbPalette", "app0JFXX", CHILD_POLICY_EMPTY);
|
addElement("JFIFthumbPalette", "app0JFXX", CHILD_POLICY_EMPTY);
|
||||||
addElement("JFIFthumbRGB", "app0JFXX", CHILD_POLICY_EMPTY);
|
addElement("JFIFthumbRGB", "app0JFXX", CHILD_POLICY_EMPTY);
|
||||||
|
|
||||||
List codes = new ArrayList();
|
List<String> codes = new ArrayList<>();
|
||||||
codes.add("16"); // Hex 10
|
codes.add("16"); // Hex 10
|
||||||
codes.add("17"); // Hex 11
|
codes.add("17"); // Hex 11
|
||||||
codes.add("19"); // Hex 13
|
codes.add("19"); // Hex 13
|
||||||
|
@ -192,7 +192,7 @@ public class JPEGImageMetadataFormat extends JPEGMetadataFormat {
|
||||||
"0", "65535",
|
"0", "65535",
|
||||||
true, true);
|
true, true);
|
||||||
|
|
||||||
List transforms = new ArrayList();
|
List<String> transforms = new ArrayList<>();
|
||||||
transforms.add("0");
|
transforms.add("0");
|
||||||
transforms.add("1");
|
transforms.add("1");
|
||||||
transforms.add("2");
|
transforms.add("2");
|
||||||
|
@ -205,7 +205,7 @@ public class JPEGImageMetadataFormat extends JPEGMetadataFormat {
|
||||||
|
|
||||||
addElement("componentSpec", "sof", CHILD_POLICY_EMPTY);
|
addElement("componentSpec", "sof", CHILD_POLICY_EMPTY);
|
||||||
|
|
||||||
List procs = new ArrayList();
|
List<String> procs = new ArrayList<>();
|
||||||
procs.add("0");
|
procs.add("0");
|
||||||
procs.add("1");
|
procs.add("1");
|
||||||
procs.add("2");
|
procs.add("2");
|
||||||
|
@ -234,7 +234,7 @@ public class JPEGImageMetadataFormat extends JPEGMetadataFormat {
|
||||||
null,
|
null,
|
||||||
"0", "65535",
|
"0", "65535",
|
||||||
true, true);
|
true, true);
|
||||||
List comps = new ArrayList();
|
List<String> comps = new ArrayList<>();
|
||||||
comps.add("1");
|
comps.add("1");
|
||||||
comps.add("2");
|
comps.add("2");
|
||||||
comps.add("3");
|
comps.add("3");
|
||||||
|
@ -267,7 +267,7 @@ public class JPEGImageMetadataFormat extends JPEGMetadataFormat {
|
||||||
null,
|
null,
|
||||||
"1", "255",
|
"1", "255",
|
||||||
true, true);
|
true, true);
|
||||||
List tabids = new ArrayList();
|
List<String> tabids = new ArrayList<>();
|
||||||
tabids.add("0");
|
tabids.add("0");
|
||||||
tabids.add("1");
|
tabids.add("1");
|
||||||
tabids.add("2");
|
tabids.add("2");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -78,7 +78,7 @@ public class JPEGImageReader extends ImageReader {
|
||||||
* List of stream positions for images, reinitialized every time
|
* List of stream positions for images, reinitialized every time
|
||||||
* a new input source is set.
|
* a new input source is set.
|
||||||
*/
|
*/
|
||||||
private List imagePositions = null;
|
private List<Long> imagePositions = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of images in the stream, or 0.
|
* The number of images in the stream, or 0.
|
||||||
|
@ -223,9 +223,9 @@ public class JPEGImageReader extends ImageReader {
|
||||||
private DisposerRecord disposerRecord;
|
private DisposerRecord disposerRecord;
|
||||||
|
|
||||||
/** Sets up static C structures. */
|
/** Sets up static C structures. */
|
||||||
private static native void initReaderIDs(Class iisClass,
|
private static native void initReaderIDs(Class<?> iisClass,
|
||||||
Class qTableClass,
|
Class<?> qTableClass,
|
||||||
Class huffClass);
|
Class<?> huffClass);
|
||||||
|
|
||||||
public JPEGImageReader(ImageReaderSpi originator) {
|
public JPEGImageReader(ImageReaderSpi originator) {
|
||||||
super(originator);
|
super(originator);
|
||||||
|
@ -375,7 +375,7 @@ public class JPEGImageReader extends ImageReader {
|
||||||
currentImage = 0;
|
currentImage = 0;
|
||||||
}
|
}
|
||||||
if (seekForwardOnly) {
|
if (seekForwardOnly) {
|
||||||
Long pos = (Long) imagePositions.get(imagePositions.size()-1);
|
Long pos = imagePositions.get(imagePositions.size()-1);
|
||||||
iis.flushBefore(pos.longValue());
|
iis.flushBefore(pos.longValue());
|
||||||
}
|
}
|
||||||
tablesOnlyChecked = true;
|
tablesOnlyChecked = true;
|
||||||
|
@ -392,6 +392,7 @@ public class JPEGImageReader extends ImageReader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("fallthrough")
|
||||||
private int getNumImagesOnThread(boolean allowSearch)
|
private int getNumImagesOnThread(boolean allowSearch)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
if (numImages != 0) {
|
if (numImages != 0) {
|
||||||
|
@ -481,12 +482,12 @@ public class JPEGImageReader extends ImageReader {
|
||||||
checkTablesOnly();
|
checkTablesOnly();
|
||||||
}
|
}
|
||||||
if (imageIndex < imagePositions.size()) {
|
if (imageIndex < imagePositions.size()) {
|
||||||
iis.seek(((Long)(imagePositions.get(imageIndex))).longValue());
|
iis.seek(imagePositions.get(imageIndex).longValue());
|
||||||
} else {
|
} else {
|
||||||
// read to start of image, saving positions
|
// read to start of image, saving positions
|
||||||
// First seek to the last position we already have, and skip the
|
// First seek to the last position we already have, and skip the
|
||||||
// entire image
|
// entire image
|
||||||
Long pos = (Long) imagePositions.get(imagePositions.size()-1);
|
Long pos = imagePositions.get(imagePositions.size()-1);
|
||||||
iis.seek(pos.longValue());
|
iis.seek(pos.longValue());
|
||||||
skipImage();
|
skipImage();
|
||||||
// Now add all intervening positions, skipping images
|
// Now add all intervening positions, skipping images
|
||||||
|
@ -766,7 +767,7 @@ public class JPEGImageReader extends ImageReader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator getImageTypes(int imageIndex)
|
public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
setThreadLock();
|
setThreadLock();
|
||||||
try {
|
try {
|
||||||
|
@ -776,7 +777,7 @@ public class JPEGImageReader extends ImageReader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Iterator getImageTypesOnThread(int imageIndex)
|
private Iterator<ImageTypeSpecifier> getImageTypesOnThread(int imageIndex)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
if (currentImage != imageIndex) {
|
if (currentImage != imageIndex) {
|
||||||
cbLock.check();
|
cbLock.check();
|
||||||
|
@ -1063,7 +1064,7 @@ public class JPEGImageReader extends ImageReader {
|
||||||
|
|
||||||
if (!wantRaster){
|
if (!wantRaster){
|
||||||
// Can we read this image?
|
// Can we read this image?
|
||||||
Iterator imageTypes = getImageTypes(imageIndex);
|
Iterator<ImageTypeSpecifier> imageTypes = getImageTypes(imageIndex);
|
||||||
if (imageTypes.hasNext() == false) {
|
if (imageTypes.hasNext() == false) {
|
||||||
throw new IIOException("Unsupported Image Type");
|
throw new IIOException("Unsupported Image Type");
|
||||||
}
|
}
|
||||||
|
@ -1187,8 +1188,8 @@ public class JPEGImageReader extends ImageReader {
|
||||||
// and set knownPassCount
|
// and set knownPassCount
|
||||||
if (imageIndex == imageMetadataIndex) { // We have metadata
|
if (imageIndex == imageMetadataIndex) { // We have metadata
|
||||||
knownPassCount = 0;
|
knownPassCount = 0;
|
||||||
for (Iterator iter = imageMetadata.markerSequence.iterator();
|
for (Iterator<MarkerSegment> iter =
|
||||||
iter.hasNext();) {
|
imageMetadata.markerSequence.iterator(); iter.hasNext();) {
|
||||||
if (iter.next() instanceof SOSMarkerSegment) {
|
if (iter.next() instanceof SOSMarkerSegment) {
|
||||||
knownPassCount++;
|
knownPassCount++;
|
||||||
}
|
}
|
||||||
|
@ -1565,7 +1566,7 @@ public class JPEGImageReader extends ImageReader {
|
||||||
|
|
||||||
// reset local Java structures
|
// reset local Java structures
|
||||||
numImages = 0;
|
numImages = 0;
|
||||||
imagePositions = new ArrayList();
|
imagePositions = new ArrayList<>();
|
||||||
currentImage = -1;
|
currentImage = -1;
|
||||||
image = null;
|
image = null;
|
||||||
raster = null;
|
raster = null;
|
||||||
|
|
|
@ -46,7 +46,7 @@ public class JPEGImageReaderSpi extends ImageReaderSpi {
|
||||||
JPEG.suffixes,
|
JPEG.suffixes,
|
||||||
JPEG.MIMETypes,
|
JPEG.MIMETypes,
|
||||||
"com.sun.imageio.plugins.jpeg.JPEGImageReader",
|
"com.sun.imageio.plugins.jpeg.JPEGImageReader",
|
||||||
new Class[] { ImageInputStream.class },
|
new Class<?>[] { ImageInputStream.class },
|
||||||
writerSpiNames,
|
writerSpiNames,
|
||||||
true,
|
true,
|
||||||
JPEG.nativeStreamMetadataFormatName,
|
JPEG.nativeStreamMetadataFormatName,
|
||||||
|
|
|
@ -107,7 +107,7 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
/**
|
/**
|
||||||
* If there are thumbnails to be written, this is the list.
|
* If there are thumbnails to be written, this is the list.
|
||||||
*/
|
*/
|
||||||
private List thumbnails = null;
|
private List<? extends BufferedImage> thumbnails = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If metadata should include an icc profile, store it here.
|
* If metadata should include an icc profile, store it here.
|
||||||
|
@ -1394,14 +1394,14 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
*/
|
*/
|
||||||
private int [] collectScans(JPEGMetadata metadata,
|
private int [] collectScans(JPEGMetadata metadata,
|
||||||
SOFMarkerSegment sof) {
|
SOFMarkerSegment sof) {
|
||||||
List segments = new ArrayList();
|
List<SOSMarkerSegment> segments = new ArrayList<>();
|
||||||
int SCAN_SIZE = 9;
|
int SCAN_SIZE = 9;
|
||||||
int MAX_COMPS_PER_SCAN = 4;
|
int MAX_COMPS_PER_SCAN = 4;
|
||||||
for (Iterator iter = metadata.markerSequence.iterator();
|
for (Iterator<MarkerSegment> iter = metadata.markerSequence.iterator();
|
||||||
iter.hasNext();) {
|
iter.hasNext();) {
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof SOSMarkerSegment) {
|
if (seg instanceof SOSMarkerSegment) {
|
||||||
segments.add(seg);
|
segments.add((SOSMarkerSegment) seg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int [] retval = null;
|
int [] retval = null;
|
||||||
|
@ -1411,7 +1411,7 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
retval = new int [numScans*SCAN_SIZE];
|
retval = new int [numScans*SCAN_SIZE];
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (int i = 0; i < numScans; i++) {
|
for (int i = 0; i < numScans; i++) {
|
||||||
SOSMarkerSegment sos = (SOSMarkerSegment) segments.get(i);
|
SOSMarkerSegment sos = segments.get(i);
|
||||||
retval[index++] = sos.componentSpecs.length; // num comps
|
retval[index++] = sos.componentSpecs.length; // num comps
|
||||||
for (int j = 0; j < MAX_COMPS_PER_SCAN; j++) {
|
for (int j = 0; j < MAX_COMPS_PER_SCAN; j++) {
|
||||||
if (j < sos.componentSpecs.length) {
|
if (j < sos.componentSpecs.length) {
|
||||||
|
@ -1441,10 +1441,10 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
*/
|
*/
|
||||||
private JPEGQTable [] collectQTablesFromMetadata
|
private JPEGQTable [] collectQTablesFromMetadata
|
||||||
(JPEGMetadata metadata) {
|
(JPEGMetadata metadata) {
|
||||||
ArrayList tables = new ArrayList();
|
ArrayList<DQTMarkerSegment.Qtable> tables = new ArrayList<>();
|
||||||
Iterator iter = metadata.markerSequence.iterator();
|
Iterator<MarkerSegment> iter = metadata.markerSequence.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof DQTMarkerSegment) {
|
if (seg instanceof DQTMarkerSegment) {
|
||||||
DQTMarkerSegment dqt =
|
DQTMarkerSegment dqt =
|
||||||
(DQTMarkerSegment) seg;
|
(DQTMarkerSegment) seg;
|
||||||
|
@ -1456,7 +1456,7 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
retval = new JPEGQTable[tables.size()];
|
retval = new JPEGQTable[tables.size()];
|
||||||
for (int i = 0; i < retval.length; i++) {
|
for (int i = 0; i < retval.length; i++) {
|
||||||
retval[i] =
|
retval[i] =
|
||||||
new JPEGQTable(((DQTMarkerSegment.Qtable)tables.get(i)).data);
|
new JPEGQTable(tables.get(i).data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -1471,16 +1471,14 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
*/
|
*/
|
||||||
private JPEGHuffmanTable[] collectHTablesFromMetadata
|
private JPEGHuffmanTable[] collectHTablesFromMetadata
|
||||||
(JPEGMetadata metadata, boolean wantDC) throws IIOException {
|
(JPEGMetadata metadata, boolean wantDC) throws IIOException {
|
||||||
ArrayList tables = new ArrayList();
|
ArrayList<DHTMarkerSegment.Htable> tables = new ArrayList<>();
|
||||||
Iterator iter = metadata.markerSequence.iterator();
|
Iterator<MarkerSegment> iter = metadata.markerSequence.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof DHTMarkerSegment) {
|
if (seg instanceof DHTMarkerSegment) {
|
||||||
DHTMarkerSegment dht =
|
DHTMarkerSegment dht = (DHTMarkerSegment) seg;
|
||||||
(DHTMarkerSegment) seg;
|
|
||||||
for (int i = 0; i < dht.tables.size(); i++) {
|
for (int i = 0; i < dht.tables.size(); i++) {
|
||||||
DHTMarkerSegment.Htable htable =
|
DHTMarkerSegment.Htable htable = dht.tables.get(i);
|
||||||
(DHTMarkerSegment.Htable) dht.tables.get(i);
|
|
||||||
if (htable.tableClass == (wantDC ? 0 : 1)) {
|
if (htable.tableClass == (wantDC ? 0 : 1)) {
|
||||||
tables.add(htable);
|
tables.add(htable);
|
||||||
}
|
}
|
||||||
|
@ -1553,6 +1551,7 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
retval = JPEG.JCS_YCC;
|
retval = JPEG.JCS_YCC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case ColorSpace.TYPE_CMYK:
|
case ColorSpace.TYPE_CMYK:
|
||||||
retval = JPEG.JCS_CMYK;
|
retval = JPEG.JCS_CMYK;
|
||||||
break;
|
break;
|
||||||
|
@ -1592,6 +1591,7 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
retval = JPEG.JCS_YCC;
|
retval = JPEG.JCS_YCC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case ColorSpace.TYPE_CMYK:
|
case ColorSpace.TYPE_CMYK:
|
||||||
retval = JPEG.JCS_CMYK;
|
retval = JPEG.JCS_CMYK;
|
||||||
break;
|
break;
|
||||||
|
@ -1638,6 +1638,7 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
retval = JPEG.JCS_YCC;
|
retval = JPEG.JCS_YCC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case ColorSpace.TYPE_CMYK:
|
case ColorSpace.TYPE_CMYK:
|
||||||
retval = JPEG.JCS_YCCK;
|
retval = JPEG.JCS_YCCK;
|
||||||
break;
|
break;
|
||||||
|
@ -1662,8 +1663,8 @@ public class JPEGImageWriter extends ImageWriter {
|
||||||
////////////// Native methods and callbacks
|
////////////// Native methods and callbacks
|
||||||
|
|
||||||
/** Sets up static native structures. */
|
/** Sets up static native structures. */
|
||||||
private static native void initWriterIDs(Class qTableClass,
|
private static native void initWriterIDs(Class<?> qTableClass,
|
||||||
Class huffClass);
|
Class<?> huffClass);
|
||||||
|
|
||||||
/** Sets up per-writer native structure and returns a pointer to it. */
|
/** Sets up per-writer native structure and returns a pointer to it. */
|
||||||
private native long initJPEGImageWriter();
|
private native long initJPEGImageWriter();
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class JPEGImageWriterSpi extends ImageWriterSpi {
|
||||||
JPEG.suffixes,
|
JPEG.suffixes,
|
||||||
JPEG.MIMETypes,
|
JPEG.MIMETypes,
|
||||||
"com.sun.imageio.plugins.jpeg.JPEGImageWriter",
|
"com.sun.imageio.plugins.jpeg.JPEGImageWriter",
|
||||||
new Class[] { ImageOutputStream.class },
|
new Class<?>[] { ImageOutputStream.class },
|
||||||
readerSpiNames,
|
readerSpiNames,
|
||||||
true,
|
true,
|
||||||
JPEG.nativeStreamMetadataFormatName,
|
JPEG.nativeStreamMetadataFormatName,
|
||||||
|
|
|
@ -52,6 +52,7 @@ import java.io.IOException;
|
||||||
import java.awt.color.ICC_Profile;
|
import java.awt.color.ICC_Profile;
|
||||||
import java.awt.color.ICC_ColorSpace;
|
import java.awt.color.ICC_ColorSpace;
|
||||||
import java.awt.color.ColorSpace;
|
import java.awt.color.ColorSpace;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
import java.awt.image.ColorModel;
|
import java.awt.image.ColorModel;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
|
|
||||||
|
@ -69,7 +70,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
* <code>markerSequence</code> is modified. This is used by reset
|
* <code>markerSequence</code> is modified. This is used by reset
|
||||||
* to restore the original state.
|
* to restore the original state.
|
||||||
*/
|
*/
|
||||||
private List resetSequence = null;
|
private List<MarkerSegment> resetSequence = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set to <code>true</code> when reading a thumbnail stored as
|
* Set to <code>true</code> when reading a thumbnail stored as
|
||||||
|
@ -100,7 +101,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
* list is package visible so that the writer can access it.
|
* list is package visible so that the writer can access it.
|
||||||
* @see #MarkerSegment
|
* @see #MarkerSegment
|
||||||
*/
|
*/
|
||||||
List markerSequence = new ArrayList();
|
List<MarkerSegment> markerSequence = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates whether this object represents stream or image
|
* Indicates whether this object represents stream or image
|
||||||
|
@ -645,9 +646,9 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
* with the given tag, or null if none is found.
|
* with the given tag, or null if none is found.
|
||||||
*/
|
*/
|
||||||
MarkerSegment findMarkerSegment(int tag) {
|
MarkerSegment findMarkerSegment(int tag) {
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment)iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (seg.tag == tag) {
|
if (seg.tag == tag) {
|
||||||
return seg;
|
return seg;
|
||||||
}
|
}
|
||||||
|
@ -659,19 +660,20 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
* Returns the first or last MarkerSegment object in the list
|
* Returns the first or last MarkerSegment object in the list
|
||||||
* of the given class, or null if none is found.
|
* of the given class, or null if none is found.
|
||||||
*/
|
*/
|
||||||
MarkerSegment findMarkerSegment(Class cls, boolean first) {
|
MarkerSegment findMarkerSegment(Class<? extends MarkerSegment> cls, boolean first) {
|
||||||
if (first) {
|
if (first) {
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment)iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (cls.isInstance(seg)) {
|
if (cls.isInstance(seg)) {
|
||||||
return seg;
|
return seg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ListIterator iter = markerSequence.listIterator(markerSequence.size());
|
ListIterator<MarkerSegment> iter =
|
||||||
|
markerSequence.listIterator(markerSequence.size());
|
||||||
while (iter.hasPrevious()) {
|
while (iter.hasPrevious()) {
|
||||||
MarkerSegment seg = (MarkerSegment)iter.previous();
|
MarkerSegment seg = iter.previous();
|
||||||
if (cls.isInstance(seg)) {
|
if (cls.isInstance(seg)) {
|
||||||
return seg;
|
return seg;
|
||||||
}
|
}
|
||||||
|
@ -684,19 +686,21 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
* Returns the index of the first or last MarkerSegment in the list
|
* Returns the index of the first or last MarkerSegment in the list
|
||||||
* of the given class, or -1 if none is found.
|
* of the given class, or -1 if none is found.
|
||||||
*/
|
*/
|
||||||
private int findMarkerSegmentPosition(Class cls, boolean first) {
|
private int findMarkerSegmentPosition(Class<? extends MarkerSegment> cls,
|
||||||
|
boolean first) {
|
||||||
if (first) {
|
if (first) {
|
||||||
ListIterator iter = markerSequence.listIterator();
|
ListIterator<MarkerSegment> iter = markerSequence.listIterator();
|
||||||
for (int i = 0; iter.hasNext(); i++) {
|
for (int i = 0; iter.hasNext(); i++) {
|
||||||
MarkerSegment seg = (MarkerSegment)iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (cls.isInstance(seg)) {
|
if (cls.isInstance(seg)) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ListIterator iter = markerSequence.listIterator(markerSequence.size());
|
ListIterator<MarkerSegment> iter =
|
||||||
|
markerSequence.listIterator(markerSequence.size());
|
||||||
for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
|
for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
|
||||||
MarkerSegment seg = (MarkerSegment)iter.previous();
|
MarkerSegment seg = iter.previous();
|
||||||
if (cls.isInstance(seg)) {
|
if (cls.isInstance(seg)) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -706,9 +710,10 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int findLastUnknownMarkerSegmentPosition() {
|
private int findLastUnknownMarkerSegmentPosition() {
|
||||||
ListIterator iter = markerSequence.listIterator(markerSequence.size());
|
ListIterator<MarkerSegment> iter =
|
||||||
|
markerSequence.listIterator(markerSequence.size());
|
||||||
for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
|
for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
|
||||||
MarkerSegment seg = (MarkerSegment)iter.previous();
|
MarkerSegment seg = iter.previous();
|
||||||
if (seg.unknown == true) {
|
if (seg.unknown == true) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -733,15 +738,15 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
/**
|
/**
|
||||||
* Returns a deep copy of the current marker sequence.
|
* Returns a deep copy of the current marker sequence.
|
||||||
*/
|
*/
|
||||||
private List cloneSequence() {
|
private List<MarkerSegment> cloneSequence() {
|
||||||
if (markerSequence == null) {
|
if (markerSequence == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
List retval = new ArrayList(markerSequence.size());
|
List<MarkerSegment> retval = new ArrayList<>(markerSequence.size());
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
while(iter.hasNext()) {
|
while(iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment)iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
retval.add(seg.clone());
|
retval.add((MarkerSegment) seg.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -774,7 +779,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
IIOMetadataNode getNativeTree() {
|
IIOMetadataNode getNativeTree() {
|
||||||
IIOMetadataNode root;
|
IIOMetadataNode root;
|
||||||
IIOMetadataNode top;
|
IIOMetadataNode top;
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
if (isStream) {
|
if (isStream) {
|
||||||
root = new IIOMetadataNode(JPEG.nativeStreamMetadataFormatName);
|
root = new IIOMetadataNode(JPEG.nativeStreamMetadataFormatName);
|
||||||
top = root;
|
top = root;
|
||||||
|
@ -797,7 +802,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
top = sequence;
|
top = sequence;
|
||||||
}
|
}
|
||||||
while(iter.hasNext()) {
|
while(iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
top.appendChild(seg.getNativeNode());
|
top.appendChild(seg.getNativeNode());
|
||||||
}
|
}
|
||||||
return root;
|
return root;
|
||||||
|
@ -961,9 +966,9 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
|
|
||||||
// NumProgressiveScans - count sos segments
|
// NumProgressiveScans - count sos segments
|
||||||
int sosCount = 0;
|
int sosCount = 0;
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
MarkerSegment ms = (MarkerSegment) iter.next();
|
MarkerSegment ms = iter.next();
|
||||||
if (ms.tag == JPEG.SOS) {
|
if (ms.tag == JPEG.SOS) {
|
||||||
sosCount++;
|
sosCount++;
|
||||||
}
|
}
|
||||||
|
@ -1028,9 +1033,9 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
// Add a text entry for each COM Marker Segment
|
// Add a text entry for each COM Marker Segment
|
||||||
if (findMarkerSegment(JPEG.COM) != null) {
|
if (findMarkerSegment(JPEG.COM) != null) {
|
||||||
text = new IIOMetadataNode("Text");
|
text = new IIOMetadataNode("Text");
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (seg.tag == JPEG.COM) {
|
if (seg.tag == JPEG.COM) {
|
||||||
COMMarkerSegment com = (COMMarkerSegment) seg;
|
COMMarkerSegment com = (COMMarkerSegment) seg;
|
||||||
IIOMetadataNode entry = new IIOMetadataNode("TextEntry");
|
IIOMetadataNode entry = new IIOMetadataNode("TextEntry");
|
||||||
|
@ -1068,7 +1073,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
if (root == null) {
|
if (root == null) {
|
||||||
throw new IllegalArgumentException("null root!");
|
throw new IllegalArgumentException("null root!");
|
||||||
}
|
}
|
||||||
List copy = null;
|
List<MarkerSegment> copy = null;
|
||||||
if (resetSequence == null) {
|
if (resetSequence == null) {
|
||||||
resetSequence = cloneSequence(); // Deep copy
|
resetSequence = cloneSequence(); // Deep copy
|
||||||
copy = resetSequence; // Avoid cloning twice
|
copy = resetSequence; // Avoid cloning twice
|
||||||
|
@ -1181,12 +1186,12 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
*/
|
*/
|
||||||
private void mergeDQTNode(Node node) throws IIOInvalidTreeException {
|
private void mergeDQTNode(Node node) throws IIOInvalidTreeException {
|
||||||
// First collect any existing DQT nodes into a local list
|
// First collect any existing DQT nodes into a local list
|
||||||
ArrayList oldDQTs = new ArrayList();
|
ArrayList<DQTMarkerSegment> oldDQTs = new ArrayList<>();
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof DQTMarkerSegment) {
|
if (seg instanceof DQTMarkerSegment) {
|
||||||
oldDQTs.add(seg);
|
oldDQTs.add((DQTMarkerSegment) seg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!oldDQTs.isEmpty()) {
|
if (!oldDQTs.isEmpty()) {
|
||||||
|
@ -1201,10 +1206,9 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
DQTMarkerSegment dqt = null;
|
DQTMarkerSegment dqt = null;
|
||||||
int tableIndex = -1;
|
int tableIndex = -1;
|
||||||
for (int j = 0; j < oldDQTs.size(); j++) {
|
for (int j = 0; j < oldDQTs.size(); j++) {
|
||||||
DQTMarkerSegment testDQT = (DQTMarkerSegment) oldDQTs.get(j);
|
DQTMarkerSegment testDQT = oldDQTs.get(j);
|
||||||
for (int k = 0; k < testDQT.tables.size(); k++) {
|
for (int k = 0; k < testDQT.tables.size(); k++) {
|
||||||
DQTMarkerSegment.Qtable testTable =
|
DQTMarkerSegment.Qtable testTable = testDQT.tables.get(k);
|
||||||
(DQTMarkerSegment.Qtable) testDQT.tables.get(k);
|
|
||||||
if (childID == testTable.tableID) {
|
if (childID == testTable.tableID) {
|
||||||
dqt = testDQT;
|
dqt = testDQT;
|
||||||
tableIndex = k;
|
tableIndex = k;
|
||||||
|
@ -1216,7 +1220,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
if (dqt != null) {
|
if (dqt != null) {
|
||||||
dqt.tables.set(tableIndex, dqt.getQtableFromNode(child));
|
dqt.tables.set(tableIndex, dqt.getQtableFromNode(child));
|
||||||
} else {
|
} else {
|
||||||
dqt = (DQTMarkerSegment) oldDQTs.get(oldDQTs.size()-1);
|
dqt = oldDQTs.get(oldDQTs.size()-1);
|
||||||
dqt.tables.add(dqt.getQtableFromNode(child));
|
dqt.tables.add(dqt.getQtableFromNode(child));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1257,12 +1261,12 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
*/
|
*/
|
||||||
private void mergeDHTNode(Node node) throws IIOInvalidTreeException {
|
private void mergeDHTNode(Node node) throws IIOInvalidTreeException {
|
||||||
// First collect any existing DQT nodes into a local list
|
// First collect any existing DQT nodes into a local list
|
||||||
ArrayList oldDHTs = new ArrayList();
|
ArrayList<DHTMarkerSegment> oldDHTs = new ArrayList<>();
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof DHTMarkerSegment) {
|
if (seg instanceof DHTMarkerSegment) {
|
||||||
oldDHTs.add(seg);
|
oldDHTs.add((DHTMarkerSegment) seg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!oldDHTs.isEmpty()) {
|
if (!oldDHTs.isEmpty()) {
|
||||||
|
@ -1283,10 +1287,9 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
DHTMarkerSegment dht = null;
|
DHTMarkerSegment dht = null;
|
||||||
int tableIndex = -1;
|
int tableIndex = -1;
|
||||||
for (int j = 0; j < oldDHTs.size(); j++) {
|
for (int j = 0; j < oldDHTs.size(); j++) {
|
||||||
DHTMarkerSegment testDHT = (DHTMarkerSegment) oldDHTs.get(j);
|
DHTMarkerSegment testDHT = oldDHTs.get(j);
|
||||||
for (int k = 0; k < testDHT.tables.size(); k++) {
|
for (int k = 0; k < testDHT.tables.size(); k++) {
|
||||||
DHTMarkerSegment.Htable testTable =
|
DHTMarkerSegment.Htable testTable = testDHT.tables.get(k);
|
||||||
(DHTMarkerSegment.Htable) testDHT.tables.get(k);
|
|
||||||
if ((childID == testTable.tableID) &&
|
if ((childID == testTable.tableID) &&
|
||||||
(childClass == testTable.tableClass)) {
|
(childClass == testTable.tableClass)) {
|
||||||
dht = testDHT;
|
dht = testDHT;
|
||||||
|
@ -1299,7 +1302,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
if (dht != null) {
|
if (dht != null) {
|
||||||
dht.tables.set(tableIndex, dht.getHtableFromNode(child));
|
dht.tables.set(tableIndex, dht.getHtableFromNode(child));
|
||||||
} else {
|
} else {
|
||||||
dht = (DHTMarkerSegment) oldDHTs.get(oldDHTs.size()-1);
|
dht = oldDHTs.get(oldDHTs.size()-1);
|
||||||
dht.tables.add(dht.getHtableFromNode(child));
|
dht.tables.add(dht.getHtableFromNode(child));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1735,8 +1738,9 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
}
|
}
|
||||||
if (idsDiffer) {
|
if (idsDiffer) {
|
||||||
// update the ids in each SOS marker segment
|
// update the ids in each SOS marker segment
|
||||||
for (Iterator iter = markerSequence.iterator(); iter.hasNext();) {
|
for (Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
iter.hasNext();) {
|
||||||
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof SOSMarkerSegment) {
|
if (seg instanceof SOSMarkerSegment) {
|
||||||
SOSMarkerSegment target = (SOSMarkerSegment) seg;
|
SOSMarkerSegment target = (SOSMarkerSegment) seg;
|
||||||
for (int i = 0; i < target.componentSpecs.length; i++) {
|
for (int i = 0; i < target.componentSpecs.length; i++) {
|
||||||
|
@ -1788,11 +1792,12 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateQtables) {
|
if (updateQtables) {
|
||||||
List tableSegments = new ArrayList();
|
List<DQTMarkerSegment> tableSegments = new ArrayList<>();
|
||||||
for (Iterator iter = markerSequence.iterator(); iter.hasNext();) {
|
for (Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
iter.hasNext();) {
|
||||||
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof DQTMarkerSegment) {
|
if (seg instanceof DQTMarkerSegment) {
|
||||||
tableSegments.add(seg);
|
tableSegments.add((DQTMarkerSegment) seg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If there are no tables, don't add them, as the metadata encodes an
|
// If there are no tables, don't add them, as the metadata encodes an
|
||||||
|
@ -1806,12 +1811,12 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
|
|
||||||
// Find the table with selector 1.
|
// Find the table with selector 1.
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
for (Iterator iter = tableSegments.iterator(); iter.hasNext();) {
|
for (Iterator<DQTMarkerSegment> iter = tableSegments.iterator();
|
||||||
DQTMarkerSegment testdqt = (DQTMarkerSegment) iter.next();
|
iter.hasNext();) {
|
||||||
for (Iterator tabiter = testdqt.tables.iterator();
|
DQTMarkerSegment testdqt = iter.next();
|
||||||
tabiter.hasNext();) {
|
for (Iterator<DQTMarkerSegment.Qtable> tabiter =
|
||||||
DQTMarkerSegment.Qtable tab =
|
testdqt.tables.iterator(); tabiter.hasNext();) {
|
||||||
(DQTMarkerSegment.Qtable) tabiter.next();
|
DQTMarkerSegment.Qtable tab = tabiter.next();
|
||||||
if (tab.tableID == 1) {
|
if (tab.tableID == 1) {
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
|
@ -1820,12 +1825,12 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
if (!found) {
|
if (!found) {
|
||||||
// find the table with selector 0. There should be one.
|
// find the table with selector 0. There should be one.
|
||||||
DQTMarkerSegment.Qtable table0 = null;
|
DQTMarkerSegment.Qtable table0 = null;
|
||||||
for (Iterator iter = tableSegments.iterator(); iter.hasNext();) {
|
for (Iterator<DQTMarkerSegment> iter =
|
||||||
DQTMarkerSegment testdqt = (DQTMarkerSegment) iter.next();
|
tableSegments.iterator(); iter.hasNext();) {
|
||||||
for (Iterator tabiter = testdqt.tables.iterator();
|
DQTMarkerSegment testdqt = iter.next();
|
||||||
tabiter.hasNext();) {
|
for (Iterator<DQTMarkerSegment.Qtable> tabiter =
|
||||||
DQTMarkerSegment.Qtable tab =
|
testdqt.tables.iterator(); tabiter.hasNext();) {
|
||||||
(DQTMarkerSegment.Qtable) tabiter.next();
|
DQTMarkerSegment.Qtable tab = tabiter.next();
|
||||||
if (tab.tableID == 0) {
|
if (tab.tableID == 0) {
|
||||||
table0 = tab;
|
table0 = tab;
|
||||||
}
|
}
|
||||||
|
@ -1835,19 +1840,19 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
// Assuming that the table with id 0 is a luminance table,
|
// Assuming that the table with id 0 is a luminance table,
|
||||||
// compute a new chrominance table of the same quality and
|
// compute a new chrominance table of the same quality and
|
||||||
// add it to the last DQT segment
|
// add it to the last DQT segment
|
||||||
DQTMarkerSegment dqt =
|
DQTMarkerSegment dqt = tableSegments.get(tableSegments.size()-1);
|
||||||
(DQTMarkerSegment) tableSegments.get(tableSegments.size()-1);
|
|
||||||
dqt.tables.add(dqt.getChromaForLuma(table0));
|
dqt.tables.add(dqt.getChromaForLuma(table0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateHtables) {
|
if (updateHtables) {
|
||||||
List tableSegments = new ArrayList();
|
List<DHTMarkerSegment> tableSegments = new ArrayList<>();
|
||||||
for (Iterator iter = markerSequence.iterator(); iter.hasNext();) {
|
for (Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
MarkerSegment seg = (MarkerSegment) iter.next();
|
iter.hasNext();) {
|
||||||
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof DHTMarkerSegment) {
|
if (seg instanceof DHTMarkerSegment) {
|
||||||
tableSegments.add(seg);
|
tableSegments.add((DHTMarkerSegment) seg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If there are no tables, don't add them, as the metadata encodes an
|
// If there are no tables, don't add them, as the metadata encodes an
|
||||||
|
@ -1860,12 +1865,12 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
|
|
||||||
// find a table with selector 1. AC/DC is irrelevant
|
// find a table with selector 1. AC/DC is irrelevant
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
for (Iterator iter = tableSegments.iterator(); iter.hasNext();) {
|
for (Iterator<DHTMarkerSegment> iter = tableSegments.iterator();
|
||||||
DHTMarkerSegment testdht = (DHTMarkerSegment) iter.next();
|
iter.hasNext();) {
|
||||||
for (Iterator tabiter = testdht.tables.iterator();
|
DHTMarkerSegment testdht = iter.next();
|
||||||
tabiter.hasNext();) {
|
for (Iterator<DHTMarkerSegment.Htable> tabiter =
|
||||||
DHTMarkerSegment.Htable tab =
|
testdht.tables.iterator(); tabiter.hasNext();) {
|
||||||
(DHTMarkerSegment.Htable) tabiter.next();
|
DHTMarkerSegment.Htable tab = tabiter.next();
|
||||||
if (tab.tableID == 1) {
|
if (tab.tableID == 1) {
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
|
@ -1875,7 +1880,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
// Create new standard dc and ac chrominance tables and add them
|
// Create new standard dc and ac chrominance tables and add them
|
||||||
// to the last DHT segment
|
// to the last DHT segment
|
||||||
DHTMarkerSegment lastDHT =
|
DHTMarkerSegment lastDHT =
|
||||||
(DHTMarkerSegment) tableSegments.get(tableSegments.size()-1);
|
tableSegments.get(tableSegments.size()-1);
|
||||||
lastDHT.addHtable(JPEGHuffmanTable.StdDCLuminance, true, 1);
|
lastDHT.addHtable(JPEGHuffmanTable.StdDCLuminance, true, 1);
|
||||||
lastDHT.addHtable(JPEGHuffmanTable.StdACLuminance, true, 1);
|
lastDHT.addHtable(JPEGHuffmanTable.StdACLuminance, true, 1);
|
||||||
}
|
}
|
||||||
|
@ -2181,7 +2186,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
if (resetSequence == null) {
|
if (resetSequence == null) {
|
||||||
resetSequence = markerSequence;
|
resetSequence = markerSequence;
|
||||||
}
|
}
|
||||||
markerSequence = new ArrayList();
|
markerSequence = new ArrayList<>();
|
||||||
|
|
||||||
// Build a whole new marker sequence from the tree
|
// Build a whole new marker sequence from the tree
|
||||||
|
|
||||||
|
@ -2310,10 +2315,10 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
* segments, including 0 if there are no SOS marker segments.
|
* segments, including 0 if there are no SOS marker segments.
|
||||||
*/
|
*/
|
||||||
private int countScanBands() {
|
private int countScanBands() {
|
||||||
List ids = new ArrayList();
|
List<Integer> ids = new ArrayList<>();
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
while(iter.hasNext()) {
|
while(iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment)iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof SOSMarkerSegment) {
|
if (seg instanceof SOSMarkerSegment) {
|
||||||
SOSMarkerSegment sos = (SOSMarkerSegment) seg;
|
SOSMarkerSegment sos = (SOSMarkerSegment) seg;
|
||||||
SOSMarkerSegment.ScanComponentSpec [] specs = sos.componentSpecs;
|
SOSMarkerSegment.ScanComponentSpec [] specs = sos.componentSpecs;
|
||||||
|
@ -2334,7 +2339,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
void writeToStream(ImageOutputStream ios,
|
void writeToStream(ImageOutputStream ios,
|
||||||
boolean ignoreJFIF,
|
boolean ignoreJFIF,
|
||||||
boolean forceJFIF,
|
boolean forceJFIF,
|
||||||
List thumbnails,
|
List<? extends BufferedImage> thumbnails,
|
||||||
ICC_Profile iccProfile,
|
ICC_Profile iccProfile,
|
||||||
boolean ignoreAdobe,
|
boolean ignoreAdobe,
|
||||||
int newAdobeTransform,
|
int newAdobeTransform,
|
||||||
|
@ -2360,9 +2365,9 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Iterate over each MarkerSegment
|
// Iterate over each MarkerSegment
|
||||||
Iterator iter = markerSequence.iterator();
|
Iterator<MarkerSegment> iter = markerSequence.iterator();
|
||||||
while(iter.hasNext()) {
|
while(iter.hasNext()) {
|
||||||
MarkerSegment seg = (MarkerSegment)iter.next();
|
MarkerSegment seg = iter.next();
|
||||||
if (seg instanceof JFIFMarkerSegment) {
|
if (seg instanceof JFIFMarkerSegment) {
|
||||||
if (ignoreJFIF == false) {
|
if (ignoreJFIF == false) {
|
||||||
JFIFMarkerSegment jfif = (JFIFMarkerSegment) seg;
|
JFIFMarkerSegment jfif = (JFIFMarkerSegment) seg;
|
||||||
|
@ -2409,7 +2414,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable {
|
||||||
|
|
||||||
public void print() {
|
public void print() {
|
||||||
for (int i = 0; i < markerSequence.size(); i++) {
|
for (int i = 0; i < markerSequence.size(); i++) {
|
||||||
MarkerSegment seg = (MarkerSegment) markerSequence.get(i);
|
MarkerSegment seg = markerSequence.get(i);
|
||||||
seg.print();
|
seg.print();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ abstract class JPEGMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
DATATYPE_INTEGER,
|
DATATYPE_INTEGER,
|
||||||
false,
|
false,
|
||||||
"0");
|
"0");
|
||||||
List tabids = new ArrayList();
|
List<String> tabids = new ArrayList<>();
|
||||||
tabids.add("0");
|
tabids.add("0");
|
||||||
tabids.add("1");
|
tabids.add("1");
|
||||||
tabids.add("2");
|
tabids.add("2");
|
||||||
|
@ -74,7 +74,7 @@ abstract class JPEGMetadataFormat extends IIOMetadataFormatImpl {
|
||||||
|
|
||||||
addElement("dht", parentName, 1, 4);
|
addElement("dht", parentName, 1, 4);
|
||||||
addElement("dhtable", "dht", CHILD_POLICY_EMPTY);
|
addElement("dhtable", "dht", CHILD_POLICY_EMPTY);
|
||||||
List classes = new ArrayList();
|
List<String> classes = new ArrayList<>();
|
||||||
classes.add("0");
|
classes.add("0");
|
||||||
classes.add("1");
|
classes.add("1");
|
||||||
addAttribute("dhtable",
|
addAttribute("dhtable",
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class PNGImageReaderSpi extends ImageReaderSpi {
|
||||||
suffixes,
|
suffixes,
|
||||||
MIMETypes,
|
MIMETypes,
|
||||||
readerClassName,
|
readerClassName,
|
||||||
new Class[] { ImageInputStream.class },
|
new Class<?>[] { ImageInputStream.class },
|
||||||
writerSpiNames,
|
writerSpiNames,
|
||||||
false,
|
false,
|
||||||
null, null,
|
null, null,
|
||||||
|
|
|
@ -656,16 +656,16 @@ public class PNGImageWriter extends ImageWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void write_tEXt() throws IOException {
|
private void write_tEXt() throws IOException {
|
||||||
Iterator keywordIter = metadata.tEXt_keyword.iterator();
|
Iterator<String> keywordIter = metadata.tEXt_keyword.iterator();
|
||||||
Iterator textIter = metadata.tEXt_text.iterator();
|
Iterator<String> textIter = metadata.tEXt_text.iterator();
|
||||||
|
|
||||||
while (keywordIter.hasNext()) {
|
while (keywordIter.hasNext()) {
|
||||||
ChunkStream cs = new ChunkStream(PNGImageReader.tEXt_TYPE, stream);
|
ChunkStream cs = new ChunkStream(PNGImageReader.tEXt_TYPE, stream);
|
||||||
String keyword = (String)keywordIter.next();
|
String keyword = keywordIter.next();
|
||||||
cs.writeBytes(keyword);
|
cs.writeBytes(keyword);
|
||||||
cs.writeByte(0);
|
cs.writeByte(0);
|
||||||
|
|
||||||
String text = (String)textIter.next();
|
String text = textIter.next();
|
||||||
cs.writeBytes(text);
|
cs.writeBytes(text);
|
||||||
cs.finish();
|
cs.finish();
|
||||||
}
|
}
|
||||||
|
@ -717,33 +717,33 @@ public class PNGImageWriter extends ImageWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void write_zTXt() throws IOException {
|
private void write_zTXt() throws IOException {
|
||||||
Iterator keywordIter = metadata.zTXt_keyword.iterator();
|
Iterator<String> keywordIter = metadata.zTXt_keyword.iterator();
|
||||||
Iterator methodIter = metadata.zTXt_compressionMethod.iterator();
|
Iterator<Integer> methodIter = metadata.zTXt_compressionMethod.iterator();
|
||||||
Iterator textIter = metadata.zTXt_text.iterator();
|
Iterator<String> textIter = metadata.zTXt_text.iterator();
|
||||||
|
|
||||||
while (keywordIter.hasNext()) {
|
while (keywordIter.hasNext()) {
|
||||||
ChunkStream cs = new ChunkStream(PNGImageReader.zTXt_TYPE, stream);
|
ChunkStream cs = new ChunkStream(PNGImageReader.zTXt_TYPE, stream);
|
||||||
String keyword = (String)keywordIter.next();
|
String keyword = keywordIter.next();
|
||||||
cs.writeBytes(keyword);
|
cs.writeBytes(keyword);
|
||||||
cs.writeByte(0);
|
cs.writeByte(0);
|
||||||
|
|
||||||
int compressionMethod = ((Integer)methodIter.next()).intValue();
|
int compressionMethod = (methodIter.next()).intValue();
|
||||||
cs.writeByte(compressionMethod);
|
cs.writeByte(compressionMethod);
|
||||||
|
|
||||||
String text = (String)textIter.next();
|
String text = textIter.next();
|
||||||
cs.write(deflate(text.getBytes("ISO-8859-1")));
|
cs.write(deflate(text.getBytes("ISO-8859-1")));
|
||||||
cs.finish();
|
cs.finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeUnknownChunks() throws IOException {
|
private void writeUnknownChunks() throws IOException {
|
||||||
Iterator typeIter = metadata.unknownChunkType.iterator();
|
Iterator<String> typeIter = metadata.unknownChunkType.iterator();
|
||||||
Iterator dataIter = metadata.unknownChunkData.iterator();
|
Iterator<byte[]> dataIter = metadata.unknownChunkData.iterator();
|
||||||
|
|
||||||
while (typeIter.hasNext() && dataIter.hasNext()) {
|
while (typeIter.hasNext() && dataIter.hasNext()) {
|
||||||
String type = (String)typeIter.next();
|
String type = typeIter.next();
|
||||||
ChunkStream cs = new ChunkStream(chunkType(type), stream);
|
ChunkStream cs = new ChunkStream(chunkType(type), stream);
|
||||||
byte[] data = (byte[])dataIter.next();
|
byte[] data = dataIter.next();
|
||||||
cs.write(data);
|
cs.write(data);
|
||||||
cs.finish();
|
cs.finish();
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class PNGImageWriterSpi extends ImageWriterSpi {
|
||||||
suffixes,
|
suffixes,
|
||||||
MIMETypes,
|
MIMETypes,
|
||||||
writerClassName,
|
writerClassName,
|
||||||
new Class[] { ImageOutputStream.class },
|
new Class<?>[] { ImageOutputStream.class },
|
||||||
readerSpiNames,
|
readerSpiNames,
|
||||||
false,
|
false,
|
||||||
null, null,
|
null, null,
|
||||||
|
|
|
@ -152,14 +152,14 @@ public class WBMPImageReader extends ImageReader {
|
||||||
gotHeader = true;
|
gotHeader = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator getImageTypes(int imageIndex)
|
public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
checkIndex(imageIndex);
|
checkIndex(imageIndex);
|
||||||
readHeader();
|
readHeader();
|
||||||
|
|
||||||
BufferedImage bi =
|
BufferedImage bi =
|
||||||
new BufferedImage(1, 1, BufferedImage.TYPE_BYTE_BINARY);
|
new BufferedImage(1, 1, BufferedImage.TYPE_BYTE_BINARY);
|
||||||
ArrayList list = new ArrayList(1);
|
ArrayList<ImageTypeSpecifier> list = new ArrayList<>(1);
|
||||||
list.add(new ImageTypeSpecifier(bi));
|
list.add(new ImageTypeSpecifier(bi));
|
||||||
return list.iterator();
|
return list.iterator();
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class WBMPImageReaderSpi extends ImageReaderSpi {
|
||||||
entensions,
|
entensions,
|
||||||
mimeType,
|
mimeType,
|
||||||
"com.sun.imageio.plugins.wbmp.WBMPImageReader",
|
"com.sun.imageio.plugins.wbmp.WBMPImageReader",
|
||||||
new Class[] { ImageInputStream.class },
|
new Class<?>[] { ImageInputStream.class },
|
||||||
writerSpiNames,
|
writerSpiNames,
|
||||||
true,
|
true,
|
||||||
null, null, null, null,
|
null, null, null, null,
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class WBMPImageWriterSpi extends ImageWriterSpi {
|
||||||
entensions,
|
entensions,
|
||||||
mimeType,
|
mimeType,
|
||||||
"com.sun.imageio.plugins.wbmp.WBMPImageWriter",
|
"com.sun.imageio.plugins.wbmp.WBMPImageWriter",
|
||||||
new Class[] { ImageOutputStream.class },
|
new Class<?>[] { ImageOutputStream.class },
|
||||||
readerSpiNames,
|
readerSpiNames,
|
||||||
true,
|
true,
|
||||||
null, null, null, null,
|
null, null, null, null,
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class FileImageInputStreamSpi extends ImageInputStreamSpi {
|
||||||
|
|
||||||
private static final String version = "1.0";
|
private static final String version = "1.0";
|
||||||
|
|
||||||
private static final Class inputClass = File.class;
|
private static final Class<?> inputClass = File.class;
|
||||||
|
|
||||||
public FileImageInputStreamSpi() {
|
public FileImageInputStreamSpi() {
|
||||||
super(vendorName, version, inputClass);
|
super(vendorName, version, inputClass);
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class FileImageOutputStreamSpi extends ImageOutputStreamSpi {
|
||||||
|
|
||||||
private static final String version = "1.0";
|
private static final String version = "1.0";
|
||||||
|
|
||||||
private static final Class outputClass = File.class;
|
private static final Class<?> outputClass = File.class;
|
||||||
|
|
||||||
public FileImageOutputStreamSpi() {
|
public FileImageOutputStreamSpi() {
|
||||||
super(vendorName, version, outputClass);
|
super(vendorName, version, outputClass);
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class InputStreamImageInputStreamSpi extends ImageInputStreamSpi {
|
||||||
|
|
||||||
private static final String version = "1.0";
|
private static final String version = "1.0";
|
||||||
|
|
||||||
private static final Class inputClass = InputStream.class;
|
private static final Class<?> inputClass = InputStream.class;
|
||||||
|
|
||||||
public InputStreamImageInputStreamSpi() {
|
public InputStreamImageInputStreamSpi() {
|
||||||
super(vendorName, version, inputClass);
|
super(vendorName, version, inputClass);
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class OutputStreamImageOutputStreamSpi extends ImageOutputStreamSpi {
|
||||||
|
|
||||||
private static final String version = "1.0";
|
private static final String version = "1.0";
|
||||||
|
|
||||||
private static final Class outputClass = OutputStream.class;
|
private static final Class<?> outputClass = OutputStream.class;
|
||||||
|
|
||||||
public OutputStreamImageOutputStreamSpi() {
|
public OutputStreamImageOutputStreamSpi() {
|
||||||
super(vendorName, version, outputClass);
|
super(vendorName, version, outputClass);
|
||||||
|
|
|
@ -38,7 +38,7 @@ public class RAFImageInputStreamSpi extends ImageInputStreamSpi {
|
||||||
|
|
||||||
private static final String version = "1.0";
|
private static final String version = "1.0";
|
||||||
|
|
||||||
private static final Class inputClass = RandomAccessFile.class;
|
private static final Class<?> inputClass = RandomAccessFile.class;
|
||||||
|
|
||||||
public RAFImageInputStreamSpi() {
|
public RAFImageInputStreamSpi() {
|
||||||
super(vendorName, version, inputClass);
|
super(vendorName, version, inputClass);
|
||||||
|
|
|
@ -38,7 +38,7 @@ public class RAFImageOutputStreamSpi extends ImageOutputStreamSpi {
|
||||||
|
|
||||||
private static final String version = "1.0";
|
private static final String version = "1.0";
|
||||||
|
|
||||||
private static final Class outputClass = RandomAccessFile.class;
|
private static final Class<?> outputClass = RandomAccessFile.class;
|
||||||
|
|
||||||
public RAFImageOutputStreamSpi() {
|
public RAFImageOutputStreamSpi() {
|
||||||
super(vendorName, version, outputClass);
|
super(vendorName, version, outputClass);
|
||||||
|
|
|
@ -82,7 +82,7 @@ public class StreamCloser {
|
||||||
};
|
};
|
||||||
|
|
||||||
java.security.AccessController.doPrivileged(
|
java.security.AccessController.doPrivileged(
|
||||||
new java.security.PrivilegedAction() {
|
new java.security.PrivilegedAction<Object>() {
|
||||||
public Object run() {
|
public Object run() {
|
||||||
/* The thread must be a member of a thread group
|
/* The thread must be a member of a thread group
|
||||||
* which will not get GCed before VM exit.
|
* which will not get GCed before VM exit.
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue