--- a/jdk/make/com/sun/Makefile Sat May 29 23:26:16 2010 -0700
+++ b/jdk/make/com/sun/Makefile Tue Jun 01 21:25:26 2010 -0700
@@ -42,7 +42,7 @@
SUBDIRS = java security net/ssl jarsigner
SUBDIRS_management = jmx
-SUBDIRS_desktop = image inputmethods
+SUBDIRS_desktop = image
SUBDIRS_enterprise = crypto/provider jndi \
org xml rowset net/httpserver
SUBDIRS_misc = $(SCRIPT_SUBDIR) tracing servicetag nio demo
--- a/jdk/make/com/sun/inputmethods/Makefile Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#
-# Copyright (c) 2002, 2005, 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.
-#
-
-#
-# Makefile for building Java input methods
-#
-
-BUILDDIR = ../../..
-PRODUCT = sun
-include $(BUILDDIR)/common/Defs.gmk
-
-SUBDIRS = indicim thaiim
-include $(BUILDDIR)/common/Subdirs.gmk
-
-all build clean clobber::
- $(SUBDIRS-loop)
-
--- a/jdk/make/com/sun/inputmethods/indicim/Makefile Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-#
-# Copyright (c) 2002, 2008, 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.
-#
-
-#
-# Makefile for indic input method.
-#
-
-BUILDDIR = ../../../..
-
-PACKAGE = com.sun.inputmethods.internal.indicim
-PRODUCT = sun
-
-CLASSDESTDIR = $(TEMPDIR)/classes
-SERVICESDIR=META-INF/services
-IMJAR = $(IMJARDIR)/indicim.jar
-IMJARDIR=$(LIBDIR)/im
-include $(BUILDDIR)/common/Defs.gmk
-
-#
-# Files
-#
-AUTO_FILES_JAVA_DIRS = com/sun/inputmethods/internal/indicim
-
-FILES_copy = \
- $(CLASSDESTDIR)/com/sun/inputmethods/internal/indicim/resources/DisplayNames.properties
-
-PROVIDER_CONF_FILE = \
- $(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor
-
-#
-# Rules
-#
-include $(BUILDDIR)/common/Classes.gmk
-
-build: $(IMJAR)
-
-#
-# Extra rules to build im.
-#
-
-$(CLASSDESTDIR)/com/sun/inputmethods/internal/indicim/resources/% : $(SHARE_SRC)/classes/com/sun/inputmethods/internal/indicim/resources/%
- $(install-file)
-
-$(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor : $(SHARE_SRC)/classes/com/sun/inputmethods/internal/indicim/java.awt.im.spi.InputMethodDescriptor
- $(install-file)
-
-$(IMJAR): $(FILES_class) $(FILES_copy) $(PROVIDER_CONF_FILE)
- $(prep-target)
- $(BOOT_JAR_CMD) -cf $@ \
- -C $(CLASSDESTDIR) com \
- -C $(CLASSDESTDIR) $(SERVICESDIR) \
- $(BOOT_JAR_JFLAGS)
- @$(java-vm-cleanup)
-
-clean::
- $(RM) -r $(CLASSDESTDIR)
- $(RM) $(IMJAR)
--- a/jdk/make/com/sun/inputmethods/thaiim/Makefile Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-#
-# Copyright (c) 2002, 2008, 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.
-#
-
-#
-# Makefile for thai input method.
-#
-
-BUILDDIR = ../../../..
-
-PACKAGE = com.sun.inputmethods.internal.thaiim
-PRODUCT = sun
-
-CLASSDESTDIR = $(TEMPDIR)/classes
-SERVICESDIR=META-INF/services
-IMJAR = $(IMJARDIR)/thaiim.jar
-IMJARDIR=$(LIBDIR)/im
-include $(BUILDDIR)/common/Defs.gmk
-
-#
-# Files
-#
-AUTO_FILES_JAVA_DIRS = com/sun/inputmethods/internal/thaiim
-
-FILES_copy = \
- $(CLASSDESTDIR)/com/sun/inputmethods/internal/thaiim/resources/DisplayNames.properties
-
-PROVIDER_CONF_FILE = \
- $(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor
-
-#
-# Rules
-#
-include $(BUILDDIR)/common/Classes.gmk
-
-build: $(IMJAR)
-
-#
-# Extra rules to build im.
-#
-
-$(CLASSDESTDIR)/com/sun/inputmethods/internal/thaiim/resources/% : $(SHARE_SRC)/classes/com/sun/inputmethods/internal/thaiim/resources/%
- $(install-file)
-
-$(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor : $(SHARE_SRC)/classes/com/sun/inputmethods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor
- $(install-file)
-
-$(IMJAR): $(FILES_class) $(FILES_copy) $(PROVIDER_CONF_FILE)
- $(prep-target)
- $(BOOT_JAR_CMD) -cf $@ \
- -C $(CLASSDESTDIR) com \
- -C $(CLASSDESTDIR) $(SERVICESDIR) \
- $(BOOT_JAR_JFLAGS)
- @$(java-vm-cleanup)
-
-clean::
- $(RM) -r $(CLASSDESTDIR)
- $(RM) $(IMJAR)
--- a/jdk/make/common/Release.gmk Sat May 29 23:26:16 2010 -0700
+++ b/jdk/make/common/Release.gmk Tue Jun 01 21:25:26 2010 -0700
@@ -47,8 +47,7 @@
# Swing has taken this approach only as a temporary measure to avoid
# the compiler warnings until we can properly document these packages.
# This is covered under 6491853.
-EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf \
- com.sun.java.swing.plaf.windows \
+EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf.windows \
com.sun.java.swing.plaf.motif \
com.sun.java.swing.plaf.gtk
--- a/jdk/make/javax/swing/FILES.gmk Sat May 29 23:26:16 2010 -0700
+++ b/jdk/make/javax/swing/FILES.gmk Tue Jun 01 21:25:26 2010 -0700
@@ -25,7 +25,6 @@
MISC_FILES = \
$(CLASSBINDIR)/javax/swing/text/html/default.css \
- $(CLASSBINDIR)/javax/swing/text/html/parser/html32.bdtd \
$(CLASSBINDIR)/javax/swing/text/rtf/charsets/NeXT.txt \
$(CLASSBINDIR)/javax/swing/text/rtf/charsets/ansi.txt \
$(CLASSBINDIR)/javax/swing/text/rtf/charsets/cpg437.txt \
--- a/jdk/make/javax/swing/Makefile Sat May 29 23:26:16 2010 -0700
+++ b/jdk/make/javax/swing/Makefile Tue Jun 01 21:25:26 2010 -0700
@@ -59,9 +59,6 @@
$(CLASSBINDIR)/%.css: $(SHARE_SRC)/classes/%.css
$(install-file)
-$(CLASSBINDIR)/%.bdtd: $(SHARE_SRC)/classes/%.bdtd
- $(install-file)
-
$(CLASSBINDIR)/%.txt: $(SHARE_SRC)/classes/%.txt
$(install-file)
--- a/jdk/make/tools/sharing/classlist.linux Sat May 29 23:26:16 2010 -0700
+++ b/jdk/make/tools/sharing/classlist.linux Tue Jun 01 21:25:26 2010 -0700
@@ -2259,7 +2259,6 @@
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3
javax/swing/plaf/synth/SynthPanelUI
-sun/swing/plaf/synth/SynthUI
javax/swing/plaf/synth/SynthConstants
javax/swing/plaf/synth/SynthContext
javax/swing/plaf/synth/SynthBorder
@@ -2271,6 +2270,7 @@
javax/swing/plaf/synth/SynthMenuBarUI
javax/swing/plaf/synth/DefaultMenuLayout
javax/swing/plaf/synth/SynthMenuUI
+javax/swing/plaf/synth/SynthUI
com/sun/java/swing/plaf/gtk/GTKIconFactory
com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon
com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon
--- a/jdk/make/tools/sharing/classlist.solaris Sat May 29 23:26:16 2010 -0700
+++ b/jdk/make/tools/sharing/classlist.solaris Tue Jun 01 21:25:26 2010 -0700
@@ -2360,7 +2360,6 @@
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3
javax/swing/plaf/synth/SynthPanelUI
-sun/swing/plaf/synth/SynthUI
javax/swing/plaf/synth/SynthConstants
javax/swing/plaf/synth/SynthContext
javax/swing/plaf/synth/SynthBorder
@@ -2373,6 +2372,7 @@
javax/swing/plaf/synth/SynthMenuBarUI
javax/swing/plaf/synth/DefaultMenuLayout
javax/swing/plaf/synth/SynthMenuUI
+javax/swing/plaf/synth/SynthUI
com/sun/java/swing/plaf/gtk/GTKIconFactory
com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon
com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariInputMethodDescriptor.java Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.indicim;
-
-import java.awt.Image;
-import java.awt.im.spi.InputMethod;
-import java.awt.im.spi.InputMethodDescriptor;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class DevanagariInputMethodDescriptor implements InputMethodDescriptor {
-
- static final Locale HINDI = new Locale("hi", "IN");
-
- public DevanagariInputMethodDescriptor() {
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#getAvailableLocales
- */
- public Locale[] getAvailableLocales() {
- return new Locale[] { HINDI };
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#hasDynamicLocaleList
- */
- public boolean hasDynamicLocaleList() {
- return false;
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#getInputMethodDisplayName
- */
- public synchronized String getInputMethodDisplayName(Locale inputLocale, Locale displayLanguage) {
- try {
- ResourceBundle resources = ResourceBundle.getBundle("com.sun.inputmethods.internal.indicim.resources.DisplayNames", displayLanguage);
- return resources.getString("DisplayName.Devanagari");
- } catch (MissingResourceException mre) {
- return "Devanagari Input Method";
- }
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#getInputMethodIcon
- */
- public Image getInputMethodIcon(Locale inputLocale) {
- return null;
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#createInputMethod
- */
- public InputMethod createInputMethod() throws Exception {
- IndicInputMethodImpl impl = new IndicInputMethodImpl(
- DevanagariTables.keyboardMap,
- DevanagariTables.joinWithNukta,
- DevanagariTables.nuktaForm,
- DevanagariTables.substitutionTable);
-
- return new IndicInputMethod(HINDI, impl);
- }
-
- public String toString() {
- return getClass().getName();
- }
-}
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariTables.java Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,255 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.indicim;
-
-class DevanagariTables {
-
- static final char[] keyboardMap = {
- /* 00 */ '\u0000',
- /* 01 */ '\u0001',
- /* 02 */ '\u0002',
- /* 03 */ '\u0003',
- /* 04 */ '\u0004',
- /* 05 */ '\u0005',
- /* 06 */ '\u0006',
- /* 07 */ '\u0007',
- /* 08 */ '\u0008',
- /* 09 */ '\u0009',
- /* 0A */ '\012',
- /* 0B */ '\u000B',
- /* 0C */ '\u000C',
- /* 0D */ '\015',
- /* 0E */ '\u000E',
- /* 0F */ '\u000F',
- /* 10 */ '\u0010',
- /* 11 */ '\u0011',
- /* 12 */ '\u0012',
- /* 13 */ '\u0013',
- /* 14 */ '\u0014',
- /* 15 */ '\u0015',
- /* 16 */ '\u0016',
- /* 17 */ '\u0017',
- /* 18 */ '\u0018',
- /* 19 */ '\u0019',
- /* 1A */ '\u001A',
- /* 1B */ '\u001B',
- /* 1C */ '\u001C',
- /* 1D */ '\u001D',
- /* 1E */ '\u001E',
- /* 1F */ '\u001F',
- /* 20 */ '\u0020',
- /* 21 */ '\u090D', // '!'
- /* 22 */ '\u0920', // '"'
- /* 23 */ '\uFF00', // '#'
- /* 24 */ '\uFF01', // '$'
- /* 25 */ '\uFF02', // '%'
- /* 26 */ '\uFF04', // '&'
- /* 27 */ '\u091F', // '''
- /* 28 */ '\u0028', // '('
- /* 29 */ '\u0029', // ')'
- /* 2A */ '\uFF05', // '*'
- /* 2B */ '\u090B', // '+'
- /* 2C */ '\u002C', // ','
- /* 2D */ '\u002D', // '-'
- /* 2E */ '\u002E', // '.'
- /* 2F */ '\u092F', // '/'
- /* 30 */ '\u0966', // '0'
- /* 31 */ '\u0967', // '1'
- /* 32 */ '\u0968', // '2'
- /* 33 */ '\u0969', // '3'
- /* 34 */ '\u096A', // '4'
- /* 35 */ '\u096B', // '5'
- /* 36 */ '\u096C', // '6'
- /* 37 */ '\u096D', // '7'
- /* 38 */ '\u096E', // '8'
- /* 39 */ '\u096F', // '9'
- /* 3A */ '\u091B', // ':'
- /* 3B */ '\u091A', // ';'
- /* 3C */ '\u0937', // '<'
- /* 3D */ '\u0943', // '='
- /* 3E */ '\u0964', // '>'
- /* 3F */ '\u095F', // '?'
- /* 40 */ '\u0945', // '@'
- /* 41 */ '\u0913', // 'A'
- /* 42 */ '\u0934', // 'B'
- /* 43 */ '\u0923', // 'C'
- /* 44 */ '\u0905', // 'D'
- /* 45 */ '\u0906', // 'E'
- /* 46 */ '\u0907', // 'F'
- /* 47 */ '\u0909', // 'G'
- /* 48 */ '\u092B', // 'H'
- /* 49 */ '\u0918', // 'I'
- /* 4A */ '\u0931', // 'J'
- /* 4B */ '\u0916', // 'K'
- /* 4C */ '\u0925', // 'L'
- /* 4D */ '\u0936', // 'M'
- /* 4E */ '\u0933', // 'N'
- /* 4F */ '\u0927', // 'O'
- /* 50 */ '\u091D', // 'P'
- /* 51 */ '\u0914', // 'Q'
- /* 52 */ '\u0908', // 'R'
- /* 53 */ '\u090F', // 'S'
- /* 54 */ '\u090A', // 'T'
- /* 55 */ '\u0919', // 'U'
- /* 56 */ '\u0929', // 'V'
- /* 57 */ '\u0910', // 'W'
- /* 58 */ '\u0901', // 'X'
- /* 59 */ '\u092D', // 'Y'
- /* 5A */ '\u090E', // 'Z'
- /* 5B */ '\u0921', // '['
- /* 5C */ '\u0949', // '\'
- /* 5D */ '\u093C', // ']'
- /* 5E */ '\uFF03', // '^'
- /* 5F */ '\u0903', // '_'
- /* 60 */ '\u094A', // '`'
- /* 61 */ '\u094B', // 'a'
- /* 62 */ '\u0935', // 'b'
- /* 63 */ '\u092E', // 'c'
- /* 64 */ '\u094D', // 'd'
- /* 65 */ '\u093E', // 'e'
- /* 66 */ '\u093F', // 'f'
- /* 67 */ '\u0941', // 'g'
- /* 68 */ '\u092A', // 'h'
- /* 69 */ '\u0917', // 'i'
- /* 6A */ '\u0930', // 'j'
- /* 6B */ '\u0915', // 'k'
- /* 6C */ '\u0924', // 'l'
- /* 6D */ '\u0938', // 'm'
- /* 6E */ '\u0932', // 'n'
- /* 6F */ '\u0926', // 'o'
- /* 70 */ '\u091C', // 'p'
- /* 71 */ '\u094C', // 'q'
- /* 72 */ '\u0940', // 'r'
- /* 73 */ '\u0947', // 's'
- /* 74 */ '\u0942', // 't'
- /* 75 */ '\u0939', // 'u'
- /* 76 */ '\u0928', // 'v'
- /* 77 */ '\u0948', // 'w'
- /* 78 */ '\u0902', // 'x'
- /* 79 */ '\u092C', // 'y'
- /* 7A */ '\u0946', // 'z'
- /* 7B */ '\u0922', // '{'
- /* 7C */ '\u0911', // '|'
- /* 7D */ '\u091E', // '}'
- /* 7E */ '\u0912', // '~'
- /* 7F */ '\u007F' //
-};
-
- // the character substitutions for the meta characters.
- static final char[] RA_SUB = {'\u094D', '\u0930'};
- static final char[] RA_SUP = {'\u0930', '\u094D'};
- static final char[] CONJ_JA_NYA = {'\u091C', '\u094D', '\u091E'};
- static final char[] CONJ_TA_RA = {'\u0924', '\u094D', '\u0930'};
- static final char[] CONJ_KA_SSA = {'\u0915', '\u094D', '\u0937'};
- static final char[] CONJ_SHA_RA = {'\u0936', '\u094D', '\u0930'};
-
- static final char[][] substitutionTable = {
- RA_SUB, RA_SUP, CONJ_JA_NYA, CONJ_TA_RA, CONJ_KA_SSA, CONJ_SHA_RA
- };
-
- // The following characters followed by Nukta should be replaced
- // by the corresponding character as defined in ISCII91
- static final char SIGN_CANDRABINDU = '\u0901';
- static final char LETTER_I = '\u0907';
- static final char LETTER_II = '\u0908';
- static final char LETTER_VOCALIC_R = '\u090B';
- static final char LETTER_KA = '\u0915';
- static final char LETTER_KHA = '\u0916';
- static final char LETTER_GA = '\u0917';
- static final char LETTER_JA = '\u091C';
- static final char LETTER_DDA = '\u0921';
- static final char LETTER_DDHA = '\u0922';
- static final char LETTER_PHA = '\u092B';
- static final char VOWEL_SIGN_I = '\u093F';
- static final char VOWEL_SIGN_II = '\u0940';
- static final char VOWEL_SIGN_VOCALIC_R = '\u0943';
- static final char DANDA = '\u0964';
-
- // The follwing characters replace the above characters followed by Nukta. These
- // are defined in one to one correspondence order.
- static final char SIGN_OM = '\u0950';
- static final char LETTER_VOCALIC_L = '\u090C';
- static final char LETTER_VOCALIC_LL = '\u0961';
- static final char LETTER_VOCALIC_RR = '\u0960';
- static final char LETTER_QA = '\u0958';
- static final char LETTER_KHHA = '\u0959';
- static final char LETTER_GHHA = '\u095A';
- static final char LETTER_ZA = '\u095B';
- static final char LETTER_DDDHA = '\u095C';
- static final char LETTER_RHA = '\u095D';
- static final char LETTER_FA = '\u095E';
- static final char VOWEL_SIGN_VOCALIC_L = '\u0962';
- static final char VOWEL_SIGN_VOCALIC_LL = '\u0963';
- static final char VOWEL_SIGN_VOCALIC_RR = '\u0944';
- static final char SIGN_AVAGRAHA = '\u093D';
-
- static final char[] joinWithNukta = {
- SIGN_CANDRABINDU,
- LETTER_I,
- LETTER_II,
- LETTER_VOCALIC_R ,
- LETTER_KA,
- LETTER_KHA,
- LETTER_GA,
- LETTER_JA,
- LETTER_DDA,
- LETTER_DDHA,
- LETTER_PHA,
- VOWEL_SIGN_I,
- VOWEL_SIGN_II,
- VOWEL_SIGN_VOCALIC_R,
- DANDA
- };
-
- static final char[] nuktaForm = {
- SIGN_OM,
- LETTER_VOCALIC_L,
- LETTER_VOCALIC_LL,
- LETTER_VOCALIC_RR,
- LETTER_QA,
- LETTER_KHHA,
- LETTER_GHHA,
- LETTER_ZA,
- LETTER_DDDHA,
- LETTER_RHA,
- LETTER_FA,
- VOWEL_SIGN_VOCALIC_L,
- VOWEL_SIGN_VOCALIC_LL,
- VOWEL_SIGN_VOCALIC_RR,
- SIGN_AVAGRAHA
- };
-}
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethod.java Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.indicim;
-
-import java.awt.im.spi.InputMethod;
-import java.awt.im.spi.InputMethodContext;
-
-import java.awt.AWTEvent;
-import java.awt.Rectangle;
-
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
-
-import java.lang.Character.Subset;
-
-import java.util.Locale;
-
-class IndicInputMethod implements InputMethod {
-
- private IndicInputMethodImpl impl;
- private Locale locale;
-
- IndicInputMethod(Locale theLocale, IndicInputMethodImpl theImplementation) {
- locale = theLocale;
- impl = theImplementation;
- }
-
- /**
- * Sets the input method context, which is used to dispatch input method
- * events to the client component and to request information from
- * the client component.
- * <p>
- * This method is called once immediately after instantiating this input
- * method.
- *
- * @param context the input method context for this input method
- * @exception NullPointerException if <code>context</code> is null
- */
- public void setInputMethodContext(InputMethodContext context) {
-
- impl.setInputMethodContext(context);
- }
-
- /**
- * Attempts to set the input locale. If the input method supports the
- * desired locale, it changes its behavior to support input for the locale
- * and returns true.
- * Otherwise, it returns false and does not change its behavior.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
- * <li>when switching to this input method through the user interface if the user
- * specified a locale or if the previously selected input method's
- * {@link java.awt.im.spi.InputMethod#getLocale getLocale} method
- * returns a non-null value.
- * </ul>
- *
- * @param locale locale to input
- * @return whether the specified locale is supported
- * @exception NullPointerException if <code>locale</code> is null
- */
- public boolean setLocale(Locale locale) {
-
- if (locale.getLanguage().equals(this.locale.getLanguage())) {
- //System.out.println("returning true for locale " + locale);
- return true;
- }
- else {
- //System.out.println("returning false for locale " + locale);
- return false;
- }
- }
-
- /**
- * Returns the current input locale. Might return null in exceptional cases.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#getLocale InputContext.getLocale} and
- * <li>when switching from this input method to a different one through the
- * user interface.
- * </ul>
- *
- * @return the current input locale, or null
- */
- public Locale getLocale() {
-
- return locale;
- }
-
- /**
- * Sets the subsets of the Unicode character set that this input method
- * is allowed to input. Null may be passed in to indicate that all
- * characters are allowed.
- * <p>
- * This method is called
- * <ul>
- * <li>immediately after instantiating this input method,
- * <li>when switching to this input method from a different one, and
- * <li>by {@link java.awt.im.InputContext#setCharacterSubsets InputContext.setCharacterSubsets}.
- * </ul>
- *
- * @param subsets the subsets of the Unicode character set from which
- * characters may be input
- */
- public void setCharacterSubsets(Subset[] subsets) {
- }
-
- /**
- * Enables or disables this input method for composition,
- * depending on the value of the parameter <code>enable</code>.
- * <p>
- * An input method that is enabled for composition interprets incoming
- * events for both composition and control purposes, while a
- * disabled input method does not interpret events for composition.
- * Note however that events are passed on to the input method regardless
- * whether it is enabled or not, and that an input method that is disabled
- * for composition may still interpret events for control purposes,
- * including to enable or disable itself for composition.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#setCompositionEnabled InputContext.setCompositionEnabled},
- * <li>when switching to this input method from a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
- * if the previously selected input method's
- * {@link java.awt.im.spi.InputMethod#isCompositionEnabled isCompositionEnabled}
- * method returns without throwing an exception.
- * </ul>
- *
- * @param enable whether to enable the input method for composition
- * @throws UnsupportedOperationException if this input method does not
- * support the enabling/disabling operation
- * @see #isCompositionEnabled
- */
- public void setCompositionEnabled(boolean enable) {
-
- throw new UnsupportedOperationException();
- }
-
- /**
- * Determines whether this input method is enabled.
- * An input method that is enabled for composition interprets incoming
- * events for both composition and control purposes, while a
- * disabled input method does not interpret events for composition.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#isCompositionEnabled InputContext.isCompositionEnabled} and
- * <li>when switching from this input method to a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
- * </ul>
- *
- * @return <code>true</code> if this input method is enabled for
- * composition; <code>false</code> otherwise.
- * @throws UnsupportedOperationException if this input method does not
- * support checking whether it is enabled for composition
- * @see #setCompositionEnabled
- */
- public boolean isCompositionEnabled() {
-
- return true;
- }
-
- /**
- * Starts the reconversion operation. The input method obtains the
- * text to be reconverted from the current client component using the
- * {@link java.awt.im.InputMethodRequests#getSelectedText InputMethodRequests.getSelectedText}
- * method. It can use other <code>InputMethodRequests</code>
- * methods to request additional information required for the
- * reconversion operation. The composed and committed text
- * produced by the operation is sent to the client component as a
- * sequence of <code>InputMethodEvent</code>s. If the given text
- * cannot be reconverted, the same text should be sent to the
- * client component as committed text.
- * <p>
- * This method is called by
- * {@link java.awt.im.InputContext#reconvert() InputContext.reconvert}.
- *
- * @throws UnsupportedOperationException if the input method does not
- * support the reconversion operation.
- */
- public void reconvert() {
-
- throw new UnsupportedOperationException("This input method does not reconvert.");
- }
-
- /**
- * Dispatches the event to the input method. If input method support is
- * enabled for the focussed component, incoming events of certain types
- * are dispatched to the current input method for this component before
- * they are dispatched to the component's methods or event listeners.
- * The input method decides whether it needs to handle the event. If it
- * does, it also calls the event's <code>consume</code> method; this
- * causes the event to not get dispatched to the component's event
- * processing methods or event listeners.
- * <p>
- * Events are dispatched if they are instances of InputEvent or its
- * subclasses.
- * This includes instances of the AWT classes KeyEvent and MouseEvent.
- * <p>
- * This method is called by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}.
- *
- * @param event the event being dispatched to the input method
- * @exception NullPointerException if <code>event</code> is null
- */
- public void dispatchEvent(AWTEvent event) {
-
- if (event instanceof KeyEvent) {
-
- KeyEvent keyEvent = (KeyEvent) event;
- if (event.getID() == KeyEvent.KEY_TYPED) {
- impl.handleKeyTyped(keyEvent);
- }
- //System.out.println("handled event " + event);
- }
- else {
- //System.out.println("did not handle event " + event);
- }
- }
-
- /**
- * Notifies this input method of changes in the client window
- * location or state. This method is called while this input
- * method is the current input method of its input context and
- * notifications for it are enabled (see {@link
- * InputMethodContext#enableClientWindowNotification
- * InputMethodContext.enableClientWindowNotification}). Calls
- * to this method are temporarily suspended if the input context's
- * {@link java.awt.im.InputContext#removeNotify removeNotify}
- * method is called, and resume when the input method is activated
- * for a new client component. It is called in the following
- * situations:
- * <ul>
- * <li>
- * when the window containing the current client component changes
- * in location, size, visibility, iconification state, or when the
- * window is closed.</li>
- * <li>
- * from <code> enableClientWindowNotification(inputMethod,
- * true)</code> if the current client component exists,</li>
- * <li>
- * when activating the input method for the first time after it
- * called
- * <code>enableClientWindowNotification(inputMethod,
- * true)</code> if during the call no current client component was
- * available,</li>
- * <li>
- * when activating the input method for a new client component
- * after the input context's removeNotify method has been
- * called.</li>
- * </ul>
- * @param bounds client window's {@link
- * java.awt.Component#getBounds bounds} on the screen; or null if
- * the client window is iconified or invisible
- */
- public void notifyClientWindowChange(Rectangle bounds) {
- }
-
- /**
- * Activates the input method for immediate input processing.
- * <p>
- * If an input method provides its own windows, it should make sure
- * at this point that all necessary windows are open and visible.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
- * when a client component receives a FOCUS_GAINED event,
- * <li>when switching to this input method from a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
- * </ul>
- * The method is only called when the input method is inactive.
- * A newly instantiated input method is assumed to be inactive.
- */
- public void activate() {
- //System.out.println("activated");
- }
-
- /**
- * Deactivates the input method.
- * The isTemporary argument has the same meaning as in
- * {@link java.awt.event.FocusEvent#isTemporary FocusEvent.isTemporary}.
- * <p>
- * If an input method provides its own windows, only windows that relate
- * to the current composition (such as a lookup choice window) should be
- * closed at this point.
- * It is possible that the input method will be immediately activated again
- * for a different client component, and closing and reopening more
- * persistent windows (such as a control panel) would create unnecessary
- * screen flicker.
- * Before an instance of a different input method class is activated,
- * {@link #hideWindows} is called on the current input method.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
- * when a client component receives a FOCUS_LOST event,
- * <li>when switching from this input method to a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
- * <li>before {@link #removeNotify removeNotify} if the current client component is
- * removed.
- * </ul>
- * The method is only called when the input method is active.
- *
- * @param isTemporary whether the focus change is temporary
- */
- public void deactivate(boolean isTemporary) {
- //System.out.println("deactivated");
- }
-
- /**
- * Closes or hides all windows opened by this input method instance or
- * its class.
- * <p>
- * This method is called
- * <ul>
- * <li>before calling {@link #activate activate} on an instance of a different input
- * method class,
- * <li>before calling {@link #dispose dispose} on this input method.
- * </ul>
- * The method is only called when the input method is inactive.
- */
- public void hideWindows() {
- }
-
- /**
- * Notifies the input method that a client component has been
- * removed from its containment hierarchy, or that input method
- * support has been disabled for the component.
- * <p>
- * This method is called by {@link java.awt.im.InputContext#removeNotify InputContext.removeNotify}.
- * <p>
- * The method is only called when the input method is inactive.
- */
- public void removeNotify() {
- }
-
- /**
- * Ends any input composition that may currently be going on in this
- * context. Depending on the platform and possibly user preferences,
- * this may commit or delete uncommitted text. Any changes to the text
- * are communicated to the active component using an input method event.
- *
- * <p>
- * A text editing component may call this in a variety of situations,
- * for example, when the user moves the insertion point within the text
- * (but outside the composed text), or when the component's text is
- * saved to a file or copied to the clipboard.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#endComposition InputContext.endComposition},
- * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
- * when switching to a different client component
- * <li>when switching from this input method to a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
- * </ul>
- */
- public void endComposition() {
-
- impl.endComposition();
- }
-
- /**
- * Disposes of the input method and releases the resources used by it.
- * In particular, the input method should dispose windows and close files that are no
- * longer needed.
- * <p>
- * This method is called by {@link java.awt.im.InputContext#dispose InputContext.dispose}.
- * <p>
- * The method is only called when the input method is inactive.
- * No method of this interface is called on this instance after dispose.
- */
- public void dispose() {
- }
-
- /**
- * Returns a control object from this input method, or null. A
- * control object provides methods that control the behavior of the
- * input method or obtain information from the input method. The type
- * of the object is an input method specific class. Clients have to
- * compare the result against known input method control object
- * classes and cast to the appropriate class to invoke the methods
- * provided.
- * <p>
- * This method is called by
- * {@link java.awt.im.InputContext#getInputMethodControlObject InputContext.getInputMethodControlObject}.
- *
- * @return a control object from this input method, or null
- */
- public Object getControlObject() {
-
- return null;
- }
-}
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethodImpl.java Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,475 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.indicim;
-
-import java.awt.im.spi.InputMethodContext;
-
-import java.awt.event.KeyEvent;
-import java.awt.event.InputMethodEvent;
-import java.awt.font.TextAttribute;
-import java.awt.font.TextHitInfo;
-
-import java.text.AttributedCharacterIterator;
-
-import java.util.Hashtable;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-class IndicInputMethodImpl {
-
- protected char[] KBD_MAP;
-
- private static final char SUBSTITUTION_BASE = '\uff00';
-
- // Indexed by map value - SUBSTITUTION_BASE
- protected char[][] SUBSTITUTION_TABLE;
-
- // Invalid character.
- private static final char INVALID_CHAR = '\uffff';
-
- // Unmapped versions of some interesting characters.
- private static final char KEY_SIGN_VIRAMA = '\u0064'; // or just 'd'??
- private static final char KEY_SIGN_NUKTA = '\u005d'; // or just ']'??
-
- // Two succeeding viramas are replaced by one virama and one ZWNJ.
- // Viram followed by Nukta is replaced by one VIRAMA and one ZWJ
- private static final char ZWJ = '\u200d';
- private static final char ZWNJ = '\u200c';
-
- // Backspace
- private static final char BACKSPACE = '\u0008';
-
- // Sorted list of characters which can be followed by Nukta
- protected char[] JOIN_WITH_NUKTA;
-
- // Nukta form of the above characters
- protected char[] NUKTA_FORM;
-
- private int log2;
- private int power;
- private int extra;
-
- // cached TextHitInfo. Only one type of TextHitInfo is required.
- private static final TextHitInfo ZERO_TRAILING_HIT_INFO = TextHitInfo.trailing(0);
-
- /**
- * Returns the index of the given character in the JOIN_WITH_NUKTA array.
- * If character is not found, -1 is returned.
- */
- private int nuktaIndex(char ch) {
-
- if (JOIN_WITH_NUKTA == null) {
- return -1;
- }
-
- int probe = power;
- int index = 0;
-
- if (JOIN_WITH_NUKTA[extra] <= ch) {
- index = extra;
- }
-
- while (probe > (1 << 0)) {
- probe >>= 1;
-
- if (JOIN_WITH_NUKTA[index + probe] <= ch) {
- index += probe;
- }
- }
-
- if (JOIN_WITH_NUKTA[index] != ch) {
- index = -1;
- }
-
- return index;
- }
-
- /**
- * Returns the equivalent character for hindi locale.
- * @param originalChar The original character.
- */
- private char getMappedChar( char originalChar )
- {
- if (originalChar <= KBD_MAP.length) {
- return KBD_MAP[originalChar];
- }
-
- return originalChar;
- }//getMappedChar()
-
- // Array used to hold the text to be sent.
- // If the last character was not committed it is stored in text[0].
- // The variable totalChars give an indication of whether the last
- // character was committed or not. If at any time ( but not within a
- // a call to dispatchEvent ) totalChars is not equal to 0 ( it can
- // only be 1 otherwise ) the last character was not committed.
- private char [] text = new char[4];
-
- // this is always 0 before and after call to dispatchEvent. This character assumes
- // significance only within a call to dispatchEvent.
- private int committedChars = 0;// number of committed characters
-
- // the total valid characters in variable text currently.
- private int totalChars = 0;//number of total characters ( committed + composed )
-
- private boolean lastCharWasVirama = false;
-
- private InputMethodContext context;
-
- //
- // Finds the high bit by binary searching
- // through the bits in n.
- //
- private static byte highBit(int n)
- {
- if (n <= 0) {
- return -32;
- }
-
- byte bit = 0;
-
- if (n >= 1 << 16) {
- n >>= 16;
- bit += 16;
- }
-
- if (n >= 1 << 8) {
- n >>= 8;
- bit += 8;
- }
-
- if (n >= 1 << 4) {
- n >>= 4;
- bit += 4;
- }
-
- if (n >= 1 << 2) {
- n >>= 2;
- bit += 2;
- }
-
- if (n >= 1 << 1) {
- n >>= 1;
- bit += 1;
- }
-
- return bit;
- }
-
- IndicInputMethodImpl(char[] keyboardMap, char[] joinWithNukta, char[] nuktaForm,
- char[][] substitutionTable) {
- KBD_MAP = keyboardMap;
- JOIN_WITH_NUKTA = joinWithNukta;
- NUKTA_FORM = nuktaForm;
- SUBSTITUTION_TABLE = substitutionTable;
-
- if (JOIN_WITH_NUKTA != null) {
- int log2 = highBit(JOIN_WITH_NUKTA.length);
-
- power = 1 << log2;
- extra = JOIN_WITH_NUKTA.length - power;
- } else {
- power = extra = 0;
- }
-
- }
-
- void setInputMethodContext(InputMethodContext context) {
-
- this.context = context;
- }
-
- void handleKeyTyped(KeyEvent kevent) {
-
- char keyChar = kevent.getKeyChar();
- char currentChar = getMappedChar(keyChar);
-
- // The Explicit and Soft Halanta case.
- if ( lastCharWasVirama ) {
- switch (keyChar) {
- case KEY_SIGN_NUKTA:
- currentChar = ZWJ;
- break;
- case KEY_SIGN_VIRAMA:
- currentChar = ZWNJ;
- break;
- default:
- }//endSwitch
- }//endif
-
- if (currentChar == INVALID_CHAR) {
- kevent.consume();
- return;
- }
-
- if (currentChar == BACKSPACE) {
- lastCharWasVirama = false;
-
- if (totalChars > 0) {
- totalChars = committedChars = 0;
- } else {
- return;
- }
- }
- else if (keyChar == KEY_SIGN_NUKTA) {
- int nuktaIndex = nuktaIndex(text[0]);
-
- if (nuktaIndex != -1) {
- text[0] = NUKTA_FORM[nuktaIndex];
- } else {
- // the last character was committed, commit just Nukta.
- // Note : the lastChar must have been committed if it is not one of
- // the characters which combine with nukta.
- // the state must be totalChars = committedChars = 0;
- text[totalChars++] = currentChar;
- }
-
- committedChars += 1;
- }
- else {
- int nuktaIndex = nuktaIndex(currentChar);
-
- if (nuktaIndex != -1) {
- // Commit everything but currentChar
- text[totalChars++] = currentChar;
- committedChars = totalChars-1;
- } else {
- if (currentChar >= SUBSTITUTION_BASE) {
- char[] sub = SUBSTITUTION_TABLE[currentChar - SUBSTITUTION_BASE];
-
- System.arraycopy(sub, 0, text, totalChars, sub.length);
- totalChars += sub.length;
- } else {
- text[totalChars++] = currentChar;
- }
-
- committedChars = totalChars;
- }
- }
-
- ACIText aText = new ACIText( text, 0, totalChars, committedChars );
- int composedCharLength = totalChars - committedChars;
- TextHitInfo caret=null,visiblePosition=null;
- switch( composedCharLength ) {
- case 0:
- break;
- case 1:
- visiblePosition = caret = ZERO_TRAILING_HIT_INFO;
- break;
- default:
- assert false : "The code should not reach here. There is no case where there can be more than one character pending.";
- }
-
- context.dispatchInputMethodEvent(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED,
- aText,
- committedChars,
- caret,
- visiblePosition);
-
- if (totalChars == 0) {
- text[0] = INVALID_CHAR;
- } else {
- text[0] = text[totalChars - 1];// make text[0] hold the last character
- }
-
- lastCharWasVirama = keyChar == KEY_SIGN_VIRAMA && !lastCharWasVirama;
-
- totalChars -= committedChars;
- committedChars = 0;
- // state now text[0] = last character
- // totalChars = ( last character committed )? 0 : 1;
- // committedChars = 0;
-
- kevent.consume();// prevent client from getting this event.
- }//dispatchEvent()
-
- void endComposition() {
- if( totalChars != 0 ) {// if some character is not committed.
- ACIText aText = new ACIText( text, 0, totalChars, totalChars );
- context.dispatchInputMethodEvent( InputMethodEvent.INPUT_METHOD_TEXT_CHANGED,
- aText, totalChars, null, null );
- totalChars = committedChars = 0;
- text[0] = INVALID_CHAR;
- lastCharWasVirama = false;
- }//end if
- }//endComposition()
-
- // custom AttributedCharacterIterator -- much lightweight since currently there is no
- // attribute defined on the text being generated by the input method.
- private class ACIText implements AttributedCharacterIterator {
- private char [] text = null;
- private int committed = 0;
- private int index = 0;
-
- ACIText( char [] chArray, int offset, int length, int committed ) {
- this.text = new char[length];
- this.committed = committed;
- System.arraycopy( chArray, offset, text, 0, length );
- }//c'tor
-
- // CharacterIterator methods.
- public char first() {
- return _setIndex( 0 );
- }
-
- public char last() {
- if( text.length == 0 ) {
- return _setIndex( text.length );
- }
- return _setIndex( text.length - 1 );
- }
-
- public char current() {
- if( index == text.length )
- return DONE;
- return text[index];
- }
-
- public char next() {
- if( index == text.length ) {
- return DONE;
- }
- return _setIndex( index + 1 );
- }
-
- public char previous() {
- if( index == 0 )
- return DONE;
- return _setIndex( index - 1 );
- }
-
- public char setIndex(int position) {
- if( position < 0 || position > text.length ) {
- throw new IllegalArgumentException();
- }
- return _setIndex( position );
- }
-
- public int getBeginIndex() {
- return 0;
- }
-
- public int getEndIndex() {
- return text.length;
- }
-
- public int getIndex() {
- return index;
- }
-
- public Object clone() {
- try {
- ACIText clone = (ACIText) super.clone();
- return clone;
- } catch (CloneNotSupportedException e) {
- throw new InternalError();
- }
- }
-
-
- // AttributedCharacterIterator methods.
- public int getRunStart() {
- return index >= committed ? committed : 0;
- }
-
- public int getRunStart(AttributedCharacterIterator.Attribute attribute) {
- return (index >= committed &&
- attribute == TextAttribute.INPUT_METHOD_UNDERLINE) ? committed : 0;
- }
-
- public int getRunStart(Set<? extends Attribute> attributes) {
- return (index >= committed &&
- attributes.contains(TextAttribute.INPUT_METHOD_UNDERLINE)) ? committed : 0;
- }
-
- public int getRunLimit() {
- return index < committed ? committed : text.length;
- }
-
- public int getRunLimit(AttributedCharacterIterator.Attribute attribute) {
- return (index < committed &&
- attribute == TextAttribute.INPUT_METHOD_UNDERLINE) ? committed : text.length;
- }
-
- public int getRunLimit(Set<? extends Attribute> attributes) {
- return (index < committed &&
- attributes.contains(TextAttribute.INPUT_METHOD_UNDERLINE)) ? committed : text.length;
- }
-
- public Map getAttributes() {
- Hashtable result = new Hashtable();
- if (index >= committed && committed < text.length) {
- result.put(TextAttribute.INPUT_METHOD_UNDERLINE,
- TextAttribute.UNDERLINE_LOW_ONE_PIXEL);
- }
- return result;
- }
-
- public Object getAttribute(AttributedCharacterIterator.Attribute attribute) {
- if (index >= committed &&
- committed < text.length &&
- attribute == TextAttribute.INPUT_METHOD_UNDERLINE) {
-
- return TextAttribute.UNDERLINE_LOW_ONE_PIXEL;
- }
- return null;
- }
-
- public Set getAllAttributeKeys() {
- HashSet result = new HashSet();
- if (committed < text.length) {
- result.add(TextAttribute.INPUT_METHOD_UNDERLINE);
- }
- return result;
- }
-
- // private methods
-
- /**
- * This is always called with valid i ( 0 < i <= text.length )
- */
- private char _setIndex( int i ) {
- index = i;
- if( i == text.length ) {
- return DONE;
- }
- return text[i];
- }//_setIndex()
-
- }//end of inner class
-}
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/java.awt.im.spi.InputMethodDescriptor Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-com.sun.inputmethods.internal.indicim.DevanagariInputMethodDescriptor
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = Devanagari Input Method
-
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_de.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = Devanagari Input Method
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_es.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = Devanagari Input Method
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_fr.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = Devanagari Input Method
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_it.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = Devanagari Input Method
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ja.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = \u30c7\u30fc\u30f4\u30a1\u30ca\u30fc\u30ac\u30ea\u30fc\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ko.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = Devanagari \uc785\ub825 \uba54\uc18c\ub4dc
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_sv.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = Devanagari Input Method
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_CN.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = Devanagari \u8f93\u5165\u6cd5
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_TW.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari = Devanagari \u8f38\u5165\u6cd5
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethod.java Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,437 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.thaiim;
-
-import java.awt.im.spi.InputMethod;
-import java.awt.im.spi.InputMethodContext;
-
-import java.awt.AWTEvent;
-import java.awt.Rectangle;
-
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
-
-import java.lang.Character.Subset;
-
-import java.util.Locale;
-
-class ThaiInputMethod implements InputMethod {
-
- private ThaiInputMethodImpl impl;
- private Locale locale;
-
- ThaiInputMethod(Locale theLocale, ThaiInputMethodImpl theImplementation) {
- locale = theLocale;
- impl = theImplementation;
- }
-
- /**
- * Sets the input method context, which is used to dispatch input method
- * events to the client component and to request information from
- * the client component.
- * <p>
- * This method is called once immediately after instantiating this input
- * method.
- *
- * @param context the input method context for this input method
- * @exception NullPointerException if <code>context</code> is null
- */
- public void setInputMethodContext(InputMethodContext context) {
-
- impl.setInputMethodContext(context);
- }
-
- /**
- * Attempts to set the input locale. If the input method supports the
- * desired locale, it changes its behavior to support input for the locale
- * and returns true.
- * Otherwise, it returns false and does not change its behavior.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
- * <li>when switching to this input method through the user interface if the user
- * specified a locale or if the previously selected input method's
- * {@link java.awt.im.spi.InputMethod#getLocale getLocale} method
- * returns a non-null value.
- * </ul>
- *
- * @param locale locale to input
- * @return whether the specified locale is supported
- * @exception NullPointerException if <code>locale</code> is null
- */
- public boolean setLocale(Locale locale) {
-
- if (locale.getLanguage().equals(this.locale.getLanguage())) {
- //System.out.println("returning true for locale " + locale);
- return true;
- }
- else {
- //System.out.println("returning false for locale " + locale);
- return false;
- }
- }
-
- /**
- * Returns the current input locale. Might return null in exceptional cases.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#getLocale InputContext.getLocale} and
- * <li>when switching from this input method to a different one through the
- * user interface.
- * </ul>
- *
- * @return the current input locale, or null
- */
- public Locale getLocale() {
-
- return locale;
- }
-
- /**
- * Sets the subsets of the Unicode character set that this input method
- * is allowed to input. Null may be passed in to indicate that all
- * characters are allowed.
- * <p>
- * This method is called
- * <ul>
- * <li>immediately after instantiating this input method,
- * <li>when switching to this input method from a different one, and
- * <li>by {@link java.awt.im.InputContext#setCharacterSubsets InputContext.setCharacterSubsets}.
- * </ul>
- *
- * @param subsets the subsets of the Unicode character set from which
- * characters may be input
- */
- public void setCharacterSubsets(Subset[] subsets) {
- }
-
- /**
- * Enables or disables this input method for composition,
- * depending on the value of the parameter <code>enable</code>.
- * <p>
- * An input method that is enabled for composition interprets incoming
- * events for both composition and control purposes, while a
- * disabled input method does not interpret events for composition.
- * Note however that events are passed on to the input method regardless
- * whether it is enabled or not, and that an input method that is disabled
- * for composition may still interpret events for control purposes,
- * including to enable or disable itself for composition.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#setCompositionEnabled InputContext.setCompositionEnabled},
- * <li>when switching to this input method from a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
- * if the previously selected input method's
- * {@link java.awt.im.spi.InputMethod#isCompositionEnabled isCompositionEnabled}
- * method returns without throwing an exception.
- * </ul>
- *
- * @param enable whether to enable the input method for composition
- * @throws UnsupportedOperationException if this input method does not
- * support the enabling/disabling operation
- * @see #isCompositionEnabled
- */
- public void setCompositionEnabled(boolean enable) {
-
- throw new UnsupportedOperationException();
- }
-
- /**
- * Determines whether this input method is enabled.
- * An input method that is enabled for composition interprets incoming
- * events for both composition and control purposes, while a
- * disabled input method does not interpret events for composition.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#isCompositionEnabled InputContext.isCompositionEnabled} and
- * <li>when switching from this input method to a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
- * </ul>
- *
- * @return <code>true</code> if this input method is enabled for
- * composition; <code>false</code> otherwise.
- * @throws UnsupportedOperationException if this input method does not
- * support checking whether it is enabled for composition
- * @see #setCompositionEnabled
- */
- public boolean isCompositionEnabled() {
-
- return true;
- }
-
- /**
- * Starts the reconversion operation. The input method obtains the
- * text to be reconverted from the current client component using the
- * {@link java.awt.im.InputMethodRequests#getSelectedText InputMethodRequests.getSelectedText}
- * method. It can use other <code>InputMethodRequests</code>
- * methods to request additional information required for the
- * reconversion operation. The composed and committed text
- * produced by the operation is sent to the client component as a
- * sequence of <code>InputMethodEvent</code>s. If the given text
- * cannot be reconverted, the same text should be sent to the
- * client component as committed text.
- * <p>
- * This method is called by
- * {@link java.awt.im.InputContext#reconvert() InputContext.reconvert}.
- *
- * @throws UnsupportedOperationException if the input method does not
- * support the reconversion operation.
- */
- public void reconvert() {
-
- throw new UnsupportedOperationException("This input method does not reconvert.");
- }
-
- /**
- * Dispatches the event to the input method. If input method support is
- * enabled for the focussed component, incoming events of certain types
- * are dispatched to the current input method for this component before
- * they are dispatched to the component's methods or event listeners.
- * The input method decides whether it needs to handle the event. If it
- * does, it also calls the event's <code>consume</code> method; this
- * causes the event to not get dispatched to the component's event
- * processing methods or event listeners.
- * <p>
- * Events are dispatched if they are instances of InputEvent or its
- * subclasses.
- * This includes instances of the AWT classes KeyEvent and MouseEvent.
- * <p>
- * This method is called by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}.
- *
- * @param event the event being dispatched to the input method
- * @exception NullPointerException if <code>event</code> is null
- */
- public void dispatchEvent(AWTEvent event) {
-
- if (event instanceof KeyEvent) {
-
- KeyEvent keyEvent = (KeyEvent) event;
- if (event.getID() == KeyEvent.KEY_TYPED) {
- //System.out.println("handled event " + event);
- impl.handleKeyTyped(keyEvent);
- }
- }
- else {
- //System.out.println("did not handle event " + event);
- }
- }
-
- /**
- * Notifies this input method of changes in the client window
- * location or state. This method is called while this input
- * method is the current input method of its input context and
- * notifications for it are enabled (see {@link
- * InputMethodContext#enableClientWindowNotification
- * InputMethodContext.enableClientWindowNotification}). Calls
- * to this method are temporarily suspended if the input context's
- * {@link java.awt.im.InputContext#removeNotify removeNotify}
- * method is called, and resume when the input method is activated
- * for a new client component. It is called in the following
- * situations:
- * <ul>
- * <li>
- * when the window containing the current client component changes
- * in location, size, visibility, iconification state, or when the
- * window is closed.</li>
- * <li>
- * from <code> enableClientWindowNotification(inputMethod,
- * true)</code> if the current client component exists,</li>
- * <li>
- * when activating the input method for the first time after it
- * called
- * <code>enableClientWindowNotification(inputMethod,
- * true)</code> if during the call no current client component was
- * available,</li>
- * <li>
- * when activating the input method for a new client component
- * after the input context's removeNotify method has been
- * called.</li>
- * </ul>
- * @param bounds client window's {@link
- * java.awt.Component#getBounds bounds} on the screen; or null if
- * the client window is iconified or invisible
- */
- public void notifyClientWindowChange(Rectangle bounds) {
- }
-
- /**
- * Activates the input method for immediate input processing.
- * <p>
- * If an input method provides its own windows, it should make sure
- * at this point that all necessary windows are open and visible.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
- * when a client component receives a FOCUS_GAINED event,
- * <li>when switching to this input method from a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
- * </ul>
- * The method is only called when the input method is inactive.
- * A newly instantiated input method is assumed to be inactive.
- */
- public void activate() {
- //System.out.println("activated");
- }
-
- /**
- * Deactivates the input method.
- * The isTemporary argument has the same meaning as in
- * {@link java.awt.event.FocusEvent#isTemporary FocusEvent.isTemporary}.
- * <p>
- * If an input method provides its own windows, only windows that relate
- * to the current composition (such as a lookup choice window) should be
- * closed at this point.
- * It is possible that the input method will be immediately activated again
- * for a different client component, and closing and reopening more
- * persistent windows (such as a control panel) would create unnecessary
- * screen flicker.
- * Before an instance of a different input method class is activated,
- * {@link #hideWindows} is called on the current input method.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
- * when a client component receives a FOCUS_LOST event,
- * <li>when switching from this input method to a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
- * <li>before {@link #removeNotify removeNotify} if the current client component is
- * removed.
- * </ul>
- * The method is only called when the input method is active.
- *
- * @param isTemporary whether the focus change is temporary
- */
- public void deactivate(boolean isTemporary) {
- //System.out.println("deactivated");
- }
-
- /**
- * Closes or hides all windows opened by this input method instance or
- * its class.
- * <p>
- * This method is called
- * <ul>
- * <li>before calling {@link #activate activate} on an instance of a different input
- * method class,
- * <li>before calling {@link #dispose dispose} on this input method.
- * </ul>
- * The method is only called when the input method is inactive.
- */
- public void hideWindows() {
- }
-
- /**
- * Notifies the input method that a client component has been
- * removed from its containment hierarchy, or that input method
- * support has been disabled for the component.
- * <p>
- * This method is called by {@link java.awt.im.InputContext#removeNotify InputContext.removeNotify}.
- * <p>
- * The method is only called when the input method is inactive.
- */
- public void removeNotify() {
- }
-
- /**
- * Ends any input composition that may currently be going on in this
- * context. Depending on the platform and possibly user preferences,
- * this may commit or delete uncommitted text. Any changes to the text
- * are communicated to the active component using an input method event.
- *
- * <p>
- * A text editing component may call this in a variety of situations,
- * for example, when the user moves the insertion point within the text
- * (but outside the composed text), or when the component's text is
- * saved to a file or copied to the clipboard.
- * <p>
- * This method is called
- * <ul>
- * <li>by {@link java.awt.im.InputContext#endComposition InputContext.endComposition},
- * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
- * when switching to a different client component
- * <li>when switching from this input method to a different one using the
- * user interface or
- * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
- * </ul>
- */
- public void endComposition() {
-
- impl.endComposition();
- }
-
- /**
- * Disposes of the input method and releases the resources used by it.
- * In particular, the input method should dispose windows and close files that are no
- * longer needed.
- * <p>
- * This method is called by {@link java.awt.im.InputContext#dispose InputContext.dispose}.
- * <p>
- * The method is only called when the input method is inactive.
- * No method of this interface is called on this instance after dispose.
- */
- public void dispose() {
- }
-
- /**
- * Returns a control object from this input method, or null. A
- * control object provides methods that control the behavior of the
- * input method or obtain information from the input method. The type
- * of the object is an input method specific class. Clients have to
- * compare the result against known input method control object
- * classes and cast to the appropriate class to invoke the methods
- * provided.
- * <p>
- * This method is called by
- * {@link java.awt.im.InputContext#getInputMethodControlObject InputContext.getInputMethodControlObject}.
- *
- * @return a control object from this input method, or null
- */
- public Object getControlObject() {
-
- return null;
- }
-}
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodDescriptor.java Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.thaiim;
-
-import java.awt.Image;
-import java.awt.im.spi.InputMethod;
-import java.awt.im.spi.InputMethodDescriptor;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class ThaiInputMethodDescriptor implements InputMethodDescriptor {
-
- static final Locale THAI = new Locale("th");
-
- public ThaiInputMethodDescriptor() {
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#getAvailableLocales
- */
- public Locale[] getAvailableLocales() {
- return new Locale[] { THAI };
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#hasDynamicLocaleList
- */
- public boolean hasDynamicLocaleList() {
- return false;
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#getInputMethodDisplayName
- */
- public synchronized String getInputMethodDisplayName(Locale inputLocale, Locale displayLanguage) {
- try {
- ResourceBundle resources = ResourceBundle.getBundle(
- "com.sun.inputmethods.internal.thaiim.resources.DisplayNames", displayLanguage);
- return resources.getString("DisplayName.Thai");
- } catch (MissingResourceException mre) {
- return "Thai Input Method";
- }
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#getInputMethodIcon
- */
- public Image getInputMethodIcon(Locale inputLocale) {
- return null;
- }
-
- /**
- * @see java.awt.im.spi.InputMethodDescriptor#createInputMethod
- */
- public InputMethod createInputMethod() throws Exception {
- ThaiInputMethodImpl impl = new ThaiInputMethodImpl();
- return new ThaiInputMethod(THAI, impl);
- }
-
- public String toString() {
- return getClass().getName();
- }
-}
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodImpl.java Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.thaiim;
-
-import java.awt.im.InputMethodRequests;
-import java.awt.im.spi.InputMethodContext;
-
-import java.awt.Toolkit;
-import java.awt.event.KeyEvent;
-import java.awt.event.InputMethodEvent;
-import java.awt.font.TextAttribute;
-import java.awt.font.TextHitInfo;
-
-import java.text.AttributedCharacterIterator;
-import java.text.AttributedString;
-
-class ThaiInputMethodImpl {
-
- private static final char[] keyboardMap = {
- /* 00 */ '\u0000',
- /* 01 */ '\u0001',
- /* 02 */ '\u0002',
- /* 03 */ '\u0003',
- /* 04 */ '\u0004',
- /* 05 */ '\u0005',
- /* 06 */ '\u0006',
- /* 07 */ '\u0007',
- /* 08 */ '\u0008',
- /* 09 */ '\u0009',
- /* 0A */ '\012',
- /* 0B */ '\u000B',
- /* 0C */ '\u000C',
- /* 0D */ '\015',
- /* 0E */ '\u000E',
- /* 0F */ '\u000F',
- /* 10 */ '\u0010',
- /* 11 */ '\u0011',
- /* 12 */ '\u0012',
- /* 13 */ '\u0013',
- /* 14 */ '\u0014',
- /* 15 */ '\u0015',
- /* 16 */ '\u0016',
- /* 17 */ '\u0017',
- /* 18 */ '\u0018',
- /* 19 */ '\u0019',
- /* 1A */ '\u001A',
- /* 1B */ '\u001B',
- /* 1C */ '\u001C',
- /* 1D */ '\u001D',
- /* 1E */ '\u001E',
- /* 1F */ '\u001F',
- /* 20 */ '\u0020',
- /* 21 */ '\u0e45', // '!'
- /* 22 */ '\u002e', // '"'
- /* 23 */ '\u0e52', // '#'
- /* 24 */ '\u0e53', // '$'
- /* 25 */ '\u0e54', // '%'
- /* 26 */ '\u0e4e', // '&'
- /* 27 */ '\u0e07', // '''
- /* 28 */ '\u0e56', // '('
- /* 29 */ '\u0e57', // ')'
- /* 2A */ '\u0e55', // '*'
- /* 2B */ '\u0e59', // '+'
- /* 2C */ '\u0e21', // ','
- /* 2D */ '\u0e02', // '-'
- /* 2E */ '\u0e43', // '.'
- /* 2F */ '\u0e1d', // '/'
- /* 30 */ '\u0e08', // '0'
- /* 31 */ '\u0e3f', // '1'
- /* 32 */ '\u002f', // '2'
- /* 33 */ '\u002d', // '3'
- /* 34 */ '\u0e20', // '4'
- /* 35 */ '\u0e16', // '5'
- /* 36 */ '\u0e38', // '6'
- /* 37 */ '\u0e36', // '7'
- /* 38 */ '\u0e04', // '8'
- /* 39 */ '\u0e15', // '9'
- /* 3A */ '\u0e0b', // ':'
- /* 3B */ '\u0e27', // ';'
- /* 3C */ '\u0e12', // '<'
- /* 3D */ '\u0e0a', // '='
- /* 3E */ '\u0e2c', // '>'
- /* 3F */ '\u0e26', // '?'
- /* 40 */ '\u0e51', // '@'
- /* 41 */ '\u0e24', // 'A'
- /* 42 */ '\u0e3a', // 'B'
- /* 43 */ '\u0e09', // 'C'
- /* 44 */ '\u0e0f', // 'D'
- /* 45 */ '\u0e0e', // 'E'
- /* 46 */ '\u0e42', // 'F'
- /* 47 */ '\u0e0c', // 'G'
- /* 48 */ '\u0e47', // 'H'
- /* 49 */ '\u0e13', // 'I'
- /* 4A */ '\u0e4b', // 'J'
- /* 4B */ '\u0e29', // 'K'
- /* 4C */ '\u0e28', // 'L'
- /* 4D */ '\u003f', // 'M'
- /* 4E */ '\u0e4c', // 'N'
- /* 4F */ '\u0e2f', // 'O'
- /* 50 */ '\u0e0d', // 'P'
- /* 51 */ '\u0e50', // 'Q'
- /* 52 */ '\u0e11', // 'R'
- /* 53 */ '\u0e06', // 'S'
- /* 54 */ '\u0e18', // 'T'
- /* 55 */ '\u0e4a', // 'U'
- /* 56 */ '\u0e2e', // 'V'
- /* 57 */ '\u0022', // 'W'
- /* 58 */ '\u0029', // 'X'
- /* 59 */ '\u0e4d', // 'Y'
- /* 5A */ '\u0028', // 'Z'
- /* 5B */ '\u0e1a', // '['
- /* 5C */ '\u0e05', // '\'
- /* 5D */ '\u0e25', // ']'
- /* 5E */ '\u0e39', // '^'
- /* 5F */ '\u0e58', // '_'
- /* 60 */ '\u0e4f', // '`'
- /* 61 */ '\u0e1f', // 'a'
- /* 62 */ '\u0e34', // 'b'
- /* 63 */ '\u0e41', // 'c'
- /* 64 */ '\u0e01', // 'd'
- /* 65 */ '\u0e33', // 'e'
- /* 66 */ '\u0e14', // 'f'
- /* 67 */ '\u0e40', // 'g'
- /* 68 */ '\u0e49', // 'h'
- /* 69 */ '\u0e23', // 'i'
- /* 6A */ '\u0e48', // 'j'
- /* 6B */ '\u0e32', // 'k'
- /* 6C */ '\u0e2a', // 'l'
- /* 6D */ '\u0e17', // 'm'
- /* 6E */ '\u0e37', // 'n'
- /* 6F */ '\u0e19', // 'o'
- /* 70 */ '\u0e22', // 'p'
- /* 71 */ '\u0e46', // 'q'
- /* 72 */ '\u0e1e', // 'r'
- /* 73 */ '\u0e2b', // 's'
- /* 74 */ '\u0e30', // 't'
- /* 75 */ '\u0e35', // 'u'
- /* 76 */ '\u0e2d', // 'v'
- /* 77 */ '\u0e44', // 'w'
- /* 78 */ '\u0e1b', // 'x'
- /* 79 */ '\u0e31', // 'y'
- /* 7A */ '\u0e1c', // 'z'
- /* 7B */ '\u0e10', // '{'
- /* 7C */ '\u0e03', // '|'
- /* 7D */ '\u002c', // '}'
- /* 7E */ '\u0e5b', // '~'
- /* 7F */ '\u007F' //
- };
-
- // cached TextHitInfo. Only one type of TextHitInfo is required.
- private static final TextHitInfo ZERO_TRAILING_HIT_INFO = TextHitInfo.trailing(0);
-
- private ThaiRules rules;
-
- /**
- * Returns the equivalent character for thai locale.
- * @param originalChar The original character.
- */
- private char getMappedChar( char originalChar )
- {
- if (originalChar <= keyboardMap.length) {
- return keyboardMap[originalChar];
- }
-
- return originalChar;
- }//getMappedChar()
-
- private InputMethodContext context;
-
- void setInputMethodContext(InputMethodContext context) {
- this.context = context;
- rules = new ThaiRules((InputMethodRequests)context);
- }
-
- void handleKeyTyped(KeyEvent kevent) {
- char keyChar = kevent.getKeyChar();
- char currentChar = getMappedChar(keyChar);
- if (!Character.UnicodeBlock.THAI.equals(Character.UnicodeBlock.of(currentChar))) {
- // don't care
- return;
- } else if (rules.isInputValid(currentChar)) {
- Character tmp = new Character(currentChar);
- String tmp2 = tmp.toString();
- context.dispatchInputMethodEvent(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED,
- (new AttributedString(tmp2)).getIterator(),
- 1,
- ZERO_TRAILING_HIT_INFO,
- ZERO_TRAILING_HIT_INFO);
- } else {
- // input sequence is not allowed
- Toolkit.getDefaultToolkit().beep();
- }
-
- kevent.consume();// prevent client from getting this event.
- return;
- }//dispatchEvent()
-
- void endComposition() {
- }//endComposition()
-}
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiRules.java Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,348 +0,0 @@
-/*
- * Copyright (c) 2002, 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 com.sun.inputmethods.internal.thaiim;
-
-import java.awt.im.InputMethodRequests;
-
-public class ThaiRules {
-
- public static final char BASE = 0x0e00;
-
- public static final byte NON = 0;
- public static final byte CONS = 1;
- public static final byte LV = 2;
- public static final byte FV1 = 3;
- public static final byte FV2 = 4;
- public static final byte FV3 = 5;
- public static final byte FV4 = 6;
- /* Note that FV4 is added. It is not in WTT.
- * We need it for SARA AM since it has a
- * weired characteristic to share the same
- * cell with whatever consonant preceeds it.
- */
- public static final byte BV1 = 7;
- public static final byte BV2 = 8;
- public static final byte BD = 9;
- public static final byte TONE = 10;
- public static final byte AD1 = 11;
- public static final byte AD2 = 12;
- public static final byte AD3 = 13;
- public static final byte AV1 = 14;
- public static final byte AV2 = 15;
- public static final byte AV3 = 16;
-
- /**
- * Constants for validity checking and auto correction
- */
- public static final byte STRICT = 0;
- public static final byte LOOSE = 1;
- public static final byte NOREPLACE = 2;
-
- public static final byte[] CHARTYPE = {
- /* 0e00 UNUSED */ NON,
- /* THAI CHARACTER KO KAI */ CONS,
- /* THAI CHARACTER KHO KHAI */ CONS,
- /* THAI CHARACTER KHO KHUAT */ CONS,
- /* THAI CHARACTER KHO KHWAI */ CONS,
- /* THAI CHARACTER KHO KHON */ CONS,
- /* THAI CHARACTER KHO RAKHANG */ CONS,
- /* THAI CHARACTER NGO NGU */ CONS,
- /* THAI CHARACTER CHO CHAN */ CONS,
- /* THAI CHARACTER CHO CHING */ CONS,
- /* THAI CHARACTER CHO CHANG */ CONS,
- /* THAI CHARACTER SO SO */ CONS,
- /* THAI CHARACTER CHO CHOE */ CONS,
- /* THAI CHARACTER YO YING */ CONS,
- /* THAI CHARACTER DO CHADA */ CONS,
- /* THAI CHARACTER TO PATAK */ CONS,
- /* THAI CHARACTER THO THAN */ CONS,
- /* THAI CHARACTER THO NANGMONTHO */ CONS,
- /* THAI CHARACTER THO PHUTHAO */ CONS,
- /* THAI CHARACTER NO NEN */ CONS,
- /* THAI CHARACTER DO DEK */ CONS,
- /* THAI CHARACTER TO TAO */ CONS,
- /* THAI CHARACTER THO THUNG */ CONS,
- /* THAI CHARACTER THO THAHAN */ CONS,
- /* THAI CHARACTER THO THONG */ CONS,
- /* THAI CHARACTER NO NU */ CONS,
- /* THAI CHARACTER BO BAIMAI */ CONS,
- /* THAI CHARACTER PO PLA */ CONS,
- /* THAI CHARACTER PHO PHUNG */ CONS,
- /* THAI CHARACTER FO FA */ CONS,
- /* THAI CHARACTER PHO PHAN */ CONS,
- /* THAI CHARACTER FO FAN */ CONS,
- /* THAI CHARACTER PHO SAMPHAO */ CONS,
- /* THAI CHARACTER MO MA */ CONS,
- /* THAI CHARACTER YO YAK */ CONS,
- /* THAI CHARACTER RO RUA */ CONS,
- /* THAI CHARACTER RU */ FV3,
- /* THAI CHARACTER LO LING */ CONS,
- /* THAI CHARACTER LU */ FV3,
- /* THAI CHARACTER WO WAEN */ CONS,
- /* THAI CHARACTER SO SALA */ CONS,
- /* THAI CHARACTER SO RUSI */ CONS,
- /* THAI CHARACTER SO SUA */ CONS,
- /* THAI CHARACTER HO HIP */ CONS,
- /* THAI CHARACTER LO CHULA */ CONS,
- /* THAI CHARACTER O ANG */ CONS,
- /* THAI CHARACTER HO NOKHUK */ CONS,
- /* THAI CHARACTER PAIYANNOI */ NON,
- /* THAI CHARACTER SARA A */ FV1,
- /* THAI CHARACTER MAI HAN-AKAT */ AV2,
- /* THAI CHARACTER SARA AA */ FV1,
- /* THAI CHARACTER SARA AM */ FV4,
- /* THAI CHARACTER SARA I */ AV1,
- /* THAI CHARACTER SARA II */ AV3,
- /* THAI CHARACTER SARA UE */ AV2,
- /* THAI CHARACTER SARA UEE */ AV3,
- /* THAI CHARACTER SARA U */ BV1,
- /* THAI CHARACTER SARA UU */ BV2,
- /* THAI CHARACTER PHINTHU */ BD,
- /* 0e3b UNUSED */ NON,
- /* 0e3c UNUSED */ NON,
- /* 0e3d UNUSED */ NON,
- /* 0e3e UNUSED */ NON,
- /* THAI CURRENCY SYMBOL BAHT */ NON,
- /* THAI CHARACTER SARA E */ LV,
- /* THAI CHARACTER SARA AE */ LV,
- /* THAI CHARACTER SARA O */ LV,
- /* THAI CHARACTER SARA AI MAIMUAN */ LV,
- /* THAI CHARACTER SARA AI MAIMALAI */ LV,
- /* THAI CHARACTER LAKKHANGYAO */ FV2,
- /* THAI CHARACTER MAIYAMOK */ NON,
- /* THAI CHARACTER MAITAIKHU */ AD2,
- /* THAI CHARACTER MAI EK */ TONE,
- /* THAI CHARACTER MAI THO */ TONE,
- /* THAI CHARACTER MAI TRI */ TONE,
- /* THAI CHARACTER MAI CHATTAWA */ TONE,
- /* THAI CHARACTER THANTHAKHAT */ AD1,
- /* THAI CHARACTER NIKHAHIT */ AD3,
- /* THAI CHARACTER YAMAKKAN */ AD3,
- /* THAI CHARACTER FONGMAN */ NON,
- /* THAI DIGIT ZERO */ NON,
- /* THAI DIGIT ONE */ NON,
- /* THAI DIGIT TWO */ NON,
- /* THAI DIGIT THREE */ NON,
- /* THAI DIGIT FOUR */ NON,
- /* THAI DIGIT FIVE */ NON,
- /* THAI DIGIT SIX */ NON,
- /* THAI DIGIT SEVEN */ NON,
- /* THAI DIGIT EIGHT */ NON,
- /* THAI DIGIT NINE */ NON,
- /* THAI CHARACTER ANGKHANKHU */ NON,
- /* THAI CHARACTER KHOMUT */ NON
- };
-
- private InputMethodRequests requests;
-
- ThaiRules(InputMethodRequests requests) {
- this.requests = requests;
- }
-
- public static byte getCharType(char c) {
- byte cType;
- int ci = ((int) c) - (int) BASE;
- if (ci < 0 || ci >= CHARTYPE.length)
- cType = NON;
- else
- cType = CHARTYPE[ci];
- return cType;
- }
-
- private static boolean isValid(char c1, char c2, int[] validityArray) {
- return ((validityArray[getCharType(c1)]
- & (1 << getCharType(c2))) != 0);
- }
-
- /**
- * VALIDITY is a bit matrix defining whether one
- * character is allowed to be typed in after the
- * previous one (array index). Determining the
- * validity is done by bit-anding the 2nd char
- * type's mask (obtained by 1 << chartype) with
- * the array element indexed by the first char
- * type. If the result is non-zero, the 2nd
- * character is allowed to follow the first.
- */
-
- /* Please note that the bits in the comment below
- * are displayed least significant bit first.
- * The actual value reflexs this representation
- * when the bits are swapped.
- */
-
- private static final int[] INPUTVALIDITY = {
- /* NON 1110 010 0 0000 0000 0 */ 0x00027,
- /* CONS 1111 111 1 1111 1111 1 */ 0x1ffff,
- /* LV 0100 000 0 0000 0000 0 */ 0x00002,
- /* FV1 1110 010 0 0000 0000 0 */ 0x00027,
- /* FV2 1110 010 0 0000 0000 0 */ 0x00027,
- /* FV3 1110 110 0 0000 0000 0 */ 0x00037,
- /* FV4 1110 010 0 0000 0000 0 */ 0x00027,
- /* BV1 1110 010 0 0011 0000 0 */ 0x00c27,
- /* BV2 1110 010 0 0010 0000 0 */ 0x00427,
- /* BD 1110 010 0 0000 0000 0 */ 0x00027,
- /* TONE 1111 011 0 0000 0000 0 */ 0x0006f,
- /* AD1 1110 010 0 0000 0000 0 */ 0x00027,
- /* AD2 1110 010 0 0000 0000 0 */ 0x00027,
- /* AD3 1110 010 0 0000 0000 0 */ 0x00027,
- /* AV1 1110 010 0 0011 0000 0 */ 0x00c27,
- /* AV2 1110 010 0 0010 0000 0 */ 0x00427,
- /* AV3 1110 010 0 0010 0100 0 */ 0x02427
- };
-
- private static final int[] COMPOSABLE = {
- /* NON 0000 000 0 0000 0000 0 */ 0x00000,
- /* CONS 0000 001 1 1111 1111 1 */ 0x1ffc0,
- /* LV 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV1 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV2 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV3 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV4 0000 000 0 0000 0000 0 */ 0x00000,
- /* BV1 0000 000 0 0011 0000 0 */ 0x00c00,
- /* BV2 0000 000 0 0010 0000 0 */ 0x00400,
- /* BD 0000 000 0 0000 0000 0 */ 0x00000,
- /* TONE 0000 001 0 0000 0000 0 */ 0x00040,
- /* AD1 0000 000 0 0000 0000 0 */ 0x00000,
- /* AD2 0000 000 0 0000 0000 0 */ 0x00000,
- /* AD3 0000 000 0 0000 0000 0 */ 0x00000,
- /* AV1 0000 000 0 0011 0000 0 */ 0x00c00,
- /* AV2 0000 000 0 0010 0000 0 */ 0x00400,
- /* AV3 0000 000 0 0010 0100 0 */ 0x02400
- };
-
- private static final int[] REPLACABLE = {
- /* NON 0000 000 0 0000 0000 0 */ 0x00000,
- /* CONS 0000 000 0 0000 0000 0 */ 0x00000,
- /* LV 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV1 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV2 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV3 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV4 0000 001 1 1001 1111 1 */ 0x1f9c0,
- /* BV1 0000 001 1 1100 1111 1 */ 0x1f3c0,
- /* BV2 0000 001 1 1101 1111 1 */ 0x1fbc0,
- /* BD 0000 001 1 1111 1111 1 */ 0x1ffc0,
- /* TONE 0000 000 0 0111 1100 0 */ 0x03e00,
- /* AD1 0000 001 0 1111 1101 1 */ 0x1bf40,
- /* AD2 0000 001 1 1111 1111 1 */ 0x1ffc0,
- /* AD3 0000 001 1 1111 1111 0 */ 0x0ffc0,
- /* AV1 0000 001 1 1100 1111 1 */ 0x1f3c0,
- /* AV2 0000 001 1 1101 1111 1 */ 0x1fbc0,
- /* AV3 0000 001 1 1101 1011 1 */ 0x1dbc0
- };
-
- private static final int[] SWAPPABLE = {
- /* NON 0000 000 0 0000 0000 0 */ 0x00000,
- /* CONS 0000 000 0 0000 0000 0 */ 0x00000,
- /* LV 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV1 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV2 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV3 0000 000 0 0000 0000 0 */ 0x00000,
- /* FV4 0000 000 0 0010 0000 0 */ 0x00400,
- /* BV1 0000 000 0 0000 0000 0 */ 0x00000,
- /* BV2 0000 000 0 0000 0000 0 */ 0x00000,
- /* BD 0000 000 0 0000 0000 0 */ 0x00000,
- /* TONE 0000 000 1 1000 0011 1 */ 0x1c180,
- /* AD1 0000 000 1 0000 0010 0 */ 0x04080,
- /* AD2 0000 000 0 0000 0000 0 */ 0x00000,
- /* AD3 0000 000 0 0000 0000 1 */ 0x10000,
- /* AV1 0000 000 0 0000 0000 0 */ 0x00000,
- /* AV2 0000 000 0 0000 0000 0 */ 0x00000,
- /* AV3 0000 000 0 0000 0000 0 */ 0x00000
- };
-
- public static boolean isInputValid(char c1, char c2) {
- return isValid(c1, c2, INPUTVALIDITY);
- }
-
- public static boolean isComposable(char c1, char c2) {
- return isValid(c1, c2, COMPOSABLE);
- }
-
- public static boolean isSwappable(char c1, char c2) {
- return isValid(c1, c2, SWAPPABLE);
- }
-
- public static boolean isReplacable(char c1, char c2) {
- return isValid(c1, c2, REPLACABLE);
- }
-
- public static boolean isForward(char c) {
- return (getCharType(c) < FV4);
- }
-
- public static boolean isDead(char c) {
- return (getCharType(c) > FV3);
- }
-
- public boolean isInputValid(char current) {
- int offset = requests.getInsertPositionOffset();
- if (offset == 0) {
- byte charType = getCharType(current);
- return ((charType < FV1) || (charType == FV3));
- }
- else {
- char prev = requests.getCommittedText(offset-1, offset, null).first();
-
- if(isForward(current)) {
- if (isInputValid(prev, current)) {
- if (getCharType(prev) == TONE &&
- getCharType(current) == FV1) {
- if (offset == 1) {
- return true;
- } else {
- char pprev =
- requests.getCommittedText(offset-2, offset-1, null).first();
- return isInputValid(pprev, current);
- }
- } else {
- return true;
- }
- } else if (prev == '\u0e32' && // SARA AA
- current == '\u0e30') { // SARA A
- return true;
- } else if (prev == '\u0e4d' && // NIKAHIT
- current == '\u0e32') { // SARA AA
- // Special compose to SARA AM
- return true;
- } else {
- return false;
- }
- } else {
- if(isInputValid(prev, current)) {
- if (getCharType(prev) == TONE &&
- getCharType(current) == FV4) {
- return (offset != 1);
- } else {
- return true;
- }
- } else {
- return false;
- }
- }
- }
- }
-}
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-com.sun.inputmethods.internal.thaiim.ThaiInputMethodDescriptor
--- a/jdk/src/share/classes/com/sun/inputmethods/internal/thaiim/resources/DisplayNames.properties Sat May 29 23:26:16 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-#
-# Default Input method display names for Thai input methods
-#
-
-DisplayName.Thai = Thai Input Method
-
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java Tue Jun 01 21:25:26 2010 -0700
@@ -35,6 +35,7 @@
import static com.sun.java.swing.plaf.windows.TMSchema.*;
import static com.sun.java.swing.plaf.windows.XPStyle.*;
import sun.swing.table.*;
+import sun.swing.SwingUtilities2;
public class WindowsTableHeaderUI extends BasicTableHeaderUI {
@@ -163,18 +164,13 @@
return this;
}
- private int viewIndexForColumn(TableColumn aColumn) {
- if (aColumn != null) {
- return header.getTable().convertColumnIndexToView(
- aColumn.getModelIndex());
- }
- return -1;
- }
-
public void paint(Graphics g) {
Dimension size = getSize();
State state = State.NORMAL;
- if (column == viewIndexForColumn(header.getDraggedColumn())) {
+ TableColumn draggedColumn = header.getDraggedColumn();
+ if (draggedColumn != null &&
+ column == SwingUtilities2.convertColumnIndexToView(
+ header.getColumnModel(), draggedColumn.getModelIndex())) {
state = State.PRESSED;
} else if (isSelected || hasFocus || hasRollover) {
state = State.HOT;
--- a/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java Tue Jun 01 21:25:26 2010 -0700
@@ -222,6 +222,25 @@
// Write out the properties of this instance.
private void initBean(Class type, Object oldInstance, Object newInstance, Encoder out) {
+ for (Field field : type.getFields()) {
+ int mod = field.getModifiers();
+ if (Modifier.isFinal(mod) || Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
+ continue;
+ }
+ try {
+ Expression oldGetExp = new Expression(field, "get", new Object[] { oldInstance });
+ Expression newGetExp = new Expression(field, "get", new Object[] { newInstance });
+ Object oldValue = oldGetExp.getValue();
+ Object newValue = newGetExp.getValue();
+ out.writeExpression(oldGetExp);
+ if (!equals(newValue, out.get(oldValue))) {
+ out.writeStatement(new Statement(field, "set", new Object[] { oldInstance, oldValue }));
+ }
+ }
+ catch (Exception exception) {
+ out.getExceptionListener().exceptionThrown(exception);
+ }
+ }
BeanInfo info;
try {
info = Introspector.getBeanInfo(type);
--- a/jdk/src/share/classes/java/beans/MetaData.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/java/beans/MetaData.java Tue Jun 01 21:25:26 2010 -0700
@@ -701,56 +701,6 @@
// AWT
/**
- * The persistence delegate for {@link Dimension}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because all getters have return types that differ from parameter types
- * of the constructor {@link Dimension#Dimension(int, int)}.
- *
- * @author Sergey A. Malenkov
- */
-final class java_awt_Dimension_PersistenceDelegate extends PersistenceDelegate {
- protected boolean mutatesTo(Object oldInstance, Object newInstance) {
- return oldInstance.equals(newInstance);
- }
-
- protected Expression instantiate(Object oldInstance, Encoder out) {
- Dimension dimension = (Dimension) oldInstance;
- Object[] args = new Object[] {
- dimension.width,
- dimension.height,
- };
- return new Expression(dimension, dimension.getClass(), "new", args);
- }
-}
-
-/**
- * The persistence delegate for {@link GridBagConstraints}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because this class does not have any properties.
- *
- * @author Sergey A. Malenkov
- */
-final class java_awt_GridBagConstraints_PersistenceDelegate extends PersistenceDelegate {
- protected Expression instantiate(Object oldInstance, Encoder out) {
- GridBagConstraints gbc = (GridBagConstraints) oldInstance;
- Object[] args = new Object[] {
- gbc.gridx,
- gbc.gridy,
- gbc.gridwidth,
- gbc.gridheight,
- gbc.weightx,
- gbc.weighty,
- gbc.anchor,
- gbc.fill,
- gbc.insets,
- gbc.ipadx,
- gbc.ipady,
- };
- return new Expression(gbc, gbc.getClass(), "new", args);
- }
-}
-
-/**
* The persistence delegate for {@link Insets}.
* It is impossible to use {@link DefaultPersistenceDelegate}
* because this class does not have any properties.
@@ -775,54 +725,6 @@
}
/**
- * The persistence delegate for {@link Point}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because all getters have return types that differ from parameter types
- * of the constructor {@link Point#Point(int, int)}.
- *
- * @author Sergey A. Malenkov
- */
-final class java_awt_Point_PersistenceDelegate extends PersistenceDelegate {
- protected boolean mutatesTo(Object oldInstance, Object newInstance) {
- return oldInstance.equals(newInstance);
- }
-
- protected Expression instantiate(Object oldInstance, Encoder out) {
- Point point = (Point) oldInstance;
- Object[] args = new Object[] {
- point.x,
- point.y,
- };
- return new Expression(point, point.getClass(), "new", args);
- }
-}
-
-/**
- * The persistence delegate for {@link Rectangle}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because all getters have return types that differ from parameter types
- * of the constructor {@link Rectangle#Rectangle(int, int, int, int)}.
- *
- * @author Sergey A. Malenkov
- */
-final class java_awt_Rectangle_PersistenceDelegate extends PersistenceDelegate {
- protected boolean mutatesTo(Object oldInstance, Object newInstance) {
- return oldInstance.equals(newInstance);
- }
-
- protected Expression instantiate(Object oldInstance, Encoder out) {
- Rectangle rectangle = (Rectangle) oldInstance;
- Object[] args = new Object[] {
- rectangle.x,
- rectangle.y,
- rectangle.width,
- rectangle.height,
- };
- return new Expression(rectangle, rectangle.getClass(), "new", args);
- }
-}
-
-/**
* The persistence delegate for {@link Font}.
* It is impossible to use {@link DefaultPersistenceDelegate}
* because size of the font can be float value.
--- a/jdk/src/share/classes/java/beans/XMLEncoder.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/java/beans/XMLEncoder.java Tue Jun 01 21:25:26 2010 -0700
@@ -407,7 +407,20 @@
os.writeObject(this);
*/
mark(oldStm);
- statementList(oldStm.getTarget()).add(oldStm);
+ Object target = oldStm.getTarget();
+ if (target instanceof Field) {
+ String method = oldStm.getMethodName();
+ Object[] args = oldStm.getArguments();
+ if ((method == null) || (args == null)) {
+ }
+ else if (method.equals("get") && (args.length == 1)) {
+ target = args[0];
+ }
+ else if (method.equals("set") && (args.length == 2)) {
+ target = args[0];
+ }
+ }
+ statementList(target).add(oldStm);
}
catch (Exception e) {
getExceptionListener().exceptionThrown(new Exception("XMLEncoder: discarding statement " + oldStm, e));
@@ -703,7 +716,9 @@
statements.add(exp);
}
outputValue(target, outer, false);
- outputValue(value, outer, isArgument);
+ if (expression) {
+ outputValue(value, outer, isArgument);
+ }
return;
}
if (expression && (d.refs > 1)) {
@@ -722,8 +737,10 @@
}
else if ((!expression && methodName.startsWith("set") && args.length == 1) ||
(expression && methodName.startsWith("get") && args.length == 0)) {
- attributes = attributes + " property=" +
- quote(Introspector.decapitalize(methodName.substring(3)));
+ if (3 < methodName.length()) {
+ attributes = attributes + " property=" +
+ quote(Introspector.decapitalize(methodName.substring(3)));
+ }
}
else if (!methodName.equals("new") && !methodName.equals("newInstance")) {
attributes = attributes + " method=" + quote(methodName);
--- a/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Tue Jun 01 21:25:26 2010 -0700
@@ -26,16 +26,12 @@
package javax.swing;
+import com.sun.awt.AWTUtilities;
+import sun.awt.AWTAccessor;
+import sun.awt.SunToolkit;
+
import java.awt.*;
import java.beans.PropertyVetoException;
-import java.beans.PropertyChangeEvent;
-import javax.swing.border.Border;
-import java.awt.event.ComponentListener;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-
-import sun.awt.AWTAccessor;
-import sun.awt.SunToolkit;
/** This is an implementation of the <code>DesktopManager</code>.
* It currently implements the basic behaviors for managing
@@ -318,7 +314,10 @@
dragMode = DEFAULT_DRAG_MODE;
if (p != null) {
String mode = (String)p.getClientProperty("JDesktopPane.dragMode");
- if (mode != null && mode.equals("outline")) {
+ Window window = SwingUtilities.getWindowAncestor(f);
+ if (window != null && !AWTUtilities.isWindowOpaque(window)) {
+ dragMode = DEFAULT_DRAG_MODE;
+ } else if (mode != null && mode.equals("outline")) {
dragMode = OUTLINE_DRAG_MODE;
} else if (mode != null && mode.equals("faster")
&& f instanceof JInternalFrame
--- a/jdk/src/share/classes/javax/swing/JTable.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/JTable.java Tue Jun 01 21:25:26 2010 -0700
@@ -2583,10 +2583,8 @@
* @see #convertColumnIndexToView
*/
public int convertColumnIndexToModel(int viewColumnIndex) {
- if (viewColumnIndex < 0) {
- return viewColumnIndex;
- }
- return getColumnModel().getColumn(viewColumnIndex).getModelIndex();
+ return SwingUtilities2.convertColumnIndexToModel(
+ getColumnModel(), viewColumnIndex);
}
/**
@@ -2603,16 +2601,8 @@
* @see #convertColumnIndexToModel
*/
public int convertColumnIndexToView(int modelColumnIndex) {
- if (modelColumnIndex < 0) {
- return modelColumnIndex;
- }
- TableColumnModel cm = getColumnModel();
- for (int column = 0; column < getColumnCount(); column++) {
- if (cm.getColumn(column).getModelIndex() == modelColumnIndex) {
- return column;
- }
- }
- return -1;
+ return SwingUtilities2.convertColumnIndexToView(
+ getColumnModel(), modelColumnIndex);
}
/**
--- a/jdk/src/share/classes/javax/swing/border/MatteBorder.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/border/MatteBorder.java Tue Jun 01 21:25:26 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, 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
@@ -26,7 +26,6 @@
import java.awt.Graphics;
import java.awt.Insets;
-import java.awt.Rectangle;
import java.awt.Component;
import java.awt.Color;
@@ -133,63 +132,29 @@
g.fillRect(width - insets.right, 0, insets.right, height - insets.bottom);
} else if (tileIcon != null) {
-
int tileW = tileIcon.getIconWidth();
int tileH = tileIcon.getIconHeight();
- int xpos, ypos, startx, starty;
- Graphics cg;
-
- // Paint top matte edge
- cg = g.create();
- cg.setClip(0, 0, width, insets.top);
- for (ypos = 0; insets.top - ypos > 0; ypos += tileH) {
- for (xpos = 0; width - xpos > 0; xpos += tileW) {
- tileIcon.paintIcon(c, cg, xpos, ypos);
- }
- }
- cg.dispose();
-
- // Paint left matte edge
- cg = g.create();
- cg.setClip(0, insets.top, insets.left, height - insets.top);
- starty = insets.top - (insets.top%tileH);
- startx = 0;
- for (ypos = starty; height - ypos > 0; ypos += tileH) {
- for (xpos = startx; insets.left - xpos > 0; xpos += tileW) {
- tileIcon.paintIcon(c, cg, xpos, ypos);
- }
- }
- cg.dispose();
-
- // Paint bottom matte edge
- cg = g.create();
- cg.setClip(insets.left, height - insets.bottom, width - insets.left, insets.bottom);
- starty = (height - insets.bottom) - ((height - insets.bottom)%tileH);
- startx = insets.left - (insets.left%tileW);
- for (ypos = starty; height - ypos > 0; ypos += tileH) {
- for (xpos = startx; width - xpos > 0; xpos += tileW) {
- tileIcon.paintIcon(c, cg, xpos, ypos);
- }
- }
- cg.dispose();
-
- // Paint right matte edge
- cg = g.create();
- cg.setClip(width - insets.right, insets.top, insets.right, height - insets.top - insets.bottom);
- starty = insets.top - (insets.top%tileH);
- startx = width - insets.right - ((width - insets.right)%tileW);
- for (ypos = starty; height - ypos > 0; ypos += tileH) {
- for (xpos = startx; width - xpos > 0; xpos += tileW) {
- tileIcon.paintIcon(c, cg, xpos, ypos);
- }
- }
- cg.dispose();
+ paintEdge(c, g, 0, 0, width - insets.right, insets.top, tileW, tileH);
+ paintEdge(c, g, 0, insets.top, insets.left, height - insets.top, tileW, tileH);
+ paintEdge(c, g, insets.left, height - insets.bottom, width - insets.left, insets.bottom, tileW, tileH);
+ paintEdge(c, g, width - insets.right, 0, insets.right, height - insets.bottom, tileW, tileH);
}
g.translate(-x, -y);
g.setColor(oldColor);
}
+ private void paintEdge(Component c, Graphics g, int x, int y, int width, int height, int tileW, int tileH) {
+ g = g.create(x, y, width, height);
+ int sY = -(y % tileH);
+ for (x = -(x % tileW); x < width; x += tileW) {
+ for (y = sY; y < height; y += tileH) {
+ this.tileIcon.paintIcon(c, g, x, y);
+ }
+ }
+ g.dispose();
+ }
+
/**
* Reinitialize the insets parameter with this Border's current Insets.
* @param c the component for which this border insets value applies
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java Tue Jun 01 21:25:26 2010 -0700
@@ -3524,7 +3524,11 @@
}
else if (name =="indexForTitle") {
calculatedBaseline = false;
- updateHtmlViews((Integer)e.getNewValue());
+ Integer index = (Integer) e.getNewValue();
+ // remove the current index
+ // to let updateHtmlViews() insert the correct one
+ htmlViews.removeElementAt(index);
+ updateHtmlViews(index);
} else if (name == "tabLayoutPolicy") {
BasicTabbedPaneUI.this.uninstallUI(pane);
BasicTabbedPaneUI.this.installUI(pane);
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTableHeaderUI.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTableHeaderUI.java Tue Jun 01 21:25:26 2010 -0700
@@ -98,15 +98,18 @@
private Cursor otherCursor = resizeCursor;
public void mouseClicked(MouseEvent e) {
+ if (!header.isEnabled()) {
+ return;
+ }
if (e.getClickCount() % 2 == 1 &&
- SwingUtilities.isLeftMouseButton(e)){
+ SwingUtilities.isLeftMouseButton(e)) {
JTable table = header.getTable();
RowSorter sorter;
if (table != null && (sorter = table.getRowSorter()) != null) {
int columnIndex = header.columnAtPoint(e.getPoint());
if (columnIndex != -1) {
columnIndex = table.convertColumnIndexToModel(
- columnIndex);
+ columnIndex);
sorter.toggleSortOrder(columnIndex);
}
}
@@ -140,6 +143,9 @@
}
public void mousePressed(MouseEvent e) {
+ if (!header.isEnabled()) {
+ return;
+ }
header.setDraggedColumn(null);
header.setResizingColumn(null);
header.setDraggedDistance(0);
@@ -182,6 +188,9 @@
}
public void mouseMoved(MouseEvent e) {
+ if (!header.isEnabled()) {
+ return;
+ }
if (canResize(getResizingColumn(e.getPoint()), header) !=
(header.getCursor() == resizeCursor)) {
swapCursor();
@@ -190,6 +199,9 @@
}
public void mouseDragged(MouseEvent e) {
+ if (!header.isEnabled()) {
+ return;
+ }
int mouseX = e.getX();
TableColumn resizingColumn = header.getResizingColumn();
@@ -217,21 +229,23 @@
if (0 <= newColumnIndex && newColumnIndex < cm.getColumnCount()) {
int width = cm.getColumn(newColumnIndex).getWidth();
if (Math.abs(draggedDistance) > (width / 2)) {
- JTable table = header.getTable();
mouseXOffset = mouseXOffset + direction * width;
header.setDraggedDistance(draggedDistance - direction * width);
//Cache the selected column.
- int selectedIndex = table.convertColumnIndexToModel(
- getSelectedColumnIndex());
+ int selectedIndex =
+ SwingUtilities2.convertColumnIndexToModel(
+ header.getColumnModel(),
+ getSelectedColumnIndex());
//Now do the move.
cm.moveColumn(columnIndex, newColumnIndex);
//Update the selected index.
selectColumn(
- table.convertColumnIndexToView(selectedIndex),
+ SwingUtilities2.convertColumnIndexToView(
+ header.getColumnModel(), selectedIndex),
false);
return;
@@ -244,6 +258,9 @@
}
public void mouseReleased(MouseEvent e) {
+ if (!header.isEnabled()) {
+ return;
+ }
setDraggedDistance(0, viewIndexForColumn(header.getDraggedColumn()));
header.setResizingColumn(null);
@@ -253,10 +270,16 @@
}
public void mouseEntered(MouseEvent e) {
+ if (!header.isEnabled()) {
+ return;
+ }
updateRolloverColumn(e);
}
public void mouseExited(MouseEvent e) {
+ if (!header.isEnabled()) {
+ return;
+ }
int oldRolloverColumn = rolloverColumn;
rolloverColumn = -1;
rolloverColumnUpdated(oldRolloverColumn, rolloverColumn);
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java Tue Jun 01 21:25:26 2010 -0700
@@ -779,20 +779,16 @@
if (c instanceof JTextComponent) {
editor = (JTextComponent) c;
+ // common case is background painted... this can
+ // easily be changed by subclasses or from outside
+ // of the component.
+ LookAndFeel.installProperty(editor, "opaque", Boolean.TRUE);
+ LookAndFeel.installProperty(editor, "autoscrolls", Boolean.TRUE);
+
// install defaults
installDefaults();
installDefaults2();
- // This is a workaround as these should not override what synth has
- // set them to
- if (! (this instanceof SynthUI)) {
- // common case is background painted... this can
- // easily be changed by subclasses or from outside
- // of the component.
- LookAndFeel.installProperty(editor, "opaque", Boolean.TRUE);
- LookAndFeel.installProperty(editor, "autoscrolls", Boolean.TRUE);
- }
-
// attach to the model and editor
editor.addPropertyChangeListener(updateHandler);
Document doc = editor.getDocument();
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicViewportUI.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicViewportUI.java Tue Jun 01 21:25:26 2010 -0700
@@ -56,8 +56,8 @@
}
public void uninstallUI(JComponent c) {
+ uninstallDefaults(c);
super.uninstallUI(c);
-
}
protected void installDefaults(JComponent c) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java Tue Jun 01 21:25:26 2010 -0700
@@ -361,12 +361,14 @@
cMax = table.getColumnCount()-1;
}
- // Paint the grid.
- paintGrid(context, g, rMin, rMax, cMin, cMax);
-
// Paint the cells.
paintCells(context, g, rMin, rMax, cMin, cMax);
+ // Paint the grid.
+ // it is important to paint the grid after the cells, otherwise the grid will be overpainted
+ // because in Synth cell renderers are likely to be opaque
+ paintGrid(context, g, rMin, rMax, cMin, cMax);
+
paintDropLines(context, g);
}
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java Tue Jun 01 21:25:26 2010 -0700
@@ -72,7 +72,28 @@
}
/**
- * @inheritDoc
+ * Installs the UI for a component. This does the following
+ * things.
+ * <ol>
+ * <li>
+ * Sets opaqueness of the associated component according to its style,
+ * if the opaque property has not already been set by the client program.
+ * <li>
+ * Installs the default caret and highlighter into the
+ * associated component. These properties are only set if their
+ * current value is either {@code null} or an instance of
+ * {@link UIResource}.
+ * <li>
+ * Attaches to the editor and model. If there is no
+ * model, a default one is created.
+ * <li>
+ * Creates the view factory and the view hierarchy used
+ * to represent the model.
+ * </ol>
+ *
+ * @param c the editor component
+ * @see BasicTextUI#installUI
+ * @see ComponentUI#installUI
*/
@Override
public void installUI(JComponent c) {
--- a/jdk/src/share/classes/javax/swing/text/WrappedPlainView.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/javax/swing/text/WrappedPlainView.java Tue Jun 01 21:25:26 2010 -0700
@@ -24,8 +24,6 @@
*/
package javax.swing.text;
-import java.util.Vector;
-import java.util.Properties;
import java.awt.*;
import java.lang.ref.SoftReference;
import javax.swing.event.*;
@@ -236,9 +234,6 @@
Segment segment = SegmentCache.getSharedSegment();
loadText(segment, p0, p1);
int currentWidth = getWidth();
- if (currentWidth == Integer.MAX_VALUE) {
- currentWidth = (int) getDefaultSpan(View.X_AXIS);
- }
if (wordWrap) {
p = p0 + Utilities.getBreakLocation(segment, metrics,
tabBase, tabBase + currentWidth,
@@ -324,53 +319,6 @@
tabSize = getTabSize() * metrics.charWidth('m');
}
- /**
- * Return reasonable default values for the view dimensions. The standard
- * text terminal size 80x24 is pretty suitable for the wrapped plain view.
- *
- * The size should not be larger than the component housing the view's
- * container.
- */
- private float getDefaultSpan(int axis) {
- Container host = getContainer();
- Component parent = null;
-
- if (host != null) {
- parent = host.getParent();
- }
-
- switch (axis) {
- case View.X_AXIS:
- int defaultWidth = 80 * metrics.getWidths()['M'];
- int parentWidth = 0;
-
- if (parent != null) {
- parentWidth = parent.getWidth();
- }
-
- if (defaultWidth > parentWidth) {
- return parentWidth;
- }
- return defaultWidth;
-
- case View.Y_AXIS:
- int defaultHeight = 24 * metrics.getHeight();
- int parentHeight = 0;
-
- if (parent != null) {
- parentHeight = parent.getHeight();
- }
-
- if (defaultHeight > parentHeight) {
- return parentHeight;
- }
- return defaultHeight;
-
- default:
- throw new IllegalArgumentException("Invalid axis: " + axis);
- }
- }
-
// --- TabExpander methods ------------------------------------------
/**
@@ -605,18 +553,14 @@
if (width == Integer.MAX_VALUE) {
// We have been initially set to MAX_VALUE, but we don't
// want this as our preferred.
- width = getDefaultSpan(axis);
+ return 100f;
}
return width;
case View.Y_AXIS:
- if (getDocument().getLength() > 0) {
- if ((lineCount < 0) || widthChanging) {
- breakLines(getStartOffset());
- }
- return lineCount * metrics.getHeight();
- } else {
- return getDefaultSpan(axis);
+ if (lineCount < 0 || widthChanging) {
+ breakLines(getStartOffset());
}
+ return lineCount * metrics.getHeight();
default:
throw new IllegalArgumentException("Invalid axis: " + axis);
}
Binary file jdk/src/share/classes/javax/swing/text/html/parser/html32.bdtd has changed
--- a/jdk/src/share/classes/sun/swing/SwingUtilities2.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/sun/swing/SwingUtilities2.java Tue Jun 01 21:25:26 2010 -0700
@@ -44,6 +44,8 @@
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.DefaultCaret;
import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+
import sun.swing.PrintColorUIResource;
import sun.swing.ImageIconUIResource;
import sun.print.ProxyPrintGraphics;
@@ -1807,4 +1809,54 @@
boolean three) {
return liesIn(rect, p, false, false, three);
}
+
+ /**
+ * Maps the index of the column in the view at
+ * {@code viewColumnIndex} to the index of the column
+ * in the table model. Returns the index of the corresponding
+ * column in the model. If {@code viewColumnIndex}
+ * is less than zero, returns {@code viewColumnIndex}.
+ *
+ * @param cm the table model
+ * @param viewColumnIndex the index of the column in the view
+ * @return the index of the corresponding column in the model
+ *
+ * @see JTable#convertColumnIndexToModel(int)
+ * @see javax.swing.plaf.basic.BasicTableHeaderUI
+ */
+ public static int convertColumnIndexToModel(TableColumnModel cm,
+ int viewColumnIndex) {
+ if (viewColumnIndex < 0) {
+ return viewColumnIndex;
+ }
+ return cm.getColumn(viewColumnIndex).getModelIndex();
+ }
+
+ /**
+ * Maps the index of the column in the {@code cm} at
+ * {@code modelColumnIndex} to the index of the column
+ * in the view. Returns the index of the
+ * corresponding column in the view; returns {@code -1} if this column
+ * is not being displayed. If {@code modelColumnIndex} is less than zero,
+ * returns {@code modelColumnIndex}.
+ *
+ * @param cm the table model
+ * @param modelColumnIndex the index of the column in the model
+ * @return the index of the corresponding column in the view
+ *
+ * @see JTable#convertColumnIndexToView(int)
+ * @see javax.swing.plaf.basic.BasicTableHeaderUI
+ */
+ public static int convertColumnIndexToView(TableColumnModel cm,
+ int modelColumnIndex) {
+ if (modelColumnIndex < 0) {
+ return modelColumnIndex;
+ }
+ for (int column = 0; column < cm.getColumnCount(); column++) {
+ if (cm.getColumn(column).getModelIndex() == modelColumnIndex) {
+ return column;
+ }
+ }
+ return -1;
+ }
}
--- a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Tue Jun 01 21:25:26 2010 -0700
@@ -788,7 +788,7 @@
// for example /foo/bar/ becomes /foo/bar
File canonical;
try {
- canonical = directory.getCanonicalFile();
+ canonical = ShellFolder.getNormalizedFile(directory);
} catch (IOException e) {
// Maybe drive is not ready. Can't abort here.
canonical = directory;
--- a/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java Tue Jun 01 21:25:26 2010 -0700
@@ -24,6 +24,8 @@
*/
package sun.swing.table;
+import sun.swing.DefaultLookup;
+
import java.awt.Component;
import java.awt.Color;
import java.awt.FontMetrics;
@@ -31,12 +33,11 @@
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
+import java.io.Serializable;
import javax.swing.*;
import javax.swing.plaf.UIResource;
import javax.swing.border.Border;
import javax.swing.table.*;
-import sun.swing.DefaultLookup;
-
public class DefaultTableCellHeaderRenderer extends DefaultTableCellRenderer
implements UIResource {
@@ -186,7 +187,7 @@
return new Point(x, y);
}
- private class EmptyIcon implements Icon {
+ private class EmptyIcon implements Icon, Serializable {
int width = 0;
int height = 0;
public void paintIcon(Component c, Graphics g, int x, int y) {}
--- a/jdk/test/java/beans/XMLEncoder/java_awt_GridBagConstraints.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/test/java/beans/XMLEncoder/java_awt_GridBagConstraints.java Tue Jun 01 21:25:26 2010 -0700
@@ -55,7 +55,6 @@
}
protected GridBagConstraints getAnotherObject() {
- return null; // TODO: could not update property
- // return new GridBagConstraints();
+ return new GridBagConstraints();
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTabbedPane/6670274/bug6670274.java Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*@test
+ @bug 6670274
+ @summary Incorrect tab titles for JTabbedPane if using HTML (BasicTabbedPanelUI problem)
+ @author Alexander Potochkin
+ @run main bug6670274
+*/
+
+import javax.swing.*;
+import javax.swing.plaf.basic.BasicTabbedPaneUI;
+import javax.swing.text.View;
+
+public class bug6670274 {
+
+ private static void createGui() {
+ final JTabbedPane pane = new JTabbedPane();
+ TestTabbedPaneUI ui = new TestTabbedPaneUI();
+ pane.setUI(ui);
+
+ pane.add("one", new JPanel());
+ pane.add("<html><i>Two</i></html>", new JPanel());
+ pane.add("three", new JPanel());
+ pane.setTitleAt(0, "<html><i>ONE</i></html>");
+ check(ui, 0, 1);
+
+ pane.setTitleAt(1, "hello");
+ check(ui, 0);
+
+ pane.setTitleAt(0, "<html>html</html>");
+ pane.setTitleAt(2, "<html>html</html>");
+ check(ui, 0, 2);
+ }
+
+ private static void check(TestTabbedPaneUI ui, int... indices) {
+ for(int i = 0; i < ui.getTabbedPane().getTabCount(); i++) {
+ System.out.print("Checking tab #" + i);
+ View view = ui.getTextViewForTab(i);
+ boolean found = false;
+ for (int j = 0; j < indices.length; j++) {
+ if (indices[j]== i) {
+ found = true;
+ break;
+ }
+ }
+ System.out.print("; view = " + view);
+ if (found) {
+ if (view == null) {
+ throw new RuntimeException("View is unexpectedly null");
+ }
+ } else if (view != null) {
+ throw new RuntimeException("View is unexpectedly not null");
+ }
+ System.out.println(" ok");
+ }
+ System.out.println("");
+ }
+
+
+ static class TestTabbedPaneUI extends BasicTabbedPaneUI {
+ public View getTextViewForTab(int tabIndex) {
+ return super.getTextViewForTab(tabIndex);
+ }
+
+ public JTabbedPane getTabbedPane() {
+ return tabPane;
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ bug6670274.createGui();
+ }
+ });
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTable/6768387/bug6768387.java Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ @bug 6768387
+ @summary REGRESSION: JTable no longer serializable
+ @author Alexander Potochkin
+ @run main bug6768387
+*/
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import java.io.*;
+
+public class bug6768387 {
+
+ private static void createGui() {
+ JTable table = new JTable();
+ OutputStream os;
+ ObjectOutputStream out;
+ try {
+ os = new ByteArrayOutputStream();
+ out = new ObjectOutputStream(os);
+ out.writeObject(table);
+ out.close();
+ }
+ catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ bug6768387.createGui();
+ }
+ });
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTable/6937798/bug6937798.java Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ @bug 6937798
+ @summary Nimbus: Issues with JTable grid
+ @author Alexander Potochkin
+ @run main bug6937798
+*/
+
+import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+public class bug6937798 {
+
+ public static void main(String... args) throws Exception {
+ UIManager.setLookAndFeel(new NimbusLookAndFeel());
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ new bug6937798();
+ }
+ });
+ }
+
+ public bug6937798() {
+ final JTable table = createCountryTable();
+ table.setShowGrid(true);
+ table.setSize(100, 100);
+
+ BufferedImage im = new BufferedImage(table.getWidth(), table.getHeight(), BufferedImage.TYPE_INT_ARGB);
+ Graphics g = im.getGraphics();
+ table.print(g);
+ g.dispose();
+
+ for (int i = 0; i < im.getHeight(); i++) {
+ for (int j = 0; j < im.getWidth(); j++) {
+ if (im.getRGB(i, j) == table.getGridColor().getRGB()) {
+ System.out.println("got it!");
+ return;
+ }
+ }
+ }
+ throw new RuntimeException("no table's grid detected....");
+ }
+
+ protected JTable createCountryTable() {
+ // Column headers
+ final String
+ [] headers = {
+ "Name", "Capital City", "Language(s)", "Monetary Unit(s)", "EC Member"
+ };
+
+ // Table data
+ final Object[][] data = {
+ {"Albania", "Tirane", "Albanian, Greek", "Lek", new Boolean(false)},
+ {"Andorra", "Andorra la Vella", "Catalan, French, Spanish", "French Franc, Spanish Peseta", new Boolean(false)},
+ {"Austria", "Vienna", "German, Slovenian, Croatian", "Schilling", new Boolean(false)},
+ {"Belarus", "Minsk", "Byelorussian, Russian", "Belarusian Rubel", new Boolean(false)},
+ {"Belgium", "Brussels", "French, Flemish, German", "Belgian Franc", new Boolean(true)},
+ {"Bosnia & Herzegovina", "Sarajevo", "Serbo-Croatian", "Dinar", new Boolean(false)},
+ {"Bulgaria", "Sofia", "Bulgarian, Turkish", "Lev", new Boolean(false)},
+ {"Croatia", "Zagreb", "Serbo-Croatian", "Croatian Kuna", new Boolean(false)},
+ {"Czech Republic", "Prague", "Czech, Slovak", "Koruna", new Boolean(false)},
+ {"Denmark", "Copenhagen", "Danish", "Krone", new Boolean(true)},
+ {"Estonia", "Tallinn", "Estonian, Latvian, Lithuanian, Russian", "Estonian Kroon", new Boolean(false)},
+ {"Finland", "Helsinki", "Finnish, Swedish, Lappish", "Markka", new Boolean(false)},
+ {"France", "Paris", "French", "Franc", new Boolean(true)},
+ {"Germany", "Berlin", "German", "Deutsche Mark", new Boolean(true)},
+ {"Greece", "Athens", "Greek, English, French", "Drachma", new Boolean(true)},
+ {"Hungary", "Budapest", "Hungarian", "Forint", new Boolean(false)},
+ {"Iceland", "Reykjavik", "Icelandic", "Icelandic Krona", new Boolean(false)},
+ {"Ireland", "Dublin", "Irish, English", "Pound", new Boolean(true)},
+ {"Italy", "Rome", "Italian", "Lira", new Boolean(true)},
+ {"Latvia", "Riga", "Lettish, Lithuanian, Russian", "Lat", new Boolean(false)},
+ {"Liechtenstein", "Vaduz", "German", "Swiss Franc", new Boolean(false)},
+ {"Lithuania", "Vilnius", "Lithuanian, Polish, Russian", "Lita", new Boolean(false)},
+ {"Luxembourg", "Luxembourg", "French, German, Letzeburgesch", "Luxembourg Franc", new Boolean(true)},
+ {"Macedonia", "Skopje", "Macedonian, Albanian, Turkish, Serbo-Croatian", "Denar", new Boolean(false)},
+ {"Malta", "Valletta", "Maltese, English", "Maltese Lira", new Boolean(false)},
+ {"Moldova", "Chisinau", "Moldovan, Russian", "Leu", new Boolean(false)},
+ {"Monaco", "Monaco", "French, English, Italian", "French Franc", new Boolean(false)},
+ {"the Netherlands", "Amsterdam", "Dutch", "Guilder", new Boolean(true)},
+ {"Norway", "Oslo", "Norwegian", "Krone", new Boolean(false)},
+ {"Poland", "Warsaw", "Polish", "Zloty", new Boolean(false)},
+ {"Portugal", "Lisbon", "Portuguese", "Escudo", new Boolean(true)},
+ {"Romania", "Bucharest", "Romanian", "Leu", new Boolean(false)},
+ {"Russia", "Moscow", "Russian", "Ruble", new Boolean(false)},
+ {"San Marino", "San Marino", "Italian", "Italian Lira", new Boolean(false)},
+ {"Slovakia", "Bratislava", "Slovak, Hungarian", "Koruna", new Boolean(false)},
+ {"Slovenia", "Ljubljana", "Slovenian, Serbo-Croatian", "Tolar", new Boolean(false)},
+ {"Spain", "Madrid", "Spanish", "Peseta", new Boolean(true)},
+ {"Sweden", "Stockholm", "Swedish", "Krona", new Boolean(false)},
+ {"Switzerland", "Bern", "German, French, Italian", "Swiss Franc", new Boolean(false)},
+ {"Turkey", "Ankara", "Turkish", "Turkish Lira", new Boolean(false)},
+ {"Ukraine", "Kiev", "Ukranian, Russian, Romanian, Polish, Hungarian", "Hryvnia", new Boolean(false)},
+ {"United Kingdom", "London", "English, Welsh", "British Pound", new Boolean(true)},
+ {"Yugoslavia", "Belgrade", "Serbo-Croatian, Slovenian, Macedonian", "Dinar", new Boolean(false)},
+ };
+
+ // Table model
+ TableModel dataModel = new AbstractTableModel() {
+
+ public int getColumnCount() {
+ return headers.length;
+ }
+
+ public int getRowCount() {
+ return data.length;
+ }
+
+ public Object getValueAt(int row, int col) {
+ return data[row][col];
+ }
+
+ public String getColumnName(int column) {
+ return headers[column];
+ }
+
+ public Class getColumnClass(int col) {
+ return getValueAt(0, col).getClass();
+ }
+
+ public void setValueAt(Object aValue, int row, int column) {
+ data[row][column] = aValue;
+ }
+
+ public boolean isCellEditable(int row, int col) {
+ return (col == 4);
+ }
+ };
+
+ // Create table with table model
+ JTable countryTable = new JTable(dataModel);
+ countryTable.setGridColor(Color.pink);
+ countryTable.setBackground(Color.white);
+ countryTable.setForeground(Color.black);
+ return countryTable;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTableHeader/6884066/bug6884066.java Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ @bug 6884066
+ @summary JTableHeader listens mouse in disabled state and doesn't work when not attached to a table
+ @author Alexander Potochkin
+ @run main bug6884066
+*/
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableColumn;
+import java.awt.*;
+import java.awt.event.InputEvent;
+
+import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
+
+public class bug6884066 {
+ private static JTableHeader header;
+
+ public static void main(String[] args) throws Exception {
+
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+ robot.setAutoDelay(20);
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ // just to quickly grab a column model
+ JTable table = new JTable(10, 5);
+ header = new JTableHeader(table.getColumnModel());
+ checkColumn(0, "A");
+ JFrame frame = new JFrame("standalone header");
+ frame.add(header);
+ frame.pack();
+ frame.setVisible(true);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ }
+ });
+ toolkit.realSync();
+ Point point = header.getLocationOnScreen();
+ robot.mouseMove(point.x + 3, point.y + 3);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ for (int i = 0; i < header.getWidth() - 3; i++) {
+ robot.mouseMove(point.x + i, point.y + 3);
+ }
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ TableColumnModel model = header.getColumnModel();
+ checkColumn(model.getColumnCount() - 1, "A");
+ }
+ });
+ }
+
+ private static void checkColumn(int index, String str) {
+ TableColumnModel model = header.getColumnModel();
+ Object value = model.getColumn(index).getHeaderValue();
+ if (!str.equals(value)) {
+ throw new RuntimeException("Unexpected header's value; " +
+ "index = " + index + " value = " + value);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTableHeader/6889007/bug6889007.java Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ @bug 6889007
+ @summary No resize cursor during hovering mouse over JTable
+ @author Alexander Potochkin
+*/
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.plaf.basic.BasicTableHeaderUI;
+import javax.swing.table.JTableHeader;
+import java.awt.*;
+
+public class bug6889007 {
+
+ public static void main(String[] args) throws Exception {
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+ robot.setAutoDelay(20);
+
+ final JFrame frame = new JFrame();
+ frame.setUndecorated(true);
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ JTableHeader th = new JTableHeader();
+ th.setColumnModel(new JTable(20, 5).getColumnModel());
+
+ th.setUI(new MyTableHeaderUI());
+
+ frame.add(th);
+ frame.pack();
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ }
+ });
+ toolkit.realSync();
+ Point point = frame.getLocationOnScreen();
+ int shift = 10;
+ int x = point.x;
+ int y = point.y + frame.getHeight()/2;
+ for(int i = -shift; i < frame.getWidth() + 2*shift; i++) {
+ robot.mouseMove(x++, y);
+ }
+ toolkit.realSync();
+ // 9 is a magic test number
+ if (MyTableHeaderUI.getTestValue() != 9) {
+ throw new RuntimeException("Unexpected test number "
+ + MyTableHeaderUI.getTestValue());
+ }
+ System.out.println("ok");
+ }
+
+ static class MyTableHeaderUI extends BasicTableHeaderUI {
+ private static int testValue;
+
+ protected void rolloverColumnUpdated(int oldColumn, int newColumn) {
+ increaseTestValue(newColumn);
+ Cursor cursor = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR);
+ if (oldColumn != -1 && newColumn != -1 &&
+ header.getCursor() != cursor) {
+ throw new RuntimeException("Wrong type of cursor!");
+ }
+ }
+
+ private static synchronized void increaseTestValue(int increment) {
+ testValue += increment;
+ }
+
+ public static synchronized int getTestValue() {
+ return testValue;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTextArea/6925473/bug6925473.java Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6925473
+ * @summary REGRESSION: JOptionPane in dialog is full-screen height
+ * @author Pavel Porvatov
+ * @run main bug6925473
+ */
+
+import javax.swing.*;
+import java.awt.*;
+
+public class bug6925473 {
+ private static final String LONG_TEXT = "Copyright 2010 Sun Microsystems, Inc. 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. ";
+
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ JTextArea textArea = new JTextArea(LONG_TEXT);
+
+ Dimension preferredSize = textArea.getPreferredSize();
+
+ if (preferredSize.width <= 0 || preferredSize.height <= 0) {
+ throw new RuntimeException("Invalid preferred size " + preferredSize);
+ }
+
+ JTextArea textAreaLW = new JTextArea(LONG_TEXT);
+
+ textAreaLW.setLineWrap(true);
+
+ Dimension preferredSizeLW = textAreaLW.getPreferredSize();
+
+ if (preferredSizeLW.width <= 0 || preferredSizeLW.height <= 0) {
+ throw new RuntimeException("Invalid preferred size " + preferredSizeLW);
+ }
+ }
+ });
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTextArea/6940863/bug6940863.java Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6940863
+ * @summary Textarea within scrollpane shows vertical scrollbar
+ * @author Pavel Porvatov
+ * @run main bug6940863
+ */
+
+import sun.awt.OSInfo;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class bug6940863 {
+ private static JFrame frame;
+
+ private static JScrollPane scrollPane;
+
+ private static final Timer timer = new Timer(1000, new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ boolean failed = scrollPane.getVerticalScrollBar().isShowing() ||
+ scrollPane.getHorizontalScrollBar().isShowing();
+
+ frame.dispose();
+
+ if (failed) {
+ throw new RuntimeException("The test failed");
+ }
+ }
+ });
+
+ public static void main(String[] args) throws Exception {
+ if (OSInfo.getOSType() != OSInfo.OSType.WINDOWS) {
+ System.out.println("The test is suitable only for Windows OS. Skipped");
+ }
+
+ UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ JTextArea textArea = new JTextArea();
+
+ textArea.setLineWrap(true);
+ textArea.setWrapStyleWord(true);
+
+ scrollPane = new JScrollPane(textArea);
+
+ scrollPane.setMinimumSize(new Dimension(200, 100));
+ scrollPane.setPreferredSize(new Dimension(300, 150));
+
+ frame = new JFrame("Vertical scrollbar shown without text");
+
+ frame.setContentPane(scrollPane);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.pack();
+ frame.setVisible(true);
+
+ timer.setRepeats(false);
+ timer.start();
+ }
+ });
+ }
+}
--- a/jdk/test/javax/swing/JTextArea/Test6593649.java Sat May 29 23:26:16 2010 -0700
+++ b/jdk/test/javax/swing/JTextArea/Test6593649.java Tue Jun 01 21:25:26 2010 -0700
@@ -30,60 +30,50 @@
import javax.swing.*;
import java.awt.*;
-
-public class Test6593649 extends JFrame {
- static JTextArea txt;
- static JPanel innerPanel;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
- public Test6593649(Dimension d)
- {
- super("Word Wrap Testcase");
+public class Test6593649 {
+ private static JFrame frame;
- setSize(d);
+ private static JTextArea textArea;
- final Container contentPane = getContentPane();
+ private static final Timer timer = new Timer(1000, new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ boolean failed = !textArea.getParent().getSize().equals(textArea.getSize());
- innerPanel = new JPanel();
- innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.LINE_AXIS));
+ frame.dispose();
- txt = new JTextArea("This is a long line that should wrap, but doesn't...");
- txt.setLineWrap(true);
- txt.setWrapStyleWord(true);
-
- innerPanel.add(txt);
-
- contentPane.add(innerPanel, BorderLayout.SOUTH);
- }
+ if (failed) {
+ throw new RuntimeException("The test failed");
+ }
+ }
+ });
- public static void main(String[] args) throws InterruptedException
- {
- int size = 100;
- Dimension d;
- Test6593649 cp;
- Dimension txtSize;
- Dimension innerSize;
- Dimension cpSize;
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ frame = new JFrame();
+
+ frame.setSize(200, 100);
- while (size <= 600)
- {
- d = new Dimension(size, size);
- cp = new Test6593649(d);
- cp.setVisible(true);
+ textArea = new JTextArea("This is a long line that should wrap, but doesn't...");
+
+ textArea.setLineWrap(true);
+ textArea.setWrapStyleWord(true);
+
+ JPanel innerPanel = new JPanel();
- txtSize = txt.getPreferredSize();
- innerSize = innerPanel.getPreferredSize();
- cpSize = cp.getSize();
+ innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.LINE_AXIS));
+ innerPanel.add(textArea);
+
+ frame.getContentPane().add(innerPanel, BorderLayout.SOUTH);
+
+ frame.setVisible(true);
- if (!(txtSize.getWidth() == innerPanel.getWidth() && txtSize.getHeight() == innerPanel.getHeight() &&
- txtSize.getWidth() <= cpSize.getWidth() && txtSize.getHeight() <= cpSize.getHeight()))
- {
- throw new RuntimeException("Test failed: Text area size does not properly match panel and frame sizes");
- }
-
- Thread.sleep(2000);
-
- cp.hide();
- size += 50;
+ timer.setRepeats(false);
+ timer.start();
+ }
+ });
}
- }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JViewport/6953396/bug6953396.java Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6953396
+ * @summary javax.swing.plaf.basic.BasicViewportUI.uninstallDefaults() is not called when UI is uninstalled
+ * @author Alexander Potochkin
+ */
+
+import javax.swing.*;
+import javax.swing.plaf.basic.BasicViewportUI;
+
+public class bug6953396 {
+ static volatile boolean flag;
+
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ BasicViewportUI ui = new BasicViewportUI() {
+
+ @Override
+ protected void installDefaults(JComponent c) {
+ super.installDefaults(c);
+ flag = true;
+ }
+
+ @Override
+ protected void uninstallDefaults(JComponent c) {
+ super.uninstallDefaults(c);
+ flag = false;
+ }
+ };
+
+ JViewport viewport = new JViewport();
+ viewport.setUI(ui);
+ viewport.setUI(null);
+ }
+ });
+ if (flag) {
+ throw new RuntimeException("uninstallDefaults() hasn't been called");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/border/Test6910490.html Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,9 @@
+<html>
+<body>
+If the border is painted over scroll bars then test fails.
+Otherwise test passes.
+
+<applet width="600" height="300" code="Test6910490.class">
+</applet>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/border/Test6910490.java Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import static java.awt.Color.RED;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Insets;
+import javax.swing.Icon;
+import javax.swing.JApplet;
+import javax.swing.JButton;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.border.MatteBorder;
+
+/*
+ * @test
+ * @bug 6910490
+ * @summary Tests a matte border around a component inside a scroll pane.
+ * @author Sergey Malenkov
+ * @run applet/manual=yesno Test6910490.html
+ */
+
+public class Test6910490 extends JApplet implements Icon {
+
+ @Override
+ public void init() {
+ Insets insets = new Insets(10, 10, 10, 10);
+ Dimension size = new Dimension(getWidth() / 2, getHeight());
+ JSplitPane pane = new JSplitPane(
+ JSplitPane.HORIZONTAL_SPLIT,
+ create("Color", size, new MatteBorder(insets, RED)),
+ create("Icon", size, new MatteBorder(insets, this)));
+ pane.setDividerLocation(size.width - pane.getDividerSize() / 2);
+ add(pane);
+ }
+
+ private JScrollPane create(String name, Dimension size, MatteBorder border) {
+ JButton button = new JButton(name);
+ button.setPreferredSize(size);
+ button.setBorder(border);
+ return new JScrollPane(button);
+ }
+
+ public int getIconWidth() {
+ return 10;
+ }
+
+ public int getIconHeight() {
+ return 10;
+ }
+
+ public void paintIcon(Component c, Graphics g, int x, int y) {
+ g.setColor(RED);
+ g.fillRect(x, y, getIconWidth(), getIconHeight());
+ }
+}