libjava/classpath/ChangeLog.gcj:
2007-05-31 Matthias Klose <doko@ubuntu.com> * javax/management/NotificationBroadcasterSupport.java (getNotificationInfo): Add cast. * native/jni/qt-peer/Makefile.am (AM_CXXFLAGS): Add libstdc++ include directories. * native/jni/qt-peer/Makefile.in: Regenerate. libjava/ChangeLog: 2007-06-03 Matthias Klose <doko@ubuntu.com> * java/io/natFileWin32.cc (setFilePermissions): New (stub only). _access: Handle EXEC query, stub only. 2007-06-03 Matthias Klose <doko@ubuntu.com> Merged from classpath: * gnu/java/nio/SelectorProviderImpl.java: Whitespace merge. * java/lang/System.java(inheritedChannel): New. * java/lang/Character.java: Remove stray`;'. * java/net/MulticastSocket.java: Merged. * java/text/DateFormatSymbols.java(getInstance): New, comment updates. * java/text/Collator.java(getInstance): Merged. * java/util/Calendar.java: New attributes ALL_STYLES, SHORT, LONG. getDisplayName, getDisplayNames: New. * java/util/logging/Logger.java: Merged. * Regenerate .class and .h files. 2007-06-03 Matthias Klose <doko@ubuntu.com> * java/io/File.java: Merge with classpath-0.95, new method setFilePermissions, new attribute EXEC. * java/io/natFilePosix.cc (setFilePermissions): New. _access: Handle EXEC query. * classpath/lib/java/io/File.class, java/io/File.h: Regenerate. 2007-06-03 Matthias Klose <doko@ubuntu.com> Imported GNU Classpath 0.95. * classpath/Makefile.in, classpath/native/jni/midi-dssi/Makefile.in, classpath/native/jni/classpath/Makefile.in, classpath/native/jni/Makefile.in, classpath/native/jni/gconf-peer/Makefile.in, classpath/native/jni/java-io/Makefile.in, classpath/native/jni/native-lib/Makefile.in, classpath/native/jni/java-util/Makefile.in, classpath/native/jni/midi-alsa/Makefile.in, classpath/native/jni/java-lang/Makefile.in, classpath/native/jni/java-nio/Makefile.in, classpath/native/jni/java-net/Makefile.in, classpath/native/jni/xmlj/Makefile.in, classpath/native/jni/qt-peer/Makefile.in, classpath/native/jni/gtk-peer/Makefile.in, classpath/native/Makefile.in, classpath/native/jawt/Makefile.in, classpath/native/fdlibm/Makefile.in, classpath/native/plugin/Makefile.in, classpath/resource/Makefile.in, classpath/scripts/Makefile.in, classpath/tools/Makefile.in, classpath/doc/Makefile.in, classpath/doc/api/Makefile.in, classpath/lib/Makefile.in, classpath/external/Makefile.in, classpath/external/jsr166/Makefile.in, classpath/external/sax/Makefile.in, classpath/external/w3c_dom/Makefile.in, classpath/external/relaxngDatatype/Makefile.in, classpath/include/Makefile.in, classpath/examples/Makefile.in: Regenerate. * classpath/config.guess, classpath/config.sub, classpath/ltmain.sh : Update. * classpath/configure, classpath/depcomp, classpath/missing, classpath/aclocal.m4, classpath/install-sh: Regenerate. * gnu/classpath/Configuration.java (CLASSPATH_VERSION): Now 0.95. * sources.am: Regenerate. * Makefile.in: Regenerate. * Update the .class files and generated CNI header files, add new .class and generated CNI header files. * Remove generated files for removed java source files: classpath/gnu/java/net/BASE64.java, classpath/gnu/java/security/util/Base64.java, classpath/gnu/java/awt/peer/gtk/GThreadMutex.java, classpath/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java, classpath/gnu/java/awt/font/autofit/Scaler.java, classpath/gnu/classpath/jdwp/util/Value.java, classpath/gnu/javax/net/ssl/Base64.java. * Remove empty directories. * Makefile.am(nat_source_files): Add natVMOperatingSystemMXBeanImpl.cc. * java/lang/Class.java(setAccessible): Merge from classpath. * java/util/Locale.java: Remove. * gnu/java/lang/management/VMOperatingSystemMXBeanImpl.java, gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.cc: New. * gcj/javaprims.h: Update class declarations. * scripts/classes.pl: Update usage. * HACKING: Mention to build all peers. From-SVN: r125302
This commit is contained in:
parent
af333b9a7f
commit
e1bea0c068
2951 changed files with 80982 additions and 68583 deletions
|
@ -1,3 +1,91 @@
|
||||||
|
2007-06-03 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
|
* java/io/natFileWin32.cc (setFilePermissions): New (stub only).
|
||||||
|
_access: Handle EXEC query, stub only.
|
||||||
|
|
||||||
|
2007-06-03 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
|
Merged from classpath:
|
||||||
|
* gnu/java/nio/SelectorProviderImpl.java: Whitespace merge.
|
||||||
|
* java/lang/System.java(inheritedChannel): New.
|
||||||
|
* java/lang/Character.java: Remove stray`;'.
|
||||||
|
* java/net/MulticastSocket.java: Merged.
|
||||||
|
* java/text/DateFormatSymbols.java(getInstance): New, comment updates.
|
||||||
|
* java/text/Collator.java(getInstance): Merged.
|
||||||
|
* java/util/Calendar.java: New attributes ALL_STYLES, SHORT, LONG.
|
||||||
|
getDisplayName, getDisplayNames: New.
|
||||||
|
* java/util/logging/Logger.java: Merged.
|
||||||
|
* Regenerate .class and .h files.
|
||||||
|
|
||||||
|
2007-06-03 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
|
* java/io/File.java: Merge with classpath-0.95, new method
|
||||||
|
setFilePermissions, new attribute EXEC.
|
||||||
|
* java/io/natFilePosix.cc (setFilePermissions): New.
|
||||||
|
_access: Handle EXEC query.
|
||||||
|
* classpath/lib/java/io/File.class, java/io/File.h: Regenerate.
|
||||||
|
|
||||||
|
2007-06-03 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
|
Imported GNU Classpath 0.95.
|
||||||
|
|
||||||
|
* classpath/Makefile.in,
|
||||||
|
classpath/native/jni/midi-dssi/Makefile.in,
|
||||||
|
classpath/native/jni/classpath/Makefile.in,
|
||||||
|
classpath/native/jni/Makefile.in,
|
||||||
|
classpath/native/jni/gconf-peer/Makefile.in,
|
||||||
|
classpath/native/jni/java-io/Makefile.in,
|
||||||
|
classpath/native/jni/native-lib/Makefile.in,
|
||||||
|
classpath/native/jni/java-util/Makefile.in,
|
||||||
|
classpath/native/jni/midi-alsa/Makefile.in,
|
||||||
|
classpath/native/jni/java-lang/Makefile.in,
|
||||||
|
classpath/native/jni/java-nio/Makefile.in,
|
||||||
|
classpath/native/jni/java-net/Makefile.in,
|
||||||
|
classpath/native/jni/xmlj/Makefile.in,
|
||||||
|
classpath/native/jni/qt-peer/Makefile.in,
|
||||||
|
classpath/native/jni/gtk-peer/Makefile.in,
|
||||||
|
classpath/native/Makefile.in, classpath/native/jawt/Makefile.in,
|
||||||
|
classpath/native/fdlibm/Makefile.in,
|
||||||
|
classpath/native/plugin/Makefile.in,
|
||||||
|
classpath/resource/Makefile.in, classpath/scripts/Makefile.in,
|
||||||
|
classpath/tools/Makefile.in, classpath/doc/Makefile.in,
|
||||||
|
classpath/doc/api/Makefile.in, classpath/lib/Makefile.in,
|
||||||
|
classpath/external/Makefile.in, classpath/external/jsr166/Makefile.in,
|
||||||
|
classpath/external/sax/Makefile.in,
|
||||||
|
classpath/external/w3c_dom/Makefile.in,
|
||||||
|
classpath/external/relaxngDatatype/Makefile.in,
|
||||||
|
classpath/include/Makefile.in,
|
||||||
|
classpath/examples/Makefile.in: Regenerate.
|
||||||
|
* classpath/config.guess, classpath/config.sub,
|
||||||
|
classpath/ltmain.sh : Update.
|
||||||
|
* classpath/configure, classpath/depcomp, classpath/missing,
|
||||||
|
classpath/aclocal.m4, classpath/install-sh: Regenerate.
|
||||||
|
|
||||||
|
* gnu/classpath/Configuration.java (CLASSPATH_VERSION): Now 0.95.
|
||||||
|
* sources.am: Regenerate.
|
||||||
|
* Makefile.in: Regenerate.
|
||||||
|
|
||||||
|
* Update the .class files and generated CNI header files, add new
|
||||||
|
.class and generated CNI header files.
|
||||||
|
* Remove generated files for removed java source files:
|
||||||
|
classpath/gnu/java/net/BASE64.java,
|
||||||
|
classpath/gnu/java/security/util/Base64.java,
|
||||||
|
classpath/gnu/java/awt/peer/gtk/GThreadMutex.java,
|
||||||
|
classpath/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java,
|
||||||
|
classpath/gnu/java/awt/font/autofit/Scaler.java,
|
||||||
|
classpath/gnu/classpath/jdwp/util/Value.java,
|
||||||
|
classpath/gnu/javax/net/ssl/Base64.java.
|
||||||
|
* Remove empty directories.
|
||||||
|
|
||||||
|
* Makefile.am(nat_source_files): Add natVMOperatingSystemMXBeanImpl.cc.
|
||||||
|
* java/lang/Class.java(setAccessible): Merge from classpath.
|
||||||
|
* java/util/Locale.java: Remove.
|
||||||
|
* gnu/java/lang/management/VMOperatingSystemMXBeanImpl.java,
|
||||||
|
gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.cc: New.
|
||||||
|
* gcj/javaprims.h: Update class declarations.
|
||||||
|
* scripts/classes.pl: Update usage.
|
||||||
|
* HACKING: Mention to build all peers.
|
||||||
|
|
||||||
2007-06-02 Paolo Bonzini <bonzini@gnu.org>
|
2007-06-02 Paolo Bonzini <bonzini@gnu.org>
|
||||||
|
|
||||||
* configure: Regenerate.
|
* configure: Regenerate.
|
||||||
|
|
|
@ -89,6 +89,8 @@ To import a new release:
|
||||||
scripts/makemake.tcl > sources.am
|
scripts/makemake.tcl > sources.am
|
||||||
automake
|
automake
|
||||||
- Build, fix, till everything works.
|
- Build, fix, till everything works.
|
||||||
|
Be sure to build all peers (--enable-java-awt=gtk,xlib,qt
|
||||||
|
--enable-gconf-peer)
|
||||||
Be sure to update gnu/classpath/Configuration.java to reflect
|
Be sure to update gnu/classpath/Configuration.java to reflect
|
||||||
the new version
|
the new version
|
||||||
Possibly update the gcj/javaprims.h file with scripts/classes.pl
|
Possibly update the gcj/javaprims.h file with scripts/classes.pl
|
||||||
|
|
|
@ -864,6 +864,7 @@ gnu/java/lang/management/natVMGarbageCollectorMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMMemoryMXBeanImpl.cc \
|
gnu/java/lang/management/natVMMemoryMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.cc \
|
gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.cc \
|
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.cc \
|
||||||
|
gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMRuntimeMXBeanImpl.cc \
|
gnu/java/lang/management/natVMRuntimeMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMThreadMXBeanImpl.cc \
|
gnu/java/lang/management/natVMThreadMXBeanImpl.cc \
|
||||||
gnu/java/net/natPlainDatagramSocketImpl.cc \
|
gnu/java/net/natPlainDatagramSocketImpl.cc \
|
||||||
|
|
|
@ -244,11 +244,12 @@ am__DEPENDENCIES_1 = gnu/awt.lo gnu/awt/j2d.lo gnu/classpath.lo \
|
||||||
java/rmi/activation.lo java/rmi/dgc.lo java/rmi/registry.lo \
|
java/rmi/activation.lo java/rmi/dgc.lo java/rmi/registry.lo \
|
||||||
java/rmi/server.lo java/security.lo java/security/acl.lo \
|
java/rmi/server.lo java/security.lo java/security/acl.lo \
|
||||||
java/security/cert.lo java/security/interfaces.lo \
|
java/security/cert.lo java/security/interfaces.lo \
|
||||||
java/security/spec.lo java/sql.lo java/text.lo java/util.lo \
|
java/security/spec.lo java/sql.lo java/text.lo \
|
||||||
java/util/concurrent.lo java/util/concurrent/atomic.lo \
|
java/text/spi.lo java/util.lo java/util/concurrent.lo \
|
||||||
java/util/concurrent/locks.lo java/util/jar.lo \
|
java/util/concurrent/atomic.lo java/util/concurrent/locks.lo \
|
||||||
java/util/logging.lo java/util/prefs.lo java/util/regex.lo \
|
java/util/jar.lo java/util/logging.lo java/util/prefs.lo \
|
||||||
java/util/zip.lo javax/accessibility.lo javax/crypto.lo \
|
java/util/regex.lo java/util/spi.lo java/util/zip.lo \
|
||||||
|
javax/accessibility.lo javax/activity.lo javax/crypto.lo \
|
||||||
javax/crypto/interfaces.lo javax/crypto/spec.lo \
|
javax/crypto/interfaces.lo javax/crypto/spec.lo \
|
||||||
javax/management.lo javax/management/loading.lo \
|
javax/management.lo javax/management/loading.lo \
|
||||||
javax/management/openmbean.lo javax/naming.lo \
|
javax/management/openmbean.lo javax/naming.lo \
|
||||||
|
@ -314,6 +315,7 @@ am__libgcj_la_SOURCES_DIST = prims.cc jni.cc jvmti.cc exception.cc \
|
||||||
gnu/java/lang/management/natVMMemoryMXBeanImpl.cc \
|
gnu/java/lang/management/natVMMemoryMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.cc \
|
gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.cc \
|
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.cc \
|
||||||
|
gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMRuntimeMXBeanImpl.cc \
|
gnu/java/lang/management/natVMRuntimeMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMThreadMXBeanImpl.cc \
|
gnu/java/lang/management/natVMThreadMXBeanImpl.cc \
|
||||||
gnu/java/net/natPlainDatagramSocketImpl.cc \
|
gnu/java/net/natPlainDatagramSocketImpl.cc \
|
||||||
|
@ -376,6 +378,7 @@ am__objects_2 = gnu/classpath/jdwp/natVMFrame.lo \
|
||||||
gnu/java/lang/management/natVMMemoryMXBeanImpl.lo \
|
gnu/java/lang/management/natVMMemoryMXBeanImpl.lo \
|
||||||
gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.lo \
|
gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.lo \
|
||||||
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.lo \
|
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.lo \
|
||||||
|
gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.lo \
|
||||||
gnu/java/lang/management/natVMRuntimeMXBeanImpl.lo \
|
gnu/java/lang/management/natVMRuntimeMXBeanImpl.lo \
|
||||||
gnu/java/lang/management/natVMThreadMXBeanImpl.lo \
|
gnu/java/lang/management/natVMThreadMXBeanImpl.lo \
|
||||||
gnu/java/net/natPlainDatagramSocketImpl.lo \
|
gnu/java/net/natPlainDatagramSocketImpl.lo \
|
||||||
|
@ -1152,6 +1155,7 @@ gnu_awt_xlib_header_files = $(patsubst %.java,%.h,$(gnu_awt_xlib_source_files))
|
||||||
gnu_classpath_source_files = \
|
gnu_classpath_source_files = \
|
||||||
gnu/classpath/Configuration.java \
|
gnu/classpath/Configuration.java \
|
||||||
classpath/gnu/classpath/NotImplementedException.java \
|
classpath/gnu/classpath/NotImplementedException.java \
|
||||||
|
classpath/gnu/classpath/Pair.java \
|
||||||
classpath/gnu/classpath/Pointer.java \
|
classpath/gnu/classpath/Pointer.java \
|
||||||
classpath/gnu/classpath/Pointer32.java \
|
classpath/gnu/classpath/Pointer32.java \
|
||||||
classpath/gnu/classpath/Pointer64.java \
|
classpath/gnu/classpath/Pointer64.java \
|
||||||
|
@ -1294,7 +1298,6 @@ classpath/gnu/classpath/jdwp/util/MethodResult.java \
|
||||||
classpath/gnu/classpath/jdwp/util/MonitorInfo.java \
|
classpath/gnu/classpath/jdwp/util/MonitorInfo.java \
|
||||||
classpath/gnu/classpath/jdwp/util/NullObject.java \
|
classpath/gnu/classpath/jdwp/util/NullObject.java \
|
||||||
classpath/gnu/classpath/jdwp/util/Signature.java \
|
classpath/gnu/classpath/jdwp/util/Signature.java \
|
||||||
classpath/gnu/classpath/jdwp/util/Value.java \
|
|
||||||
classpath/gnu/classpath/jdwp/util/VariableTable.java
|
classpath/gnu/classpath/jdwp/util/VariableTable.java
|
||||||
|
|
||||||
gnu_classpath_jdwp_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_util_source_files)))
|
gnu_classpath_jdwp_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_util_source_files)))
|
||||||
|
@ -1412,6 +1415,7 @@ classpath/gnu/java/awt/AWTUtilities.java \
|
||||||
classpath/gnu/java/awt/BitMaskExtent.java \
|
classpath/gnu/java/awt/BitMaskExtent.java \
|
||||||
classpath/gnu/java/awt/BitwiseXORComposite.java \
|
classpath/gnu/java/awt/BitwiseXORComposite.java \
|
||||||
classpath/gnu/java/awt/Buffers.java \
|
classpath/gnu/java/awt/Buffers.java \
|
||||||
|
classpath/gnu/java/awt/ClasspathGraphicsEnvironment.java \
|
||||||
classpath/gnu/java/awt/ClasspathToolkit.java \
|
classpath/gnu/java/awt/ClasspathToolkit.java \
|
||||||
classpath/gnu/java/awt/ComponentDataBlitOp.java \
|
classpath/gnu/java/awt/ComponentDataBlitOp.java \
|
||||||
classpath/gnu/java/awt/ComponentReshapeEvent.java \
|
classpath/gnu/java/awt/ComponentReshapeEvent.java \
|
||||||
|
@ -1453,22 +1457,27 @@ classpath/gnu/java/awt/font/GNUGlyphVector.java
|
||||||
|
|
||||||
gnu_java_awt_font_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_source_files)))
|
gnu_java_awt_font_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_source_files)))
|
||||||
gnu_java_awt_font_autofit_source_files = \
|
gnu_java_awt_font_autofit_source_files = \
|
||||||
|
classpath/gnu/java/awt/font/autofit/AutoHinter.java \
|
||||||
classpath/gnu/java/awt/font/autofit/AxisHints.java \
|
classpath/gnu/java/awt/font/autofit/AxisHints.java \
|
||||||
classpath/gnu/java/awt/font/autofit/Constants.java \
|
classpath/gnu/java/awt/font/autofit/Constants.java \
|
||||||
|
classpath/gnu/java/awt/font/autofit/Edge.java \
|
||||||
classpath/gnu/java/awt/font/autofit/GlyphHints.java \
|
classpath/gnu/java/awt/font/autofit/GlyphHints.java \
|
||||||
|
classpath/gnu/java/awt/font/autofit/HintScaler.java \
|
||||||
classpath/gnu/java/awt/font/autofit/Latin.java \
|
classpath/gnu/java/awt/font/autofit/Latin.java \
|
||||||
classpath/gnu/java/awt/font/autofit/LatinAxis.java \
|
classpath/gnu/java/awt/font/autofit/LatinAxis.java \
|
||||||
|
classpath/gnu/java/awt/font/autofit/LatinBlue.java \
|
||||||
classpath/gnu/java/awt/font/autofit/LatinMetrics.java \
|
classpath/gnu/java/awt/font/autofit/LatinMetrics.java \
|
||||||
classpath/gnu/java/awt/font/autofit/Scaler.java \
|
|
||||||
classpath/gnu/java/awt/font/autofit/Script.java \
|
classpath/gnu/java/awt/font/autofit/Script.java \
|
||||||
classpath/gnu/java/awt/font/autofit/ScriptMetrics.java \
|
classpath/gnu/java/awt/font/autofit/ScriptMetrics.java \
|
||||||
classpath/gnu/java/awt/font/autofit/Segment.java \
|
classpath/gnu/java/awt/font/autofit/Segment.java \
|
||||||
|
classpath/gnu/java/awt/font/autofit/Utils.java \
|
||||||
classpath/gnu/java/awt/font/autofit/Width.java
|
classpath/gnu/java/awt/font/autofit/Width.java
|
||||||
|
|
||||||
gnu_java_awt_font_autofit_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_autofit_source_files)))
|
gnu_java_awt_font_autofit_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_autofit_source_files)))
|
||||||
gnu_java_awt_font_opentype_source_files = \
|
gnu_java_awt_font_opentype_source_files = \
|
||||||
classpath/gnu/java/awt/font/opentype/CharGlyphMap.java \
|
classpath/gnu/java/awt/font/opentype/CharGlyphMap.java \
|
||||||
classpath/gnu/java/awt/font/opentype/GlyphNamer.java \
|
classpath/gnu/java/awt/font/opentype/GlyphNamer.java \
|
||||||
|
classpath/gnu/java/awt/font/opentype/Hinter.java \
|
||||||
classpath/gnu/java/awt/font/opentype/MacResourceFork.java \
|
classpath/gnu/java/awt/font/opentype/MacResourceFork.java \
|
||||||
classpath/gnu/java/awt/font/opentype/NameDecoder.java \
|
classpath/gnu/java/awt/font/opentype/NameDecoder.java \
|
||||||
classpath/gnu/java/awt/font/opentype/OpenTypeFont.java \
|
classpath/gnu/java/awt/font/opentype/OpenTypeFont.java \
|
||||||
|
@ -1481,6 +1490,7 @@ classpath/gnu/java/awt/font/opentype/truetype/Fixed.java \
|
||||||
classpath/gnu/java/awt/font/opentype/truetype/GlyphLoader.java \
|
classpath/gnu/java/awt/font/opentype/truetype/GlyphLoader.java \
|
||||||
classpath/gnu/java/awt/font/opentype/truetype/GlyphLocator.java \
|
classpath/gnu/java/awt/font/opentype/truetype/GlyphLocator.java \
|
||||||
classpath/gnu/java/awt/font/opentype/truetype/GlyphMeasurer.java \
|
classpath/gnu/java/awt/font/opentype/truetype/GlyphMeasurer.java \
|
||||||
|
classpath/gnu/java/awt/font/opentype/truetype/Point.java \
|
||||||
classpath/gnu/java/awt/font/opentype/truetype/TrueTypeScaler.java \
|
classpath/gnu/java/awt/font/opentype/truetype/TrueTypeScaler.java \
|
||||||
classpath/gnu/java/awt/font/opentype/truetype/VirtualMachine.java \
|
classpath/gnu/java/awt/font/opentype/truetype/VirtualMachine.java \
|
||||||
classpath/gnu/java/awt/font/opentype/truetype/Zone.java \
|
classpath/gnu/java/awt/font/opentype/truetype/Zone.java \
|
||||||
|
@ -1494,6 +1504,7 @@ classpath/gnu/java/awt/image/XBMDecoder.java
|
||||||
gnu_java_awt_image_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_image_source_files)))
|
gnu_java_awt_image_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_image_source_files)))
|
||||||
gnu_java_awt_java2d_source_files = \
|
gnu_java_awt_java2d_source_files = \
|
||||||
classpath/gnu/java/awt/java2d/AbstractGraphics2D.java \
|
classpath/gnu/java/awt/java2d/AbstractGraphics2D.java \
|
||||||
|
classpath/gnu/java/awt/java2d/ActiveEdges.java \
|
||||||
classpath/gnu/java/awt/java2d/AlphaCompositeContext.java \
|
classpath/gnu/java/awt/java2d/AlphaCompositeContext.java \
|
||||||
classpath/gnu/java/awt/java2d/CubicSegment.java \
|
classpath/gnu/java/awt/java2d/CubicSegment.java \
|
||||||
classpath/gnu/java/awt/java2d/ImagePaint.java \
|
classpath/gnu/java/awt/java2d/ImagePaint.java \
|
||||||
|
@ -1502,15 +1513,20 @@ classpath/gnu/java/awt/java2d/PolyEdge.java \
|
||||||
classpath/gnu/java/awt/java2d/PolyEdgeComparator.java \
|
classpath/gnu/java/awt/java2d/PolyEdgeComparator.java \
|
||||||
classpath/gnu/java/awt/java2d/QuadSegment.java \
|
classpath/gnu/java/awt/java2d/QuadSegment.java \
|
||||||
classpath/gnu/java/awt/java2d/RasterGraphics.java \
|
classpath/gnu/java/awt/java2d/RasterGraphics.java \
|
||||||
|
classpath/gnu/java/awt/java2d/Scanline.java \
|
||||||
|
classpath/gnu/java/awt/java2d/ScanlineConverter.java \
|
||||||
classpath/gnu/java/awt/java2d/Segment.java \
|
classpath/gnu/java/awt/java2d/Segment.java \
|
||||||
classpath/gnu/java/awt/java2d/ShapeCache.java \
|
classpath/gnu/java/awt/java2d/ShapeCache.java \
|
||||||
classpath/gnu/java/awt/java2d/TexturePaintContext.java
|
classpath/gnu/java/awt/java2d/TexturePaintContext.java
|
||||||
|
|
||||||
gnu_java_awt_java2d_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_java2d_source_files)))
|
gnu_java_awt_java2d_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_java2d_source_files)))
|
||||||
gnu_java_awt_peer_source_files = \
|
gnu_java_awt_peer_source_files = \
|
||||||
|
classpath/gnu/java/awt/peer/ClasspathDesktopPeer.java \
|
||||||
classpath/gnu/java/awt/peer/ClasspathFontPeer.java \
|
classpath/gnu/java/awt/peer/ClasspathFontPeer.java \
|
||||||
classpath/gnu/java/awt/peer/EmbeddedWindowPeer.java \
|
classpath/gnu/java/awt/peer/EmbeddedWindowPeer.java \
|
||||||
classpath/gnu/java/awt/peer/GLightweightPeer.java \
|
classpath/gnu/java/awt/peer/GLightweightPeer.java \
|
||||||
|
classpath/gnu/java/awt/peer/GnomeDesktopPeer.java \
|
||||||
|
classpath/gnu/java/awt/peer/KDEDesktopPeer.java \
|
||||||
classpath/gnu/java/awt/peer/NativeEventLoopRunningEvent.java
|
classpath/gnu/java/awt/peer/NativeEventLoopRunningEvent.java
|
||||||
|
|
||||||
gnu_java_awt_peer_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_peer_source_files)))
|
gnu_java_awt_peer_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_peer_source_files)))
|
||||||
|
@ -1523,8 +1539,6 @@ classpath/gnu/java/awt/peer/gtk/CairoSurfaceGraphics.java \
|
||||||
classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java \
|
classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java \
|
||||||
classpath/gnu/java/awt/peer/gtk/ComponentGraphicsCopy.java \
|
classpath/gnu/java/awt/peer/gtk/ComponentGraphicsCopy.java \
|
||||||
classpath/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java \
|
classpath/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java \
|
||||||
classpath/gnu/java/awt/peer/gtk/GThreadMutex.java \
|
|
||||||
classpath/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java \
|
|
||||||
classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java \
|
classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java \
|
||||||
classpath/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java \
|
classpath/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java \
|
||||||
classpath/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java \
|
classpath/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java \
|
||||||
|
@ -1782,6 +1796,7 @@ gnu/java/lang/management/VMGarbageCollectorMXBeanImpl.java \
|
||||||
gnu/java/lang/management/VMMemoryMXBeanImpl.java \
|
gnu/java/lang/management/VMMemoryMXBeanImpl.java \
|
||||||
gnu/java/lang/management/VMMemoryManagerMXBeanImpl.java \
|
gnu/java/lang/management/VMMemoryManagerMXBeanImpl.java \
|
||||||
gnu/java/lang/management/VMMemoryPoolMXBeanImpl.java \
|
gnu/java/lang/management/VMMemoryPoolMXBeanImpl.java \
|
||||||
|
gnu/java/lang/management/VMOperatingSystemMXBeanImpl.java \
|
||||||
gnu/java/lang/management/VMRuntimeMXBeanImpl.java \
|
gnu/java/lang/management/VMRuntimeMXBeanImpl.java \
|
||||||
gnu/java/lang/management/VMThreadMXBeanImpl.java
|
gnu/java/lang/management/VMThreadMXBeanImpl.java
|
||||||
|
|
||||||
|
@ -1940,11 +1955,11 @@ gnu/java/locale/LocaleInformation_zh_TW.java
|
||||||
|
|
||||||
gnu_java_locale_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_locale_source_files)))
|
gnu_java_locale_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_locale_source_files)))
|
||||||
gnu_java_math_source_files = \
|
gnu_java_math_source_files = \
|
||||||
|
classpath/gnu/java/math/Fixed.java \
|
||||||
classpath/gnu/java/math/MPN.java
|
classpath/gnu/java/math/MPN.java
|
||||||
|
|
||||||
gnu_java_math_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_math_source_files)))
|
gnu_java_math_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_math_source_files)))
|
||||||
gnu_java_net_source_files = \
|
gnu_java_net_source_files = \
|
||||||
classpath/gnu/java/net/BASE64.java \
|
|
||||||
classpath/gnu/java/net/CRLFInputStream.java \
|
classpath/gnu/java/net/CRLFInputStream.java \
|
||||||
classpath/gnu/java/net/CRLFOutputStream.java \
|
classpath/gnu/java/net/CRLFOutputStream.java \
|
||||||
classpath/gnu/java/net/DefaultContentHandlerFactory.java \
|
classpath/gnu/java/net/DefaultContentHandlerFactory.java \
|
||||||
|
@ -2371,7 +2386,6 @@ classpath/gnu/java/security/sig/rsa/RSASignatureFactory.java
|
||||||
|
|
||||||
gnu_java_security_sig_rsa_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_sig_rsa_source_files)))
|
gnu_java_security_sig_rsa_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_sig_rsa_source_files)))
|
||||||
gnu_java_security_util_source_files = \
|
gnu_java_security_util_source_files = \
|
||||||
classpath/gnu/java/security/util/Base64.java \
|
|
||||||
classpath/gnu/java/security/util/ByteArray.java \
|
classpath/gnu/java/security/util/ByteArray.java \
|
||||||
classpath/gnu/java/security/util/ByteBufferOutputStream.java \
|
classpath/gnu/java/security/util/ByteBufferOutputStream.java \
|
||||||
classpath/gnu/java/security/util/DerUtil.java \
|
classpath/gnu/java/security/util/DerUtil.java \
|
||||||
|
@ -2405,9 +2419,12 @@ classpath/gnu/java/security/x509/ext/CRLNumber.java \
|
||||||
classpath/gnu/java/security/x509/ext/CertificatePolicies.java \
|
classpath/gnu/java/security/x509/ext/CertificatePolicies.java \
|
||||||
classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java \
|
classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java \
|
||||||
classpath/gnu/java/security/x509/ext/Extension.java \
|
classpath/gnu/java/security/x509/ext/Extension.java \
|
||||||
|
classpath/gnu/java/security/x509/ext/GeneralName.java \
|
||||||
classpath/gnu/java/security/x509/ext/GeneralNames.java \
|
classpath/gnu/java/security/x509/ext/GeneralNames.java \
|
||||||
|
classpath/gnu/java/security/x509/ext/GeneralSubtree.java \
|
||||||
classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java \
|
classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java \
|
||||||
classpath/gnu/java/security/x509/ext/KeyUsage.java \
|
classpath/gnu/java/security/x509/ext/KeyUsage.java \
|
||||||
|
classpath/gnu/java/security/x509/ext/NameConstraints.java \
|
||||||
classpath/gnu/java/security/x509/ext/PolicyConstraint.java \
|
classpath/gnu/java/security/x509/ext/PolicyConstraint.java \
|
||||||
classpath/gnu/java/security/x509/ext/PolicyMappings.java \
|
classpath/gnu/java/security/x509/ext/PolicyMappings.java \
|
||||||
classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java \
|
classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java \
|
||||||
|
@ -2429,6 +2446,7 @@ classpath/gnu/java/text/WordBreakIterator.java
|
||||||
|
|
||||||
gnu_java_text_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_text_source_files)))
|
gnu_java_text_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_text_source_files)))
|
||||||
gnu_java_util_source_files = \
|
gnu_java_util_source_files = \
|
||||||
|
classpath/gnu/java/util/Base64.java \
|
||||||
classpath/gnu/java/util/DoubleEnumeration.java \
|
classpath/gnu/java/util/DoubleEnumeration.java \
|
||||||
classpath/gnu/java/util/EmptyEnumeration.java \
|
classpath/gnu/java/util/EmptyEnumeration.java \
|
||||||
classpath/gnu/java/util/WeakIdentityHashMap.java \
|
classpath/gnu/java/util/WeakIdentityHashMap.java \
|
||||||
|
@ -2914,7 +2932,8 @@ classpath/gnu/javax/imageio/png/PNGTime.java
|
||||||
gnu_javax_imageio_png_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_imageio_png_source_files)))
|
gnu_javax_imageio_png_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_imageio_png_source_files)))
|
||||||
gnu_javax_management_source_files = \
|
gnu_javax_management_source_files = \
|
||||||
classpath/gnu/javax/management/ListenerData.java \
|
classpath/gnu/javax/management/ListenerData.java \
|
||||||
classpath/gnu/javax/management/Server.java
|
classpath/gnu/javax/management/Server.java \
|
||||||
|
classpath/gnu/javax/management/Translator.java
|
||||||
|
|
||||||
gnu_javax_naming_giop_source_files = \
|
gnu_javax_naming_giop_source_files = \
|
||||||
classpath/gnu/javax/naming/giop/ContextContinuation.java \
|
classpath/gnu/javax/naming/giop/ContextContinuation.java \
|
||||||
|
@ -2946,7 +2965,6 @@ classpath/gnu/javax/naming/jndi/url/rmi/rmiURLContextFactory.java
|
||||||
gnu_javax_naming_jndi_url_rmi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_naming_jndi_url_rmi_source_files)))
|
gnu_javax_naming_jndi_url_rmi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_naming_jndi_url_rmi_source_files)))
|
||||||
gnu_javax_net_ssl_source_files = \
|
gnu_javax_net_ssl_source_files = \
|
||||||
classpath/gnu/javax/net/ssl/AbstractSessionContext.java \
|
classpath/gnu/javax/net/ssl/AbstractSessionContext.java \
|
||||||
classpath/gnu/javax/net/ssl/Base64.java \
|
|
||||||
classpath/gnu/javax/net/ssl/EntropySource.java \
|
classpath/gnu/javax/net/ssl/EntropySource.java \
|
||||||
classpath/gnu/javax/net/ssl/NullManagerParameters.java \
|
classpath/gnu/javax/net/ssl/NullManagerParameters.java \
|
||||||
classpath/gnu/javax/net/ssl/PreSharedKeyManager.java \
|
classpath/gnu/javax/net/ssl/PreSharedKeyManager.java \
|
||||||
|
@ -3754,6 +3772,7 @@ classpath/java/awt/ContainerOrderFocusTraversalPolicy.java \
|
||||||
classpath/java/awt/Cursor.java \
|
classpath/java/awt/Cursor.java \
|
||||||
classpath/java/awt/DefaultFocusTraversalPolicy.java \
|
classpath/java/awt/DefaultFocusTraversalPolicy.java \
|
||||||
classpath/java/awt/DefaultKeyboardFocusManager.java \
|
classpath/java/awt/DefaultKeyboardFocusManager.java \
|
||||||
|
classpath/java/awt/Desktop.java \
|
||||||
classpath/java/awt/Dialog.java \
|
classpath/java/awt/Dialog.java \
|
||||||
classpath/java/awt/Dimension.java \
|
classpath/java/awt/Dimension.java \
|
||||||
classpath/java/awt/DisplayMode.java \
|
classpath/java/awt/DisplayMode.java \
|
||||||
|
@ -4059,6 +4078,7 @@ classpath/java/awt/peer/CheckboxPeer.java \
|
||||||
classpath/java/awt/peer/ChoicePeer.java \
|
classpath/java/awt/peer/ChoicePeer.java \
|
||||||
classpath/java/awt/peer/ComponentPeer.java \
|
classpath/java/awt/peer/ComponentPeer.java \
|
||||||
classpath/java/awt/peer/ContainerPeer.java \
|
classpath/java/awt/peer/ContainerPeer.java \
|
||||||
|
classpath/java/awt/peer/DesktopPeer.java \
|
||||||
classpath/java/awt/peer/DialogPeer.java \
|
classpath/java/awt/peer/DialogPeer.java \
|
||||||
classpath/java/awt/peer/FileDialogPeer.java \
|
classpath/java/awt/peer/FileDialogPeer.java \
|
||||||
classpath/java/awt/peer/FontPeer.java \
|
classpath/java/awt/peer/FontPeer.java \
|
||||||
|
@ -4101,6 +4121,7 @@ classpath/java/beans/AppletInitializer.java \
|
||||||
classpath/java/beans/BeanDescriptor.java \
|
classpath/java/beans/BeanDescriptor.java \
|
||||||
classpath/java/beans/BeanInfo.java \
|
classpath/java/beans/BeanInfo.java \
|
||||||
classpath/java/beans/Beans.java \
|
classpath/java/beans/Beans.java \
|
||||||
|
classpath/java/beans/ConstructorProperties.java \
|
||||||
classpath/java/beans/Customizer.java \
|
classpath/java/beans/Customizer.java \
|
||||||
classpath/java/beans/DefaultPersistenceDelegate.java \
|
classpath/java/beans/DefaultPersistenceDelegate.java \
|
||||||
classpath/java/beans/DesignMode.java \
|
classpath/java/beans/DesignMode.java \
|
||||||
|
@ -4367,6 +4388,7 @@ java_lang_management_source_files = \
|
||||||
classpath/java/lang/management/ClassLoadingMXBean.java \
|
classpath/java/lang/management/ClassLoadingMXBean.java \
|
||||||
classpath/java/lang/management/CompilationMXBean.java \
|
classpath/java/lang/management/CompilationMXBean.java \
|
||||||
classpath/java/lang/management/GarbageCollectorMXBean.java \
|
classpath/java/lang/management/GarbageCollectorMXBean.java \
|
||||||
|
classpath/java/lang/management/LockInfo.java \
|
||||||
classpath/java/lang/management/ManagementFactory.java \
|
classpath/java/lang/management/ManagementFactory.java \
|
||||||
classpath/java/lang/management/ManagementPermission.java \
|
classpath/java/lang/management/ManagementPermission.java \
|
||||||
classpath/java/lang/management/MemoryMXBean.java \
|
classpath/java/lang/management/MemoryMXBean.java \
|
||||||
|
@ -4375,6 +4397,7 @@ classpath/java/lang/management/MemoryNotificationInfo.java \
|
||||||
classpath/java/lang/management/MemoryPoolMXBean.java \
|
classpath/java/lang/management/MemoryPoolMXBean.java \
|
||||||
classpath/java/lang/management/MemoryType.java \
|
classpath/java/lang/management/MemoryType.java \
|
||||||
classpath/java/lang/management/MemoryUsage.java \
|
classpath/java/lang/management/MemoryUsage.java \
|
||||||
|
classpath/java/lang/management/MonitorInfo.java \
|
||||||
classpath/java/lang/management/OperatingSystemMXBean.java \
|
classpath/java/lang/management/OperatingSystemMXBean.java \
|
||||||
classpath/java/lang/management/RuntimeMXBean.java \
|
classpath/java/lang/management/RuntimeMXBean.java \
|
||||||
classpath/java/lang/management/ThreadInfo.java \
|
classpath/java/lang/management/ThreadInfo.java \
|
||||||
|
@ -4878,6 +4901,15 @@ classpath/java/text/SimpleDateFormat.java \
|
||||||
classpath/java/text/StringCharacterIterator.java
|
classpath/java/text/StringCharacterIterator.java
|
||||||
|
|
||||||
java_text_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_text_source_files)))
|
java_text_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_text_source_files)))
|
||||||
|
java_text_spi_source_files = \
|
||||||
|
classpath/java/text/spi/BreakIteratorProvider.java \
|
||||||
|
classpath/java/text/spi/CollatorProvider.java \
|
||||||
|
classpath/java/text/spi/DateFormatProvider.java \
|
||||||
|
classpath/java/text/spi/DateFormatSymbolsProvider.java \
|
||||||
|
classpath/java/text/spi/DecimalFormatSymbolsProvider.java \
|
||||||
|
classpath/java/text/spi/NumberFormatProvider.java
|
||||||
|
|
||||||
|
java_text_spi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_text_spi_source_files)))
|
||||||
java_util_source_files = \
|
java_util_source_files = \
|
||||||
classpath/java/util/AbstractCollection.java \
|
classpath/java/util/AbstractCollection.java \
|
||||||
classpath/java/util/AbstractList.java \
|
classpath/java/util/AbstractList.java \
|
||||||
|
@ -4931,7 +4963,7 @@ classpath/java/util/LinkedList.java \
|
||||||
classpath/java/util/List.java \
|
classpath/java/util/List.java \
|
||||||
classpath/java/util/ListIterator.java \
|
classpath/java/util/ListIterator.java \
|
||||||
classpath/java/util/ListResourceBundle.java \
|
classpath/java/util/ListResourceBundle.java \
|
||||||
java/util/Locale.java \
|
classpath/java/util/Locale.java \
|
||||||
classpath/java/util/Map.java \
|
classpath/java/util/Map.java \
|
||||||
classpath/java/util/MissingFormatArgumentException.java \
|
classpath/java/util/MissingFormatArgumentException.java \
|
||||||
classpath/java/util/MissingFormatWidthException.java \
|
classpath/java/util/MissingFormatWidthException.java \
|
||||||
|
@ -4950,6 +4982,8 @@ classpath/external/jsr166/java/util/Queue.java \
|
||||||
classpath/java/util/Random.java \
|
classpath/java/util/Random.java \
|
||||||
classpath/java/util/RandomAccess.java \
|
classpath/java/util/RandomAccess.java \
|
||||||
classpath/java/util/ResourceBundle.java \
|
classpath/java/util/ResourceBundle.java \
|
||||||
|
classpath/java/util/ServiceConfigurationError.java \
|
||||||
|
classpath/java/util/ServiceLoader.java \
|
||||||
classpath/java/util/Set.java \
|
classpath/java/util/Set.java \
|
||||||
classpath/java/util/SimpleTimeZone.java \
|
classpath/java/util/SimpleTimeZone.java \
|
||||||
classpath/java/util/SortedMap.java \
|
classpath/java/util/SortedMap.java \
|
||||||
|
@ -5093,6 +5127,13 @@ classpath/java/util/regex/Pattern.java \
|
||||||
classpath/java/util/regex/PatternSyntaxException.java
|
classpath/java/util/regex/PatternSyntaxException.java
|
||||||
|
|
||||||
java_util_regex_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_util_regex_source_files)))
|
java_util_regex_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_util_regex_source_files)))
|
||||||
|
java_util_spi_source_files = \
|
||||||
|
classpath/java/util/spi/CurrencyNameProvider.java \
|
||||||
|
classpath/java/util/spi/LocaleNameProvider.java \
|
||||||
|
classpath/java/util/spi/LocaleServiceProvider.java \
|
||||||
|
classpath/java/util/spi/TimeZoneNameProvider.java
|
||||||
|
|
||||||
|
java_util_spi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_util_spi_source_files)))
|
||||||
java_util_zip_source_files = \
|
java_util_zip_source_files = \
|
||||||
classpath/java/util/zip/Adler32.java \
|
classpath/java/util/zip/Adler32.java \
|
||||||
classpath/java/util/zip/CRC32.java \
|
classpath/java/util/zip/CRC32.java \
|
||||||
|
@ -5144,6 +5185,12 @@ classpath/javax/accessibility/AccessibleTextSequence.java \
|
||||||
classpath/javax/accessibility/AccessibleValue.java
|
classpath/javax/accessibility/AccessibleValue.java
|
||||||
|
|
||||||
javax_accessibility_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_accessibility_source_files)))
|
javax_accessibility_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_accessibility_source_files)))
|
||||||
|
javax_activity_source_files = \
|
||||||
|
classpath/javax/activity/ActivityCompletedException.java \
|
||||||
|
classpath/javax/activity/ActivityRequiredException.java \
|
||||||
|
classpath/javax/activity/InvalidActivityException.java
|
||||||
|
|
||||||
|
javax_activity_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_activity_source_files)))
|
||||||
javax_crypto_source_files = \
|
javax_crypto_source_files = \
|
||||||
classpath/javax/crypto/BadPaddingException.java \
|
classpath/javax/crypto/BadPaddingException.java \
|
||||||
classpath/javax/crypto/Cipher.java \
|
classpath/javax/crypto/Cipher.java \
|
||||||
|
@ -5245,11 +5292,18 @@ classpath/javax/imageio/stream/MemoryCacheImageOutputStream.java
|
||||||
|
|
||||||
javax_management_source_files = \
|
javax_management_source_files = \
|
||||||
classpath/javax/management/Attribute.java \
|
classpath/javax/management/Attribute.java \
|
||||||
|
classpath/javax/management/AttributeChangeNotification.java \
|
||||||
|
classpath/javax/management/AttributeChangeNotificationFilter.java \
|
||||||
classpath/javax/management/AttributeList.java \
|
classpath/javax/management/AttributeList.java \
|
||||||
classpath/javax/management/AttributeNotFoundException.java \
|
classpath/javax/management/AttributeNotFoundException.java \
|
||||||
|
classpath/javax/management/AttributeValueExp.java \
|
||||||
classpath/javax/management/BadAttributeValueExpException.java \
|
classpath/javax/management/BadAttributeValueExpException.java \
|
||||||
classpath/javax/management/BadBinaryOpValueExpException.java \
|
classpath/javax/management/BadBinaryOpValueExpException.java \
|
||||||
classpath/javax/management/BadStringOperationException.java \
|
classpath/javax/management/BadStringOperationException.java \
|
||||||
|
classpath/javax/management/DefaultLoaderRepository.java \
|
||||||
|
classpath/javax/management/Descriptor.java \
|
||||||
|
classpath/javax/management/DescriptorAccess.java \
|
||||||
|
classpath/javax/management/DescriptorRead.java \
|
||||||
classpath/javax/management/DynamicMBean.java \
|
classpath/javax/management/DynamicMBean.java \
|
||||||
classpath/javax/management/InstanceAlreadyExistsException.java \
|
classpath/javax/management/InstanceAlreadyExistsException.java \
|
||||||
classpath/javax/management/InstanceNotFoundException.java \
|
classpath/javax/management/InstanceNotFoundException.java \
|
||||||
|
@ -5258,6 +5312,7 @@ classpath/javax/management/InvalidApplicationException.java \
|
||||||
classpath/javax/management/InvalidAttributeValueException.java \
|
classpath/javax/management/InvalidAttributeValueException.java \
|
||||||
classpath/javax/management/JMException.java \
|
classpath/javax/management/JMException.java \
|
||||||
classpath/javax/management/JMRuntimeException.java \
|
classpath/javax/management/JMRuntimeException.java \
|
||||||
|
classpath/javax/management/JMX.java \
|
||||||
classpath/javax/management/ListenerNotFoundException.java \
|
classpath/javax/management/ListenerNotFoundException.java \
|
||||||
classpath/javax/management/MBeanAttributeInfo.java \
|
classpath/javax/management/MBeanAttributeInfo.java \
|
||||||
classpath/javax/management/MBeanConstructorInfo.java \
|
classpath/javax/management/MBeanConstructorInfo.java \
|
||||||
|
@ -5276,19 +5331,26 @@ classpath/javax/management/MBeanServerConnection.java \
|
||||||
classpath/javax/management/MBeanServerDelegate.java \
|
classpath/javax/management/MBeanServerDelegate.java \
|
||||||
classpath/javax/management/MBeanServerDelegateMBean.java \
|
classpath/javax/management/MBeanServerDelegateMBean.java \
|
||||||
classpath/javax/management/MBeanServerFactory.java \
|
classpath/javax/management/MBeanServerFactory.java \
|
||||||
|
classpath/javax/management/MBeanServerInvocationHandler.java \
|
||||||
classpath/javax/management/MBeanServerNotification.java \
|
classpath/javax/management/MBeanServerNotification.java \
|
||||||
classpath/javax/management/MBeanServerPermission.java \
|
classpath/javax/management/MBeanServerPermission.java \
|
||||||
classpath/javax/management/MBeanTrustPermission.java \
|
classpath/javax/management/MBeanTrustPermission.java \
|
||||||
|
classpath/javax/management/MXBean.java \
|
||||||
classpath/javax/management/MalformedObjectNameException.java \
|
classpath/javax/management/MalformedObjectNameException.java \
|
||||||
classpath/javax/management/NotCompliantMBeanException.java \
|
classpath/javax/management/NotCompliantMBeanException.java \
|
||||||
classpath/javax/management/Notification.java \
|
classpath/javax/management/Notification.java \
|
||||||
classpath/javax/management/NotificationBroadcaster.java \
|
classpath/javax/management/NotificationBroadcaster.java \
|
||||||
|
classpath/javax/management/NotificationBroadcasterSupport.java \
|
||||||
classpath/javax/management/NotificationEmitter.java \
|
classpath/javax/management/NotificationEmitter.java \
|
||||||
classpath/javax/management/NotificationFilter.java \
|
classpath/javax/management/NotificationFilter.java \
|
||||||
|
classpath/javax/management/NotificationFilterSupport.java \
|
||||||
classpath/javax/management/NotificationListener.java \
|
classpath/javax/management/NotificationListener.java \
|
||||||
classpath/javax/management/ObjectInstance.java \
|
classpath/javax/management/ObjectInstance.java \
|
||||||
classpath/javax/management/ObjectName.java \
|
classpath/javax/management/ObjectName.java \
|
||||||
classpath/javax/management/OperationsException.java \
|
classpath/javax/management/OperationsException.java \
|
||||||
|
classpath/javax/management/PersistentMBean.java \
|
||||||
|
classpath/javax/management/Query.java \
|
||||||
|
classpath/javax/management/QueryEval.java \
|
||||||
classpath/javax/management/QueryExp.java \
|
classpath/javax/management/QueryExp.java \
|
||||||
classpath/javax/management/ReflectionException.java \
|
classpath/javax/management/ReflectionException.java \
|
||||||
classpath/javax/management/RuntimeErrorException.java \
|
classpath/javax/management/RuntimeErrorException.java \
|
||||||
|
@ -5296,6 +5358,7 @@ classpath/javax/management/RuntimeMBeanException.java \
|
||||||
classpath/javax/management/RuntimeOperationsException.java \
|
classpath/javax/management/RuntimeOperationsException.java \
|
||||||
classpath/javax/management/ServiceNotFoundException.java \
|
classpath/javax/management/ServiceNotFoundException.java \
|
||||||
classpath/javax/management/StandardMBean.java \
|
classpath/javax/management/StandardMBean.java \
|
||||||
|
classpath/javax/management/StringValueExp.java \
|
||||||
classpath/javax/management/ValueExp.java
|
classpath/javax/management/ValueExp.java
|
||||||
|
|
||||||
javax_management_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_management_source_files)))
|
javax_management_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_management_source_files)))
|
||||||
|
@ -5306,6 +5369,7 @@ javax_management_loading_header_files = $(patsubst classpath/%,%,$(patsubst %.ja
|
||||||
javax_management_openmbean_source_files = \
|
javax_management_openmbean_source_files = \
|
||||||
classpath/javax/management/openmbean/ArrayType.java \
|
classpath/javax/management/openmbean/ArrayType.java \
|
||||||
classpath/javax/management/openmbean/CompositeData.java \
|
classpath/javax/management/openmbean/CompositeData.java \
|
||||||
|
classpath/javax/management/openmbean/CompositeDataInvocationHandler.java \
|
||||||
classpath/javax/management/openmbean/CompositeDataSupport.java \
|
classpath/javax/management/openmbean/CompositeDataSupport.java \
|
||||||
classpath/javax/management/openmbean/CompositeType.java \
|
classpath/javax/management/openmbean/CompositeType.java \
|
||||||
classpath/javax/management/openmbean/InvalidKeyException.java \
|
classpath/javax/management/openmbean/InvalidKeyException.java \
|
||||||
|
@ -7423,6 +7487,7 @@ all_packages_source_files = \
|
||||||
java/security/spec.list \
|
java/security/spec.list \
|
||||||
java/sql.list \
|
java/sql.list \
|
||||||
java/text.list \
|
java/text.list \
|
||||||
|
java/text/spi.list \
|
||||||
java/util.list \
|
java/util.list \
|
||||||
java/util/concurrent.list \
|
java/util/concurrent.list \
|
||||||
java/util/concurrent/atomic.list \
|
java/util/concurrent/atomic.list \
|
||||||
|
@ -7431,8 +7496,10 @@ all_packages_source_files = \
|
||||||
java/util/logging.list \
|
java/util/logging.list \
|
||||||
java/util/prefs.list \
|
java/util/prefs.list \
|
||||||
java/util/regex.list \
|
java/util/regex.list \
|
||||||
|
java/util/spi.list \
|
||||||
java/util/zip.list \
|
java/util/zip.list \
|
||||||
javax/accessibility.list \
|
javax/accessibility.list \
|
||||||
|
javax/activity.list \
|
||||||
javax/crypto.list \
|
javax/crypto.list \
|
||||||
javax/crypto/interfaces.list \
|
javax/crypto/interfaces.list \
|
||||||
javax/crypto/spec.list \
|
javax/crypto/spec.list \
|
||||||
|
@ -7670,6 +7737,7 @@ ordinary_header_files = \
|
||||||
$(java_security_spec_header_files) \
|
$(java_security_spec_header_files) \
|
||||||
$(java_sql_header_files) \
|
$(java_sql_header_files) \
|
||||||
$(java_text_header_files) \
|
$(java_text_header_files) \
|
||||||
|
$(java_text_spi_header_files) \
|
||||||
$(java_util_header_files) \
|
$(java_util_header_files) \
|
||||||
$(java_util_concurrent_header_files) \
|
$(java_util_concurrent_header_files) \
|
||||||
$(java_util_concurrent_atomic_header_files) \
|
$(java_util_concurrent_atomic_header_files) \
|
||||||
|
@ -7678,8 +7746,10 @@ ordinary_header_files = \
|
||||||
$(java_util_logging_header_files) \
|
$(java_util_logging_header_files) \
|
||||||
$(java_util_prefs_header_files) \
|
$(java_util_prefs_header_files) \
|
||||||
$(java_util_regex_header_files) \
|
$(java_util_regex_header_files) \
|
||||||
|
$(java_util_spi_header_files) \
|
||||||
$(java_util_zip_header_files) \
|
$(java_util_zip_header_files) \
|
||||||
$(javax_accessibility_header_files) \
|
$(javax_accessibility_header_files) \
|
||||||
|
$(javax_activity_header_files) \
|
||||||
$(javax_crypto_header_files) \
|
$(javax_crypto_header_files) \
|
||||||
$(javax_crypto_interfaces_header_files) \
|
$(javax_crypto_interfaces_header_files) \
|
||||||
$(javax_crypto_spec_header_files) \
|
$(javax_crypto_spec_header_files) \
|
||||||
|
@ -7794,6 +7864,7 @@ property_files = \
|
||||||
classpath/resource/org/ietf/jgss/MessagesBundle.properties \
|
classpath/resource/org/ietf/jgss/MessagesBundle.properties \
|
||||||
classpath/resource/sun/rmi/rmic/messages.properties \
|
classpath/resource/sun/rmi/rmic/messages.properties \
|
||||||
classpath/resource/com/sun/tools/javac/messages.properties \
|
classpath/resource/com/sun/tools/javac/messages.properties \
|
||||||
|
classpath/resource/META-INF/services/java.util.prefs.PreferencesFactory \
|
||||||
classpath/resource/META-INF/services/java.util.prefs.PreferencesFactory.in \
|
classpath/resource/META-INF/services/java.util.prefs.PreferencesFactory.in \
|
||||||
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiDeviceProvider \
|
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiDeviceProvider \
|
||||||
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiFileReader \
|
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiFileReader \
|
||||||
|
@ -8002,6 +8073,7 @@ gnu/java/lang/management/natVMGarbageCollectorMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMMemoryMXBeanImpl.cc \
|
gnu/java/lang/management/natVMMemoryMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.cc \
|
gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.cc \
|
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.cc \
|
||||||
|
gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMRuntimeMXBeanImpl.cc \
|
gnu/java/lang/management/natVMRuntimeMXBeanImpl.cc \
|
||||||
gnu/java/lang/management/natVMThreadMXBeanImpl.cc \
|
gnu/java/lang/management/natVMThreadMXBeanImpl.cc \
|
||||||
gnu/java/net/natPlainDatagramSocketImpl.cc \
|
gnu/java/net/natPlainDatagramSocketImpl.cc \
|
||||||
|
@ -8443,6 +8515,9 @@ gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.lo: \
|
||||||
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.lo: \
|
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.lo: \
|
||||||
gnu/java/lang/management/$(am__dirstamp) \
|
gnu/java/lang/management/$(am__dirstamp) \
|
||||||
gnu/java/lang/management/$(DEPDIR)/$(am__dirstamp)
|
gnu/java/lang/management/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.lo: \
|
||||||
|
gnu/java/lang/management/$(am__dirstamp) \
|
||||||
|
gnu/java/lang/management/$(DEPDIR)/$(am__dirstamp)
|
||||||
gnu/java/lang/management/natVMRuntimeMXBeanImpl.lo: \
|
gnu/java/lang/management/natVMRuntimeMXBeanImpl.lo: \
|
||||||
gnu/java/lang/management/$(am__dirstamp) \
|
gnu/java/lang/management/$(am__dirstamp) \
|
||||||
gnu/java/lang/management/$(DEPDIR)/$(am__dirstamp)
|
gnu/java/lang/management/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
@ -8930,6 +9005,8 @@ mostlyclean-compile:
|
||||||
-rm -f gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.lo
|
-rm -f gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.lo
|
||||||
-rm -f gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.$(OBJEXT)
|
-rm -f gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.$(OBJEXT)
|
||||||
-rm -f gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.lo
|
-rm -f gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.lo
|
||||||
|
-rm -f gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.$(OBJEXT)
|
||||||
|
-rm -f gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.lo
|
||||||
-rm -f gnu/java/lang/management/natVMRuntimeMXBeanImpl.$(OBJEXT)
|
-rm -f gnu/java/lang/management/natVMRuntimeMXBeanImpl.$(OBJEXT)
|
||||||
-rm -f gnu/java/lang/management/natVMRuntimeMXBeanImpl.lo
|
-rm -f gnu/java/lang/management/natVMRuntimeMXBeanImpl.lo
|
||||||
-rm -f gnu/java/lang/management/natVMThreadMXBeanImpl.$(OBJEXT)
|
-rm -f gnu/java/lang/management/natVMThreadMXBeanImpl.$(OBJEXT)
|
||||||
|
@ -9115,6 +9192,7 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMMemoryMXBeanImpl.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMMemoryMXBeanImpl.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMMemoryManagerMXBeanImpl.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMMemoryManagerMXBeanImpl.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMMemoryPoolMXBeanImpl.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMMemoryPoolMXBeanImpl.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMOperatingSystemMXBeanImpl.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMRuntimeMXBeanImpl.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMRuntimeMXBeanImpl.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMThreadMXBeanImpl.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/management/$(DEPDIR)/natVMThreadMXBeanImpl.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/natPlainDatagramSocketImpl.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/natPlainDatagramSocketImpl.Plo@am__quote@
|
||||||
|
@ -11254,6 +11332,12 @@ java/text.list: $(java_text_source_files)
|
||||||
|
|
||||||
-include java/text.deps
|
-include java/text.deps
|
||||||
|
|
||||||
|
java/text/spi.list: $(java_text_spi_source_files)
|
||||||
|
@$(mkinstalldirs) $(dir $@)
|
||||||
|
echo $(srcdir)/classpath/lib/java/text/spi/*.class > java/text/spi.list
|
||||||
|
|
||||||
|
-include java/text/spi.deps
|
||||||
|
|
||||||
java/util.list: $(java_util_source_files)
|
java/util.list: $(java_util_source_files)
|
||||||
@$(mkinstalldirs) $(dir $@)
|
@$(mkinstalldirs) $(dir $@)
|
||||||
echo $(srcdir)/classpath/lib/java/util/*.class > java/util.list
|
echo $(srcdir)/classpath/lib/java/util/*.class > java/util.list
|
||||||
|
@ -11302,6 +11386,12 @@ java/util/regex.list: $(java_util_regex_source_files)
|
||||||
|
|
||||||
-include java/util/regex.deps
|
-include java/util/regex.deps
|
||||||
|
|
||||||
|
java/util/spi.list: $(java_util_spi_source_files)
|
||||||
|
@$(mkinstalldirs) $(dir $@)
|
||||||
|
echo $(srcdir)/classpath/lib/java/util/spi/*.class > java/util/spi.list
|
||||||
|
|
||||||
|
-include java/util/spi.deps
|
||||||
|
|
||||||
java/util/zip.list: $(java_util_zip_source_files)
|
java/util/zip.list: $(java_util_zip_source_files)
|
||||||
@$(mkinstalldirs) $(dir $@)
|
@$(mkinstalldirs) $(dir $@)
|
||||||
echo $(srcdir)/classpath/lib/java/util/zip/*.class > java/util/zip.list
|
echo $(srcdir)/classpath/lib/java/util/zip/*.class > java/util/zip.list
|
||||||
|
@ -11314,6 +11404,12 @@ javax/accessibility.list: $(javax_accessibility_source_files)
|
||||||
|
|
||||||
-include javax/accessibility.deps
|
-include javax/accessibility.deps
|
||||||
|
|
||||||
|
javax/activity.list: $(javax_activity_source_files)
|
||||||
|
@$(mkinstalldirs) $(dir $@)
|
||||||
|
echo $(srcdir)/classpath/lib/javax/activity/*.class > javax/activity.list
|
||||||
|
|
||||||
|
-include javax/activity.deps
|
||||||
|
|
||||||
javax/crypto.list: $(javax_crypto_source_files)
|
javax/crypto.list: $(javax_crypto_source_files)
|
||||||
@$(mkinstalldirs) $(dir $@)
|
@$(mkinstalldirs) $(dir $@)
|
||||||
echo $(srcdir)/classpath/lib/javax/crypto/*.class > javax/crypto.list
|
echo $(srcdir)/classpath/lib/javax/crypto/*.class > javax/crypto.list
|
||||||
|
|
File diff suppressed because it is too large
Load diff
37380
libjava/classpath/ChangeLog-2006
Normal file
37380
libjava/classpath/ChangeLog-2006
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,11 @@
|
||||||
|
2007-05-31 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
|
* javax/management/NotificationBroadcasterSupport.java
|
||||||
|
(getNotificationInfo): Add cast.
|
||||||
|
* native/jni/qt-peer/Makefile.am (AM_CXXFLAGS): Add libstdc++ include
|
||||||
|
directories.
|
||||||
|
* native/jni/qt-peer/Makefile.in: Regenerate.
|
||||||
|
|
||||||
2007-05-30 H.J. Lu <hongjiu.lu@intel.com>
|
2007-05-30 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR libjava/32098
|
PR libjava/32098
|
||||||
|
|
|
@ -51,6 +51,11 @@ Suggested Software
|
||||||
|
|
||||||
- XTest Extension (libXtst) for GdkRobot support in java.awt.
|
- XTest Extension (libXtst) for GdkRobot support in java.awt.
|
||||||
|
|
||||||
|
- There is a bug in earlier versions of at-spi, atk, and gail, which are
|
||||||
|
used for GNOME accessibility. Prior to version 1.18.0 of these packages,
|
||||||
|
gtk graphical applications should be run without accessibility (clear the
|
||||||
|
GTK_MODULES environment variable).
|
||||||
|
|
||||||
For building gcjwebplugin you'll need the Mozilla plugin
|
For building gcjwebplugin you'll need the Mozilla plugin
|
||||||
support headers and libraries.
|
support headers and libraries.
|
||||||
|
|
||||||
|
|
|
@ -358,3 +358,39 @@ the following notice:
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||||
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
SUCH DAMAGE.
|
SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
* m4/ax_func_which_gethostbyname_r.m4
|
||||||
|
|
||||||
|
Copyright © 2005 Caolan McNamara <caolan@skynet.ie>
|
||||||
|
Copyright © 2005 Daniel Richard G. <skunk@iskunk.org>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA.
|
||||||
|
|
||||||
|
As a special exception, the respective Autoconf Macro's copyright
|
||||||
|
owner gives unlimited permission to copy, distribute and modify the
|
||||||
|
configure scripts that are the output of Autoconf when processing the
|
||||||
|
Macro. You need not follow the terms of the GNU General Public License
|
||||||
|
when using or distributing such scripts, even though portions of the
|
||||||
|
text of the Macro appear in them. The GNU General Public License
|
||||||
|
(GPL) does govern all other use of the material that constitutes the
|
||||||
|
Autoconf Macro.
|
||||||
|
|
||||||
|
This special exception to the GPL applies to versions of the
|
||||||
|
Autoconf Macro released by the Autoconf Macro Archive. When you make
|
||||||
|
and distribute a modified version of the Autoconf Macro, you may
|
||||||
|
extend this special exception to the GPL to apply to your modified
|
||||||
|
version as well.
|
||||||
|
|
|
@ -10,7 +10,7 @@ ACLOCAL_AMFLAGS = -I m4 -I ../.. -I ../../config
|
||||||
native: lib
|
native: lib
|
||||||
|
|
||||||
EXTRA_DIST = HACKING BUGS THANKYOU mauve-classpath LICENSE \
|
EXTRA_DIST = HACKING BUGS THANKYOU mauve-classpath LICENSE \
|
||||||
ChangeLog-2003 ChangeLog-2004 ChangeLog-2005 \
|
ChangeLog-2003 ChangeLog-2004 ChangeLog-2005 ChangeLog-2006 \
|
||||||
ChangeLog.gnujaxp.1 ChangeLog.gnujaxp.2 ChangeLog.libxmlj \
|
ChangeLog.gnujaxp.1 ChangeLog.gnujaxp.2 ChangeLog.libxmlj \
|
||||||
autogen.sh
|
autogen.sh
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||||
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
||||||
$(top_srcdir)/m4/acinclude.m4 \
|
$(top_srcdir)/m4/acinclude.m4 \
|
||||||
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
||||||
|
$(top_srcdir)/m4/ax_func_which_gethostbyname_r.m4 \
|
||||||
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
||||||
|
@ -117,6 +118,8 @@ AUTOMAKE = @AUTOMAKE@
|
||||||
AWK = @AWK@
|
AWK = @AWK@
|
||||||
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
||||||
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
||||||
|
CAIRO_CFLAGS = @CAIRO_CFLAGS@
|
||||||
|
CAIRO_LIBS = @CAIRO_LIBS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
|
@ -181,10 +184,10 @@ FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
||||||
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
||||||
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
||||||
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
||||||
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
|
|
||||||
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
|
|
||||||
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
||||||
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
||||||
|
FOUND_JAVAC_FALSE = @FOUND_JAVAC_FALSE@
|
||||||
|
FOUND_JAVAC_TRUE = @FOUND_JAVAC_TRUE@
|
||||||
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
||||||
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
||||||
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
||||||
|
@ -192,7 +195,6 @@ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
|
||||||
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
||||||
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||||
GCJ = @GCJ@
|
GCJ = @GCJ@
|
||||||
GCJX = @GCJX@
|
|
||||||
GCONF_CFLAGS = @GCONF_CFLAGS@
|
GCONF_CFLAGS = @GCONF_CFLAGS@
|
||||||
GCONF_LIBS = @GCONF_LIBS@
|
GCONF_LIBS = @GCONF_LIBS@
|
||||||
GDK_CFLAGS = @GDK_CFLAGS@
|
GDK_CFLAGS = @GDK_CFLAGS@
|
||||||
|
@ -214,6 +216,7 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
JAVAC = @JAVAC@
|
||||||
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
||||||
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
||||||
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
||||||
|
@ -353,7 +356,7 @@ SUBDIRS = lib doc external include native resource scripts tools $(EXAMPLESDIR)
|
||||||
DIST_SUBDIRS = lib doc external include native resource scripts tools examples
|
DIST_SUBDIRS = lib doc external include native resource scripts tools examples
|
||||||
ACLOCAL_AMFLAGS = -I m4 -I ../.. -I ../../config
|
ACLOCAL_AMFLAGS = -I m4 -I ../.. -I ../../config
|
||||||
EXTRA_DIST = HACKING BUGS THANKYOU mauve-classpath LICENSE \
|
EXTRA_DIST = HACKING BUGS THANKYOU mauve-classpath LICENSE \
|
||||||
ChangeLog-2003 ChangeLog-2004 ChangeLog-2005 \
|
ChangeLog-2003 ChangeLog-2004 ChangeLog-2005 ChangeLog-2006 \
|
||||||
ChangeLog.gnujaxp.1 ChangeLog.gnujaxp.2 ChangeLog.libxmlj \
|
ChangeLog.gnujaxp.1 ChangeLog.gnujaxp.2 ChangeLog.libxmlj \
|
||||||
autogen.sh
|
autogen.sh
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,51 @@
|
||||||
New in release 0.94 (UNRELEASED)
|
New in release 0.95 (Apr 23, 2007)
|
||||||
|
|
||||||
* The ASM library is now included. A separate copy is no longer needed.
|
|
||||||
|
|
||||||
|
* Full merge of 1.5 generics work.
|
||||||
|
* Added 1.6 java.util.ServiceLoader support.
|
||||||
|
* The ASM library is now included. A separate copy is no longer
|
||||||
|
needed. gjavah works out of the box now.
|
||||||
* The setReadTimeout and getReadTimeout methods have been added to
|
* The setReadTimeout and getReadTimeout methods have been added to
|
||||||
java.net.URLConnection. They are now fully implemented for http URLs.
|
java.net.URLConnection. They are now fully implemented for http URLs.
|
||||||
|
* The java.lang.management implementation now includes the new features
|
||||||
|
added in 1.6
|
||||||
|
* java.util.TimeZone now reads time zone information from the system
|
||||||
|
zoneinfo files (see also runtime interface changes below).
|
||||||
|
* The collection classes have been updated to support all the 1.6
|
||||||
|
additions.
|
||||||
|
* java.util.spi 1.6 package has been added and is used in java.text.
|
||||||
|
* Bootstrappable with OpenJDK javac compiler
|
||||||
|
(use configure --with-javac).
|
||||||
|
* Large speedups (and locking behaviour updated) in Graphics2D cairo
|
||||||
|
and freetype support.
|
||||||
|
* Better detection of browser plugin mechanism for mozilla, iceweasel,
|
||||||
|
firefox on various platforms.
|
||||||
|
* Inclusion of generic javadoc classes in tools.zip to support more
|
||||||
|
javadoc processing tools.
|
||||||
|
* Added documentation for command lines options for the included GNU
|
||||||
|
Classpath Tools gjar, gjavah, gnative2ascii, gorbd, grmid,
|
||||||
|
grmiregistry, gserialver and gtnameserv.
|
||||||
|
|
||||||
|
Runtime interface changes:
|
||||||
|
|
||||||
|
* gnu.java.lang.management.VMThreadMXBeanImpl has gained three new
|
||||||
|
optional native methods to allow the 1.6 version of the threading
|
||||||
|
bean to be supported. One (getMonitorInfo) fills in information
|
||||||
|
about object monitor locks held by a thread and is only required
|
||||||
|
if the monitoring of object monitor locks is supported by the VM.
|
||||||
|
The other two (findDeadlockedThreads and getLockInfo) are related
|
||||||
|
to ownable synchronizers (part of the java.util.concurrent suite)
|
||||||
|
and only required if monitoring of locks relating to these is
|
||||||
|
supported by the VM.
|
||||||
|
* java.util.VMTimeZone and java.util.TimeZone have been refactored
|
||||||
|
to simplify the reference implementation. VMTimeZone.readtzFile()
|
||||||
|
and VMTimeZone.skipFully() have been removed, and a new method
|
||||||
|
VMTimeZone.readSysconfigClockFile() has been introduced.
|
||||||
|
* VMs need to set the system property "gnu.java.util.zoneinfo.dir"
|
||||||
|
to point to the directory where zoneinfo files live. In libgcj
|
||||||
|
this is set to the value of the TZDATA environment variable, or
|
||||||
|
"/usr/share/zoneinfo" if this is not set.
|
||||||
|
* VMFile has been extended to support new 1.6 methods (canExecute,
|
||||||
|
setReadable, setWritable, setExecutable).
|
||||||
|
|
||||||
New in release 0.93 (Dec 8, 2006)
|
New in release 0.93 (Dec 8, 2006)
|
||||||
|
|
||||||
|
|
6428
libjava/classpath/aclocal.m4
vendored
6428
libjava/classpath/aclocal.m4
vendored
File diff suppressed because it is too large
Load diff
|
@ -38,17 +38,14 @@ have_autoconf=false
|
||||||
if autoconf --version < /dev/null > /dev/null 2>&1 ; then
|
if autoconf --version < /dev/null > /dev/null 2>&1 ; then
|
||||||
autoconf_version=`autoconf --version | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'`
|
autoconf_version=`autoconf --version | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'`
|
||||||
case $autoconf_version in
|
case $autoconf_version in
|
||||||
2.59*)
|
2.59* | 2.6[0-9]* )
|
||||||
have_autoconf=true
|
|
||||||
;;
|
|
||||||
2.60*)
|
|
||||||
have_autoconf=true
|
have_autoconf=true
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
if $have_autoconf ; then : ; else
|
if $have_autoconf ; then : ; else
|
||||||
echo
|
echo
|
||||||
echo "You must have autoconf 2.59 or 2.60 installed for $PROJECT."
|
echo "You must have autoconf 2.59 or later installed for $PROJECT."
|
||||||
echo "Install the appropriate package for your distribution,"
|
echo "Install the appropriate package for your distribution,"
|
||||||
echo "or get the source tarball at http://ftp.gnu.org/gnu/autoconf/"
|
echo "or get the source tarball at http://ftp.gnu.org/gnu/autoconf/"
|
||||||
DIE=1
|
DIE=1
|
||||||
|
@ -65,14 +62,14 @@ elif automake --version < /dev/null > /dev/null 2>&1 ; then
|
||||||
ACLOCAL=aclocal
|
ACLOCAL=aclocal
|
||||||
automake_version=`automake --version | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'`
|
automake_version=`automake --version | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'`
|
||||||
case $automake_version in
|
case $automake_version in
|
||||||
1.9*)
|
1.9* | 1.10*)
|
||||||
have_automake=true
|
have_automake=true
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
if $have_automake ; then : ; else
|
if $have_automake ; then : ; else
|
||||||
echo
|
echo
|
||||||
echo "You must have automake 1.9 installed to compile $PROJECT."
|
echo "You must have automake 1.9 or 1.10 installed to compile $PROJECT."
|
||||||
echo "Install the appropriate package for your distribution,"
|
echo "Install the appropriate package for your distribution,"
|
||||||
echo "or get the source tarball at http://ftp.gnu.org/gnu/automake/"
|
echo "or get the source tarball at http://ftp.gnu.org/gnu/automake/"
|
||||||
DIE=1
|
DIE=1
|
||||||
|
|
673
libjava/classpath/config.guess
vendored
673
libjava/classpath/config.guess
vendored
File diff suppressed because it is too large
Load diff
235
libjava/classpath/config.sub
vendored
235
libjava/classpath/config.sub
vendored
|
@ -1,9 +1,10 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Configuration validation subroutine script.
|
# Configuration validation subroutine script.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
|
||||||
|
# Inc.
|
||||||
|
|
||||||
timestamp='2003-06-18'
|
timestamp='2006-12-08'
|
||||||
|
|
||||||
# This file is (in principle) common to ALL GNU software.
|
# This file is (in principle) common to ALL GNU software.
|
||||||
# The presence of a machine in this file suggests that SOME GNU software
|
# The presence of a machine in this file suggests that SOME GNU software
|
||||||
|
@ -21,14 +22,15 @@ timestamp='2003-06-18'
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330,
|
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
|
||||||
# Boston, MA 02111-1307, USA.
|
# 02110-1301, USA.
|
||||||
|
#
|
||||||
# As a special exception to the GNU General Public License, if you
|
# As a special exception to the GNU General Public License, if you
|
||||||
# distribute this file as part of a program that contains a
|
# distribute this file as part of a program that contains a
|
||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
|
||||||
# Please send patches to <config-patches@gnu.org>. Submit a context
|
# Please send patches to <config-patches@gnu.org>. Submit a context
|
||||||
# diff and a properly formatted ChangeLog entry.
|
# diff and a properly formatted ChangeLog entry.
|
||||||
#
|
#
|
||||||
|
@ -70,7 +72,7 @@ Report bugs and patches to <config-patches@gnu.org>."
|
||||||
version="\
|
version="\
|
||||||
GNU config.sub ($timestamp)
|
GNU config.sub ($timestamp)
|
||||||
|
|
||||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This is free software; see the source for copying conditions. There is NO
|
This is free software; see the source for copying conditions. There is NO
|
||||||
|
@ -83,11 +85,11 @@ Try \`$me --help' for more information."
|
||||||
while test $# -gt 0 ; do
|
while test $# -gt 0 ; do
|
||||||
case $1 in
|
case $1 in
|
||||||
--time-stamp | --time* | -t )
|
--time-stamp | --time* | -t )
|
||||||
echo "$timestamp" ; exit 0 ;;
|
echo "$timestamp" ; exit ;;
|
||||||
--version | -v )
|
--version | -v )
|
||||||
echo "$version" ; exit 0 ;;
|
echo "$version" ; exit ;;
|
||||||
--help | --h* | -h )
|
--help | --h* | -h )
|
||||||
echo "$usage"; exit 0 ;;
|
echo "$usage"; exit ;;
|
||||||
-- ) # Stop option processing
|
-- ) # Stop option processing
|
||||||
shift; break ;;
|
shift; break ;;
|
||||||
- ) # Use stdin as input.
|
- ) # Use stdin as input.
|
||||||
|
@ -99,7 +101,7 @@ while test $# -gt 0 ; do
|
||||||
*local*)
|
*local*)
|
||||||
# First pass through any local machine types.
|
# First pass through any local machine types.
|
||||||
echo $1
|
echo $1
|
||||||
exit 0;;
|
exit ;;
|
||||||
|
|
||||||
* )
|
* )
|
||||||
break ;;
|
break ;;
|
||||||
|
@ -118,7 +120,9 @@ esac
|
||||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
case $maybe_os in
|
case $maybe_os in
|
||||||
nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
|
nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
|
||||||
|
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
|
||||||
|
storm-chaos* | os2-emx* | rtmk-nova*)
|
||||||
os=-$maybe_os
|
os=-$maybe_os
|
||||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
;;
|
;;
|
||||||
|
@ -144,7 +148,7 @@ case $os in
|
||||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||||
-apple | -axis)
|
-apple | -axis | -knuth | -cray)
|
||||||
os=
|
os=
|
||||||
basic_machine=$1
|
basic_machine=$1
|
||||||
;;
|
;;
|
||||||
|
@ -169,6 +173,10 @@ case $os in
|
||||||
-hiux*)
|
-hiux*)
|
||||||
os=-hiuxwe2
|
os=-hiuxwe2
|
||||||
;;
|
;;
|
||||||
|
-sco6)
|
||||||
|
os=-sco5v6
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
-sco5)
|
-sco5)
|
||||||
os=-sco3.2v5
|
os=-sco3.2v5
|
||||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
@ -185,6 +193,10 @@ case $os in
|
||||||
# Don't forget version if it is 3.2v4 or newer.
|
# Don't forget version if it is 3.2v4 or newer.
|
||||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
;;
|
;;
|
||||||
|
-sco5v6*)
|
||||||
|
# Don't forget version if it is 3.2v4 or newer.
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
-sco*)
|
-sco*)
|
||||||
os=-sco3.2v2
|
os=-sco3.2v2
|
||||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
@ -228,14 +240,18 @@ case $basic_machine in
|
||||||
| a29k \
|
| a29k \
|
||||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||||
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
| am33_2.0 \
|
||||||
|
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
|
||||||
|
| bfin \
|
||||||
| c4x | clipper \
|
| c4x | clipper \
|
||||||
| d10v | d30v | dlx | dsp16xx \
|
| d10v | d30v | dlx | dsp16xx \
|
||||||
| fr30 | frv \
|
| fido | fr30 | frv \
|
||||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||||
| i370 | i860 | i960 | ia64 \
|
| i370 | i860 | i960 | ia64 \
|
||||||
| ip2k \
|
| ip2k | iq2000 \
|
||||||
| m32r | m68000 | m68k | m88k | mcore \
|
| m32c | m32r | m32rle | m68000 | m68k | m88k \
|
||||||
|
| maxq | mb | microblaze | mcore \
|
||||||
|
| mep \
|
||||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||||
| mips16 \
|
| mips16 \
|
||||||
| mips64 | mips64el \
|
| mips64 | mips64el \
|
||||||
|
@ -244,28 +260,33 @@ case $basic_machine in
|
||||||
| mips64vr4100 | mips64vr4100el \
|
| mips64vr4100 | mips64vr4100el \
|
||||||
| mips64vr4300 | mips64vr4300el \
|
| mips64vr4300 | mips64vr4300el \
|
||||||
| mips64vr5000 | mips64vr5000el \
|
| mips64vr5000 | mips64vr5000el \
|
||||||
|
| mips64vr5900 | mips64vr5900el \
|
||||||
| mipsisa32 | mipsisa32el \
|
| mipsisa32 | mipsisa32el \
|
||||||
| mipsisa32r2 | mipsisa32r2el \
|
| mipsisa32r2 | mipsisa32r2el \
|
||||||
| mipsisa64 | mipsisa64el \
|
| mipsisa64 | mipsisa64el \
|
||||||
|
| mipsisa64r2 | mipsisa64r2el \
|
||||||
| mipsisa64sb1 | mipsisa64sb1el \
|
| mipsisa64sb1 | mipsisa64sb1el \
|
||||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||||
| mipstx39 | mipstx39el \
|
| mipstx39 | mipstx39el \
|
||||||
| mn10200 | mn10300 \
|
| mn10200 | mn10300 \
|
||||||
|
| mt \
|
||||||
| msp430 \
|
| msp430 \
|
||||||
|
| nios | nios2 \
|
||||||
| ns16k | ns32k \
|
| ns16k | ns32k \
|
||||||
| openrisc | or32 \
|
| or32 \
|
||||||
| pdp10 | pdp11 | pj | pjl \
|
| pdp10 | pdp11 | pj | pjl \
|
||||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||||
| pyramid \
|
| pyramid \
|
||||||
| s390 | s390x \
|
| score \
|
||||||
| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
||||||
| sh64 | sh64le \
|
| sh64 | sh64le \
|
||||||
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
|
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
|
||||||
| strongarm \
|
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
|
||||||
|
| spu | strongarm \
|
||||||
| tahoe | thumb | tic4x | tic80 | tron \
|
| tahoe | thumb | tic4x | tic80 | tron \
|
||||||
| v850 | v850e \
|
| v850 | v850e \
|
||||||
| we32k \
|
| we32k \
|
||||||
| x86 | xscale | xstormy16 | xtensa \
|
| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
|
||||||
| z8k)
|
| z8k)
|
||||||
basic_machine=$basic_machine-unknown
|
basic_machine=$basic_machine-unknown
|
||||||
;;
|
;;
|
||||||
|
@ -276,6 +297,9 @@ case $basic_machine in
|
||||||
;;
|
;;
|
||||||
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
|
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
|
||||||
;;
|
;;
|
||||||
|
ms1)
|
||||||
|
basic_machine=mt-unknown
|
||||||
|
;;
|
||||||
|
|
||||||
# We use `pc' rather than `unknown'
|
# We use `pc' rather than `unknown'
|
||||||
# because (1) that's what they normally are, and
|
# because (1) that's what they normally are, and
|
||||||
|
@ -295,21 +319,22 @@ case $basic_machine in
|
||||||
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
||||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
||||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||||
| avr-* \
|
| avr-* | avr32-* \
|
||||||
| bs2000-* \
|
| bfin-* | bs2000-* \
|
||||||
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
||||||
| clipper-* | cydra-* \
|
| clipper-* | craynv-* | cydra-* \
|
||||||
| d10v-* | d30v-* | dlx-* \
|
| d10v-* | d30v-* | dlx-* \
|
||||||
| elxsi-* \
|
| elxsi-* \
|
||||||
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
|
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
|
||||||
| h8300-* | h8500-* \
|
| h8300-* | h8500-* \
|
||||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||||
| i*86-* | i860-* | i960-* | ia64-* \
|
| i*86-* | i860-* | i960-* | ia64-* \
|
||||||
| ip2k-* \
|
| ip2k-* | iq2000-* \
|
||||||
| m32r-* \
|
| m32c-* | m32r-* | m32rle-* \
|
||||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||||
| m88110-* | m88k-* | mcore-* \
|
| m88110-* | m88k-* | maxq-* | mcore-* \
|
||||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||||
|
| mep-* \
|
||||||
| mips16-* \
|
| mips16-* \
|
||||||
| mips64-* | mips64el-* \
|
| mips64-* | mips64el-* \
|
||||||
| mips64vr-* | mips64vrel-* \
|
| mips64vr-* | mips64vrel-* \
|
||||||
|
@ -317,31 +342,36 @@ case $basic_machine in
|
||||||
| mips64vr4100-* | mips64vr4100el-* \
|
| mips64vr4100-* | mips64vr4100el-* \
|
||||||
| mips64vr4300-* | mips64vr4300el-* \
|
| mips64vr4300-* | mips64vr4300el-* \
|
||||||
| mips64vr5000-* | mips64vr5000el-* \
|
| mips64vr5000-* | mips64vr5000el-* \
|
||||||
|
| mips64vr5900-* | mips64vr5900el-* \
|
||||||
| mipsisa32-* | mipsisa32el-* \
|
| mipsisa32-* | mipsisa32el-* \
|
||||||
| mipsisa32r2-* | mipsisa32r2el-* \
|
| mipsisa32r2-* | mipsisa32r2el-* \
|
||||||
| mipsisa64-* | mipsisa64el-* \
|
| mipsisa64-* | mipsisa64el-* \
|
||||||
|
| mipsisa64r2-* | mipsisa64r2el-* \
|
||||||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||||
| mipstx39-* | mipstx39el-* \
|
| mipstx39-* | mipstx39el-* \
|
||||||
|
| mmix-* \
|
||||||
|
| mt-* \
|
||||||
| msp430-* \
|
| msp430-* \
|
||||||
| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
|
| nios-* | nios2-* \
|
||||||
|
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||||
| orion-* \
|
| orion-* \
|
||||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||||
| pyramid-* \
|
| pyramid-* \
|
||||||
| romp-* | rs6000-* \
|
| romp-* | rs6000-* \
|
||||||
| s390-* | s390x-* \
|
| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
|
||||||
| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
|
|
||||||
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||||
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
|
||||||
| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
| sparclite-* \
|
||||||
|
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
|
||||||
| tahoe-* | thumb-* \
|
| tahoe-* | thumb-* \
|
||||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
||||||
| tron-* \
|
| tron-* \
|
||||||
| v850-* | v850e-* | vax-* \
|
| v850-* | v850e-* | vax-* \
|
||||||
| we32k-* \
|
| we32k-* \
|
||||||
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
|
||||||
| xtensa-* \
|
| xstormy16-* | xtensa-* \
|
||||||
| ymp-* \
|
| ymp-* \
|
||||||
| z8k-*)
|
| z8k-*)
|
||||||
;;
|
;;
|
||||||
|
@ -361,6 +391,9 @@ case $basic_machine in
|
||||||
basic_machine=a29k-amd
|
basic_machine=a29k-amd
|
||||||
os=-udi
|
os=-udi
|
||||||
;;
|
;;
|
||||||
|
abacus)
|
||||||
|
basic_machine=abacus-unknown
|
||||||
|
;;
|
||||||
adobe68k)
|
adobe68k)
|
||||||
basic_machine=m68010-adobe
|
basic_machine=m68010-adobe
|
||||||
os=-scout
|
os=-scout
|
||||||
|
@ -378,6 +411,9 @@ case $basic_machine in
|
||||||
amd64)
|
amd64)
|
||||||
basic_machine=x86_64-pc
|
basic_machine=x86_64-pc
|
||||||
;;
|
;;
|
||||||
|
amd64-*)
|
||||||
|
basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
amdahl)
|
amdahl)
|
||||||
basic_machine=580-amdahl
|
basic_machine=580-amdahl
|
||||||
os=-sysv
|
os=-sysv
|
||||||
|
@ -437,12 +473,27 @@ case $basic_machine in
|
||||||
basic_machine=j90-cray
|
basic_machine=j90-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
|
craynv)
|
||||||
|
basic_machine=craynv-cray
|
||||||
|
os=-unicosmp
|
||||||
|
;;
|
||||||
|
cr16c)
|
||||||
|
basic_machine=cr16c-unknown
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
crds | unos)
|
crds | unos)
|
||||||
basic_machine=m68k-crds
|
basic_machine=m68k-crds
|
||||||
;;
|
;;
|
||||||
|
crisv32 | crisv32-* | etraxfs*)
|
||||||
|
basic_machine=crisv32-axis
|
||||||
|
;;
|
||||||
cris | cris-* | etrax*)
|
cris | cris-* | etrax*)
|
||||||
basic_machine=cris-axis
|
basic_machine=cris-axis
|
||||||
;;
|
;;
|
||||||
|
crx)
|
||||||
|
basic_machine=crx-unknown
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
da30 | da30-*)
|
da30 | da30-*)
|
||||||
basic_machine=m68k-da30
|
basic_machine=m68k-da30
|
||||||
;;
|
;;
|
||||||
|
@ -465,6 +516,10 @@ case $basic_machine in
|
||||||
basic_machine=m88k-motorola
|
basic_machine=m88k-motorola
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
|
djgpp)
|
||||||
|
basic_machine=i586-pc
|
||||||
|
os=-msdosdjgpp
|
||||||
|
;;
|
||||||
dpx20 | dpx20-*)
|
dpx20 | dpx20-*)
|
||||||
basic_machine=rs6000-bull
|
basic_machine=rs6000-bull
|
||||||
os=-bosx
|
os=-bosx
|
||||||
|
@ -643,10 +698,6 @@ case $basic_machine in
|
||||||
mips3*)
|
mips3*)
|
||||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||||
;;
|
;;
|
||||||
mmix*)
|
|
||||||
basic_machine=mmix-knuth
|
|
||||||
os=-mmixware
|
|
||||||
;;
|
|
||||||
monitor)
|
monitor)
|
||||||
basic_machine=m68k-rom68k
|
basic_machine=m68k-rom68k
|
||||||
os=-coff
|
os=-coff
|
||||||
|
@ -659,6 +710,9 @@ case $basic_machine in
|
||||||
basic_machine=i386-pc
|
basic_machine=i386-pc
|
||||||
os=-msdos
|
os=-msdos
|
||||||
;;
|
;;
|
||||||
|
ms1-*)
|
||||||
|
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
|
||||||
|
;;
|
||||||
mvs)
|
mvs)
|
||||||
basic_machine=i370-ibm
|
basic_machine=i370-ibm
|
||||||
os=-mvs
|
os=-mvs
|
||||||
|
@ -727,10 +781,6 @@ case $basic_machine in
|
||||||
np1)
|
np1)
|
||||||
basic_machine=np1-gould
|
basic_machine=np1-gould
|
||||||
;;
|
;;
|
||||||
nv1)
|
|
||||||
basic_machine=nv1-cray
|
|
||||||
os=-unicosmp
|
|
||||||
;;
|
|
||||||
nsr-tandem)
|
nsr-tandem)
|
||||||
basic_machine=nsr-tandem
|
basic_machine=nsr-tandem
|
||||||
;;
|
;;
|
||||||
|
@ -738,9 +788,12 @@ case $basic_machine in
|
||||||
basic_machine=hppa1.1-oki
|
basic_machine=hppa1.1-oki
|
||||||
os=-proelf
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
or32 | or32-*)
|
openrisc | openrisc-*)
|
||||||
basic_machine=or32-unknown
|
basic_machine=or32-unknown
|
||||||
os=-coff
|
;;
|
||||||
|
os400)
|
||||||
|
basic_machine=powerpc-ibm
|
||||||
|
os=-os400
|
||||||
;;
|
;;
|
||||||
OSE68000 | ose68000)
|
OSE68000 | ose68000)
|
||||||
basic_machine=m68000-ericsson
|
basic_machine=m68000-ericsson
|
||||||
|
@ -767,6 +820,12 @@ case $basic_machine in
|
||||||
pc532 | pc532-*)
|
pc532 | pc532-*)
|
||||||
basic_machine=ns32k-pc532
|
basic_machine=ns32k-pc532
|
||||||
;;
|
;;
|
||||||
|
pc98)
|
||||||
|
basic_machine=i386-pc
|
||||||
|
;;
|
||||||
|
pc98-*)
|
||||||
|
basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
pentium | p5 | k5 | k6 | nexgen | viac3)
|
pentium | p5 | k5 | k6 | nexgen | viac3)
|
||||||
basic_machine=i586-pc
|
basic_machine=i586-pc
|
||||||
;;
|
;;
|
||||||
|
@ -823,6 +882,10 @@ case $basic_machine in
|
||||||
basic_machine=i586-unknown
|
basic_machine=i586-unknown
|
||||||
os=-pw32
|
os=-pw32
|
||||||
;;
|
;;
|
||||||
|
rdos)
|
||||||
|
basic_machine=i386-pc
|
||||||
|
os=-rdos
|
||||||
|
;;
|
||||||
rom68k)
|
rom68k)
|
||||||
basic_machine=m68k-rom68k
|
basic_machine=m68k-rom68k
|
||||||
os=-coff
|
os=-coff
|
||||||
|
@ -833,6 +896,12 @@ case $basic_machine in
|
||||||
rtpc | rtpc-*)
|
rtpc | rtpc-*)
|
||||||
basic_machine=romp-ibm
|
basic_machine=romp-ibm
|
||||||
;;
|
;;
|
||||||
|
s390 | s390-*)
|
||||||
|
basic_machine=s390-ibm
|
||||||
|
;;
|
||||||
|
s390x | s390x-*)
|
||||||
|
basic_machine=s390x-ibm
|
||||||
|
;;
|
||||||
sa29200)
|
sa29200)
|
||||||
basic_machine=a29k-amd
|
basic_machine=a29k-amd
|
||||||
os=-udi
|
os=-udi
|
||||||
|
@ -843,6 +912,10 @@ case $basic_machine in
|
||||||
sb1el)
|
sb1el)
|
||||||
basic_machine=mipsisa64sb1el-unknown
|
basic_machine=mipsisa64sb1el-unknown
|
||||||
;;
|
;;
|
||||||
|
sde)
|
||||||
|
basic_machine=mipsisa32-sde
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
sei)
|
sei)
|
||||||
basic_machine=mips-sei
|
basic_machine=mips-sei
|
||||||
os=-seiux
|
os=-seiux
|
||||||
|
@ -854,6 +927,9 @@ case $basic_machine in
|
||||||
basic_machine=sh-hitachi
|
basic_machine=sh-hitachi
|
||||||
os=-hms
|
os=-hms
|
||||||
;;
|
;;
|
||||||
|
sh5el)
|
||||||
|
basic_machine=sh5le-unknown
|
||||||
|
;;
|
||||||
sh64)
|
sh64)
|
||||||
basic_machine=sh64-unknown
|
basic_machine=sh64-unknown
|
||||||
;;
|
;;
|
||||||
|
@ -956,6 +1032,10 @@ case $basic_machine in
|
||||||
tower | tower-32)
|
tower | tower-32)
|
||||||
basic_machine=m68k-ncr
|
basic_machine=m68k-ncr
|
||||||
;;
|
;;
|
||||||
|
tpf)
|
||||||
|
basic_machine=s390x-ibm
|
||||||
|
os=-tpf
|
||||||
|
;;
|
||||||
udi29k)
|
udi29k)
|
||||||
basic_machine=a29k-amd
|
basic_machine=a29k-amd
|
||||||
os=-udi
|
os=-udi
|
||||||
|
@ -999,6 +1079,10 @@ case $basic_machine in
|
||||||
basic_machine=hppa1.1-winbond
|
basic_machine=hppa1.1-winbond
|
||||||
os=-proelf
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
|
xbox)
|
||||||
|
basic_machine=i686-pc
|
||||||
|
os=-mingw32
|
||||||
|
;;
|
||||||
xps | xps100)
|
xps | xps100)
|
||||||
basic_machine=xps100-honeywell
|
basic_machine=xps100-honeywell
|
||||||
;;
|
;;
|
||||||
|
@ -1029,6 +1113,9 @@ case $basic_machine in
|
||||||
romp)
|
romp)
|
||||||
basic_machine=romp-ibm
|
basic_machine=romp-ibm
|
||||||
;;
|
;;
|
||||||
|
mmix)
|
||||||
|
basic_machine=mmix-knuth
|
||||||
|
;;
|
||||||
rs6000)
|
rs6000)
|
||||||
basic_machine=rs6000-ibm
|
basic_machine=rs6000-ibm
|
||||||
;;
|
;;
|
||||||
|
@ -1045,13 +1132,10 @@ case $basic_machine in
|
||||||
we32k)
|
we32k)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
|
sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||||
basic_machine=sh-unknown
|
basic_machine=sh-unknown
|
||||||
;;
|
;;
|
||||||
sh64)
|
sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
|
||||||
basic_machine=sh64-unknown
|
|
||||||
;;
|
|
||||||
sparc | sparcv8 | sparcv9 | sparcv9b)
|
|
||||||
basic_machine=sparc-sun
|
basic_machine=sparc-sun
|
||||||
;;
|
;;
|
||||||
cydra)
|
cydra)
|
||||||
|
@ -1124,19 +1208,23 @@ case $os in
|
||||||
| -aos* \
|
| -aos* \
|
||||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||||
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
| -openbsd* | -solidbsd* \
|
||||||
|
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
||||||
|
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||||
| -chorusos* | -chorusrdb* \
|
| -chorusos* | -chorusrdb* \
|
||||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
|
||||||
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||||
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
||||||
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
||||||
| -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
|
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
|
||||||
|
| -skyos* | -haiku* | -rdos* | -toppers*)
|
||||||
# Remember, each alternative MUST END IN *, to match a version number.
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
;;
|
;;
|
||||||
-qnx*)
|
-qnx*)
|
||||||
|
@ -1154,12 +1242,15 @@ case $os in
|
||||||
os=`echo $os | sed -e 's|nto|nto-qnx|'`
|
os=`echo $os | sed -e 's|nto|nto-qnx|'`
|
||||||
;;
|
;;
|
||||||
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
| -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
|
||||||
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
|
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
|
||||||
;;
|
;;
|
||||||
-mac*)
|
-mac*)
|
||||||
os=`echo $os | sed -e 's|mac|macos|'`
|
os=`echo $os | sed -e 's|mac|macos|'`
|
||||||
;;
|
;;
|
||||||
|
-linux-dietlibc)
|
||||||
|
os=-linux-dietlibc
|
||||||
|
;;
|
||||||
-linux*)
|
-linux*)
|
||||||
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||||
;;
|
;;
|
||||||
|
@ -1172,6 +1263,9 @@ case $os in
|
||||||
-opened*)
|
-opened*)
|
||||||
os=-openedition
|
os=-openedition
|
||||||
;;
|
;;
|
||||||
|
-os400*)
|
||||||
|
os=-os400
|
||||||
|
;;
|
||||||
-wince*)
|
-wince*)
|
||||||
os=-wince
|
os=-wince
|
||||||
;;
|
;;
|
||||||
|
@ -1193,6 +1287,9 @@ case $os in
|
||||||
-atheos*)
|
-atheos*)
|
||||||
os=-atheos
|
os=-atheos
|
||||||
;;
|
;;
|
||||||
|
-syllable*)
|
||||||
|
os=-syllable
|
||||||
|
;;
|
||||||
-386bsd)
|
-386bsd)
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
|
@ -1215,6 +1312,9 @@ case $os in
|
||||||
-sinix*)
|
-sinix*)
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
|
-tpf*)
|
||||||
|
os=-tpf
|
||||||
|
;;
|
||||||
-triton*)
|
-triton*)
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
|
@ -1251,6 +1351,9 @@ case $os in
|
||||||
-kaos*)
|
-kaos*)
|
||||||
os=-kaos
|
os=-kaos
|
||||||
;;
|
;;
|
||||||
|
-zvmoe)
|
||||||
|
os=-zvmoe
|
||||||
|
;;
|
||||||
-none)
|
-none)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
@ -1273,6 +1376,12 @@ else
|
||||||
# system, and we'll never get to this point.
|
# system, and we'll never get to this point.
|
||||||
|
|
||||||
case $basic_machine in
|
case $basic_machine in
|
||||||
|
score-*)
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
|
spu-*)
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
*-acorn)
|
*-acorn)
|
||||||
os=-riscix1.2
|
os=-riscix1.2
|
||||||
;;
|
;;
|
||||||
|
@ -1328,9 +1437,15 @@ case $basic_machine in
|
||||||
*-be)
|
*-be)
|
||||||
os=-beos
|
os=-beos
|
||||||
;;
|
;;
|
||||||
|
*-haiku)
|
||||||
|
os=-haiku
|
||||||
|
;;
|
||||||
*-ibm)
|
*-ibm)
|
||||||
os=-aix
|
os=-aix
|
||||||
;;
|
;;
|
||||||
|
*-knuth)
|
||||||
|
os=-mmixware
|
||||||
|
;;
|
||||||
*-wec)
|
*-wec)
|
||||||
os=-proelf
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
|
@ -1463,9 +1578,15 @@ case $basic_machine in
|
||||||
-mvs* | -opened*)
|
-mvs* | -opened*)
|
||||||
vendor=ibm
|
vendor=ibm
|
||||||
;;
|
;;
|
||||||
|
-os400*)
|
||||||
|
vendor=ibm
|
||||||
|
;;
|
||||||
-ptx*)
|
-ptx*)
|
||||||
vendor=sequent
|
vendor=sequent
|
||||||
;;
|
;;
|
||||||
|
-tpf*)
|
||||||
|
vendor=ibm
|
||||||
|
;;
|
||||||
-vxsim* | -vxworks* | -windiss*)
|
-vxsim* | -vxworks* | -windiss*)
|
||||||
vendor=wrs
|
vendor=wrs
|
||||||
;;
|
;;
|
||||||
|
@ -1490,7 +1611,7 @@ case $basic_machine in
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo $basic_machine$os
|
echo $basic_machine$os
|
||||||
exit 0
|
exit
|
||||||
|
|
||||||
# Local variables:
|
# Local variables:
|
||||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
|
1487
libjava/classpath/configure
vendored
1487
libjava/classpath/configure
vendored
File diff suppressed because it is too large
Load diff
|
@ -6,7 +6,7 @@ dnl -----------------------------------------------------------
|
||||||
dnl define([AC_CACHE_LOAD], )dnl
|
dnl define([AC_CACHE_LOAD], )dnl
|
||||||
dnl define([AC_CACHE_SAVE], )dnl
|
dnl define([AC_CACHE_SAVE], )dnl
|
||||||
|
|
||||||
AC_INIT([GNU Classpath],[0.94-pre],[classpath@gnu.org],[classpath])
|
AC_INIT([GNU Classpath],[0.95],[classpath@gnu.org],[classpath])
|
||||||
AC_CONFIG_SRCDIR(java/lang/System.java)
|
AC_CONFIG_SRCDIR(java/lang/System.java)
|
||||||
|
|
||||||
dnl GCJ LOCAL
|
dnl GCJ LOCAL
|
||||||
|
@ -72,7 +72,7 @@ CLASSPATH_CONVENIENCE="-no-undefined"
|
||||||
AC_SUBST(CLASSPATH_CONVENIENCE)
|
AC_SUBST(CLASSPATH_CONVENIENCE)
|
||||||
|
|
||||||
AC_PREREQ(2.59)
|
AC_PREREQ(2.59)
|
||||||
AM_INIT_AUTOMAKE([1.9.0 gnu std-options tar-ustar])
|
AM_INIT_AUTOMAKE([1.9.0 gnu std-options tar-ustar -Wno-portability])
|
||||||
AC_CONFIG_HEADERS([include/config.h])
|
AC_CONFIG_HEADERS([include/config.h])
|
||||||
AC_PREFIX_DEFAULT(/usr/local/classpath)
|
AC_PREFIX_DEFAULT(/usr/local/classpath)
|
||||||
|
|
||||||
|
@ -360,6 +360,7 @@ AC_DISABLE_STATIC
|
||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
dnl AC_PROG_AWK
|
dnl AC_PROG_AWK
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
AM_PROG_CC_C_O
|
||||||
AC_PROG_CPP
|
AC_PROG_CPP
|
||||||
AC_PROG_CXX
|
AC_PROG_CXX
|
||||||
|
|
||||||
|
@ -427,7 +428,7 @@ if test "x${COMPILE_JNI}" = xyes; then
|
||||||
lstat readlink \
|
lstat readlink \
|
||||||
inet_aton inet_addr inet_pton \
|
inet_aton inet_addr inet_pton \
|
||||||
getifaddrs kqueue kevent epoll_create \
|
getifaddrs kqueue kevent epoll_create \
|
||||||
readdir_r ])
|
readdir_r getloadavg])
|
||||||
|
|
||||||
LIBMAGIC=
|
LIBMAGIC=
|
||||||
AC_CHECK_LIB(magic, magic_open, LIBMAGIC=-lmagic)
|
AC_CHECK_LIB(magic, magic_open, LIBMAGIC=-lmagic)
|
||||||
|
@ -467,7 +468,9 @@ if test "x${COMPILE_JNI}" = xyes; then
|
||||||
[AC_MSG_RESULT(no)])])])
|
[AC_MSG_RESULT(no)])])])
|
||||||
|
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
|
AC_C_INLINE
|
||||||
AC_C_ATTRIBUTE
|
AC_C_ATTRIBUTE
|
||||||
|
AX_FUNC_WHICH_GETHOSTBYNAME_R
|
||||||
|
|
||||||
dnl See if we HAVE_ICONV, how ICONV_CONST is set and LTLIBICONV
|
dnl See if we HAVE_ICONV, how ICONV_CONST is set and LTLIBICONV
|
||||||
AM_ICONV
|
AM_ICONV
|
||||||
|
@ -521,6 +524,7 @@ if test "x${COMPILE_JNI}" = xyes; then
|
||||||
PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.8 gthread-2.0 >= 2.2 gdk-pixbuf-2.0)
|
PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.8 gthread-2.0 >= 2.2 gdk-pixbuf-2.0)
|
||||||
PKG_CHECK_MODULES(FREETYPE2, freetype2)
|
PKG_CHECK_MODULES(FREETYPE2, freetype2)
|
||||||
PKG_CHECK_MODULES(PANGOFT2, pangoft2)
|
PKG_CHECK_MODULES(PANGOFT2, pangoft2)
|
||||||
|
PKG_CHECK_MODULES(CAIRO, cairo >= 1.1.8)
|
||||||
dnl Check if we can link against the XRender library and set
|
dnl Check if we can link against the XRender library and set
|
||||||
dnl HAVE_XRENDER accordingly.
|
dnl HAVE_XRENDER accordingly.
|
||||||
AC_CHECK_LIB([Xrender], [XRenderQueryExtension],
|
AC_CHECK_LIB([Xrender], [XRenderQueryExtension],
|
||||||
|
@ -546,7 +550,7 @@ if test "x${COMPILE_JNI}" = xyes; then
|
||||||
|
|
||||||
dnl gconf-peer
|
dnl gconf-peer
|
||||||
if test "x${COMPILE_GCONF_PEER}" = xyes; then
|
if test "x${COMPILE_GCONF_PEER}" = xyes; then
|
||||||
PKG_CHECK_MODULES(GCONF, gconf-2.0 >= 2.11.2)
|
PKG_CHECK_MODULES(GCONF, gconf-2.0 >= 2.6.0)
|
||||||
AC_SUBST(GCONF_CFLAGS)
|
AC_SUBST(GCONF_CFLAGS)
|
||||||
AC_SUBST(GCONF_LIBS)
|
AC_SUBST(GCONF_LIBS)
|
||||||
dnl we also need gdk for locking
|
dnl we also need gdk for locking
|
||||||
|
@ -649,12 +653,22 @@ if test "x${COMPILE_JNI}" = xyes; then
|
||||||
if test "x${MOZILLA_FOUND}" = xno; then
|
if test "x${MOZILLA_FOUND}" = xno; then
|
||||||
PKG_CHECK_MODULES(MOZILLA, seamonkey-plugin seamonkey-xpcom, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
|
PKG_CHECK_MODULES(MOZILLA, seamonkey-plugin seamonkey-xpcom, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
|
||||||
fi
|
fi
|
||||||
|
if test "x${MOZILLA_FOUND}" = xno; then
|
||||||
|
PKG_CHECK_MODULES(MOZILLA, iceape-plugin iceape-xpcom, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
|
||||||
|
fi
|
||||||
|
if test "x${MOZILLA_FOUND}" = xno; then
|
||||||
|
AC_MSG_ERROR([Couldn't find plugin support headers and libraries, try --disable-plugin])
|
||||||
|
fi
|
||||||
|
|
||||||
PKG_CHECK_MODULES(GLIB, glib-2.0)
|
PKG_CHECK_MODULES(GLIB, glib-2.0)
|
||||||
|
PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.8 gthread-2.0 >= 2.2 gdk-pixbuf-2.0)
|
||||||
|
|
||||||
AC_SUBST(MOZILLA_CFLAGS)
|
AC_SUBST(MOZILLA_CFLAGS)
|
||||||
AC_SUBST(MOZILLA_LIBS)
|
AC_SUBST(MOZILLA_LIBS)
|
||||||
AC_SUBST(GLIB_CFLAGS)
|
AC_SUBST(GLIB_CFLAGS)
|
||||||
AC_SUBST(GLIB_LIBS)
|
AC_SUBST(GLIB_LIBS)
|
||||||
|
AC_SUBST(GTK_CFLAGS)
|
||||||
|
AC_SUBST(GTK_LIBS)
|
||||||
|
|
||||||
AC_SUBST(PLUGIN_DIR, $HOME/.mozilla/plugins/)
|
AC_SUBST(PLUGIN_DIR, $HOME/.mozilla/plugins/)
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
# depcomp - compile a program generating dependencies as side-effects
|
# depcomp - compile a program generating dependencies as side-effects
|
||||||
# Copyright 1999, 2000 Free Software Foundation, Inc.
|
|
||||||
|
scriptversion=2006-10-15.18
|
||||||
|
|
||||||
|
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
|
||||||
|
# Foundation, Inc.
|
||||||
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -25,22 +28,45 @@
|
||||||
|
|
||||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
'')
|
||||||
|
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||||
|
exit 1;
|
||||||
|
;;
|
||||||
|
-h | --h*)
|
||||||
|
cat <<\EOF
|
||||||
|
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||||
|
|
||||||
|
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||||
|
as side-effects.
|
||||||
|
|
||||||
|
Environment variables:
|
||||||
|
depmode Dependency tracking mode.
|
||||||
|
source Source file read by `PROGRAMS ARGS'.
|
||||||
|
object Object file output by `PROGRAMS ARGS'.
|
||||||
|
DEPDIR directory where to store dependencies.
|
||||||
|
depfile Dependency file to output.
|
||||||
|
tmpdepfile Temporary file to use when outputing dependencies.
|
||||||
|
libtool Whether libtool is used (yes/no).
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "depcomp $scriptversion"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# `libtool' can also be set to `yes' or `no'.
|
|
||||||
|
|
||||||
if test -z "$depfile"; then
|
|
||||||
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
|
|
||||||
dir=`echo "$object" | sed 's,/.*$,/,'`
|
|
||||||
if test "$dir" = "$object"; then
|
|
||||||
dir=
|
|
||||||
fi
|
|
||||||
# FIXME: should be _deps on DOS.
|
|
||||||
depfile="$dir.deps/$base"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||||
|
depfile=${depfile-`echo "$object" |
|
||||||
|
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||||
|
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
|
@ -66,7 +92,20 @@ gcc3)
|
||||||
## gcc 3 implements dependency tracking that does exactly what
|
## gcc 3 implements dependency tracking that does exactly what
|
||||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||||
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
|
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||||
|
## the command line argument order; so add the flags where they
|
||||||
|
## appear in depend2.am. Note that the slowdown incurred here
|
||||||
|
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||||
|
*) set fnord "$@" "$arg" ;;
|
||||||
|
esac
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
|
done
|
||||||
|
"$@"
|
||||||
stat=$?
|
stat=$?
|
||||||
if test $stat -eq 0; then :
|
if test $stat -eq 0; then :
|
||||||
else
|
else
|
||||||
|
@ -172,19 +211,25 @@ sgi)
|
||||||
|
|
||||||
aix)
|
aix)
|
||||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||||
# in a .u file. This file always lives in the current directory.
|
# in a .u file. In older versions, this file always lives in the
|
||||||
# Also, the AIX compiler puts `$object:' at the start of each line;
|
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||||
# $object doesn't have directory information.
|
# start of each line; $object doesn't have directory information.
|
||||||
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
|
# Version 6 uses the directory in both cases.
|
||||||
|
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
|
||||||
tmpdepfile="$stripped.u"
|
tmpdepfile="$stripped.u"
|
||||||
outname="$stripped.o"
|
|
||||||
if test "$libtool" = yes; then
|
if test "$libtool" = yes; then
|
||||||
"$@" -Wc,-M
|
"$@" -Wc,-M
|
||||||
else
|
else
|
||||||
"$@" -M
|
"$@" -M
|
||||||
fi
|
fi
|
||||||
|
|
||||||
stat=$?
|
stat=$?
|
||||||
|
|
||||||
|
if test -f "$tmpdepfile"; then :
|
||||||
|
else
|
||||||
|
stripped=`echo "$stripped" | sed 's,^.*/,,'`
|
||||||
|
tmpdepfile="$stripped.u"
|
||||||
|
fi
|
||||||
|
|
||||||
if test $stat -eq 0; then :
|
if test $stat -eq 0; then :
|
||||||
else
|
else
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
|
@ -192,6 +237,7 @@ aix)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -f "$tmpdepfile"; then
|
if test -f "$tmpdepfile"; then
|
||||||
|
outname="$stripped.o"
|
||||||
# Each line is of the form `foo.o: dependent.h'.
|
# Each line is of the form `foo.o: dependent.h'.
|
||||||
# Do two passes, one to just change these to
|
# Do two passes, one to just change these to
|
||||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||||
|
@ -206,6 +252,84 @@ aix)
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
icc)
|
||||||
|
# Intel's C compiler understands `-MD -MF file'. However on
|
||||||
|
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||||
|
# ICC 7.0 will fill foo.d with something like
|
||||||
|
# foo.o: sub/foo.c
|
||||||
|
# foo.o: sub/foo.h
|
||||||
|
# which is wrong. We want:
|
||||||
|
# sub/foo.o: sub/foo.c
|
||||||
|
# sub/foo.o: sub/foo.h
|
||||||
|
# sub/foo.c:
|
||||||
|
# sub/foo.h:
|
||||||
|
# ICC 7.1 will output
|
||||||
|
# foo.o: sub/foo.c sub/foo.h
|
||||||
|
# and will wrap long lines using \ :
|
||||||
|
# foo.o: sub/foo.c ... \
|
||||||
|
# sub/foo.h ... \
|
||||||
|
# ...
|
||||||
|
|
||||||
|
"$@" -MD -MF "$tmpdepfile"
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
# Each line is of the form `foo.o: dependent.h',
|
||||||
|
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||||
|
# Do two passes, one to just change these to
|
||||||
|
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||||
|
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||||
|
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
# correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||||
|
sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
hp2)
|
||||||
|
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||||
|
# compilers, which have integrated preprocessors. The correct option
|
||||||
|
# to use with these is +Maked; it writes dependencies to a file named
|
||||||
|
# 'foo.d', which lands next to the object file, wherever that
|
||||||
|
# happens to be.
|
||||||
|
# Much of this is similar to the tru64 case; see comments there.
|
||||||
|
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||||
|
test "x$dir" = "x$object" && dir=
|
||||||
|
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
tmpdepfile1=$dir$base.d
|
||||||
|
tmpdepfile2=$dir.libs/$base.d
|
||||||
|
"$@" -Wc,+Maked
|
||||||
|
else
|
||||||
|
tmpdepfile1=$dir$base.d
|
||||||
|
tmpdepfile2=$dir$base.d
|
||||||
|
"$@" +Maked
|
||||||
|
fi
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||||
|
do
|
||||||
|
test -f "$tmpdepfile" && break
|
||||||
|
done
|
||||||
|
if test -f "$tmpdepfile"; then
|
||||||
|
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||||
|
# Add `dependent.h:' lines.
|
||||||
|
sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
|
||||||
|
else
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||||
|
;;
|
||||||
|
|
||||||
tru64)
|
tru64)
|
||||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||||
|
@ -217,30 +341,46 @@ tru64)
|
||||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||||
|
|
||||||
if test "$libtool" = yes; then
|
if test "$libtool" = yes; then
|
||||||
tmpdepfile1="$dir.libs/$base.lo.d"
|
# With Tru64 cc, shared objects can also be used to make a
|
||||||
tmpdepfile2="$dir.libs/$base.d"
|
# static library. This mechanism is used in libtool 1.4 series to
|
||||||
|
# handle both shared and static libraries in a single compilation.
|
||||||
|
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
||||||
|
#
|
||||||
|
# With libtool 1.5 this exception was removed, and libtool now
|
||||||
|
# generates 2 separate objects for the 2 libraries. These two
|
||||||
|
# compilations output dependencies in $dir.libs/$base.o.d and
|
||||||
|
# in $dir$base.o.d. We have to check for both files, because
|
||||||
|
# one of the two compilations can be disabled. We should prefer
|
||||||
|
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||||
|
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||||
|
# the former would cause a distcleancheck panic.
|
||||||
|
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
||||||
|
tmpdepfile2=$dir$base.o.d # libtool 1.5
|
||||||
|
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
||||||
|
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||||
"$@" -Wc,-MD
|
"$@" -Wc,-MD
|
||||||
else
|
else
|
||||||
tmpdepfile1="$dir$base.o.d"
|
tmpdepfile1=$dir$base.o.d
|
||||||
tmpdepfile2="$dir$base.d"
|
tmpdepfile2=$dir$base.d
|
||||||
|
tmpdepfile3=$dir$base.d
|
||||||
|
tmpdepfile4=$dir$base.d
|
||||||
"$@" -MD
|
"$@" -MD
|
||||||
fi
|
fi
|
||||||
|
|
||||||
stat=$?
|
stat=$?
|
||||||
if test $stat -eq 0; then :
|
if test $stat -eq 0; then :
|
||||||
else
|
else
|
||||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||||
exit $stat
|
exit $stat
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -f "$tmpdepfile1"; then
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||||
tmpdepfile="$tmpdepfile1"
|
do
|
||||||
else
|
test -f "$tmpdepfile" && break
|
||||||
tmpdepfile="$tmpdepfile2"
|
done
|
||||||
fi
|
|
||||||
if test -f "$tmpdepfile"; then
|
if test -f "$tmpdepfile"; then
|
||||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||||
# That's a space and a tab in the [].
|
# That's a tab and a space in the [].
|
||||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||||
else
|
else
|
||||||
echo "#dummy" > "$depfile"
|
echo "#dummy" > "$depfile"
|
||||||
|
@ -254,7 +394,7 @@ tru64)
|
||||||
|
|
||||||
dashmstdout)
|
dashmstdout)
|
||||||
# Important note: in order to support this mode, a compiler *must*
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
# always write the proprocessed file to stdout, regardless of -o.
|
# always write the preprocessed file to stdout, regardless of -o.
|
||||||
"$@" || exit $?
|
"$@" || exit $?
|
||||||
|
|
||||||
# Remove the call to Libtool.
|
# Remove the call to Libtool.
|
||||||
|
@ -265,9 +405,7 @@ dashmstdout)
|
||||||
shift
|
shift
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove `-o $object'. We will use -o /dev/null later,
|
# Remove `-o $object'.
|
||||||
# however we can't do the remplacement now because
|
|
||||||
# `-o $object' might simply not be used
|
|
||||||
IFS=" "
|
IFS=" "
|
||||||
for arg
|
for arg
|
||||||
do
|
do
|
||||||
|
@ -287,7 +425,11 @@ dashmstdout)
|
||||||
done
|
done
|
||||||
|
|
||||||
test -z "$dashmflag" && dashmflag=-M
|
test -z "$dashmflag" && dashmflag=-M
|
||||||
"$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
# Require at least two characters before searching for `:'
|
||||||
|
# in the target name. This is to cope with DOS-style filenames:
|
||||||
|
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||||
|
"$@" $dashmflag |
|
||||||
|
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||||
rm -f "$depfile"
|
rm -f "$depfile"
|
||||||
cat < "$tmpdepfile" > "$depfile"
|
cat < "$tmpdepfile" > "$depfile"
|
||||||
tr ' ' '
|
tr ' ' '
|
||||||
|
@ -306,6 +448,13 @@ dashXmstdout)
|
||||||
|
|
||||||
makedepend)
|
makedepend)
|
||||||
"$@" || exit $?
|
"$@" || exit $?
|
||||||
|
# Remove any Libtool call
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
while test $1 != '--mode=compile'; do
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
fi
|
||||||
# X makedepend
|
# X makedepend
|
||||||
shift
|
shift
|
||||||
cleared=no
|
cleared=no
|
||||||
|
@ -318,7 +467,9 @@ makedepend)
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
-D*|-I*)
|
-D*|-I*)
|
||||||
set fnord "$@" "$arg"; shift ;;
|
set fnord "$@" "$arg"; shift ;;
|
||||||
-*)
|
# Strip any option that makedepend may not understand. Remove
|
||||||
|
# the object too, otherwise makedepend will parse it as a source file.
|
||||||
|
-*|$object)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
set fnord "$@" "$arg"; shift ;;
|
set fnord "$@" "$arg"; shift ;;
|
||||||
|
@ -339,7 +490,7 @@ makedepend)
|
||||||
|
|
||||||
cpp)
|
cpp)
|
||||||
# Important note: in order to support this mode, a compiler *must*
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
# always write the proprocessed file to stdout.
|
# always write the preprocessed file to stdout.
|
||||||
"$@" || exit $?
|
"$@" || exit $?
|
||||||
|
|
||||||
# Remove the call to Libtool.
|
# Remove the call to Libtool.
|
||||||
|
@ -370,7 +521,8 @@ cpp)
|
||||||
done
|
done
|
||||||
|
|
||||||
"$@" -E |
|
"$@" -E |
|
||||||
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||||
|
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||||
sed '$ s: \\$::' > "$tmpdepfile"
|
sed '$ s: \\$::' > "$tmpdepfile"
|
||||||
rm -f "$depfile"
|
rm -f "$depfile"
|
||||||
echo "$object : \\" > "$depfile"
|
echo "$object : \\" > "$depfile"
|
||||||
|
@ -381,7 +533,7 @@ cpp)
|
||||||
|
|
||||||
msvisualcpp)
|
msvisualcpp)
|
||||||
# Important note: in order to support this mode, a compiler *must*
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
# always write the proprocessed file to stdout, regardless of -o,
|
# always write the preprocessed file to stdout, regardless of -o,
|
||||||
# because we must use -o when running libtool.
|
# because we must use -o when running libtool.
|
||||||
"$@" || exit $?
|
"$@" || exit $?
|
||||||
IFS=" "
|
IFS=" "
|
||||||
|
@ -421,3 +573,12 @@ none)
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-indentation: 2
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-end: "$"
|
||||||
|
# End:
|
||||||
|
|
|
@ -1,21 +1,19 @@
|
||||||
SUBDIRS = api
|
SUBDIRS = api
|
||||||
|
|
||||||
EXTRA_DIST = README.jaxp $(man_MANS)
|
EXTRA_DIST = README.jaxp texi2pod.pl $(man_MANS)
|
||||||
|
|
||||||
## GCJ LOCAL: we don't want to install all of Classpath's info files.
|
## GCJ LOCAL: we don't want to install all of Classpath's info files.
|
||||||
## info_TEXINFOS = cp-hacking.texinfo cp-vmintegration.texinfo cp-tools.texinfo
|
## info_TEXINFOS = cp-hacking.texinfo cp-vmintegration.texinfo cp-tools.texinfo
|
||||||
TEXINFO_TEX = ../../gcc/doc/include/texinfo.tex
|
TEXINFO_TEX = ../../gcc/doc/include/texinfo.tex
|
||||||
info_TEXINFOS = cp-tools.texinfo
|
info_TEXINFOS = cp-tools.texinfo
|
||||||
cp_tools_TEXINFOS = gcc-vers.texi
|
|
||||||
|
|
||||||
%.dvi : %.texinfo
|
.texinfo.dvi:
|
||||||
texi2dvi $<
|
texi2dvi $<
|
||||||
|
|
||||||
%.ps : %.dvi
|
.dvi.ps:
|
||||||
dvips -o $@ $<
|
dvips -o $@ $<
|
||||||
|
|
||||||
docs: cp-hacking.ps cp-vmintegration.ps cp-tools.ps
|
docs: cp-hacking.ps cp-vmintegration.ps cp-tools.ps $(TOOLS_MANFILES)
|
||||||
install-data-local: install-info
|
|
||||||
|
|
||||||
man_MANS = $(TOOLS_MANFILES)
|
man_MANS = $(TOOLS_MANFILES)
|
||||||
TOOLS_MANFILES = \
|
TOOLS_MANFILES = \
|
||||||
|
@ -32,23 +30,11 @@ TOOLS_MANFILES = \
|
||||||
gserialver.1 \
|
gserialver.1 \
|
||||||
gtnameserv.1
|
gtnameserv.1
|
||||||
|
|
||||||
BASEVER = $(top_srcdir)/../../gcc/BASE-VER
|
POD2MAN = pod2man --center="GNU" --release="$(VERSION)"
|
||||||
DEVPHASE = $(top_srcdir)/../../gcc/DEV-PHASE
|
TEXI2POD = perl $(srcdir)/texi2pod.pl
|
||||||
|
|
||||||
POD2MAN = pod2man --center="GNU" --release="gcc-$(shell cat $(BASEVER))"
|
|
||||||
TEXI2POD = perl $(top_srcdir)/../../contrib/texi2pod.pl
|
|
||||||
STAMP = echo timestamp >
|
STAMP = echo timestamp >
|
||||||
|
|
||||||
# gcc-vers.texi is generated from the version files.
|
.pod.1:
|
||||||
gcc-vers.texi: $(BASEVER) $(DEVPHASE)
|
|
||||||
(echo "@set version-GCC $(shell cat $(BASEVER))"; \
|
|
||||||
if [ "$(shell cat $(DEVPHASE))" = "experimental" ]; \
|
|
||||||
then echo "@set DEVELOPMENT"; \
|
|
||||||
else echo "@clear DEVELOPMENT"; \
|
|
||||||
fi) > $@T
|
|
||||||
mv -f $@T $@
|
|
||||||
|
|
||||||
%.1: %.pod
|
|
||||||
$(STAMP) $@
|
$(STAMP) $@
|
||||||
-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
|
-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
|
||||||
mv -f $(@).T$$$$ $@) || \
|
mv -f $(@).T$$$$ $@) || \
|
||||||
|
|
|
@ -37,23 +37,27 @@ build_triplet = @build@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
target_triplet = @target@
|
target_triplet = @target@
|
||||||
subdir = doc
|
subdir = doc
|
||||||
DIST_COMMON = $(cp_tools_TEXINFOS) $(srcdir)/Makefile.am \
|
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in texinfo.tex
|
||||||
$(srcdir)/Makefile.in texinfo.tex
|
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||||
$(top_srcdir)/../../config/lead-dot.m4 \
|
$(top_srcdir)/../../config/lead-dot.m4 \
|
||||||
$(top_srcdir)/../../config/multi.m4 \
|
$(top_srcdir)/../../config/multi.m4 \
|
||||||
$(top_srcdir)/../../config/no-executables.m4 \
|
$(top_srcdir)/../../config/no-executables.m4 \
|
||||||
$(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
|
$(top_srcdir)/../../libtool.m4 \
|
||||||
$(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
|
$(top_srcdir)/../../ltoptions.m4 \
|
||||||
|
$(top_srcdir)/../../ltsugar.m4 \
|
||||||
|
$(top_srcdir)/../../ltversion.m4 \
|
||||||
|
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
||||||
|
$(top_srcdir)/m4/acinclude.m4 \
|
||||||
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
||||||
|
$(top_srcdir)/m4/ax_func_which_gethostbyname_r.m4 \
|
||||||
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
|
||||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
SOURCES =
|
SOURCES =
|
||||||
|
@ -88,12 +92,15 @@ ACLOCAL = @ACLOCAL@
|
||||||
AMDEP_FALSE = @AMDEP_FALSE@
|
AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AR = @AR@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
AUTOMAKE = @AUTOMAKE@
|
AUTOMAKE = @AUTOMAKE@
|
||||||
AWK = @AWK@
|
AWK = @AWK@
|
||||||
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
||||||
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
||||||
|
CAIRO_CFLAGS = @CAIRO_CFLAGS@
|
||||||
|
CAIRO_LIBS = @CAIRO_LIBS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
|
@ -139,6 +146,7 @@ DATE = @DATE@
|
||||||
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
|
DUMPBIN = @DUMPBIN@
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
|
@ -151,15 +159,16 @@ ERROR_CFLAGS = @ERROR_CFLAGS@
|
||||||
EXAMPLESDIR = @EXAMPLESDIR@
|
EXAMPLESDIR = @EXAMPLESDIR@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
FASTJAR = @FASTJAR@
|
FASTJAR = @FASTJAR@
|
||||||
|
FGREP = @FGREP@
|
||||||
FIND = @FIND@
|
FIND = @FIND@
|
||||||
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
||||||
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
||||||
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
||||||
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
||||||
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
|
|
||||||
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
|
|
||||||
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
||||||
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
||||||
|
FOUND_JAVAC_FALSE = @FOUND_JAVAC_FALSE@
|
||||||
|
FOUND_JAVAC_TRUE = @FOUND_JAVAC_TRUE@
|
||||||
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
||||||
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
||||||
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
||||||
|
@ -167,7 +176,6 @@ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
|
||||||
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
||||||
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||||
GCJ = @GCJ@
|
GCJ = @GCJ@
|
||||||
GCJX = @GCJX@
|
|
||||||
GCONF_CFLAGS = @GCONF_CFLAGS@
|
GCONF_CFLAGS = @GCONF_CFLAGS@
|
||||||
GCONF_LIBS = @GCONF_LIBS@
|
GCONF_LIBS = @GCONF_LIBS@
|
||||||
GDK_CFLAGS = @GDK_CFLAGS@
|
GDK_CFLAGS = @GDK_CFLAGS@
|
||||||
|
@ -177,6 +185,7 @@ GENINSRC_TRUE = @GENINSRC_TRUE@
|
||||||
GJDOC = @GJDOC@
|
GJDOC = @GJDOC@
|
||||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||||
GLIB_LIBS = @GLIB_LIBS@
|
GLIB_LIBS = @GLIB_LIBS@
|
||||||
|
GREP = @GREP@
|
||||||
GTK_CFLAGS = @GTK_CFLAGS@
|
GTK_CFLAGS = @GTK_CFLAGS@
|
||||||
GTK_LIBS = @GTK_LIBS@
|
GTK_LIBS = @GTK_LIBS@
|
||||||
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
||||||
|
@ -188,6 +197,7 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
JAVAC = @JAVAC@
|
||||||
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
||||||
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
||||||
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
||||||
|
@ -197,6 +207,7 @@ JIKES = @JIKES@
|
||||||
JIKESENCODING = @JIKESENCODING@
|
JIKESENCODING = @JIKESENCODING@
|
||||||
JIKESWARNINGS = @JIKESWARNINGS@
|
JIKESWARNINGS = @JIKESWARNINGS@
|
||||||
KJC = @KJC@
|
KJC = @KJC@
|
||||||
|
LD = @LD@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBDEBUG = @LIBDEBUG@
|
LIBDEBUG = @LIBDEBUG@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
|
@ -216,6 +227,7 @@ MKDIR = @MKDIR@
|
||||||
MOC = @MOC@
|
MOC = @MOC@
|
||||||
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
||||||
MOZILLA_LIBS = @MOZILLA_LIBS@
|
MOZILLA_LIBS = @MOZILLA_LIBS@
|
||||||
|
NM = @NM@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
@ -237,6 +249,7 @@ RANLIB = @RANLIB@
|
||||||
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
||||||
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
||||||
REMOVE = @REMOVE@
|
REMOVE = @REMOVE@
|
||||||
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
||||||
|
@ -264,8 +277,10 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||||
X_LIBS = @X_LIBS@
|
X_LIBS = @X_LIBS@
|
||||||
X_PRE_LIBS = @X_PRE_LIBS@
|
X_PRE_LIBS = @X_PRE_LIBS@
|
||||||
ZIP = @ZIP@
|
ZIP = @ZIP@
|
||||||
|
ac_ct_AR = @ac_ct_AR@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_STRIP = @ac_ct_STRIP@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
|
@ -298,6 +313,7 @@ install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
|
lt_ECHO = @lt_ECHO@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
|
@ -316,10 +332,9 @@ target_vendor = @target_vendor@
|
||||||
toolexeclibdir = @toolexeclibdir@
|
toolexeclibdir = @toolexeclibdir@
|
||||||
vm_classes = @vm_classes@
|
vm_classes = @vm_classes@
|
||||||
SUBDIRS = api
|
SUBDIRS = api
|
||||||
EXTRA_DIST = README.jaxp $(man_MANS)
|
EXTRA_DIST = README.jaxp texi2pod.pl $(man_MANS)
|
||||||
TEXINFO_TEX = ../../gcc/doc/include/texinfo.tex
|
TEXINFO_TEX = ../../gcc/doc/include/texinfo.tex
|
||||||
info_TEXINFOS = cp-tools.texinfo
|
info_TEXINFOS = cp-tools.texinfo
|
||||||
cp_tools_TEXINFOS = gcc-vers.texi
|
|
||||||
man_MANS = $(TOOLS_MANFILES)
|
man_MANS = $(TOOLS_MANFILES)
|
||||||
TOOLS_MANFILES = \
|
TOOLS_MANFILES = \
|
||||||
gappletviewer.1 \
|
gappletviewer.1 \
|
||||||
|
@ -335,10 +350,8 @@ TOOLS_MANFILES = \
|
||||||
gserialver.1 \
|
gserialver.1 \
|
||||||
gtnameserv.1
|
gtnameserv.1
|
||||||
|
|
||||||
BASEVER = $(top_srcdir)/../../gcc/BASE-VER
|
POD2MAN = pod2man --center="GNU" --release="$(VERSION)"
|
||||||
DEVPHASE = $(top_srcdir)/../../gcc/DEV-PHASE
|
TEXI2POD = perl $(srcdir)/texi2pod.pl
|
||||||
POD2MAN = pod2man --center="GNU" --release="gcc-$(shell cat $(BASEVER))"
|
|
||||||
TEXI2POD = perl $(top_srcdir)/../../contrib/texi2pod.pl
|
|
||||||
STAMP = echo timestamp >
|
STAMP = echo timestamp >
|
||||||
@GENINSRC_FALSE@STAMP_GENINSRC =
|
@GENINSRC_FALSE@STAMP_GENINSRC =
|
||||||
|
|
||||||
|
@ -365,7 +378,7 @@ MAINTAINERCLEANFILES = \
|
||||||
all: all-recursive
|
all: all-recursive
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .dvi .ps
|
.SUFFIXES: .1 .dvi .pod .ps .texinfo
|
||||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||||
@for dep in $?; do \
|
@for dep in $?; do \
|
||||||
case '$(am__configure_deps)' in \
|
case '$(am__configure_deps)' in \
|
||||||
|
@ -405,7 +418,7 @@ clean-libtool:
|
||||||
distclean-libtool:
|
distclean-libtool:
|
||||||
-rm -f libtool
|
-rm -f libtool
|
||||||
|
|
||||||
cp-tools.info: cp-tools.texinfo $(cp_tools_TEXINFOS)
|
cp-tools.info: cp-tools.texinfo
|
||||||
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
|
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
|
||||||
rm -rf $$backupdir && mkdir $$backupdir && \
|
rm -rf $$backupdir && mkdir $$backupdir && \
|
||||||
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
|
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
|
||||||
|
@ -423,17 +436,17 @@ cp-tools.info: cp-tools.texinfo $(cp_tools_TEXINFOS)
|
||||||
fi; \
|
fi; \
|
||||||
rm -rf $$backupdir; exit $$rc
|
rm -rf $$backupdir; exit $$rc
|
||||||
|
|
||||||
cp-tools.dvi: cp-tools.texinfo $(cp_tools_TEXINFOS)
|
cp-tools.dvi: cp-tools.texinfo
|
||||||
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
||||||
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
|
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
|
||||||
$(TEXI2DVI) -o $@ `test -f 'cp-tools.texinfo' || echo '$(srcdir)/'`cp-tools.texinfo
|
$(TEXI2DVI) -o $@ `test -f 'cp-tools.texinfo' || echo '$(srcdir)/'`cp-tools.texinfo
|
||||||
|
|
||||||
cp-tools.pdf: cp-tools.texinfo $(cp_tools_TEXINFOS)
|
cp-tools.pdf: cp-tools.texinfo
|
||||||
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
||||||
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
|
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
|
||||||
$(TEXI2PDF) -o $@ `test -f 'cp-tools.texinfo' || echo '$(srcdir)/'`cp-tools.texinfo
|
$(TEXI2PDF) -o $@ `test -f 'cp-tools.texinfo' || echo '$(srcdir)/'`cp-tools.texinfo
|
||||||
|
|
||||||
cp-tools.html: cp-tools.texinfo $(cp_tools_TEXINFOS)
|
cp-tools.html: cp-tools.texinfo
|
||||||
rm -rf $(@:.html=.htp)
|
rm -rf $(@:.html=.htp)
|
||||||
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
|
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
|
||||||
-o $(@:.html=.htp) `test -f 'cp-tools.texinfo' || echo '$(srcdir)/'`cp-tools.texinfo; \
|
-o $(@:.html=.htp) `test -f 'cp-tools.texinfo' || echo '$(srcdir)/'`cp-tools.texinfo; \
|
||||||
|
@ -446,9 +459,6 @@ cp-tools.html: cp-tools.texinfo $(cp_tools_TEXINFOS)
|
||||||
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
|
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi
|
fi
|
||||||
.dvi.ps:
|
|
||||||
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
|
||||||
$(DVIPS) -o $@ $<
|
|
||||||
|
|
||||||
uninstall-info-am:
|
uninstall-info-am:
|
||||||
@$(PRE_UNINSTALL)
|
@$(PRE_UNINSTALL)
|
||||||
|
@ -778,7 +788,7 @@ info: info-recursive
|
||||||
|
|
||||||
info-am: $(INFO_DEPS)
|
info-am: $(INFO_DEPS)
|
||||||
|
|
||||||
install-data-am: install-data-local install-info-am install-man
|
install-data-am: install-info-am install-man
|
||||||
|
|
||||||
install-exec-am:
|
install-exec-am:
|
||||||
|
|
||||||
|
@ -847,36 +857,26 @@ uninstall-man: uninstall-man1
|
||||||
ctags ctags-recursive dist-info distclean distclean-generic \
|
ctags ctags-recursive dist-info distclean distclean-generic \
|
||||||
distclean-libtool distclean-recursive distclean-tags distdir \
|
distclean-libtool distclean-recursive distclean-tags distdir \
|
||||||
dvi dvi-am html html-am info info-am install install-am \
|
dvi dvi-am html html-am info info-am install install-am \
|
||||||
install-data install-data-am install-data-local install-exec \
|
install-data install-data-am install-exec install-exec-am \
|
||||||
install-exec-am install-info install-info-am install-man \
|
install-info install-info-am install-man install-man1 \
|
||||||
install-man1 install-strip installcheck installcheck-am \
|
install-strip installcheck installcheck-am installdirs \
|
||||||
installdirs installdirs-am maintainer-clean \
|
installdirs-am maintainer-clean maintainer-clean-aminfo \
|
||||||
maintainer-clean-aminfo maintainer-clean-generic \
|
maintainer-clean-generic maintainer-clean-recursive \
|
||||||
maintainer-clean-recursive mostlyclean mostlyclean-aminfo \
|
mostlyclean mostlyclean-aminfo mostlyclean-generic \
|
||||||
mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
|
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
|
||||||
pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
|
tags tags-recursive uninstall uninstall-am uninstall-info-am \
|
||||||
uninstall-info-am uninstall-man uninstall-man1
|
uninstall-man uninstall-man1
|
||||||
|
|
||||||
|
|
||||||
%.dvi : %.texinfo
|
.texinfo.dvi:
|
||||||
texi2dvi $<
|
texi2dvi $<
|
||||||
|
|
||||||
%.ps : %.dvi
|
.dvi.ps:
|
||||||
dvips -o $@ $<
|
dvips -o $@ $<
|
||||||
|
|
||||||
docs: cp-hacking.ps cp-vmintegration.ps cp-tools.ps
|
docs: cp-hacking.ps cp-vmintegration.ps cp-tools.ps $(TOOLS_MANFILES)
|
||||||
install-data-local: install-info
|
|
||||||
|
|
||||||
# gcc-vers.texi is generated from the version files.
|
.pod.1:
|
||||||
gcc-vers.texi: $(BASEVER) $(DEVPHASE)
|
|
||||||
(echo "@set version-GCC $(shell cat $(BASEVER))"; \
|
|
||||||
if [ "$(shell cat $(DEVPHASE))" = "experimental" ]; \
|
|
||||||
then echo "@set DEVELOPMENT"; \
|
|
||||||
else echo "@clear DEVELOPMENT"; \
|
|
||||||
fi) > $@T
|
|
||||||
mv -f $@T $@
|
|
||||||
|
|
||||||
%.1: %.pod
|
|
||||||
$(STAMP) $@
|
$(STAMP) $@
|
||||||
-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
|
-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
|
||||||
mv -f $(@).T$$$$ $@) || \
|
mv -f $(@).T$$$$ $@) || \
|
||||||
|
|
|
@ -44,16 +44,21 @@ am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||||
$(top_srcdir)/../../config/lead-dot.m4 \
|
$(top_srcdir)/../../config/lead-dot.m4 \
|
||||||
$(top_srcdir)/../../config/multi.m4 \
|
$(top_srcdir)/../../config/multi.m4 \
|
||||||
$(top_srcdir)/../../config/no-executables.m4 \
|
$(top_srcdir)/../../config/no-executables.m4 \
|
||||||
$(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
|
$(top_srcdir)/../../libtool.m4 \
|
||||||
$(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
|
$(top_srcdir)/../../ltoptions.m4 \
|
||||||
|
$(top_srcdir)/../../ltsugar.m4 \
|
||||||
|
$(top_srcdir)/../../ltversion.m4 \
|
||||||
|
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
||||||
|
$(top_srcdir)/m4/acinclude.m4 \
|
||||||
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
||||||
|
$(top_srcdir)/m4/ax_func_which_gethostbyname_r.m4 \
|
||||||
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
|
||||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
SOURCES =
|
SOURCES =
|
||||||
|
@ -64,12 +69,15 @@ ACLOCAL = @ACLOCAL@
|
||||||
AMDEP_FALSE = @AMDEP_FALSE@
|
AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AR = @AR@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
AUTOMAKE = @AUTOMAKE@
|
AUTOMAKE = @AUTOMAKE@
|
||||||
AWK = @AWK@
|
AWK = @AWK@
|
||||||
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
||||||
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
||||||
|
CAIRO_CFLAGS = @CAIRO_CFLAGS@
|
||||||
|
CAIRO_LIBS = @CAIRO_LIBS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
|
@ -115,6 +123,7 @@ DATE = @DATE@
|
||||||
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
|
DUMPBIN = @DUMPBIN@
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
|
@ -127,15 +136,16 @@ ERROR_CFLAGS = @ERROR_CFLAGS@
|
||||||
EXAMPLESDIR = @EXAMPLESDIR@
|
EXAMPLESDIR = @EXAMPLESDIR@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
FASTJAR = @FASTJAR@
|
FASTJAR = @FASTJAR@
|
||||||
|
FGREP = @FGREP@
|
||||||
FIND = @FIND@
|
FIND = @FIND@
|
||||||
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
||||||
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
||||||
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
||||||
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
||||||
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
|
|
||||||
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
|
|
||||||
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
||||||
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
||||||
|
FOUND_JAVAC_FALSE = @FOUND_JAVAC_FALSE@
|
||||||
|
FOUND_JAVAC_TRUE = @FOUND_JAVAC_TRUE@
|
||||||
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
||||||
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
||||||
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
||||||
|
@ -143,7 +153,6 @@ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
|
||||||
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
||||||
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||||
GCJ = @GCJ@
|
GCJ = @GCJ@
|
||||||
GCJX = @GCJX@
|
|
||||||
GCONF_CFLAGS = @GCONF_CFLAGS@
|
GCONF_CFLAGS = @GCONF_CFLAGS@
|
||||||
GCONF_LIBS = @GCONF_LIBS@
|
GCONF_LIBS = @GCONF_LIBS@
|
||||||
GDK_CFLAGS = @GDK_CFLAGS@
|
GDK_CFLAGS = @GDK_CFLAGS@
|
||||||
|
@ -153,6 +162,7 @@ GENINSRC_TRUE = @GENINSRC_TRUE@
|
||||||
GJDOC = @GJDOC@
|
GJDOC = @GJDOC@
|
||||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||||
GLIB_LIBS = @GLIB_LIBS@
|
GLIB_LIBS = @GLIB_LIBS@
|
||||||
|
GREP = @GREP@
|
||||||
GTK_CFLAGS = @GTK_CFLAGS@
|
GTK_CFLAGS = @GTK_CFLAGS@
|
||||||
GTK_LIBS = @GTK_LIBS@
|
GTK_LIBS = @GTK_LIBS@
|
||||||
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
||||||
|
@ -164,6 +174,7 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
JAVAC = @JAVAC@
|
||||||
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
||||||
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
||||||
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
||||||
|
@ -173,6 +184,7 @@ JIKES = @JIKES@
|
||||||
JIKESENCODING = @JIKESENCODING@
|
JIKESENCODING = @JIKESENCODING@
|
||||||
JIKESWARNINGS = @JIKESWARNINGS@
|
JIKESWARNINGS = @JIKESWARNINGS@
|
||||||
KJC = @KJC@
|
KJC = @KJC@
|
||||||
|
LD = @LD@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBDEBUG = @LIBDEBUG@
|
LIBDEBUG = @LIBDEBUG@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
|
@ -192,6 +204,7 @@ MKDIR = @MKDIR@
|
||||||
MOC = @MOC@
|
MOC = @MOC@
|
||||||
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
||||||
MOZILLA_LIBS = @MOZILLA_LIBS@
|
MOZILLA_LIBS = @MOZILLA_LIBS@
|
||||||
|
NM = @NM@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
@ -213,6 +226,7 @@ RANLIB = @RANLIB@
|
||||||
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
||||||
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
||||||
REMOVE = @REMOVE@
|
REMOVE = @REMOVE@
|
||||||
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
||||||
|
@ -240,8 +254,10 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||||
X_LIBS = @X_LIBS@
|
X_LIBS = @X_LIBS@
|
||||||
X_PRE_LIBS = @X_PRE_LIBS@
|
X_PRE_LIBS = @X_PRE_LIBS@
|
||||||
ZIP = @ZIP@
|
ZIP = @ZIP@
|
||||||
|
ac_ct_AR = @ac_ct_AR@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_STRIP = @ac_ct_STRIP@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
|
@ -274,6 +290,7 @@ install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
|
lt_ECHO = @lt_ECHO@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
\input texinfo @c -*-texinfo-*-
|
\input texinfo @c -*-texinfo-*-
|
||||||
|
|
||||||
@c %**start of header
|
@c %**start of header
|
||||||
@setfilename hacking.info
|
@setfilename cp-hacking.info
|
||||||
@settitle GNU Classpath Hacker's Guide
|
@settitle GNU Classpath Hacker's Guide
|
||||||
@c %**end of header
|
@c %**end of header
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
||||||
This file contains important information you will need to know if you
|
This file contains important information you will need to know if you
|
||||||
are going to hack on the GNU Classpath project code.
|
are going to hack on the GNU Classpath project code.
|
||||||
|
|
||||||
Copyright (C) 1998,1999,2000,2001,2002,2003,2004, 2005 Free Software Foundation, Inc.
|
Copyright (C) 1998,1999,2000,2001,2002,2003,2004,2005,2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
@ifnotplaintext
|
@ifnotplaintext
|
||||||
@dircategory GNU Libraries
|
@dircategory GNU Libraries
|
||||||
|
@ -65,6 +65,9 @@ and compilers for the java programming language.
|
||||||
* Volunteering:: So you want to help out
|
* Volunteering:: So you want to help out
|
||||||
* Project Goals:: Goals of the GNU Classpath project
|
* Project Goals:: Goals of the GNU Classpath project
|
||||||
* Needed Tools and Libraries:: A list of programs and libraries you will need
|
* Needed Tools and Libraries:: A list of programs and libraries you will need
|
||||||
|
* Installation:: Installation instructions
|
||||||
|
* Building and running with the X AWT peers:: Building and running with the X AWT peers
|
||||||
|
* Misc. Notes:: Miscellaneous notes
|
||||||
* Programming Standards:: Standards to use when writing code
|
* Programming Standards:: Standards to use when writing code
|
||||||
* Hacking Code:: Working on code, Working with others
|
* Hacking Code:: Working on code, Working with others
|
||||||
* Programming Goals:: What to consider when writing code
|
* Programming Goals:: What to consider when writing code
|
||||||
|
@ -324,7 +327,7 @@ that way. But finishing, polishing up, documenting, testing and
|
||||||
debugging current functionality is of higher priority then adding new
|
debugging current functionality is of higher priority then adding new
|
||||||
functionality.
|
functionality.
|
||||||
|
|
||||||
@node Needed Tools and Libraries, Programming Standards, Project Goals, Top
|
@node Needed Tools and Libraries, Installation, Project Goals, Top
|
||||||
@comment node-name, next, previous, up
|
@comment node-name, next, previous, up
|
||||||
@chapter Needed Tools and Libraries
|
@chapter Needed Tools and Libraries
|
||||||
|
|
||||||
|
@ -338,15 +341,19 @@ needed when working directly on the CVS version.
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
GCC 3.3+
|
GNU make 3.80+
|
||||||
|
@item
|
||||||
|
GCC 2.95+
|
||||||
|
@item
|
||||||
|
Eclipse Compiler for Java 3.1+
|
||||||
@item
|
@item
|
||||||
CVS 1.11+
|
CVS 1.11+
|
||||||
@item
|
@item
|
||||||
automake 1.7+
|
automake 1.9+
|
||||||
@item
|
@item
|
||||||
autoconf 2.59+
|
autoconf 2.59+
|
||||||
@item
|
@item
|
||||||
libtool 1.4.2+
|
libtool 1.5+
|
||||||
@item
|
@item
|
||||||
GNU m4 1.4
|
GNU m4 1.4
|
||||||
@item
|
@item
|
||||||
|
@ -356,35 +363,50 @@ texinfo 4.2+
|
||||||
All of these tools are available from
|
All of these tools are available from
|
||||||
@uref{ftp://gnudist.gnu.org/pub/gnu/,gnudist.gnu.org} via anonymous
|
@uref{ftp://gnudist.gnu.org/pub/gnu/,gnudist.gnu.org} via anonymous
|
||||||
ftp, except CVS which is available from
|
ftp, except CVS which is available from
|
||||||
@uref{http://www.cvshome.org/,www.cvshome.org}. They are fully
|
@uref{http://www.cvshome.org/,www.cvshome.org} and the Eclipse
|
||||||
documented with texinfo manuals. Texinfo can be browsed with the
|
Compiler for Java, which is available from
|
||||||
Emacs editor, or with the text editor of your choice, or transformed
|
@uref{http://www.eclipse.org/jdt/core,www.eclipse.org/jdt/core}.
|
||||||
into nicely printable Postscript.
|
|
||||||
|
Except for the Eclipse Compiler for Java, they are fully documented
|
||||||
|
with texinfo manuals. Texinfo can be browsed with the Emacs editor,
|
||||||
|
or with the text editor of your choice, or transformed into nicely
|
||||||
|
printable Postscript.
|
||||||
|
|
||||||
Here is a brief description of the purpose of those tools.
|
Here is a brief description of the purpose of those tools.
|
||||||
|
|
||||||
@table @b
|
@table @b
|
||||||
|
|
||||||
|
@item make
|
||||||
|
GNU make ("gmake") is required for building Classpath.
|
||||||
|
|
||||||
@item GCC
|
@item GCC
|
||||||
The GNU Compiler Collection. This contains a C compiler (gcc) for
|
The GNU Compiler Collection. This contains a C compiler (gcc) for
|
||||||
compiling the native C code and a compiler for the java programming
|
compiling the native C code and a compiler for the java programming
|
||||||
language (gcj). You will need at least gcj version 3.3 or higher. If
|
language (gcj). You will need at least gcc version 2.95 or higher
|
||||||
that version is not available for your platform you can try the
|
in order to compile the native code. There is currently no
|
||||||
@uref{http://www.jikes.org/, jikes compiler}. We try to keep all code
|
released version of gcj that can compile the Java 1.5 programming
|
||||||
compilable with both gcj and jikes at all times.
|
language used by GNU Classpath.
|
||||||
|
|
||||||
|
@item ecj
|
||||||
|
The Eclipse Compiler for Java. This is a compiler for the Java 1.5
|
||||||
|
programming language. It translates source code to bytecode. The
|
||||||
|
Eclipse Foundation makes ``ecj.jar'' available as the JDT Core Batch
|
||||||
|
Compiler download.
|
||||||
|
|
||||||
@item CVS
|
@item CVS
|
||||||
A version control system that maintains a centralized Internet
|
A version control system that maintains a centralized Internet
|
||||||
repository of all code in the Classpath system.
|
repository of all code in the Classpath system.
|
||||||
|
|
||||||
@item automake
|
@item automake
|
||||||
This tool automatically creates Makefile.in files from Makefile.am
|
This tool automatically creates @file{Makefile.in} files from
|
||||||
files. The Makefile.in is turned into a Makefile by autoconf. Why
|
@file{Makefile.am} files. The @file{Makefile.in} is turned into a
|
||||||
use this? Because it automatically generates every makefile target
|
@file{Makefile} by @command{autoconf}.
|
||||||
you would ever want (clean, install, dist, etc) in full compliance
|
|
||||||
with the GNU coding standards. It also simplifies Makefile creation
|
Why use this? Because it automatically generates every makefile
|
||||||
in a number of ways that cannot be described here. Read the docs for
|
target you would ever want (@option{clean}, @option{install},
|
||||||
more info.
|
@option{dist}, etc) in full compliance with the GNU coding standards.
|
||||||
|
It also simplifies Makefile creation in a number of ways that cannot
|
||||||
|
be described here. Read the docs for more info.
|
||||||
|
|
||||||
@item autoconf
|
@item autoconf
|
||||||
Automatically configures a package for the platform on which it is
|
Automatically configures a package for the platform on which it is
|
||||||
|
@ -414,12 +436,29 @@ is revised, you need revise only that one document.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
For any build environment involving native libraries, recent
|
||||||
|
versions of @command{autoconf}, @command{automake}, and @command{libtool}
|
||||||
|
are required if changes are made that require rebuilding @file{configure},
|
||||||
|
@file{Makefile.in}, @file{aclocal.m4}, or @file{config.h.in}.
|
||||||
|
|
||||||
|
When working from CVS you can run those tools by executing
|
||||||
|
@command{autogen.sh} in the source directory.
|
||||||
|
|
||||||
|
For building the Java bytecode (.class files), you can select
|
||||||
|
which compiler should be employed using @option{--with-javac} or
|
||||||
|
@option{--with-ecj} as argument to @command{configure};
|
||||||
|
the present default is @command{ecj}.
|
||||||
|
|
||||||
|
Instead of @command{ecj}, you can also use @command{javac}, which is
|
||||||
|
available at
|
||||||
|
@uref{https://openjdk.dev.java.net/compiler, openjdk.dev.java.net/compiler}.
|
||||||
|
|
||||||
For compiling the native AWT libraries you need to have the following
|
For compiling the native AWT libraries you need to have the following
|
||||||
libraries installed:
|
libraries installed (unless @option{--disable-gtk-peer} is used as an argument
|
||||||
|
to @command{configure}):
|
||||||
|
|
||||||
@table @b
|
@table @b
|
||||||
@item GTK+ 2.2.x
|
@item GTK+ 2.8.x
|
||||||
@uref{http://www.gtk.org/,GTK+} is a multi-platform toolkit for
|
@uref{http://www.gtk.org/,GTK+} is a multi-platform toolkit for
|
||||||
creating graphical user interfaces. It is used as the basis of the
|
creating graphical user interfaces. It is used as the basis of the
|
||||||
GNU desktop project GNOME.
|
GNU desktop project GNOME.
|
||||||
|
@ -427,8 +466,125 @@ GNU desktop project GNOME.
|
||||||
@item gdk-pixbuf
|
@item gdk-pixbuf
|
||||||
@uref{http://www.gnome.org/start/,gdk-pixbuf} is a GNOME library for
|
@uref{http://www.gnome.org/start/,gdk-pixbuf} is a GNOME library for
|
||||||
representing images.
|
representing images.
|
||||||
|
|
||||||
|
@item XTest
|
||||||
|
@uref{http://www.x.org,www.x.org} hosts the XTest Extension (libXtst).
|
||||||
|
It is necessary for GdkRobot support in java.awt.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
There is a bug in earlier versions of at-spi, atk, and gail, which are
|
||||||
|
used for GNOME accessibility. Prior to version 1.18.0 of these packages,
|
||||||
|
gtk graphical applications should be run without accessibility (clear the
|
||||||
|
GTK_MODULES environment variable).
|
||||||
|
|
||||||
|
For building the Qt AWT peer JNI native libraries you have to
|
||||||
|
specify @option{--enable-qt-peer} and need the following library:
|
||||||
|
|
||||||
|
@table @b
|
||||||
|
@item Qt
|
||||||
|
@uref{http://www.trolltech.com/products/qt,Qt} version 4.0.1 or higher.
|
||||||
|
The Qt library is a cros-platform graphics toolkit.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
Please note that at the moment most operating systems do not
|
||||||
|
ship Qt version 4.0.1 by default. We recommend using GNU Classpath' Qt
|
||||||
|
support only for its developers and bug reporters. See
|
||||||
|
@uref{http://developer.classpath.org/mediation/ClasspathShowcase, the wiki}
|
||||||
|
for details on how to get it to work.
|
||||||
|
|
||||||
|
For building the X AWT peers you have to specify where to find the
|
||||||
|
Escher library on your system using the @option{--with-escher=ABS.PATH} option.
|
||||||
|
You will need the following library:
|
||||||
|
|
||||||
|
@table @b
|
||||||
|
@item Escher
|
||||||
|
@uref{http://escher.sourceforge.net,Escher} version 0.2.3 or higher.
|
||||||
|
The Escher library is an implementation of X protocol and associated
|
||||||
|
libraries written in the Java programming language.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
For building the ALSA midi provider code you will need
|
||||||
|
the following library:
|
||||||
|
|
||||||
|
|
||||||
|
@table @b
|
||||||
|
@item ALSA
|
||||||
|
@uref{http://www.alsa-project.org,ALSA} libraries.
|
||||||
|
|
||||||
|
The ALSA project provides sound device drivers and associated
|
||||||
|
libraries for the Linux kernel.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
Building the ALSA midi provider code can be disabled by passing
|
||||||
|
@option{--disable-alsa} to @command{configure}.
|
||||||
|
|
||||||
|
For building the DSSI midi synthesizer provider code you will
|
||||||
|
need the following libraries:
|
||||||
|
|
||||||
|
@table @b
|
||||||
|
@item DSSI
|
||||||
|
@uref{http://dssi.sourceforge.net,DSSI} library for audio
|
||||||
|
processing plugins.
|
||||||
|
|
||||||
|
@item liblo
|
||||||
|
@uref{http://plugin.org.uk/liblo/,liblo}, the Lightweight OSC
|
||||||
|
implementation.
|
||||||
|
|
||||||
|
@item LADSPA
|
||||||
|
@uref{http://www.ladspa.org,LADSPA}, the Linux Audio Developer's
|
||||||
|
Simple Plugin API.
|
||||||
|
|
||||||
|
@item JACK
|
||||||
|
@uref{http://jackit.sourceforge.net,JACK}, a low latency audio
|
||||||
|
server.
|
||||||
|
|
||||||
|
@item libsndfile
|
||||||
|
@uref{http://www.mega-nerd.com/libsndfile/,libsndfile}, an audio
|
||||||
|
file I/O library.
|
||||||
|
|
||||||
|
@item fluidsynth
|
||||||
|
@uref{http://www.fluidsynth.org/,fluidsynth}, a real-time SoundFont
|
||||||
|
2 based soft-synth.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
The GConf-based backend for java.util.prefs needs the following
|
||||||
|
library headers:
|
||||||
|
|
||||||
|
@table @b
|
||||||
|
@item GConf
|
||||||
|
@uref{http://www.gnome.org/projects/gconf/,GConf} version 2.11.2
|
||||||
|
(or higher). GConf is used for storing dektop and application
|
||||||
|
configuration settings in GNOME.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
For building @command{gcjwebplugin} you'll need the Mozilla plugin
|
||||||
|
support headers and libraries, which are available at
|
||||||
|
@uref{http://www.mozilla.org,www.mozilla.org}.
|
||||||
|
|
||||||
|
For enabling the com.sun.tools.javac support in tools.zip you
|
||||||
|
will a need jar file containing the Eclipse Java Compiler.
|
||||||
|
Otherwise com.sun.tools.javac will not be included in @file{tools.zip}.
|
||||||
|
|
||||||
|
For building the xmlj JAXP implementation (disabled by default,
|
||||||
|
use @command{configure --enable-xmlj}) you need the following libraries:
|
||||||
|
|
||||||
|
@table @b
|
||||||
|
@item libxml2
|
||||||
|
@uref{http://www.xmlsoft.org/,libxml2} version 2.6.8 or higher.
|
||||||
|
|
||||||
|
The libxml2 library is the XML C library for the Gnome desktop.
|
||||||
|
|
||||||
|
@item libxslt
|
||||||
|
@uref{http://www.xmlsoft.org/XSLT/,libxslt} version 1.1.11 or higher.
|
||||||
|
|
||||||
|
The libxslt library if the XSLT C library for the Gnome desktop.
|
||||||
|
@end table
|
||||||
|
|
||||||
GNU Classpath comes with a couple of libraries included in the source
|
GNU Classpath comes with a couple of libraries included in the source
|
||||||
that are not part of GNU Classpath proper, but that have been included
|
that are not part of GNU Classpath proper, but that have been included
|
||||||
|
@ -457,8 +613,167 @@ java.lang.StrictMath.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
@node Installation, Building and running with the X AWT peers, Needed Tools and Libraries, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Installation instructions
|
||||||
|
|
||||||
@node Programming Standards, Hacking Code, Needed Tools and Libraries, Top
|
This package was designed to use the GNU standard for configuration
|
||||||
|
and makefiles. To build and install do the following:
|
||||||
|
|
||||||
|
@enumerate
|
||||||
|
@item Configuration
|
||||||
|
|
||||||
|
Run the @command{configure} script to configure the package. There are
|
||||||
|
various options you might want to pass to @command{configure} to control how the
|
||||||
|
package is built. Consider the following options, @command{configure --help}
|
||||||
|
gives a complete list.
|
||||||
|
|
||||||
|
@table @option
|
||||||
|
@item --enable-java
|
||||||
|
|
||||||
|
compile Java source (default=@option{yes}).
|
||||||
|
|
||||||
|
@item --enable-jni
|
||||||
|
|
||||||
|
compile JNI source (default=@option{yes}).
|
||||||
|
|
||||||
|
@item --enable-gtk-peer
|
||||||
|
|
||||||
|
compile GTK native peers (default=@option{yes}).
|
||||||
|
|
||||||
|
@item --enable-qt-peer
|
||||||
|
|
||||||
|
compile Qt4 native peers (default=@option{no}).
|
||||||
|
|
||||||
|
@item --enable-default-toolkit
|
||||||
|
|
||||||
|
fully qualified class name of default AWT toolkit (default=@option{no}).
|
||||||
|
|
||||||
|
@item --enable-xmlj
|
||||||
|
|
||||||
|
compile native libxml/xslt library (default=@option{no}).
|
||||||
|
|
||||||
|
@item --enable-load-library
|
||||||
|
|
||||||
|
enable to use JNI native methods (default=@option{yes}).
|
||||||
|
|
||||||
|
@item --enable-local-sockets
|
||||||
|
|
||||||
|
enable build of local Unix sockets.
|
||||||
|
|
||||||
|
@item --with-glibj
|
||||||
|
define what to install @option{(zip|flat|both|none)} (default=@option{zip}).
|
||||||
|
|
||||||
|
@item --with-escher=/path/to/escher
|
||||||
|
|
||||||
|
enable build of the X/Escher peers, with
|
||||||
|
the escher library at @file{/path/to/escher}, either
|
||||||
|
in the form of a JAR file, or a directory
|
||||||
|
containing the .class files of Escher.
|
||||||
|
|
||||||
|
@item --enable-Werror
|
||||||
|
|
||||||
|
whether to compile C code with @option{-Werror} which turns
|
||||||
|
any compiler warning into a compilation failure
|
||||||
|
(default=@option{no}).
|
||||||
|
|
||||||
|
@item --with-gjdoc
|
||||||
|
|
||||||
|
generate documentation using @command{gjdoc} (default=@option{no}).
|
||||||
|
|
||||||
|
@item --with-jay
|
||||||
|
|
||||||
|
Regenerate the parsers with @command{jay}, must be given the
|
||||||
|
path to the @command{jay} executable
|
||||||
|
|
||||||
|
@item --with-glibj-zip=ABS.PATH
|
||||||
|
|
||||||
|
use prebuilt glibj.zip class library
|
||||||
|
|
||||||
|
@item --with-ecj-jar=ABS.PATH
|
||||||
|
|
||||||
|
specify jar file containing the Eclipse Java Compiler
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
For more flags run @command{configure --help}.
|
||||||
|
|
||||||
|
@item Building
|
||||||
|
|
||||||
|
Type @command{gmake} to build the package. There is no longer a
|
||||||
|
dependency problem and we aim to keep it that way.
|
||||||
|
|
||||||
|
@item Installation
|
||||||
|
|
||||||
|
Type @command{gmake install} to install everything. This may require
|
||||||
|
being the superuser. The default install path is /usr/local/classpath
|
||||||
|
you may change it by giving @command{configure} the
|
||||||
|
@option{--prefix=<path>} option.
|
||||||
|
|
||||||
|
@end enumerate
|
||||||
|
|
||||||
|
Report bugs to @email{classpath@@gnu.org} or much better to the
|
||||||
|
GNU Classpath bug tracker at
|
||||||
|
@uref{http://savannah.gnu.org/support/?func=addsupport&group=classpath,Savannah}.
|
||||||
|
|
||||||
|
Happy Hacking!
|
||||||
|
|
||||||
|
Once installed, GNU Classpath is ready to be used by any VM that supports
|
||||||
|
using the official version of GNU Classpath. Simply ensure that
|
||||||
|
@file{/usr/local/classpath/share/classpath} is in your @env{CLASSPATH} environment
|
||||||
|
variable. You'll also have to set your @env{LD_LIBRARY_PATH}
|
||||||
|
variable (or similar system configuration) to include the Classpath
|
||||||
|
native libraries in @file{/usr/local/classpath/lib/classpath}.
|
||||||
|
|
||||||
|
*NOTE* All example paths assume the default prefix is used with @command{configure}.
|
||||||
|
If you don't know what this means then the examples are correct.
|
||||||
|
|
||||||
|
@example
|
||||||
|
LD_LIBRARY_PATH=/usr/local/classpath/lib/classpath
|
||||||
|
CLASSPATH=/usr/local/classpath/share/classpath/glibj.zip:.
|
||||||
|
export LD_LIBRARY_PATH CLASSPATH
|
||||||
|
@end example
|
||||||
|
|
||||||
|
More information about the VMs that use GNU Classpath can be found in the
|
||||||
|
@file{README} file.
|
||||||
|
|
||||||
|
@node Building and running with the X AWT peers, Misc. Notes, Installation, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Building and running with the X AWT peers
|
||||||
|
|
||||||
|
In order build the X peers you need the Escher library version 0.2.3
|
||||||
|
from @uref{http://escher.sourceforge.net,escher.sourceforge.net}.
|
||||||
|
Unpack (and optionally build) the
|
||||||
|
Escher library following the instructions in the downloaded
|
||||||
|
package. Enable the build of the X peers by passing
|
||||||
|
@option{--with-escher=/path/to/escher} to @command{configure} where @file{/path/to/escher}
|
||||||
|
either points to a directory structure or JAR file containing the
|
||||||
|
Escher classes. For Unix systems it is preferable to also build local
|
||||||
|
socket support by passing @option{--enable-local-sockets}, which accelerates
|
||||||
|
the network communication to the X server significantly.
|
||||||
|
|
||||||
|
In this release you have to enable the X peers at runtime by
|
||||||
|
setting the system property awt.toolkit=gnu.java.awt.peer.x.XToolkit
|
||||||
|
by passing @option{-Dawt.toolkit=gnu.java.awt.peer.x.XToolkit} to the @command{java}
|
||||||
|
command when running an application.
|
||||||
|
|
||||||
|
@node Misc. Notes, Programming Standards, Building and running with the X AWT peers, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Misc. Notes
|
||||||
|
|
||||||
|
Compilation is accomplished using a compiler's @@file syntax. For our
|
||||||
|
part, we avoid placing make style dependencies as rules upon the
|
||||||
|
compilation of a particular class file and leave this up to the Java
|
||||||
|
compiler instead.
|
||||||
|
|
||||||
|
The @option{--enable-maintainer-mode} option to @command{configure} currently does very
|
||||||
|
little and shouldn't be used by ordinary developers or users anyway.
|
||||||
|
|
||||||
|
On Windows machines, the native libraries do not currently build, but
|
||||||
|
the Java bytecode library will. Gcj trunk is beginning to work under
|
||||||
|
Cygwin.
|
||||||
|
|
||||||
|
@node Programming Standards, Hacking Code, Misc. Notes, Top
|
||||||
@comment node-name, next, previous, up
|
@comment node-name, next, previous, up
|
||||||
@chapter Programming Standards
|
@chapter Programming Standards
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
\input texinfo @c -*-texinfo-*-
|
\input texinfo @c -*-texinfo-*-
|
||||||
|
|
||||||
@c %**start of header
|
@c %**start of header
|
||||||
@setfilename vmintegration.info
|
@setfilename cp-vmintegration.info
|
||||||
@settitle GNU Classpath VM Integration Guide
|
@settitle GNU Classpath VM Integration Guide
|
||||||
@c %**end of header
|
@c %**end of header
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ This file contains important information you will need to know if you
|
||||||
are going to write an interface between GNU Classpath and a Virtual
|
are going to write an interface between GNU Classpath and a Virtual
|
||||||
Machine.
|
Machine.
|
||||||
|
|
||||||
Copyright (C) 1998-2002, 2004, 2005, 2006 Free Software Foundation, Inc.
|
Copyright (C) 1998-2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
@ifnotplaintext
|
@ifnotplaintext
|
||||||
@dircategory GNU Libraries
|
@dircategory GNU Libraries
|
||||||
|
@ -1376,6 +1376,12 @@ time used by all threads.
|
||||||
@item @code{gnu.java.lang.management.ThreadContentionSupport} --
|
@item @code{gnu.java.lang.management.ThreadContentionSupport} --
|
||||||
This property should be present if the VM supports thread contention
|
This property should be present if the VM supports thread contention
|
||||||
monitoring.
|
monitoring.
|
||||||
|
@item @code{gnu.java.lang.management.MonitorUsageMonitoringSupport} --
|
||||||
|
This property should be present if the VM supports the monitoring
|
||||||
|
of object monitor usage.
|
||||||
|
@item @code{gnu.java.lang.management.OwnableSynchronizerUsageMonitoringSupport} --
|
||||||
|
This property should be present if the VM supports the monitoring
|
||||||
|
of ownable synchronizer usage.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
In addition, the property
|
In addition, the property
|
||||||
|
@ -1386,11 +1392,18 @@ is enabled at startup.
|
||||||
The methods are as follows:
|
The methods are as follows:
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
|
@item @code{(findDeadlockedThreads())} -- This should return
|
||||||
|
an array of thread identifiers which match threads involved in
|
||||||
|
deadlock cycles (where each thread is waiting to obtain a lock
|
||||||
|
held by one of the others) on object monitors or ownable
|
||||||
|
synchronizers. This is specified as a native method in the
|
||||||
|
reference implementation, and is optional. It is only called
|
||||||
|
when the VM supports ownable synchronizer monitoring.
|
||||||
@item @code{(findMonitorDeadlockedThreads())} -- This should return
|
@item @code{(findMonitorDeadlockedThreads())} -- This should return
|
||||||
an array of thread identifiers which match threads involved in
|
an array of thread identifiers which match threads involved in
|
||||||
deadlock cycles (where each thread is waiting to obtain a lock
|
deadlock cycles (where each thread is waiting to obtain a lock
|
||||||
held by one of the others). This is specified as a native method
|
held by one of the others) on object monitors. This is specified
|
||||||
in the reference implementation.
|
as a native method in the reference implementation.
|
||||||
@item @code{(getAllThreads())} -- This should return an array of
|
@item @code{(getAllThreads())} -- This should return an array of
|
||||||
all live threads and set the @code{filled} variable to the number
|
all live threads and set the @code{filled} variable to the number
|
||||||
found. A default implementation is provided.
|
found. A default implementation is provided.
|
||||||
|
@ -1408,6 +1421,16 @@ supporting time monitoring.
|
||||||
@item @code{(getDaemonThreadCount())} -- This should return the number
|
@item @code{(getDaemonThreadCount())} -- This should return the number
|
||||||
of live daemon threads. A default implementation is provided, based
|
of live daemon threads. A default implementation is provided, based
|
||||||
on @code{getAllThreads()}.
|
on @code{getAllThreads()}.
|
||||||
|
@item @code{(getLockInfo(ThreadInfo))} -- This is an optional native
|
||||||
|
method called when the VM supports ownable synchronizer usage monitoring
|
||||||
|
and the user has requested information for a particular thread. The
|
||||||
|
supplied @code{ThreadInfo} object should be filled out with an
|
||||||
|
array of @code{LockInfo} objects, providing details on each lock.
|
||||||
|
@item @code{(getMonitorInfo(ThreadInfo))} -- This is an optional native
|
||||||
|
method called when the VM supports object monitor usage monitoring
|
||||||
|
and the user has requested information for a particular thread. The
|
||||||
|
supplied @code{ThreadInfo} object should be filled out with an
|
||||||
|
array of @code{MonitorInfo} objects, providing details on each lock.
|
||||||
@item @code{(getPeakThreadCount())} -- The VM should maintain a record
|
@item @code{(getPeakThreadCount())} -- The VM should maintain a record
|
||||||
of the peak number of live threads, and return it when this method is
|
of the peak number of live threads, and return it when this method is
|
||||||
called. This is specified as a native method in the reference
|
called. This is specified as a native method in the reference
|
||||||
|
|
478
libjava/classpath/doc/texi2pod.pl
Executable file
478
libjava/classpath/doc/texi2pod.pl
Executable file
|
@ -0,0 +1,478 @@
|
||||||
|
#! /usr/bin/perl -w
|
||||||
|
|
||||||
|
# Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This file is part of GCC.
|
||||||
|
|
||||||
|
# GCC is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# GCC 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 for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with GCC; see the file COPYING. If not, write to
|
||||||
|
# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
||||||
|
# Boston MA 02110-1301, USA.
|
||||||
|
|
||||||
|
# This does trivial (and I mean _trivial_) conversion of Texinfo
|
||||||
|
# markup to Perl POD format. It's intended to be used to extract
|
||||||
|
# something suitable for a manpage from a Texinfo document.
|
||||||
|
|
||||||
|
$output = 0;
|
||||||
|
$skipping = 0;
|
||||||
|
%sects = ();
|
||||||
|
$section = "";
|
||||||
|
@icstack = ();
|
||||||
|
@endwstack = ();
|
||||||
|
@skstack = ();
|
||||||
|
@instack = ();
|
||||||
|
$shift = "";
|
||||||
|
%defs = ();
|
||||||
|
$fnno = 1;
|
||||||
|
$inf = "";
|
||||||
|
$ibase = "";
|
||||||
|
@ipath = ();
|
||||||
|
|
||||||
|
while ($_ = shift) {
|
||||||
|
if (/^-D(.*)$/) {
|
||||||
|
if ($1 ne "") {
|
||||||
|
$flag = $1;
|
||||||
|
} else {
|
||||||
|
$flag = shift;
|
||||||
|
}
|
||||||
|
$value = "";
|
||||||
|
($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/);
|
||||||
|
die "no flag specified for -D\n"
|
||||||
|
unless $flag ne "";
|
||||||
|
die "flags may only contain letters, digits, hyphens, dashes and underscores\n"
|
||||||
|
unless $flag =~ /^[a-zA-Z0-9_-]+$/;
|
||||||
|
$defs{$flag} = $value;
|
||||||
|
} elsif (/^-I(.*)$/) {
|
||||||
|
if ($1 ne "") {
|
||||||
|
$flag = $1;
|
||||||
|
} else {
|
||||||
|
$flag = shift;
|
||||||
|
}
|
||||||
|
push (@ipath, $flag);
|
||||||
|
} elsif (/^-/) {
|
||||||
|
usage();
|
||||||
|
} else {
|
||||||
|
$in = $_, next unless defined $in;
|
||||||
|
$out = $_, next unless defined $out;
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defined $in) {
|
||||||
|
$inf = gensym();
|
||||||
|
open($inf, "<$in") or die "opening \"$in\": $!\n";
|
||||||
|
$ibase = $1 if $in =~ m|^(.+)/[^/]+$|;
|
||||||
|
} else {
|
||||||
|
$inf = \*STDIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defined $out) {
|
||||||
|
open(STDOUT, ">$out") or die "opening \"$out\": $!\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
while(defined $inf) {
|
||||||
|
while(<$inf>) {
|
||||||
|
# Certain commands are discarded without further processing.
|
||||||
|
/^\@(?:
|
||||||
|
[a-z]+index # @*index: useful only in complete manual
|
||||||
|
|need # @need: useful only in printed manual
|
||||||
|
|(?:end\s+)?group # @group .. @end group: ditto
|
||||||
|
|page # @page: ditto
|
||||||
|
|node # @node: useful only in .info file
|
||||||
|
|(?:end\s+)?ifnottex # @ifnottex .. @end ifnottex: use contents
|
||||||
|
)\b/x and next;
|
||||||
|
|
||||||
|
chomp;
|
||||||
|
|
||||||
|
# Look for filename and title markers.
|
||||||
|
/^\@setfilename\s+([^.]+)/ and $fn = $1, next;
|
||||||
|
/^\@settitle\s+([^.]+)/ and $tl = postprocess($1), next;
|
||||||
|
|
||||||
|
# Identify a man title but keep only the one we are interested in.
|
||||||
|
/^\@c\s+man\s+title\s+([A-Za-z0-9-]+)\s+(.+)/ and do {
|
||||||
|
if (exists $defs{$1}) {
|
||||||
|
$fn = $1;
|
||||||
|
$tl = postprocess($2);
|
||||||
|
}
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Look for blocks surrounded by @c man begin SECTION ... @c man end.
|
||||||
|
# This really oughta be @ifman ... @end ifman and the like, but such
|
||||||
|
# would require rev'ing all other Texinfo translators.
|
||||||
|
/^\@c\s+man\s+begin\s+([A-Z]+)\s+([A-Za-z0-9-]+)/ and do {
|
||||||
|
$output = 1 if exists $defs{$2};
|
||||||
|
$sect = $1;
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
/^\@c\s+man\s+begin\s+([A-Z]+)/ and $sect = $1, $output = 1, next;
|
||||||
|
/^\@c\s+man\s+end/ and do {
|
||||||
|
$sects{$sect} = "" unless exists $sects{$sect};
|
||||||
|
$sects{$sect} .= postprocess($section);
|
||||||
|
$section = "";
|
||||||
|
$output = 0;
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
|
||||||
|
# handle variables
|
||||||
|
/^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and do {
|
||||||
|
$defs{$1} = $2;
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
/^\@clear\s+([a-zA-Z0-9_-]+)/ and do {
|
||||||
|
delete $defs{$1};
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
|
||||||
|
next unless $output;
|
||||||
|
|
||||||
|
# Discard comments. (Can't do it above, because then we'd never see
|
||||||
|
# @c man lines.)
|
||||||
|
/^\@c\b/ and next;
|
||||||
|
|
||||||
|
# End-block handler goes up here because it needs to operate even
|
||||||
|
# if we are skipping.
|
||||||
|
/^\@end\s+([a-z]+)/ and do {
|
||||||
|
# Ignore @end foo, where foo is not an operation which may
|
||||||
|
# cause us to skip, if we are presently skipping.
|
||||||
|
my $ended = $1;
|
||||||
|
next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu|iftex|copying)$/;
|
||||||
|
|
||||||
|
die "\@end $ended without \@$ended at line $.\n" unless defined $endw;
|
||||||
|
die "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw;
|
||||||
|
|
||||||
|
$endw = pop @endwstack;
|
||||||
|
|
||||||
|
if ($ended =~ /^(?:ifset|ifclear|ignore|menu|iftex)$/) {
|
||||||
|
$skipping = pop @skstack;
|
||||||
|
next;
|
||||||
|
} elsif ($ended =~ /^(?:example|smallexample|display)$/) {
|
||||||
|
$shift = "";
|
||||||
|
$_ = ""; # need a paragraph break
|
||||||
|
} elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) {
|
||||||
|
$_ = "\n=back\n";
|
||||||
|
$ic = pop @icstack;
|
||||||
|
} elsif ($ended eq "multitable") {
|
||||||
|
$_ = "\n=back\n";
|
||||||
|
} else {
|
||||||
|
die "unknown command \@end $ended at line $.\n";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# We must handle commands which can cause skipping even while we
|
||||||
|
# are skipping, otherwise we will not process nested conditionals
|
||||||
|
# correctly.
|
||||||
|
/^\@ifset\s+([a-zA-Z0-9_-]+)/ and do {
|
||||||
|
push @endwstack, $endw;
|
||||||
|
push @skstack, $skipping;
|
||||||
|
$endw = "ifset";
|
||||||
|
$skipping = 1 unless exists $defs{$1};
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@ifclear\s+([a-zA-Z0-9_-]+)/ and do {
|
||||||
|
push @endwstack, $endw;
|
||||||
|
push @skstack, $skipping;
|
||||||
|
$endw = "ifclear";
|
||||||
|
$skipping = 1 if exists $defs{$1};
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@(ignore|menu|iftex|copying)\b/ and do {
|
||||||
|
push @endwstack, $endw;
|
||||||
|
push @skstack, $skipping;
|
||||||
|
$endw = $1;
|
||||||
|
$skipping = 1;
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
|
||||||
|
next if $skipping;
|
||||||
|
|
||||||
|
# Character entities. First the ones that can be replaced by raw text
|
||||||
|
# or discarded outright:
|
||||||
|
s/\@copyright\{\}/(c)/g;
|
||||||
|
s/\@dots\{\}/.../g;
|
||||||
|
s/\@enddots\{\}/..../g;
|
||||||
|
s/\@([.!? ])/$1/g;
|
||||||
|
s/\@[:-]//g;
|
||||||
|
s/\@bullet(?:\{\})?/*/g;
|
||||||
|
s/\@TeX\{\}/TeX/g;
|
||||||
|
s/\@pounds\{\}/\#/g;
|
||||||
|
s/\@minus(?:\{\})?/-/g;
|
||||||
|
s/\\,/,/g;
|
||||||
|
|
||||||
|
# Now the ones that have to be replaced by special escapes
|
||||||
|
# (which will be turned back into text by unmunge())
|
||||||
|
s/&/&/g;
|
||||||
|
s/\@\{/{/g;
|
||||||
|
s/\@\}/}/g;
|
||||||
|
s/\@\@/&at;/g;
|
||||||
|
|
||||||
|
# Inside a verbatim block, handle @var specially.
|
||||||
|
if ($shift ne "") {
|
||||||
|
s/\@var\{([^\}]*)\}/<$1>/g;
|
||||||
|
}
|
||||||
|
|
||||||
|
# POD doesn't interpret E<> inside a verbatim block.
|
||||||
|
if ($shift eq "") {
|
||||||
|
s/</</g;
|
||||||
|
s/>/>/g;
|
||||||
|
} else {
|
||||||
|
s/</</g;
|
||||||
|
s/>/>/g;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Single line command handlers.
|
||||||
|
|
||||||
|
/^\@include\s+(.+)$/ and do {
|
||||||
|
push @instack, $inf;
|
||||||
|
$inf = gensym();
|
||||||
|
$file = postprocess($1);
|
||||||
|
|
||||||
|
# Try cwd and $ibase, then explicit -I paths.
|
||||||
|
$done = 0;
|
||||||
|
foreach $path ("", $ibase, @ipath) {
|
||||||
|
$mypath = $file;
|
||||||
|
$mypath = $path . "/" . $mypath if ($path ne "");
|
||||||
|
open($inf, "<" . $mypath) and ($done = 1, last);
|
||||||
|
}
|
||||||
|
die "cannot find $file" if !$done;
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@(?:section|unnumbered|unnumberedsec|center)\s+(.+)$/
|
||||||
|
and $_ = "\n=head2 $1\n";
|
||||||
|
/^\@subsection\s+(.+)$/
|
||||||
|
and $_ = "\n=head3 $1\n";
|
||||||
|
/^\@subsubsection\s+(.+)$/
|
||||||
|
and $_ = "\n=head4 $1\n";
|
||||||
|
|
||||||
|
# Block command handlers:
|
||||||
|
/^\@itemize(?:\s+(\@[a-z]+|\*|-))?/ and do {
|
||||||
|
push @endwstack, $endw;
|
||||||
|
push @icstack, $ic;
|
||||||
|
if (defined $1) {
|
||||||
|
$ic = $1;
|
||||||
|
} else {
|
||||||
|
$ic = '@bullet';
|
||||||
|
}
|
||||||
|
$_ = "\n=over 4\n";
|
||||||
|
$endw = "itemize";
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@enumerate(?:\s+([a-zA-Z0-9]+))?/ and do {
|
||||||
|
push @endwstack, $endw;
|
||||||
|
push @icstack, $ic;
|
||||||
|
if (defined $1) {
|
||||||
|
$ic = $1 . ".";
|
||||||
|
} else {
|
||||||
|
$ic = "1.";
|
||||||
|
}
|
||||||
|
$_ = "\n=over 4\n";
|
||||||
|
$endw = "enumerate";
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@multitable\s.*/ and do {
|
||||||
|
push @endwstack, $endw;
|
||||||
|
$endw = "multitable";
|
||||||
|
$_ = "\n=over 4\n";
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@([fv]?table)\s+(\@[a-z]+)/ and do {
|
||||||
|
push @endwstack, $endw;
|
||||||
|
push @icstack, $ic;
|
||||||
|
$endw = $1;
|
||||||
|
$ic = $2;
|
||||||
|
$ic =~ s/\@(?:samp|strong|key|gcctabopt|env)/B/;
|
||||||
|
$ic =~ s/\@(?:code|kbd)/C/;
|
||||||
|
$ic =~ s/\@(?:dfn|var|emph|cite|i)/I/;
|
||||||
|
$ic =~ s/\@(?:file)/F/;
|
||||||
|
$_ = "\n=over 4\n";
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@((?:small)?example|display)/ and do {
|
||||||
|
push @endwstack, $endw;
|
||||||
|
$endw = $1;
|
||||||
|
$shift = "\t";
|
||||||
|
$_ = ""; # need a paragraph break
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@item\s+(.*\S)\s*$/ and $endw eq "multitable" and do {
|
||||||
|
@columns = ();
|
||||||
|
for $column (split (/\s*\@tab\s*/, $1)) {
|
||||||
|
# @strong{...} is used a @headitem work-alike
|
||||||
|
$column =~ s/^\@strong{(.*)}$/$1/;
|
||||||
|
push @columns, $column;
|
||||||
|
}
|
||||||
|
$_ = "\n=item ".join (" : ", @columns)."\n";
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@itemx?\s*(.+)?$/ and do {
|
||||||
|
if (defined $1) {
|
||||||
|
# Entity escapes prevent munging by the <> processing below.
|
||||||
|
$_ = "\n=item $ic\<$1\>\n";
|
||||||
|
} else {
|
||||||
|
$_ = "\n=item $ic\n";
|
||||||
|
$ic =~ y/A-Ya-y/B-Zb-z/;
|
||||||
|
$ic =~ s/(\d+)/$1 + 1/eg;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$section .= $shift.$_."\n";
|
||||||
|
}
|
||||||
|
# End of current file.
|
||||||
|
close($inf);
|
||||||
|
$inf = pop @instack;
|
||||||
|
}
|
||||||
|
|
||||||
|
die "No filename or title\n" unless defined $fn && defined $tl;
|
||||||
|
|
||||||
|
$sects{NAME} = "$fn \- $tl\n";
|
||||||
|
$sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES};
|
||||||
|
|
||||||
|
for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS ENVIRONMENT FILES
|
||||||
|
BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) {
|
||||||
|
if(exists $sects{$sect}) {
|
||||||
|
$head = $sect;
|
||||||
|
$head =~ s/SEEALSO/SEE ALSO/;
|
||||||
|
print "=head1 $head\n\n";
|
||||||
|
print scalar unmunge ($sects{$sect});
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub usage
|
||||||
|
{
|
||||||
|
die "usage: $0 [-D toggle...] [infile [outfile]]\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub postprocess
|
||||||
|
{
|
||||||
|
local $_ = $_[0];
|
||||||
|
|
||||||
|
# @value{foo} is replaced by whatever 'foo' is defined as.
|
||||||
|
while (m/(\@value\{([a-zA-Z0-9_-]+)\})/g) {
|
||||||
|
if (! exists $defs{$2}) {
|
||||||
|
print STDERR "Option $2 not defined\n";
|
||||||
|
s/\Q$1\E//;
|
||||||
|
} else {
|
||||||
|
$value = $defs{$2};
|
||||||
|
s/\Q$1\E/$value/;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Formatting commands.
|
||||||
|
# Temporary escape for @r.
|
||||||
|
s/\@r\{([^\}]*)\}/R<$1>/g;
|
||||||
|
s/\@(?:dfn|var|emph|cite|i)\{([^\}]*)\}/I<$1>/g;
|
||||||
|
s/\@(?:code|kbd)\{([^\}]*)\}/C<$1>/g;
|
||||||
|
s/\@(?:gccoptlist|samp|strong|key|option|env|command|b)\{([^\}]*)\}/B<$1>/g;
|
||||||
|
s/\@sc\{([^\}]*)\}/\U$1/g;
|
||||||
|
s/\@file\{([^\}]*)\}/F<$1>/g;
|
||||||
|
s/\@w\{([^\}]*)\}/S<$1>/g;
|
||||||
|
s/\@(?:dmn|math)\{([^\}]*)\}/$1/g;
|
||||||
|
|
||||||
|
# keep references of the form @ref{...}, print them bold
|
||||||
|
s/\@(?:ref)\{([^\}]*)\}/B<$1>/g;
|
||||||
|
|
||||||
|
# Change double single quotes to double quotes.
|
||||||
|
s/''/"/g;
|
||||||
|
s/``/"/g;
|
||||||
|
|
||||||
|
# Cross references are thrown away, as are @noindent and @refill.
|
||||||
|
# (@noindent is impossible in .pod, and @refill is unnecessary.)
|
||||||
|
# @* is also impossible in .pod; we discard it and any newline that
|
||||||
|
# follows it. Similarly, our macro @gol must be discarded.
|
||||||
|
|
||||||
|
s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
|
||||||
|
s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
|
||||||
|
s/;\s+\@pxref\{(?:[^\}]*)\}//g;
|
||||||
|
s/\@noindent\s*//g;
|
||||||
|
s/\@refill//g;
|
||||||
|
s/\@gol//g;
|
||||||
|
s/\@\*\s*\n?//g;
|
||||||
|
|
||||||
|
# Anchors are thrown away
|
||||||
|
s/\@anchor\{(?:[^\}]*)\}//g;
|
||||||
|
|
||||||
|
# @uref can take one, two, or three arguments, with different
|
||||||
|
# semantics each time. @url and @email are just like @uref with
|
||||||
|
# one argument, for our purposes.
|
||||||
|
s/\@(?:uref|url|email)\{([^\},]*)\}/<B<$1>>/g;
|
||||||
|
s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g;
|
||||||
|
s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g;
|
||||||
|
|
||||||
|
# Un-escape <> at this point.
|
||||||
|
s/</</g;
|
||||||
|
s/>/>/g;
|
||||||
|
|
||||||
|
# Now un-nest all B<>, I<>, R<>. Theoretically we could have
|
||||||
|
# indefinitely deep nesting; in practice, one level suffices.
|
||||||
|
1 while s/([BIR])<([^<>]*)([BIR])<([^<>]*)>/$1<$2>$3<$4>$1</g;
|
||||||
|
|
||||||
|
# Replace R<...> with bare ...; eliminate empty markup, B<>;
|
||||||
|
# shift white space at the ends of [BI]<...> expressions outside
|
||||||
|
# the expression.
|
||||||
|
s/R<([^<>]*)>/$1/g;
|
||||||
|
s/[BI]<>//g;
|
||||||
|
s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g;
|
||||||
|
s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g;
|
||||||
|
|
||||||
|
# Extract footnotes. This has to be done after all other
|
||||||
|
# processing because otherwise the regexp will choke on formatting
|
||||||
|
# inside @footnote.
|
||||||
|
while (/\@footnote/g) {
|
||||||
|
s/\@footnote\{([^\}]+)\}/[$fnno]/;
|
||||||
|
add_footnote($1, $fnno);
|
||||||
|
$fnno++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub unmunge
|
||||||
|
{
|
||||||
|
# Replace escaped symbols with their equivalents.
|
||||||
|
local $_ = $_[0];
|
||||||
|
|
||||||
|
s/</E<lt>/g;
|
||||||
|
s/>/E<gt>/g;
|
||||||
|
s/{/\{/g;
|
||||||
|
s/}/\}/g;
|
||||||
|
s/&at;/\@/g;
|
||||||
|
s/&/&/g;
|
||||||
|
return $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub add_footnote
|
||||||
|
{
|
||||||
|
unless (exists $sects{FOOTNOTES}) {
|
||||||
|
$sects{FOOTNOTES} = "\n=over 4\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$sects{FOOTNOTES} .= "=item $fnno.\n\n"; $fnno++;
|
||||||
|
$sects{FOOTNOTES} .= $_[0];
|
||||||
|
$sects{FOOTNOTES} .= "\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
# stolen from Symbol.pm
|
||||||
|
{
|
||||||
|
my $genseq = 0;
|
||||||
|
sub gensym
|
||||||
|
{
|
||||||
|
my $name = "GEN" . $genseq++;
|
||||||
|
my $ref = \*{$name};
|
||||||
|
delete $::{$name};
|
||||||
|
return $ref;
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load diff
|
@ -8,16 +8,16 @@ GLIBJ_CLASSPATH='$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip':'$(top_bui
|
||||||
#if FOUND_JIKES
|
#if FOUND_JIKES
|
||||||
#JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
|
#JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
|
||||||
#else
|
#else
|
||||||
if FOUND_GCJX
|
|
||||||
JCOMPILER = $(GCJX) -encoding UTF-8 -bootclasspath '' -sourcepath '' -classpath $(GLIBJ_CLASSPATH):.
|
|
||||||
else
|
|
||||||
if FOUND_ECJ
|
if FOUND_ECJ
|
||||||
JCOMPILER = $(ECJ) -1.5 -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
|
JCOMPILER = $(ECJ) -1.5 -encoding UTF-8 -warn:-deprecation,serial,typeHiding,unchecked,unused,varargsCast -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
|
||||||
|
else
|
||||||
|
if FOUND_JAVAC
|
||||||
|
JCOMPILER = $(JAVAC) -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
|
||||||
else
|
else
|
||||||
error dunno how to setup the JCOMPILER and compile
|
error dunno how to setup the JCOMPILER and compile
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
endif
|
endif
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# All our example java source files
|
# All our example java source files
|
||||||
|
@ -35,6 +35,7 @@ BUILT_SOURCES = $(EXAMPLE_ZIP)
|
||||||
|
|
||||||
# the png icons we use in some of the examples.
|
# the png icons we use in some of the examples.
|
||||||
EXAMPLE_ICONS = $(srcdir)/gnu/classpath/examples/icons/*.png
|
EXAMPLE_ICONS = $(srcdir)/gnu/classpath/examples/icons/*.png
|
||||||
|
EXAMPLE_ICONS += $(srcdir)/gnu/classpath/examples/icons/*.gif
|
||||||
|
|
||||||
# the html pages we use in the swing demo example.
|
# the html pages we use in the swing demo example.
|
||||||
EXAMPLE_HTML = $(srcdir)/gnu/classpath/examples/swing/*.html
|
EXAMPLE_HTML = $(srcdir)/gnu/classpath/examples/swing/*.html
|
||||||
|
|
|
@ -45,16 +45,21 @@ am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||||
$(top_srcdir)/../../config/lead-dot.m4 \
|
$(top_srcdir)/../../config/lead-dot.m4 \
|
||||||
$(top_srcdir)/../../config/multi.m4 \
|
$(top_srcdir)/../../config/multi.m4 \
|
||||||
$(top_srcdir)/../../config/no-executables.m4 \
|
$(top_srcdir)/../../config/no-executables.m4 \
|
||||||
$(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
|
$(top_srcdir)/../../libtool.m4 \
|
||||||
$(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
|
$(top_srcdir)/../../ltoptions.m4 \
|
||||||
|
$(top_srcdir)/../../ltsugar.m4 \
|
||||||
|
$(top_srcdir)/../../ltversion.m4 \
|
||||||
|
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
||||||
|
$(top_srcdir)/m4/acinclude.m4 \
|
||||||
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
||||||
|
$(top_srcdir)/m4/ax_func_which_gethostbyname_r.m4 \
|
||||||
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
|
||||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||||
CONFIG_CLEAN_FILES = Makefile.jawt Makefile.java2d
|
CONFIG_CLEAN_FILES = Makefile.jawt Makefile.java2d
|
||||||
SOURCES =
|
SOURCES =
|
||||||
|
@ -73,12 +78,15 @@ ACLOCAL = @ACLOCAL@
|
||||||
AMDEP_FALSE = @AMDEP_FALSE@
|
AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AR = @AR@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
AUTOMAKE = @AUTOMAKE@
|
AUTOMAKE = @AUTOMAKE@
|
||||||
AWK = @AWK@
|
AWK = @AWK@
|
||||||
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
||||||
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
||||||
|
CAIRO_CFLAGS = @CAIRO_CFLAGS@
|
||||||
|
CAIRO_LIBS = @CAIRO_LIBS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
|
@ -124,6 +132,7 @@ DATE = @DATE@
|
||||||
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
|
DUMPBIN = @DUMPBIN@
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
|
@ -136,15 +145,16 @@ ERROR_CFLAGS = @ERROR_CFLAGS@
|
||||||
EXAMPLESDIR = @EXAMPLESDIR@
|
EXAMPLESDIR = @EXAMPLESDIR@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
FASTJAR = @FASTJAR@
|
FASTJAR = @FASTJAR@
|
||||||
|
FGREP = @FGREP@
|
||||||
FIND = @FIND@
|
FIND = @FIND@
|
||||||
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
||||||
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
||||||
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
||||||
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
||||||
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
|
|
||||||
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
|
|
||||||
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
||||||
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
||||||
|
FOUND_JAVAC_FALSE = @FOUND_JAVAC_FALSE@
|
||||||
|
FOUND_JAVAC_TRUE = @FOUND_JAVAC_TRUE@
|
||||||
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
||||||
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
||||||
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
||||||
|
@ -152,7 +162,6 @@ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
|
||||||
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
||||||
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||||
GCJ = @GCJ@
|
GCJ = @GCJ@
|
||||||
GCJX = @GCJX@
|
|
||||||
GCONF_CFLAGS = @GCONF_CFLAGS@
|
GCONF_CFLAGS = @GCONF_CFLAGS@
|
||||||
GCONF_LIBS = @GCONF_LIBS@
|
GCONF_LIBS = @GCONF_LIBS@
|
||||||
GDK_CFLAGS = @GDK_CFLAGS@
|
GDK_CFLAGS = @GDK_CFLAGS@
|
||||||
|
@ -162,6 +171,7 @@ GENINSRC_TRUE = @GENINSRC_TRUE@
|
||||||
GJDOC = @GJDOC@
|
GJDOC = @GJDOC@
|
||||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||||
GLIB_LIBS = @GLIB_LIBS@
|
GLIB_LIBS = @GLIB_LIBS@
|
||||||
|
GREP = @GREP@
|
||||||
GTK_CFLAGS = @GTK_CFLAGS@
|
GTK_CFLAGS = @GTK_CFLAGS@
|
||||||
GTK_LIBS = @GTK_LIBS@
|
GTK_LIBS = @GTK_LIBS@
|
||||||
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
||||||
|
@ -173,6 +183,7 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
JAVAC = @JAVAC@
|
||||||
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
||||||
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
||||||
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
||||||
|
@ -182,6 +193,7 @@ JIKES = @JIKES@
|
||||||
JIKESENCODING = @JIKESENCODING@
|
JIKESENCODING = @JIKESENCODING@
|
||||||
JIKESWARNINGS = @JIKESWARNINGS@
|
JIKESWARNINGS = @JIKESWARNINGS@
|
||||||
KJC = @KJC@
|
KJC = @KJC@
|
||||||
|
LD = @LD@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBDEBUG = @LIBDEBUG@
|
LIBDEBUG = @LIBDEBUG@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
|
@ -201,6 +213,7 @@ MKDIR = @MKDIR@
|
||||||
MOC = @MOC@
|
MOC = @MOC@
|
||||||
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
||||||
MOZILLA_LIBS = @MOZILLA_LIBS@
|
MOZILLA_LIBS = @MOZILLA_LIBS@
|
||||||
|
NM = @NM@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
@ -222,6 +235,7 @@ RANLIB = @RANLIB@
|
||||||
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
||||||
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
||||||
REMOVE = @REMOVE@
|
REMOVE = @REMOVE@
|
||||||
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
||||||
|
@ -249,8 +263,10 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||||
X_LIBS = @X_LIBS@
|
X_LIBS = @X_LIBS@
|
||||||
X_PRE_LIBS = @X_PRE_LIBS@
|
X_PRE_LIBS = @X_PRE_LIBS@
|
||||||
ZIP = @ZIP@
|
ZIP = @ZIP@
|
||||||
|
ac_ct_AR = @ac_ct_AR@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_STRIP = @ac_ct_STRIP@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
|
@ -283,6 +299,7 @@ install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
|
lt_ECHO = @lt_ECHO@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
|
@ -301,7 +318,7 @@ target_vendor = @target_vendor@
|
||||||
toolexeclibdir = @toolexeclibdir@
|
toolexeclibdir = @toolexeclibdir@
|
||||||
vm_classes = @vm_classes@
|
vm_classes = @vm_classes@
|
||||||
GLIBJ_CLASSPATH = '$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip':'$(top_builddir)/tools/tools.zip'
|
GLIBJ_CLASSPATH = '$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip':'$(top_builddir)/tools/tools.zip'
|
||||||
@FOUND_ECJ_TRUE@@FOUND_GCJX_FALSE@JCOMPILER = $(ECJ) -1.5 -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
|
@FOUND_ECJ_FALSE@@FOUND_JAVAC_TRUE@JCOMPILER = $(JAVAC) -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
|
||||||
|
|
||||||
# Setup the compiler to use the GNU Classpath library we just build
|
# Setup the compiler to use the GNU Classpath library we just build
|
||||||
#if FOUND_GCJ
|
#if FOUND_GCJ
|
||||||
|
@ -310,7 +327,7 @@ GLIBJ_CLASSPATH = '$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip':'$(top_b
|
||||||
#if FOUND_JIKES
|
#if FOUND_JIKES
|
||||||
#JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
|
#JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
|
||||||
#else
|
#else
|
||||||
@FOUND_GCJX_TRUE@JCOMPILER = $(GCJX) -encoding UTF-8 -bootclasspath '' -sourcepath '' -classpath $(GLIBJ_CLASSPATH):.
|
@FOUND_ECJ_TRUE@JCOMPILER = $(ECJ) -1.5 -encoding UTF-8 -warn:-deprecation,serial,typeHiding,unchecked,unused,varargsCast -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -328,7 +345,8 @@ EXAMPLE_ZIP = examples.zip
|
||||||
BUILT_SOURCES = $(EXAMPLE_ZIP)
|
BUILT_SOURCES = $(EXAMPLE_ZIP)
|
||||||
|
|
||||||
# the png icons we use in some of the examples.
|
# the png icons we use in some of the examples.
|
||||||
EXAMPLE_ICONS = $(srcdir)/gnu/classpath/examples/icons/*.png
|
EXAMPLE_ICONS = $(srcdir)/gnu/classpath/examples/icons/*.png \
|
||||||
|
$(srcdir)/gnu/classpath/examples/icons/*.gif
|
||||||
|
|
||||||
# the html pages we use in the swing demo example.
|
# the html pages we use in the swing demo example.
|
||||||
EXAMPLE_HTML = $(srcdir)/gnu/classpath/examples/swing/*.html
|
EXAMPLE_HTML = $(srcdir)/gnu/classpath/examples/swing/*.html
|
||||||
|
@ -540,7 +558,7 @@ uninstall-am: uninstall-exampleDATA uninstall-info-am uninstall-local
|
||||||
uninstall uninstall-am uninstall-exampleDATA uninstall-info-am \
|
uninstall uninstall-am uninstall-exampleDATA uninstall-info-am \
|
||||||
uninstall-local
|
uninstall-local
|
||||||
|
|
||||||
@FOUND_ECJ_FALSE@@FOUND_GCJX_FALSE@error dunno how to setup the JCOMPILER and compile
|
@FOUND_ECJ_FALSE@@FOUND_JAVAC_FALSE@error dunno how to setup the JCOMPILER and compile
|
||||||
|
|
||||||
# Make sure all sources and icons are also installed so users can use them.
|
# Make sure all sources and icons are also installed so users can use them.
|
||||||
# (Be careful to strip off the srcdir part of the path when installing.)
|
# (Be careful to strip off the srcdir part of the path when installing.)
|
||||||
|
|
|
@ -100,8 +100,8 @@ public class AicasGraphicsBenchmark extends Panel
|
||||||
|
|
||||||
public AicasGraphicsBenchmark()
|
public AicasGraphicsBenchmark()
|
||||||
{
|
{
|
||||||
pngTestImage = loadImage("aicas.png");
|
pngTestImage = loadImage("../icons/aicas.png");
|
||||||
gifTestImage = loadImage("palme.gif");
|
gifTestImage = loadImage("../icons/palme.gif");
|
||||||
|
|
||||||
setLayout(new BorderLayout());
|
setLayout(new BorderLayout());
|
||||||
testLabel = new Label();
|
testLabel = new Label();
|
||||||
|
|
|
@ -0,0 +1,377 @@
|
||||||
|
/* Demo.java -- Shows examples of AWT components
|
||||||
|
Copyright (C) 1998, 1999, 2002, 2004, 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath examples.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA. */
|
||||||
|
|
||||||
|
package gnu.classpath.examples.awt;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.*;
|
||||||
|
import gnu.java.awt.font.opentype.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.font.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.*;
|
||||||
|
import java.nio.channels.*;
|
||||||
|
import java.text.*;
|
||||||
|
|
||||||
|
import javax.swing.BoxLayout;
|
||||||
|
import javax.swing.JCheckBox;
|
||||||
|
import javax.swing.JFileChooser;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JMenu;
|
||||||
|
import javax.swing.JMenuBar;
|
||||||
|
import javax.swing.JMenuItem;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JSpinner;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.border.TitledBorder;
|
||||||
|
import javax.swing.event.ChangeEvent;
|
||||||
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
|
public class HintingDemo extends JFrame {
|
||||||
|
|
||||||
|
FontDelegate font;
|
||||||
|
GNUGlyphVector glyph;
|
||||||
|
GlyphPreview glyphPreview;
|
||||||
|
HintPanel hintPanel;
|
||||||
|
StringViewer stringViewer;
|
||||||
|
Chooser chooser;
|
||||||
|
char character;
|
||||||
|
Options options;
|
||||||
|
boolean antiAlias;
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
class StringViewer extends JPanel
|
||||||
|
implements ActionListener
|
||||||
|
{
|
||||||
|
JTextField input;
|
||||||
|
GNUGlyphVector gv;
|
||||||
|
Viewer viewer;
|
||||||
|
StringViewer()
|
||||||
|
{
|
||||||
|
setLayout(new GridLayout(0, 1));
|
||||||
|
setBorder(new TitledBorder("Use this field to render complete strings"));
|
||||||
|
input = new JTextField();
|
||||||
|
input.addActionListener(this);
|
||||||
|
add(input);
|
||||||
|
viewer = new Viewer();
|
||||||
|
add(viewer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent event)
|
||||||
|
{
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void refresh()
|
||||||
|
{
|
||||||
|
gv = (GNUGlyphVector)
|
||||||
|
font.createGlyphVector(new Font("Dialog", 0, 12),
|
||||||
|
new FontRenderContext(null, false, false),
|
||||||
|
new StringCharacterIterator(input.getText()));
|
||||||
|
viewer.repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
class Viewer extends JPanel
|
||||||
|
{
|
||||||
|
protected void paintComponent(Graphics g)
|
||||||
|
{
|
||||||
|
if (gv != null && g instanceof Graphics2D)
|
||||||
|
{
|
||||||
|
Graphics2D g2d = (Graphics2D) g;
|
||||||
|
if (antiAlias)
|
||||||
|
{
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_ANTIALIAS_OFF);
|
||||||
|
}
|
||||||
|
g2d.clearRect(0, 0, getWidth(), getHeight());
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
Shape outline = gv.getOutline(0, 0,
|
||||||
|
flags | FontDelegate.FLAG_FITTED);
|
||||||
|
g2d.translate(20, Math.floor(outline.getBounds2D().getHeight()) + 2);
|
||||||
|
g2d.fill(outline);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class HintPanel extends JPanel
|
||||||
|
{
|
||||||
|
|
||||||
|
HintPanel()
|
||||||
|
{
|
||||||
|
setBorder(new TitledBorder("Detailed glyph view"));
|
||||||
|
}
|
||||||
|
protected void paintComponent(Graphics g)
|
||||||
|
{
|
||||||
|
if (glyph != null && g instanceof Graphics2D)
|
||||||
|
{
|
||||||
|
Graphics2D g2d = (Graphics2D) g.create();
|
||||||
|
Insets i = getInsets();
|
||||||
|
g2d.clearRect(i.left, i.top, getWidth() - i.left - i.right,
|
||||||
|
getHeight() - i.top - i.bottom);
|
||||||
|
g2d.setColor(Color.GRAY);
|
||||||
|
for (int x = 20; x < getWidth(); x += 20)
|
||||||
|
{
|
||||||
|
g2d.drawLine(x, i.top, x, getHeight() - i.top - i.bottom);
|
||||||
|
}
|
||||||
|
for (int y = 20; y < getHeight(); y += 20)
|
||||||
|
{
|
||||||
|
g2d.drawLine(i.left, y, getWidth() - i.left - i.right, y);
|
||||||
|
}
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_ANTIALIAS_OFF);
|
||||||
|
g2d.translate(40, 300);
|
||||||
|
g2d.scale(20., 20.);
|
||||||
|
g2d.setStroke(new BasicStroke((float) (1/20.)));
|
||||||
|
g2d.setColor(Color.RED);
|
||||||
|
g2d.draw(glyph.getOutline(0, 0, flags & ~FontDelegate.FLAG_FITTED));
|
||||||
|
g2d.setColor(Color.GREEN);
|
||||||
|
g2d.draw(glyph.getOutline(0, 0, flags | FontDelegate.FLAG_FITTED));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class GlyphPreview extends JPanel
|
||||||
|
{
|
||||||
|
protected void paintComponent(Graphics g)
|
||||||
|
{
|
||||||
|
if (glyph != null && g instanceof Graphics2D)
|
||||||
|
{
|
||||||
|
Graphics2D g2d = (Graphics2D) g;
|
||||||
|
if (antiAlias)
|
||||||
|
{
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_ANTIALIAS_OFF);
|
||||||
|
}
|
||||||
|
g2d.clearRect(0, 0, getWidth(), getHeight());
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
Shape outline = glyph.getOutline(0, 0,
|
||||||
|
flags | FontDelegate.FLAG_FITTED);
|
||||||
|
g2d.translate(20, outline.getBounds2D().getHeight() + 2);
|
||||||
|
g2d.fill(outline);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
HintingDemo()
|
||||||
|
{
|
||||||
|
File file = new File("/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/DejaVuSerif.ttf");
|
||||||
|
loadFont(file);
|
||||||
|
setLayout(new BorderLayout());
|
||||||
|
chooser = new Chooser();
|
||||||
|
add(chooser, BorderLayout.NORTH);
|
||||||
|
hintPanel = new HintPanel();
|
||||||
|
character = 'A';
|
||||||
|
add(hintPanel);
|
||||||
|
|
||||||
|
options = new Options();
|
||||||
|
add(options, BorderLayout.EAST);
|
||||||
|
|
||||||
|
stringViewer = new StringViewer();
|
||||||
|
add(stringViewer, BorderLayout.SOUTH);
|
||||||
|
refresh();
|
||||||
|
|
||||||
|
JMenuBar mb = new JMenuBar();
|
||||||
|
setJMenuBar(mb);
|
||||||
|
JMenu fileMenu = new JMenu("File");
|
||||||
|
mb.add(fileMenu);
|
||||||
|
JMenuItem loadFont = new JMenuItem("Load font");
|
||||||
|
loadFont.addActionListener(new ActionListener(){
|
||||||
|
public void actionPerformed(ActionEvent ev)
|
||||||
|
{
|
||||||
|
JFileChooser fc = new JFileChooser()
|
||||||
|
{
|
||||||
|
public boolean accept(File f)
|
||||||
|
{
|
||||||
|
return f.isDirectory() || f.getName().endsWith(".ttf");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
int status = fc.showOpenDialog(HintingDemo.this);
|
||||||
|
if (status == JFileChooser.APPROVE_OPTION)
|
||||||
|
{
|
||||||
|
File file = fc.getSelectedFile();
|
||||||
|
loadFont(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
fileMenu.add(loadFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
void refresh()
|
||||||
|
{
|
||||||
|
if (chooser != null)
|
||||||
|
chooser.refresh();
|
||||||
|
if (glyphPreview != null)
|
||||||
|
glyphPreview.repaint();
|
||||||
|
if (hintPanel != null)
|
||||||
|
hintPanel.repaint();
|
||||||
|
if (stringViewer != null)
|
||||||
|
stringViewer.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
class Options extends JPanel
|
||||||
|
implements ActionListener
|
||||||
|
{
|
||||||
|
JCheckBox antiAliasOpt;
|
||||||
|
JCheckBox hintHorizontalOpt;
|
||||||
|
JCheckBox hintVerticalOpt;
|
||||||
|
JCheckBox hintEdgeOpt;
|
||||||
|
JCheckBox hintStrongOpt;
|
||||||
|
JCheckBox hintWeakOpt;
|
||||||
|
Options()
|
||||||
|
{
|
||||||
|
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||||
|
setBorder(new TitledBorder("Hinting options"));
|
||||||
|
antiAliasOpt = new JCheckBox("Antialias");
|
||||||
|
antiAliasOpt.setSelected(true);
|
||||||
|
antiAliasOpt.addActionListener(this);
|
||||||
|
add(antiAliasOpt);
|
||||||
|
hintHorizontalOpt = new JCheckBox("Hint horizontal");
|
||||||
|
hintHorizontalOpt.setSelected(true);
|
||||||
|
hintHorizontalOpt.addActionListener(this);
|
||||||
|
add(hintHorizontalOpt);
|
||||||
|
hintVerticalOpt = new JCheckBox("Hint vertical");
|
||||||
|
hintVerticalOpt.setSelected(true);
|
||||||
|
hintVerticalOpt.addActionListener(this);
|
||||||
|
add(hintVerticalOpt);
|
||||||
|
hintEdgeOpt = new JCheckBox("Hint edge points");
|
||||||
|
hintEdgeOpt.setSelected(true);
|
||||||
|
hintEdgeOpt.addActionListener(this);
|
||||||
|
add(hintEdgeOpt);
|
||||||
|
hintStrongOpt = new JCheckBox("Hint strong points");
|
||||||
|
hintStrongOpt.setSelected(true);
|
||||||
|
hintStrongOpt.addActionListener(this);
|
||||||
|
add(hintStrongOpt);
|
||||||
|
hintWeakOpt = new JCheckBox("Hint weak points");
|
||||||
|
hintWeakOpt.setSelected(true);
|
||||||
|
hintWeakOpt.addActionListener(this);
|
||||||
|
add(hintWeakOpt);
|
||||||
|
sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
void sync()
|
||||||
|
{
|
||||||
|
antiAlias = antiAliasOpt.isSelected();
|
||||||
|
if (hintHorizontalOpt.isSelected())
|
||||||
|
flags &= ~FontDelegate.FLAG_NO_HINT_HORIZONTAL;
|
||||||
|
else
|
||||||
|
flags |= FontDelegate.FLAG_NO_HINT_HORIZONTAL;
|
||||||
|
if (hintVerticalOpt.isSelected())
|
||||||
|
flags &= ~FontDelegate.FLAG_NO_HINT_VERTICAL;
|
||||||
|
else
|
||||||
|
flags |= FontDelegate.FLAG_NO_HINT_VERTICAL;
|
||||||
|
if (hintEdgeOpt.isSelected())
|
||||||
|
flags &= ~FontDelegate.FLAG_NO_HINT_EDGE_POINTS;
|
||||||
|
else
|
||||||
|
flags |= FontDelegate.FLAG_NO_HINT_EDGE_POINTS;
|
||||||
|
if (hintStrongOpt.isSelected())
|
||||||
|
flags &= ~FontDelegate.FLAG_NO_HINT_STRONG_POINTS;
|
||||||
|
else
|
||||||
|
flags |= FontDelegate.FLAG_NO_HINT_STRONG_POINTS;
|
||||||
|
if (hintWeakOpt.isSelected())
|
||||||
|
flags &= ~FontDelegate.FLAG_NO_HINT_WEAK_POINTS;
|
||||||
|
else
|
||||||
|
flags |= FontDelegate.FLAG_NO_HINT_WEAK_POINTS;
|
||||||
|
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent event)
|
||||||
|
{
|
||||||
|
sync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Chooser extends JPanel
|
||||||
|
{
|
||||||
|
JSpinner spin;
|
||||||
|
Chooser()
|
||||||
|
{
|
||||||
|
setLayout(new GridLayout(1, 0));
|
||||||
|
setBorder(new TitledBorder("Choose and preview the character to render"));
|
||||||
|
spin = new JSpinner();
|
||||||
|
spin.addChangeListener(new ChangeListener()
|
||||||
|
{
|
||||||
|
|
||||||
|
public void stateChanged(ChangeEvent event)
|
||||||
|
{
|
||||||
|
int val = ((Integer) spin.getValue()).intValue();
|
||||||
|
setGlyph((char) val);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
add(spin);
|
||||||
|
glyphPreview = new GlyphPreview();
|
||||||
|
add(glyphPreview);
|
||||||
|
}
|
||||||
|
void refresh()
|
||||||
|
{
|
||||||
|
spin.setValue(new Integer(character));
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadFont(File file)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
RandomAccessFile raf = new RandomAccessFile(file, "r");
|
||||||
|
FileChannel chan = raf.getChannel();
|
||||||
|
ByteBuffer buf = chan.map(FileChannel.MapMode.READ_ONLY, 0, raf.length());
|
||||||
|
FontDelegate[] fonts = OpenTypeFontFactory.createFonts(buf);
|
||||||
|
font = fonts[0];
|
||||||
|
setGlyph(character);
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setGlyph(char ch)
|
||||||
|
{
|
||||||
|
character = ch;
|
||||||
|
glyph = (GNUGlyphVector)
|
||||||
|
font.createGlyphVector(new Font("Dialog", 0, 12),
|
||||||
|
new FontRenderContext(null, false, false),
|
||||||
|
new StringCharacterIterator(new String(new char[]{ch})));
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
HintingDemo f = new HintingDemo();
|
||||||
|
f.setSize(500, 500);
|
||||||
|
f.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 502 B After Width: | Height: | Size: 502 B |
|
@ -174,8 +174,8 @@ public class J2dBenchmark
|
||||||
public String init()
|
public String init()
|
||||||
{
|
{
|
||||||
boolean loadError = false;
|
boolean loadError = false;
|
||||||
pngTestImage = loadImage("aicas.png");
|
pngTestImage = loadImage("../icons/aicas.png");
|
||||||
gifTestImage = loadImage("palme.gif");
|
gifTestImage = loadImage("../icons/palme.gif");
|
||||||
|
|
||||||
if (texture != null)
|
if (texture != null)
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 2.3 KiB |
Binary file not shown.
Before Width: | Height: | Size: 502 B |
|
@ -33,5 +33,6 @@ public class TestOS
|
||||||
System.out.println("OS Version: " + osBean.getVersion());
|
System.out.println("OS Version: " + osBean.getVersion());
|
||||||
System.out.println("Architecture: " + osBean.getArch());
|
System.out.println("Architecture: " + osBean.getArch());
|
||||||
System.out.println("Processors: " + osBean.getAvailableProcessors());
|
System.out.println("Processors: " + osBean.getAvailableProcessors());
|
||||||
|
System.out.println("System Load Average: " + osBean.getSystemLoadAverage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<launchConfiguration type="org.eclipse.cdt.launch.localCLaunch">
|
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="org.eclipse.cdt.debug.mi.core.CDebugger"/>
|
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.protocol" value="mi"/>
|
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.STOP_ON_SOLIB_EVENTS" value="false"/>
|
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/>
|
|
||||||
<listAttribute key="org.eclipse.cdt.debug.mi.core.SOLIB_PATH"/>
|
|
||||||
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
|
|
||||||
<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
|
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.AUTO_SOLIB" value="true"/>
|
|
||||||
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
|
|
||||||
<booleanAttribute key="org.eclipse.cdt.launch.use_terminal" value="true"/>
|
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="jamvm"/>
|
|
||||||
<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
|
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.mi.core.DEBUG_NAME" value="gdb"/>
|
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="src/jamvm"/>
|
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_ARGUMENTS" value="-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel gnu.classpath.examples.swing.Demo"/>
|
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.mi.core.GDB_INIT" value=""/>
|
|
||||||
</launchConfiguration>
|
|
|
@ -183,7 +183,7 @@ public class NavigationFilterDemo
|
||||||
return pos;
|
return pos;
|
||||||
case SwingConstants.WEST:
|
case SwingConstants.WEST:
|
||||||
// Calculate the next word start.
|
// Calculate the next word start.
|
||||||
newpos = Utilities.getWordStart(text, newpos);;
|
newpos = Utilities.getWordStart(text, newpos);
|
||||||
|
|
||||||
// If that means that the caret will not move, return
|
// If that means that the caret will not move, return
|
||||||
// the start of the previous word.
|
// the start of the previous word.
|
||||||
|
|
29
libjava/classpath/external/Makefile.in
vendored
29
libjava/classpath/external/Makefile.in
vendored
|
@ -43,16 +43,21 @@ am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||||
$(top_srcdir)/../../config/lead-dot.m4 \
|
$(top_srcdir)/../../config/lead-dot.m4 \
|
||||||
$(top_srcdir)/../../config/multi.m4 \
|
$(top_srcdir)/../../config/multi.m4 \
|
||||||
$(top_srcdir)/../../config/no-executables.m4 \
|
$(top_srcdir)/../../config/no-executables.m4 \
|
||||||
$(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
|
$(top_srcdir)/../../libtool.m4 \
|
||||||
$(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
|
$(top_srcdir)/../../ltoptions.m4 \
|
||||||
|
$(top_srcdir)/../../ltsugar.m4 \
|
||||||
|
$(top_srcdir)/../../ltversion.m4 \
|
||||||
|
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
||||||
|
$(top_srcdir)/m4/acinclude.m4 \
|
||||||
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
||||||
|
$(top_srcdir)/m4/ax_func_which_gethostbyname_r.m4 \
|
||||||
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
|
||||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
SOURCES =
|
SOURCES =
|
||||||
|
@ -71,12 +76,15 @@ ACLOCAL = @ACLOCAL@
|
||||||
AMDEP_FALSE = @AMDEP_FALSE@
|
AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AR = @AR@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
AUTOMAKE = @AUTOMAKE@
|
AUTOMAKE = @AUTOMAKE@
|
||||||
AWK = @AWK@
|
AWK = @AWK@
|
||||||
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
||||||
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
||||||
|
CAIRO_CFLAGS = @CAIRO_CFLAGS@
|
||||||
|
CAIRO_LIBS = @CAIRO_LIBS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
|
@ -122,6 +130,7 @@ DATE = @DATE@
|
||||||
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
|
DUMPBIN = @DUMPBIN@
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
|
@ -134,15 +143,16 @@ ERROR_CFLAGS = @ERROR_CFLAGS@
|
||||||
EXAMPLESDIR = @EXAMPLESDIR@
|
EXAMPLESDIR = @EXAMPLESDIR@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
FASTJAR = @FASTJAR@
|
FASTJAR = @FASTJAR@
|
||||||
|
FGREP = @FGREP@
|
||||||
FIND = @FIND@
|
FIND = @FIND@
|
||||||
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
||||||
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
||||||
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
||||||
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
||||||
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
|
|
||||||
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
|
|
||||||
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
||||||
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
||||||
|
FOUND_JAVAC_FALSE = @FOUND_JAVAC_FALSE@
|
||||||
|
FOUND_JAVAC_TRUE = @FOUND_JAVAC_TRUE@
|
||||||
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
||||||
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
||||||
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
||||||
|
@ -150,7 +160,6 @@ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
|
||||||
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
||||||
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||||
GCJ = @GCJ@
|
GCJ = @GCJ@
|
||||||
GCJX = @GCJX@
|
|
||||||
GCONF_CFLAGS = @GCONF_CFLAGS@
|
GCONF_CFLAGS = @GCONF_CFLAGS@
|
||||||
GCONF_LIBS = @GCONF_LIBS@
|
GCONF_LIBS = @GCONF_LIBS@
|
||||||
GDK_CFLAGS = @GDK_CFLAGS@
|
GDK_CFLAGS = @GDK_CFLAGS@
|
||||||
|
@ -160,6 +169,7 @@ GENINSRC_TRUE = @GENINSRC_TRUE@
|
||||||
GJDOC = @GJDOC@
|
GJDOC = @GJDOC@
|
||||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||||
GLIB_LIBS = @GLIB_LIBS@
|
GLIB_LIBS = @GLIB_LIBS@
|
||||||
|
GREP = @GREP@
|
||||||
GTK_CFLAGS = @GTK_CFLAGS@
|
GTK_CFLAGS = @GTK_CFLAGS@
|
||||||
GTK_LIBS = @GTK_LIBS@
|
GTK_LIBS = @GTK_LIBS@
|
||||||
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
||||||
|
@ -171,6 +181,7 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
JAVAC = @JAVAC@
|
||||||
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
||||||
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
||||||
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
||||||
|
@ -180,6 +191,7 @@ JIKES = @JIKES@
|
||||||
JIKESENCODING = @JIKESENCODING@
|
JIKESENCODING = @JIKESENCODING@
|
||||||
JIKESWARNINGS = @JIKESWARNINGS@
|
JIKESWARNINGS = @JIKESWARNINGS@
|
||||||
KJC = @KJC@
|
KJC = @KJC@
|
||||||
|
LD = @LD@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBDEBUG = @LIBDEBUG@
|
LIBDEBUG = @LIBDEBUG@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
|
@ -199,6 +211,7 @@ MKDIR = @MKDIR@
|
||||||
MOC = @MOC@
|
MOC = @MOC@
|
||||||
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
||||||
MOZILLA_LIBS = @MOZILLA_LIBS@
|
MOZILLA_LIBS = @MOZILLA_LIBS@
|
||||||
|
NM = @NM@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
@ -220,6 +233,7 @@ RANLIB = @RANLIB@
|
||||||
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
||||||
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
||||||
REMOVE = @REMOVE@
|
REMOVE = @REMOVE@
|
||||||
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
||||||
|
@ -247,8 +261,10 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||||
X_LIBS = @X_LIBS@
|
X_LIBS = @X_LIBS@
|
||||||
X_PRE_LIBS = @X_PRE_LIBS@
|
X_PRE_LIBS = @X_PRE_LIBS@
|
||||||
ZIP = @ZIP@
|
ZIP = @ZIP@
|
||||||
|
ac_ct_AR = @ac_ct_AR@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_STRIP = @ac_ct_STRIP@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
|
@ -281,6 +297,7 @@ install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
|
lt_ECHO = @lt_ECHO@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
|
|
29
libjava/classpath/external/jsr166/Makefile.in
vendored
29
libjava/classpath/external/jsr166/Makefile.in
vendored
|
@ -43,16 +43,21 @@ am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||||
$(top_srcdir)/../../config/lead-dot.m4 \
|
$(top_srcdir)/../../config/lead-dot.m4 \
|
||||||
$(top_srcdir)/../../config/multi.m4 \
|
$(top_srcdir)/../../config/multi.m4 \
|
||||||
$(top_srcdir)/../../config/no-executables.m4 \
|
$(top_srcdir)/../../config/no-executables.m4 \
|
||||||
$(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
|
$(top_srcdir)/../../libtool.m4 \
|
||||||
$(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
|
$(top_srcdir)/../../ltoptions.m4 \
|
||||||
|
$(top_srcdir)/../../ltsugar.m4 \
|
||||||
|
$(top_srcdir)/../../ltversion.m4 \
|
||||||
|
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
||||||
|
$(top_srcdir)/m4/acinclude.m4 \
|
||||||
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
||||||
|
$(top_srcdir)/m4/ax_func_which_gethostbyname_r.m4 \
|
||||||
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
|
||||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
SOURCES =
|
SOURCES =
|
||||||
|
@ -62,12 +67,15 @@ ACLOCAL = @ACLOCAL@
|
||||||
AMDEP_FALSE = @AMDEP_FALSE@
|
AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AR = @AR@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
AUTOMAKE = @AUTOMAKE@
|
AUTOMAKE = @AUTOMAKE@
|
||||||
AWK = @AWK@
|
AWK = @AWK@
|
||||||
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
||||||
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
||||||
|
CAIRO_CFLAGS = @CAIRO_CFLAGS@
|
||||||
|
CAIRO_LIBS = @CAIRO_LIBS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
|
@ -113,6 +121,7 @@ DATE = @DATE@
|
||||||
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
|
DUMPBIN = @DUMPBIN@
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
|
@ -125,15 +134,16 @@ ERROR_CFLAGS = @ERROR_CFLAGS@
|
||||||
EXAMPLESDIR = @EXAMPLESDIR@
|
EXAMPLESDIR = @EXAMPLESDIR@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
FASTJAR = @FASTJAR@
|
FASTJAR = @FASTJAR@
|
||||||
|
FGREP = @FGREP@
|
||||||
FIND = @FIND@
|
FIND = @FIND@
|
||||||
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
||||||
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
||||||
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
||||||
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
||||||
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
|
|
||||||
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
|
|
||||||
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
||||||
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
||||||
|
FOUND_JAVAC_FALSE = @FOUND_JAVAC_FALSE@
|
||||||
|
FOUND_JAVAC_TRUE = @FOUND_JAVAC_TRUE@
|
||||||
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
||||||
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
||||||
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
||||||
|
@ -141,7 +151,6 @@ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
|
||||||
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
||||||
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||||
GCJ = @GCJ@
|
GCJ = @GCJ@
|
||||||
GCJX = @GCJX@
|
|
||||||
GCONF_CFLAGS = @GCONF_CFLAGS@
|
GCONF_CFLAGS = @GCONF_CFLAGS@
|
||||||
GCONF_LIBS = @GCONF_LIBS@
|
GCONF_LIBS = @GCONF_LIBS@
|
||||||
GDK_CFLAGS = @GDK_CFLAGS@
|
GDK_CFLAGS = @GDK_CFLAGS@
|
||||||
|
@ -151,6 +160,7 @@ GENINSRC_TRUE = @GENINSRC_TRUE@
|
||||||
GJDOC = @GJDOC@
|
GJDOC = @GJDOC@
|
||||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||||
GLIB_LIBS = @GLIB_LIBS@
|
GLIB_LIBS = @GLIB_LIBS@
|
||||||
|
GREP = @GREP@
|
||||||
GTK_CFLAGS = @GTK_CFLAGS@
|
GTK_CFLAGS = @GTK_CFLAGS@
|
||||||
GTK_LIBS = @GTK_LIBS@
|
GTK_LIBS = @GTK_LIBS@
|
||||||
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
||||||
|
@ -162,6 +172,7 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
JAVAC = @JAVAC@
|
||||||
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
||||||
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
||||||
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
||||||
|
@ -171,6 +182,7 @@ JIKES = @JIKES@
|
||||||
JIKESENCODING = @JIKESENCODING@
|
JIKESENCODING = @JIKESENCODING@
|
||||||
JIKESWARNINGS = @JIKESWARNINGS@
|
JIKESWARNINGS = @JIKESWARNINGS@
|
||||||
KJC = @KJC@
|
KJC = @KJC@
|
||||||
|
LD = @LD@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBDEBUG = @LIBDEBUG@
|
LIBDEBUG = @LIBDEBUG@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
|
@ -190,6 +202,7 @@ MKDIR = @MKDIR@
|
||||||
MOC = @MOC@
|
MOC = @MOC@
|
||||||
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
||||||
MOZILLA_LIBS = @MOZILLA_LIBS@
|
MOZILLA_LIBS = @MOZILLA_LIBS@
|
||||||
|
NM = @NM@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
@ -211,6 +224,7 @@ RANLIB = @RANLIB@
|
||||||
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
||||||
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
||||||
REMOVE = @REMOVE@
|
REMOVE = @REMOVE@
|
||||||
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
||||||
|
@ -238,8 +252,10 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||||
X_LIBS = @X_LIBS@
|
X_LIBS = @X_LIBS@
|
||||||
X_PRE_LIBS = @X_PRE_LIBS@
|
X_PRE_LIBS = @X_PRE_LIBS@
|
||||||
ZIP = @ZIP@
|
ZIP = @ZIP@
|
||||||
|
ac_ct_AR = @ac_ct_AR@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_STRIP = @ac_ct_STRIP@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
|
@ -272,6 +288,7 @@ install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
|
lt_ECHO = @lt_ECHO@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
|
|
|
@ -866,7 +866,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
|
||||||
if (n != null) {
|
if (n != null) {
|
||||||
Node<K,V> f = n.next;
|
Node<K,V> f = n.next;
|
||||||
if (n != b.next) // inconsistent read
|
if (n != b.next) // inconsistent read
|
||||||
break;;
|
break;
|
||||||
Object v = n.value;
|
Object v = n.value;
|
||||||
if (v == null) { // n is deleted
|
if (v == null) { // n is deleted
|
||||||
n.helpDelete(b, f);
|
n.helpDelete(b, f);
|
||||||
|
|
|
@ -1,158 +0,0 @@
|
||||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
||||||
<html> <head>
|
|
||||||
<title>Atomics</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
A small toolkit of classes that support lock-free thread-safe
|
|
||||||
programming on single variables. In essence, the classes in this
|
|
||||||
package extend the notion of <tt>volatile</tt> values, fields, and
|
|
||||||
array elements to those that also provide an atomic conditional update
|
|
||||||
operation of the form:
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
boolean compareAndSet(expectedValue, updateValue);
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p> This method (which varies in argument types across different
|
|
||||||
classes) atomically sets a variable to the <tt>updateValue</tt> if it
|
|
||||||
currently holds the <tt>expectedValue</tt>, reporting <tt>true</tt> on
|
|
||||||
success. The classes in this package also contain methods to get and
|
|
||||||
unconditionally set values, as well as a weaker conditional atomic
|
|
||||||
update operation <tt>weakCompareAndSet</tt> desribed below.
|
|
||||||
|
|
||||||
<p> The specifications of these methods enable implementations to
|
|
||||||
employ efficient machine-level atomic instructions that are available
|
|
||||||
on contemporary processors. However on some platforms, support may
|
|
||||||
entail some form of internal locking. Thus the methods are not
|
|
||||||
strictly guaranteed to be non-blocking --
|
|
||||||
a thread may block transiently before performing the operation.
|
|
||||||
|
|
||||||
<p> Instances of classes {@link
|
|
||||||
java.util.concurrent.atomic.AtomicBoolean}, {@link
|
|
||||||
java.util.concurrent.atomic.AtomicInteger}, {@link
|
|
||||||
java.util.concurrent.atomic.AtomicLong}, and {@link
|
|
||||||
java.util.concurrent.atomic.AtomicReference} each provide access and
|
|
||||||
updates to a single variable of the corresponding type. Each class
|
|
||||||
also provides appropriate utility methods for that type. For example,
|
|
||||||
classes <tt>AtomicLong</tt> and <tt>AtomicInteger</tt> provide atomic
|
|
||||||
increment methods. One application is to generate sequence numbers,
|
|
||||||
as in:
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
class Sequencer {
|
|
||||||
private AtomicLong sequenceNumber = new AtomicLong(0);
|
|
||||||
public long next() { return sequenceNumber.getAndIncrement(); }
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>The memory effects for accesses and updates of atomics generally
|
|
||||||
follow the rules for volatiles, as stated in <a
|
|
||||||
href="http://java.sun.com/docs/books/jls/"> The Java Language
|
|
||||||
Specification, Third Edition (17.4 Memory Model)</a>:
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li> <tt>get</tt> has the memory effects of reading a
|
|
||||||
<tt>volatile</tt> variable.
|
|
||||||
|
|
||||||
<li> <tt>set</tt> has the memory effects of writing (assigning) a
|
|
||||||
<tt>volatile</tt> variable.
|
|
||||||
|
|
||||||
<li> <tt>lazySet</tt> has the memory effects of writing (assigning)
|
|
||||||
a <tt>volatile</tt> variable except that it permits reorderings with
|
|
||||||
subsequent (but not previous) memory actions that do not themselves
|
|
||||||
impose reordering constraints with ordinary non-<tt>volatile</tt>
|
|
||||||
writes. Among other usage contexts, <tt>lazySet</tt> may apply when
|
|
||||||
nulling out, for the sake of garbage collection, a reference that is
|
|
||||||
never accessed again.
|
|
||||||
|
|
||||||
<li><tt>weakCompareAndSet</tt> atomically reads and conditionally
|
|
||||||
writes a variable but does <em>not</em>
|
|
||||||
create any happens-before orderings, so provides no guarantees
|
|
||||||
with respect to previous or subsequent reads and writes of any
|
|
||||||
variables other than the target of the <tt>weakCompareAndSet</tt>.
|
|
||||||
|
|
||||||
<li> <tt>compareAndSet</tt>
|
|
||||||
and all other read-and-update operations such as <tt>getAndIncrement</tt>
|
|
||||||
have the memory effects of both reading and
|
|
||||||
writing <tt>volatile</tt> variables.
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>In addition to classes representing single values, this package
|
|
||||||
contains <em>Updater</em> classes that can be used to obtain
|
|
||||||
<tt>compareAndSet</tt> operations on any selected <tt>volatile</tt>
|
|
||||||
field of any selected class. {@link
|
|
||||||
java.util.concurrent.atomic.AtomicReferenceFieldUpdater}, {@link
|
|
||||||
java.util.concurrent.atomic.AtomicIntegerFieldUpdater}, and {@link
|
|
||||||
java.util.concurrent.atomic.AtomicLongFieldUpdater} are
|
|
||||||
reflection-based utilities that provide access to the associated field
|
|
||||||
types. These are mainly of use in atomic data structures in which
|
|
||||||
several <tt>volatile</tt> fields of the same node (for example, the
|
|
||||||
links of a tree node) are independently subject to atomic
|
|
||||||
updates. These classes enable greater flexibility in how and when to
|
|
||||||
use atomic updates, at the expense of more awkward reflection-based
|
|
||||||
setup, less convenient usage, and weaker guarantees.
|
|
||||||
|
|
||||||
<p>The {@link java.util.concurrent.atomic.AtomicIntegerArray}, {@link
|
|
||||||
java.util.concurrent.atomic.AtomicLongArray}, and {@link
|
|
||||||
java.util.concurrent.atomic.AtomicReferenceArray} classes further
|
|
||||||
extend atomic operation support to arrays of these types. These
|
|
||||||
classes are also notable in providing <tt>volatile</tt> access
|
|
||||||
semantics for their array elements, which is not supported for
|
|
||||||
ordinary arrays.
|
|
||||||
|
|
||||||
<p>The atomic classes also support method <tt>weakCompareAndSet</tt>,
|
|
||||||
which has limited applicability. On some platforms, the weak version
|
|
||||||
may be more efficient than <tt>compareAndSet</tt> in the normal case,
|
|
||||||
but differs in that any given invocation of <tt>weakCompareAndSet</tt>
|
|
||||||
method may return <tt>false</tt> spuriously (that is, for no apparent
|
|
||||||
reason). A <tt>false</tt> return means only that the operation may be
|
|
||||||
retried if desired, relying on the guarantee that repeated invocation
|
|
||||||
when the variable holds <tt>expectedValue</tt> and no other thread is
|
|
||||||
also attempting to set the variable will eventually succeed. (Such
|
|
||||||
spurious failures may for example be due to memory contention effects
|
|
||||||
that are unrelated to whether the expected and current values are
|
|
||||||
equal.) Additionally <tt>weakCompareAndSet</tt> does not provide
|
|
||||||
ordering guarantees that are usually needed for synchronization
|
|
||||||
control. However, the method may be useful for updating counters and
|
|
||||||
statistics when such updates are unrelated to the other happens-before
|
|
||||||
orderings of a program. When a thread sees an update to an atomic
|
|
||||||
variable caused by a <tt>weakCompareAndSet</tt>, it does not
|
|
||||||
necessarily see updates to any <em>other</em> variables that occurred
|
|
||||||
before the <tt>weakCompareAndSet</tt>. This may be acceptable when
|
|
||||||
for example updating performance statistics, but rarely otherwise.
|
|
||||||
|
|
||||||
<p> The {@link java.util.concurrent.atomic.AtomicMarkableReference}
|
|
||||||
class associates a single boolean with a reference. For example, this
|
|
||||||
bit might be used inside a data structure to mean that the object
|
|
||||||
being referenced has logically been deleted. The {@link
|
|
||||||
java.util.concurrent.atomic.AtomicStampedReference} class associates
|
|
||||||
an integer value with a reference. This may be used for example, to
|
|
||||||
represent version numbers corresponding to series of updates.
|
|
||||||
|
|
||||||
<p> Atomic classes are designed primarily as building blocks for
|
|
||||||
implementing non-blocking data structures and related infrastructure
|
|
||||||
classes. The <tt>compareAndSet</tt> method is not a general
|
|
||||||
replacement for locking. It applies only when critical updates for an
|
|
||||||
object are confined to a <em>single</em> variable.
|
|
||||||
|
|
||||||
<p> Atomic classes are not general purpose replacements for
|
|
||||||
<tt>java.lang.Integer</tt> and related classes. They do <em>not</em>
|
|
||||||
define methods such as <tt>hashCode</tt> and
|
|
||||||
<tt>compareTo</tt>. (Because atomic variables are expected to be
|
|
||||||
mutated, they are poor choices for hash table keys.) Additionally,
|
|
||||||
classes are provided only for those types that are commonly useful in
|
|
||||||
intended applications. For example, there is no atomic class for
|
|
||||||
representing <tt>byte</tt>. In those infrequent cases where you would
|
|
||||||
like to do so, you can use an <tt>AtomicInteger</tt> to hold
|
|
||||||
<tt>byte</tt> values, and cast appropriately. You can also hold floats
|
|
||||||
using <tt>Float.floatToIntBits</tt> and <tt>Float.intBitstoFloat</tt>
|
|
||||||
conversions, and doubles using <tt>Double.doubleToLongBits</tt> and
|
|
||||||
<tt>Double.longBitsToDouble</tt> conversions.
|
|
||||||
|
|
||||||
|
|
||||||
@since 1.5
|
|
||||||
|
|
||||||
</body> </html>
|
|
|
@ -1,50 +0,0 @@
|
||||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
||||||
<html> <head>
|
|
||||||
<title>Locks</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
Interfaces and classes providing a framework for locking and waiting
|
|
||||||
for conditions that is distinct from built-in synchronization and
|
|
||||||
monitors. The framework permits much greater flexibility in the use of
|
|
||||||
locks and conditions, at the expense of more awkward syntax.
|
|
||||||
|
|
||||||
<p> The {@link java.util.concurrent.locks.Lock} interface supports
|
|
||||||
locking disciplines that differ in semantics (reentrant, fair, etc),
|
|
||||||
and that can be used in non-block-structured contexts including
|
|
||||||
hand-over-hand and lock reordering algorithms. The main implementation
|
|
||||||
is {@link java.util.concurrent.locks.ReentrantLock}.
|
|
||||||
|
|
||||||
<p> The {@link java.util.concurrent.locks.ReadWriteLock} interface
|
|
||||||
similarly defines locks that may be shared among readers but are
|
|
||||||
exclusive to writers. Only a single implementation, {@link
|
|
||||||
java.util.concurrent.locks.ReentrantReadWriteLock}, is provided, since
|
|
||||||
it covers most standard usage contexts. But programmers may create
|
|
||||||
their own implementations to cover nonstandard requirements.
|
|
||||||
|
|
||||||
<p> The {@link java.util.concurrent.locks.Condition} interface
|
|
||||||
describes condition variables that may be associated with Locks.
|
|
||||||
These are similar in usage to the implicit monitors accessed using
|
|
||||||
<tt>Object.wait</tt>, but offer extended capabilities. In particular,
|
|
||||||
multiple <tt>Condition</tt> objects may be associated with a single
|
|
||||||
<tt>Lock</tt>. To avoid compatibility issues, the names of
|
|
||||||
<tt>Condition</tt> methods are different than the corresponding
|
|
||||||
<tt>Object</tt> versions.
|
|
||||||
|
|
||||||
<p> The {@link java.util.concurrent.locks.AbstractQueuedSynchronizer}
|
|
||||||
class serves as a useful superclass for defining locks and other
|
|
||||||
synchronizers that rely on queuing blocked threads. The {@link
|
|
||||||
java.util.concurrent.locks.AbstractQueuedLongSynchronizer} class
|
|
||||||
provides the same functionality but extends support to 64 bits of
|
|
||||||
synchronization state. Both extend class {@link
|
|
||||||
java.util.concurrent.locks.AbstractOwnableSynchronizer}, a simple
|
|
||||||
class that helps record the thread currently holding exclusive
|
|
||||||
synchronization. The {@link java.util.concurrent.locks.LockSupport}
|
|
||||||
class provides lower-level blocking and unblocking support that is
|
|
||||||
useful for those developers implementing their own customized lock
|
|
||||||
classes.
|
|
||||||
|
|
||||||
@since 1.5
|
|
||||||
|
|
||||||
</body> </html>
|
|
|
@ -1,222 +0,0 @@
|
||||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
||||||
<html> <head>
|
|
||||||
<title>Concurrency Utilities</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<p> Utility classes commonly useful in concurrent programming. This
|
|
||||||
package includes a few small standardized extensible frameworks, as
|
|
||||||
well as some classes that provide useful functionality and are
|
|
||||||
otherwise tedious or difficult to implement. Here are brief
|
|
||||||
descriptions of the main components. See also the <tt>locks</tt> and
|
|
||||||
<tt>atomic</tt> packages.
|
|
||||||
|
|
||||||
<h2>Executors</h2>
|
|
||||||
|
|
||||||
<b>Interfaces.</b> {@link java.util.concurrent.Executor} is a simple
|
|
||||||
standardized interface for defining custom thread-like subsystems,
|
|
||||||
including thread pools, asynchronous IO, and lightweight task
|
|
||||||
frameworks. Depending on which concrete Executor class is being used,
|
|
||||||
tasks may execute in a newly created thread, an existing
|
|
||||||
task-execution thread, or the thread calling <tt>execute()</tt>, and
|
|
||||||
may execute sequentially or concurrently. {@link
|
|
||||||
java.util.concurrent.ExecutorService} provides a more complete
|
|
||||||
asynchronous task execution framework. An ExecutorService manages
|
|
||||||
queuing and scheduling of tasks, and allows controlled shutdown. The
|
|
||||||
{@link java.util.concurrent.ScheduledExecutorService} subinterface
|
|
||||||
and associated interfaces add support for delayed and periodic task execution.
|
|
||||||
ExecutorServices provide methods arranging asynchronous execution of
|
|
||||||
any function expressed as {@link java.util.concurrent.Callable}, the
|
|
||||||
result-bearing analog of {@link java.lang.Runnable}. A {@link
|
|
||||||
java.util.concurrent.Future} returns the results of a function, allows
|
|
||||||
determination of whether execution has completed, and provides a means to
|
|
||||||
cancel execution. A {@link java.util.concurrent.RunnableFuture} is
|
|
||||||
a Future that possesses a <tt>run</tt> method that upon execution,
|
|
||||||
sets its results.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
|
|
||||||
<b>Implementations.</b> Classes {@link
|
|
||||||
java.util.concurrent.ThreadPoolExecutor} and {@link
|
|
||||||
java.util.concurrent.ScheduledThreadPoolExecutor} provide tunable,
|
|
||||||
flexible thread pools. The {@link java.util.concurrent.Executors}
|
|
||||||
class provides factory methods for the most common kinds and
|
|
||||||
configurations of Executors, as well as a few utility methods for
|
|
||||||
using them. Other utilities based on Executors include the concrete
|
|
||||||
class {@link java.util.concurrent.FutureTask} providing a common
|
|
||||||
extensible implementation of Futures, and {@link
|
|
||||||
java.util.concurrent.ExecutorCompletionService}, that assists in
|
|
||||||
coordinating the processing of groups of asynchronous tasks.
|
|
||||||
|
|
||||||
<h2>Queues</h2>
|
|
||||||
|
|
||||||
The java.util.concurrent {@link
|
|
||||||
java.util.concurrent.ConcurrentLinkedQueue} class supplies an
|
|
||||||
efficient scalable thread-safe non-blocking FIFO queue. Five
|
|
||||||
implementations in java.util.concurrent support the extended {@link
|
|
||||||
java.util.concurrent.BlockingQueue} interface, that defines blocking
|
|
||||||
versions of put and take: {@link
|
|
||||||
java.util.concurrent.LinkedBlockingQueue}, {@link
|
|
||||||
java.util.concurrent.ArrayBlockingQueue}, {@link
|
|
||||||
java.util.concurrent.SynchronousQueue}, {@link
|
|
||||||
java.util.concurrent.PriorityBlockingQueue}, and {@link
|
|
||||||
java.util.concurrent.DelayQueue}. The different classes cover the most
|
|
||||||
common usage contexts for producer-consumer, messaging, parallel
|
|
||||||
tasking, and related concurrent designs. The {@link
|
|
||||||
java.util.concurrent.BlockingDeque} interface extends
|
|
||||||
<tt>BlockingQueue</tt> to support both FIFO and LIFO (stack-based)
|
|
||||||
operations. Class {@link java.util.concurrent.LinkedBlockingDeque}
|
|
||||||
provides an implementation.
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Timing</h2>
|
|
||||||
|
|
||||||
The {@link java.util.concurrent.TimeUnit} class provides multiple
|
|
||||||
granularities (including nanoseconds) for specifying and controlling
|
|
||||||
time-out based operations. Most classes in the package contain
|
|
||||||
operations based on time-outs in addition to indefinite waits. In all
|
|
||||||
cases that time-outs are used, the time-out specifies the minimum time
|
|
||||||
that the method should wait before indicating that it
|
|
||||||
timed-out. Implementations make a "best effort" to detect
|
|
||||||
time-outs as soon as possible after they occur. However, an indefinite
|
|
||||||
amount of time may elapse between a time-out being detected and a
|
|
||||||
thread actually executing again after that time-out. All methods
|
|
||||||
that accept timeout parameters treat values less than or equal to
|
|
||||||
zero to mean not to wait at all. To wait "forever", you can use
|
|
||||||
a value of <tt>Long.MAX_VALUE</tt>.
|
|
||||||
|
|
||||||
<h2>Synchronizers</h2>
|
|
||||||
|
|
||||||
Four classes aid common special-purpose synchronization idioms.
|
|
||||||
{@link java.util.concurrent.Semaphore} is a classic concurrency tool.
|
|
||||||
{@link java.util.concurrent.CountDownLatch} is a very simple yet very
|
|
||||||
common utility for blocking until a given number of signals, events,
|
|
||||||
or conditions hold. A {@link java.util.concurrent.CyclicBarrier} is a
|
|
||||||
resettable multiway synchronization point useful in some styles of
|
|
||||||
parallel programming. An {@link java.util.concurrent.Exchanger} allows
|
|
||||||
two threads to exchange objects at a rendezvous point, and is useful
|
|
||||||
in several pipeline designs.
|
|
||||||
|
|
||||||
<h2>Concurrent Collections</h2>
|
|
||||||
|
|
||||||
Besides Queues, this package supplies Collection implementations
|
|
||||||
designed for use in multithreaded contexts:
|
|
||||||
{@link java.util.concurrent.ConcurrentHashMap},
|
|
||||||
{@link java.util.concurrent.ConcurrentSkipListMap},
|
|
||||||
{@link java.util.concurrent.ConcurrentSkipListSet},
|
|
||||||
{@link java.util.concurrent.CopyOnWriteArrayList}, and
|
|
||||||
{@link java.util.concurrent.CopyOnWriteArraySet}.
|
|
||||||
When many threads are expected to access a given collection,
|
|
||||||
a <tt>ConcurrentHashMap</tt> is normally preferable to
|
|
||||||
a synchronized <tt>HashMap</tt>, and a
|
|
||||||
<tt>ConcurrentSkipListMap</tt> is normally preferable
|
|
||||||
to a synchronized <tt>TreeMap</tt>. A
|
|
||||||
<tt>CopyOnWriteArrayList</tt> is preferable to
|
|
||||||
a synchronized <tt>ArrayList</tt> when the expected number of reads
|
|
||||||
and traversals greatly outnumber the number of updates to a list.
|
|
||||||
|
|
||||||
<p>The "Concurrent" prefix used with some classes in this package is a
|
|
||||||
shorthand indicating several differences from similar "synchronized"
|
|
||||||
classes. For example <tt>java.util.Hashtable</tt> and
|
|
||||||
<tt>Collections.synchronizedMap(new HashMap())</tt> are
|
|
||||||
synchronized. But {@link java.util.concurrent.ConcurrentHashMap} is
|
|
||||||
"concurrent". A concurrent collection is thread-safe, but not
|
|
||||||
governed by a single exclusion lock. In the particular case of
|
|
||||||
ConcurrentHashMap, it safely permits any number of concurrent reads as
|
|
||||||
well as a tunable number of concurrent writes. "Synchronized" classes
|
|
||||||
can be useful when you need to prevent all access to a collection via
|
|
||||||
a single lock, at the expense of poorer scalability. In other cases in
|
|
||||||
which multiple threads are expected to access a common collection,
|
|
||||||
"concurrent" versions are normally preferable. And unsynchronized
|
|
||||||
collections are preferable when either collections are unshared, or
|
|
||||||
are accessible only when holding other locks.
|
|
||||||
|
|
||||||
<p> Most concurrent Collection implementations (including most Queues)
|
|
||||||
also differ from the usual java.util conventions in that their Iterators
|
|
||||||
provide <em>weakly consistent</em> rather than fast-fail traversal. A
|
|
||||||
weakly consistent iterator is thread-safe, but does not necessarily
|
|
||||||
freeze the collection while iterating, so it may (or may not) reflect
|
|
||||||
any updates since the iterator was created.
|
|
||||||
|
|
||||||
<a name="MemoryVisibility">
|
|
||||||
<h2> Memory Consistency Properties </h2>
|
|
||||||
|
|
||||||
<a href="http://java.sun.com/docs/books/jls/third_edition/html/memory.html">
|
|
||||||
Chapter 17 of the Java Language Specification</a> defines the
|
|
||||||
<i>happens-before</i> relation on memory operations such as reads and
|
|
||||||
writes of shared variables. The results of a write by one thread are
|
|
||||||
guaranteed to be visible to a read by another thread only if the write
|
|
||||||
operation <i>happens-before</i> the read operation. The
|
|
||||||
{@code synchronized} and {@code volatile} constructs, as well as the
|
|
||||||
{@code Thread.start()} and {@code Thread.join()} methods, can form
|
|
||||||
<i>happens-before</i> relationships. In particular:
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>Each action in a thread <i>happens-before</i> every action in that
|
|
||||||
thread that comes later in the program's order.
|
|
||||||
|
|
||||||
<li>An unlock ({@code synchronized} block or method exit) of a
|
|
||||||
monitor <i>happens-before</i> every subsequent lock ({@code synchronized}
|
|
||||||
block or method entry) of that same monitor. And because
|
|
||||||
the <i>happens-before</i> relation is transitive, all actions
|
|
||||||
of a thread prior to unlocking <i>happen-before</i> all actions
|
|
||||||
subsequent to any thread locking that monitor.
|
|
||||||
|
|
||||||
<li>A write to a {@code volatile} field <i>happens-before</i> every
|
|
||||||
subsequent read of that same field. Writes and reads of
|
|
||||||
{@code volatile} fields have similar memory consistency effects
|
|
||||||
as entering and exiting monitors, but do <em>not</em> entail
|
|
||||||
mutual exclusion locking.
|
|
||||||
|
|
||||||
<li>A call to {@code start} on a thread <i>happens-before</i> any action in the
|
|
||||||
started thread.
|
|
||||||
|
|
||||||
<li>All actions in a thread <i>happen-before</i> any other thread
|
|
||||||
successfully returns from a {@code join} on that thread.
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
The methods of all classes in {@code java.util.concurrent} and its
|
|
||||||
subpackages extend these guarantees to higher-level
|
|
||||||
synchronization. In particular:
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li>Actions in a thread prior to placing an object into any concurrent
|
|
||||||
collection <i>happen-before</i> actions subsequent to the access or
|
|
||||||
removal of that element from the collection in another thread.
|
|
||||||
|
|
||||||
<li>Actions in a thread prior to the submission of a {@code Runnable}
|
|
||||||
to an {@code Executor} <i>happen-before</i> its execution begins.
|
|
||||||
Similarly for {@code Callables} submitted to an {@code ExecutorService}.
|
|
||||||
|
|
||||||
<li>Actions taken by the asynchronous computation represented by a
|
|
||||||
{@code Future} <i>happen-before</i> actions subsequent to the
|
|
||||||
retrieval of the result via {@code Future.get()} in another thread.
|
|
||||||
|
|
||||||
<li>Actions prior to "releasing" synchronizer methods such as
|
|
||||||
{@code Lock.unlock}, {@code Semaphore.release}, and
|
|
||||||
{@code CountDownLatch.countDown} <i>happen-before</i> actions
|
|
||||||
subsequent to a successful "acquiring" method such as
|
|
||||||
{@code Lock.lock}, {@code Semaphore.acquire},
|
|
||||||
{@code Condition.await}, and {@code CountDownLatch.await} on the
|
|
||||||
same synchronizer object in another thread.
|
|
||||||
|
|
||||||
<li>For each pair of threads that successfully exchange objects via
|
|
||||||
an {@code Exchanger}, actions prior to the {@code exchange()}
|
|
||||||
in each thread <i>happen-before</i> those subsequent to the
|
|
||||||
corresponding {@code exchange()} in another thread.
|
|
||||||
|
|
||||||
<li>Actions prior to calling {@code CyclicBarrier.await}
|
|
||||||
<i>happen-before</i> actions performed by the barrier action, and
|
|
||||||
actions performed by the barrier action <i>happen-before</i> actions
|
|
||||||
subsequent to a successful return from the corresponding {@code await}
|
|
||||||
in other threads.
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
@since 1.5
|
|
||||||
|
|
||||||
</body> </html>
|
|
|
@ -43,16 +43,21 @@ am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||||
$(top_srcdir)/../../config/lead-dot.m4 \
|
$(top_srcdir)/../../config/lead-dot.m4 \
|
||||||
$(top_srcdir)/../../config/multi.m4 \
|
$(top_srcdir)/../../config/multi.m4 \
|
||||||
$(top_srcdir)/../../config/no-executables.m4 \
|
$(top_srcdir)/../../config/no-executables.m4 \
|
||||||
$(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
|
$(top_srcdir)/../../libtool.m4 \
|
||||||
$(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
|
$(top_srcdir)/../../ltoptions.m4 \
|
||||||
|
$(top_srcdir)/../../ltsugar.m4 \
|
||||||
|
$(top_srcdir)/../../ltversion.m4 \
|
||||||
|
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
||||||
|
$(top_srcdir)/m4/acinclude.m4 \
|
||||||
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
||||||
|
$(top_srcdir)/m4/ax_func_which_gethostbyname_r.m4 \
|
||||||
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
|
||||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
SOURCES =
|
SOURCES =
|
||||||
|
@ -62,12 +67,15 @@ ACLOCAL = @ACLOCAL@
|
||||||
AMDEP_FALSE = @AMDEP_FALSE@
|
AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AR = @AR@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
AUTOMAKE = @AUTOMAKE@
|
AUTOMAKE = @AUTOMAKE@
|
||||||
AWK = @AWK@
|
AWK = @AWK@
|
||||||
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
||||||
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
||||||
|
CAIRO_CFLAGS = @CAIRO_CFLAGS@
|
||||||
|
CAIRO_LIBS = @CAIRO_LIBS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
|
@ -113,6 +121,7 @@ DATE = @DATE@
|
||||||
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
|
DUMPBIN = @DUMPBIN@
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
|
@ -125,15 +134,16 @@ ERROR_CFLAGS = @ERROR_CFLAGS@
|
||||||
EXAMPLESDIR = @EXAMPLESDIR@
|
EXAMPLESDIR = @EXAMPLESDIR@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
FASTJAR = @FASTJAR@
|
FASTJAR = @FASTJAR@
|
||||||
|
FGREP = @FGREP@
|
||||||
FIND = @FIND@
|
FIND = @FIND@
|
||||||
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
||||||
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
||||||
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
||||||
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
||||||
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
|
|
||||||
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
|
|
||||||
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
||||||
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
||||||
|
FOUND_JAVAC_FALSE = @FOUND_JAVAC_FALSE@
|
||||||
|
FOUND_JAVAC_TRUE = @FOUND_JAVAC_TRUE@
|
||||||
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
||||||
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
||||||
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
||||||
|
@ -141,7 +151,6 @@ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
|
||||||
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
||||||
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||||
GCJ = @GCJ@
|
GCJ = @GCJ@
|
||||||
GCJX = @GCJX@
|
|
||||||
GCONF_CFLAGS = @GCONF_CFLAGS@
|
GCONF_CFLAGS = @GCONF_CFLAGS@
|
||||||
GCONF_LIBS = @GCONF_LIBS@
|
GCONF_LIBS = @GCONF_LIBS@
|
||||||
GDK_CFLAGS = @GDK_CFLAGS@
|
GDK_CFLAGS = @GDK_CFLAGS@
|
||||||
|
@ -151,6 +160,7 @@ GENINSRC_TRUE = @GENINSRC_TRUE@
|
||||||
GJDOC = @GJDOC@
|
GJDOC = @GJDOC@
|
||||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||||
GLIB_LIBS = @GLIB_LIBS@
|
GLIB_LIBS = @GLIB_LIBS@
|
||||||
|
GREP = @GREP@
|
||||||
GTK_CFLAGS = @GTK_CFLAGS@
|
GTK_CFLAGS = @GTK_CFLAGS@
|
||||||
GTK_LIBS = @GTK_LIBS@
|
GTK_LIBS = @GTK_LIBS@
|
||||||
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
||||||
|
@ -162,6 +172,7 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
JAVAC = @JAVAC@
|
||||||
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
||||||
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
||||||
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
||||||
|
@ -171,6 +182,7 @@ JIKES = @JIKES@
|
||||||
JIKESENCODING = @JIKESENCODING@
|
JIKESENCODING = @JIKESENCODING@
|
||||||
JIKESWARNINGS = @JIKESWARNINGS@
|
JIKESWARNINGS = @JIKESWARNINGS@
|
||||||
KJC = @KJC@
|
KJC = @KJC@
|
||||||
|
LD = @LD@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBDEBUG = @LIBDEBUG@
|
LIBDEBUG = @LIBDEBUG@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
|
@ -190,6 +202,7 @@ MKDIR = @MKDIR@
|
||||||
MOC = @MOC@
|
MOC = @MOC@
|
||||||
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
||||||
MOZILLA_LIBS = @MOZILLA_LIBS@
|
MOZILLA_LIBS = @MOZILLA_LIBS@
|
||||||
|
NM = @NM@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
@ -211,6 +224,7 @@ RANLIB = @RANLIB@
|
||||||
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
||||||
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
||||||
REMOVE = @REMOVE@
|
REMOVE = @REMOVE@
|
||||||
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
||||||
|
@ -238,8 +252,10 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||||
X_LIBS = @X_LIBS@
|
X_LIBS = @X_LIBS@
|
||||||
X_PRE_LIBS = @X_PRE_LIBS@
|
X_PRE_LIBS = @X_PRE_LIBS@
|
||||||
ZIP = @ZIP@
|
ZIP = @ZIP@
|
||||||
|
ac_ct_AR = @ac_ct_AR@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_STRIP = @ac_ct_STRIP@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
|
@ -272,6 +288,7 @@ install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
|
lt_ECHO = @lt_ECHO@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
|
|
29
libjava/classpath/external/sax/Makefile.in
vendored
29
libjava/classpath/external/sax/Makefile.in
vendored
|
@ -43,16 +43,21 @@ am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||||
$(top_srcdir)/../../config/lead-dot.m4 \
|
$(top_srcdir)/../../config/lead-dot.m4 \
|
||||||
$(top_srcdir)/../../config/multi.m4 \
|
$(top_srcdir)/../../config/multi.m4 \
|
||||||
$(top_srcdir)/../../config/no-executables.m4 \
|
$(top_srcdir)/../../config/no-executables.m4 \
|
||||||
$(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
|
$(top_srcdir)/../../libtool.m4 \
|
||||||
$(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
|
$(top_srcdir)/../../ltoptions.m4 \
|
||||||
|
$(top_srcdir)/../../ltsugar.m4 \
|
||||||
|
$(top_srcdir)/../../ltversion.m4 \
|
||||||
|
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
||||||
|
$(top_srcdir)/m4/acinclude.m4 \
|
||||||
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
||||||
|
$(top_srcdir)/m4/ax_func_which_gethostbyname_r.m4 \
|
||||||
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
|
||||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
SOURCES =
|
SOURCES =
|
||||||
|
@ -62,12 +67,15 @@ ACLOCAL = @ACLOCAL@
|
||||||
AMDEP_FALSE = @AMDEP_FALSE@
|
AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AR = @AR@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
AUTOMAKE = @AUTOMAKE@
|
AUTOMAKE = @AUTOMAKE@
|
||||||
AWK = @AWK@
|
AWK = @AWK@
|
||||||
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
||||||
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
||||||
|
CAIRO_CFLAGS = @CAIRO_CFLAGS@
|
||||||
|
CAIRO_LIBS = @CAIRO_LIBS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
|
@ -113,6 +121,7 @@ DATE = @DATE@
|
||||||
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
|
DUMPBIN = @DUMPBIN@
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
|
@ -125,15 +134,16 @@ ERROR_CFLAGS = @ERROR_CFLAGS@
|
||||||
EXAMPLESDIR = @EXAMPLESDIR@
|
EXAMPLESDIR = @EXAMPLESDIR@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
FASTJAR = @FASTJAR@
|
FASTJAR = @FASTJAR@
|
||||||
|
FGREP = @FGREP@
|
||||||
FIND = @FIND@
|
FIND = @FIND@
|
||||||
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
||||||
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
||||||
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
||||||
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
||||||
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
|
|
||||||
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
|
|
||||||
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
||||||
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
||||||
|
FOUND_JAVAC_FALSE = @FOUND_JAVAC_FALSE@
|
||||||
|
FOUND_JAVAC_TRUE = @FOUND_JAVAC_TRUE@
|
||||||
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
||||||
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
||||||
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
||||||
|
@ -141,7 +151,6 @@ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
|
||||||
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
||||||
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||||
GCJ = @GCJ@
|
GCJ = @GCJ@
|
||||||
GCJX = @GCJX@
|
|
||||||
GCONF_CFLAGS = @GCONF_CFLAGS@
|
GCONF_CFLAGS = @GCONF_CFLAGS@
|
||||||
GCONF_LIBS = @GCONF_LIBS@
|
GCONF_LIBS = @GCONF_LIBS@
|
||||||
GDK_CFLAGS = @GDK_CFLAGS@
|
GDK_CFLAGS = @GDK_CFLAGS@
|
||||||
|
@ -151,6 +160,7 @@ GENINSRC_TRUE = @GENINSRC_TRUE@
|
||||||
GJDOC = @GJDOC@
|
GJDOC = @GJDOC@
|
||||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||||
GLIB_LIBS = @GLIB_LIBS@
|
GLIB_LIBS = @GLIB_LIBS@
|
||||||
|
GREP = @GREP@
|
||||||
GTK_CFLAGS = @GTK_CFLAGS@
|
GTK_CFLAGS = @GTK_CFLAGS@
|
||||||
GTK_LIBS = @GTK_LIBS@
|
GTK_LIBS = @GTK_LIBS@
|
||||||
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
||||||
|
@ -162,6 +172,7 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
JAVAC = @JAVAC@
|
||||||
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
||||||
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
||||||
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
||||||
|
@ -171,6 +182,7 @@ JIKES = @JIKES@
|
||||||
JIKESENCODING = @JIKESENCODING@
|
JIKESENCODING = @JIKESENCODING@
|
||||||
JIKESWARNINGS = @JIKESWARNINGS@
|
JIKESWARNINGS = @JIKESWARNINGS@
|
||||||
KJC = @KJC@
|
KJC = @KJC@
|
||||||
|
LD = @LD@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBDEBUG = @LIBDEBUG@
|
LIBDEBUG = @LIBDEBUG@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
|
@ -190,6 +202,7 @@ MKDIR = @MKDIR@
|
||||||
MOC = @MOC@
|
MOC = @MOC@
|
||||||
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
||||||
MOZILLA_LIBS = @MOZILLA_LIBS@
|
MOZILLA_LIBS = @MOZILLA_LIBS@
|
||||||
|
NM = @NM@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
@ -211,6 +224,7 @@ RANLIB = @RANLIB@
|
||||||
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
||||||
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
||||||
REMOVE = @REMOVE@
|
REMOVE = @REMOVE@
|
||||||
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
||||||
|
@ -238,8 +252,10 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||||
X_LIBS = @X_LIBS@
|
X_LIBS = @X_LIBS@
|
||||||
X_PRE_LIBS = @X_PRE_LIBS@
|
X_PRE_LIBS = @X_PRE_LIBS@
|
||||||
ZIP = @ZIP@
|
ZIP = @ZIP@
|
||||||
|
ac_ct_AR = @ac_ct_AR@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_STRIP = @ac_ct_STRIP@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
|
@ -272,6 +288,7 @@ install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
|
lt_ECHO = @lt_ECHO@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
|
|
106
libjava/classpath/external/w3c_dom/COPYRIGHT.html
vendored
106
libjava/classpath/external/w3c_dom/COPYRIGHT.html
vendored
|
@ -1,106 +0,0 @@
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
|
|
||||||
<title>W3C IPR SOFTWARE NOTICE</title>
|
|
||||||
<style type="text/css">
|
|
||||||
<!--
|
|
||||||
html, body { background: #fff; color: #000; } /* body for Windows IE3 */
|
|
||||||
-->
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>
|
|
||||||
W3C IPR SOFTWARE NOTICE
|
|
||||||
</h1>
|
|
||||||
<h3>
|
|
||||||
Copyright © 2002 <a href="http://www.w3.org/">World Wide Web
|
|
||||||
Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
|
|
||||||
Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
|
|
||||||
National de Recherche en Informatique et en Automatique</a>, <a
|
|
||||||
href="http://www.keio.ac.jp/">Keio University</a>). All Rights
|
|
||||||
Reserved.
|
|
||||||
</h3>
|
|
||||||
<p>
|
|
||||||
The DOM bindings are published under the W3C Software Copyright Notice
|
|
||||||
and License. The software license requires "Notice of any changes or
|
|
||||||
modifications to the W3C files, including the date changes were made."
|
|
||||||
Consequently, modified versions of the DOM bindings must document that
|
|
||||||
they do not conform to the W3C standard; in the case of the IDL
|
|
||||||
definitions, the pragma prefix can no longer be 'w3c.org'; in the case of
|
|
||||||
the Java language binding, the package names can no longer be in the
|
|
||||||
'org.w3c' package.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b>Note:</b> The original version of the W3C Software Copyright Notice
|
|
||||||
and License could be found at <a
|
|
||||||
href='http://www.w3.org/Consortium/Legal/copyright-software-19980720'>http://www.w3.org/Consortium/Legal/copyright-software-19980720</a>
|
|
||||||
</p>
|
|
||||||
<h3>
|
|
||||||
Copyright © 1994-2002 <a href="http://www.w3.org/">World Wide Web
|
|
||||||
Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
|
|
||||||
Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
|
|
||||||
National de Recherche en Informatique et en Automatique</a>, <a
|
|
||||||
href="http://www.keio.ac.jp/">Keio University</a>). All Rights
|
|
||||||
Reserved. http://www.w3.org/Consortium/Legal/
|
|
||||||
</h3>
|
|
||||||
<p>
|
|
||||||
This W3C work (including software, documents, or other related items) is
|
|
||||||
being provided by the copyright holders under the following license. By
|
|
||||||
obtaining, using and/or copying this work, you (the licensee) agree that
|
|
||||||
you have read, understood, and will comply with the following terms and
|
|
||||||
conditions:
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Permission to use, copy, and modify this software and its documentation,
|
|
||||||
with or without modification, for any purpose and without fee or
|
|
||||||
royalty is hereby granted, provided that you include the following on ALL
|
|
||||||
copies of the software and documentation or portions thereof, including
|
|
||||||
modifications, that you make:
|
|
||||||
</p>
|
|
||||||
<ol>
|
|
||||||
<li>
|
|
||||||
The full text of this NOTICE in a location viewable to users of the
|
|
||||||
redistributed or derivative work.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Any pre-existing intellectual property disclaimers, notices, or terms
|
|
||||||
and conditions. If none exist, a short notice of the following form
|
|
||||||
(hypertext is preferred, text is permitted) should be used within the
|
|
||||||
body of any redistributed or derivative code: "Copyright ©
|
|
||||||
[$date-of-software] <a href="http://www.w3.org/">World Wide Web
|
|
||||||
Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
|
|
||||||
Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
|
|
||||||
National de Recherche en Informatique et en Automatique</a>, <a
|
|
||||||
href="http://www.keio.ac.jp/">Keio University</a>). All Rights
|
|
||||||
Reserved. http://www.w3.org/Consortium/Legal/"
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Notice of any changes or modifications to the W3C files, including the
|
|
||||||
date changes were made. (We recommend you provide URIs to the location
|
|
||||||
from which the code is derived.)
|
|
||||||
</li>
|
|
||||||
</ol>
|
|
||||||
<p>
|
|
||||||
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
|
|
||||||
HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
|
|
||||||
INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS
|
|
||||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
|
|
||||||
DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
|
|
||||||
TRADEMARKS OR OTHER RIGHTS.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
|
|
||||||
CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
|
|
||||||
DOCUMENTATION.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
The name and trademarks of copyright holders may NOT be used in
|
|
||||||
advertising or publicity pertaining to the software without specific,
|
|
||||||
written prior permission. Title to copyright in this software and any
|
|
||||||
associated documentation will at all times remain with copyright
|
|
||||||
holders.
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
29
libjava/classpath/external/w3c_dom/Makefile.in
vendored
29
libjava/classpath/external/w3c_dom/Makefile.in
vendored
|
@ -43,16 +43,21 @@ am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||||
$(top_srcdir)/../../config/lead-dot.m4 \
|
$(top_srcdir)/../../config/lead-dot.m4 \
|
||||||
$(top_srcdir)/../../config/multi.m4 \
|
$(top_srcdir)/../../config/multi.m4 \
|
||||||
$(top_srcdir)/../../config/no-executables.m4 \
|
$(top_srcdir)/../../config/no-executables.m4 \
|
||||||
$(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
|
$(top_srcdir)/../../libtool.m4 \
|
||||||
$(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
|
$(top_srcdir)/../../ltoptions.m4 \
|
||||||
|
$(top_srcdir)/../../ltsugar.m4 \
|
||||||
|
$(top_srcdir)/../../ltversion.m4 \
|
||||||
|
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
|
||||||
|
$(top_srcdir)/m4/acinclude.m4 \
|
||||||
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
|
||||||
|
$(top_srcdir)/m4/ax_func_which_gethostbyname_r.m4 \
|
||||||
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
$(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
|
||||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
SOURCES =
|
SOURCES =
|
||||||
|
@ -62,12 +67,15 @@ ACLOCAL = @ACLOCAL@
|
||||||
AMDEP_FALSE = @AMDEP_FALSE@
|
AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AR = @AR@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
AUTOMAKE = @AUTOMAKE@
|
AUTOMAKE = @AUTOMAKE@
|
||||||
AWK = @AWK@
|
AWK = @AWK@
|
||||||
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
|
||||||
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
|
||||||
|
CAIRO_CFLAGS = @CAIRO_CFLAGS@
|
||||||
|
CAIRO_LIBS = @CAIRO_LIBS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
|
@ -113,6 +121,7 @@ DATE = @DATE@
|
||||||
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
|
DUMPBIN = @DUMPBIN@
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
|
@ -125,15 +134,16 @@ ERROR_CFLAGS = @ERROR_CFLAGS@
|
||||||
EXAMPLESDIR = @EXAMPLESDIR@
|
EXAMPLESDIR = @EXAMPLESDIR@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
FASTJAR = @FASTJAR@
|
FASTJAR = @FASTJAR@
|
||||||
|
FGREP = @FGREP@
|
||||||
FIND = @FIND@
|
FIND = @FIND@
|
||||||
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
|
||||||
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
|
||||||
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
|
||||||
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
|
||||||
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
|
|
||||||
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
|
|
||||||
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
|
||||||
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
|
||||||
|
FOUND_JAVAC_FALSE = @FOUND_JAVAC_FALSE@
|
||||||
|
FOUND_JAVAC_TRUE = @FOUND_JAVAC_TRUE@
|
||||||
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
|
||||||
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
|
||||||
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
|
||||||
|
@ -141,7 +151,6 @@ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
|
||||||
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
|
||||||
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||||
GCJ = @GCJ@
|
GCJ = @GCJ@
|
||||||
GCJX = @GCJX@
|
|
||||||
GCONF_CFLAGS = @GCONF_CFLAGS@
|
GCONF_CFLAGS = @GCONF_CFLAGS@
|
||||||
GCONF_LIBS = @GCONF_LIBS@
|
GCONF_LIBS = @GCONF_LIBS@
|
||||||
GDK_CFLAGS = @GDK_CFLAGS@
|
GDK_CFLAGS = @GDK_CFLAGS@
|
||||||
|
@ -151,6 +160,7 @@ GENINSRC_TRUE = @GENINSRC_TRUE@
|
||||||
GJDOC = @GJDOC@
|
GJDOC = @GJDOC@
|
||||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||||
GLIB_LIBS = @GLIB_LIBS@
|
GLIB_LIBS = @GLIB_LIBS@
|
||||||
|
GREP = @GREP@
|
||||||
GTK_CFLAGS = @GTK_CFLAGS@
|
GTK_CFLAGS = @GTK_CFLAGS@
|
||||||
GTK_LIBS = @GTK_LIBS@
|
GTK_LIBS = @GTK_LIBS@
|
||||||
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
|
||||||
|
@ -162,6 +172,7 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
JAVAC = @JAVAC@
|
||||||
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
|
||||||
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
|
||||||
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@
|
||||||
|
@ -171,6 +182,7 @@ JIKES = @JIKES@
|
||||||
JIKESENCODING = @JIKESENCODING@
|
JIKESENCODING = @JIKESENCODING@
|
||||||
JIKESWARNINGS = @JIKESWARNINGS@
|
JIKESWARNINGS = @JIKESWARNINGS@
|
||||||
KJC = @KJC@
|
KJC = @KJC@
|
||||||
|
LD = @LD@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBDEBUG = @LIBDEBUG@
|
LIBDEBUG = @LIBDEBUG@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
|
@ -190,6 +202,7 @@ MKDIR = @MKDIR@
|
||||||
MOC = @MOC@
|
MOC = @MOC@
|
||||||
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
MOZILLA_CFLAGS = @MOZILLA_CFLAGS@
|
||||||
MOZILLA_LIBS = @MOZILLA_LIBS@
|
MOZILLA_LIBS = @MOZILLA_LIBS@
|
||||||
|
NM = @NM@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
@ -211,6 +224,7 @@ RANLIB = @RANLIB@
|
||||||
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
|
||||||
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
|
||||||
REMOVE = @REMOVE@
|
REMOVE = @REMOVE@
|
||||||
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
|
||||||
|
@ -238,8 +252,10 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||||
X_LIBS = @X_LIBS@
|
X_LIBS = @X_LIBS@
|
||||||
X_PRE_LIBS = @X_PRE_LIBS@
|
X_PRE_LIBS = @X_PRE_LIBS@
|
||||||
ZIP = @ZIP@
|
ZIP = @ZIP@
|
||||||
|
ac_ct_AR = @ac_ct_AR@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_STRIP = @ac_ct_STRIP@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
|
@ -272,6 +288,7 @@ install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
|
lt_ECHO = @lt_ECHO@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
|
|
|
@ -172,7 +172,6 @@ public class gnuDynValue extends RecordAny implements DynValue,
|
||||||
else
|
else
|
||||||
return super.current_member_kind();
|
return super.current_member_kind();
|
||||||
}
|
}
|
||||||
;
|
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public String current_member_name() throws TypeMismatch, InvalidValue
|
public String current_member_name() throws TypeMismatch, InvalidValue
|
||||||
|
@ -182,7 +181,6 @@ public class gnuDynValue extends RecordAny implements DynValue,
|
||||||
else
|
else
|
||||||
return super.current_member_name();
|
return super.current_member_name();
|
||||||
}
|
}
|
||||||
;
|
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public NameDynAnyPair[] get_members_as_dyn_any() throws InvalidValue
|
public NameDynAnyPair[] get_members_as_dyn_any() throws InvalidValue
|
||||||
|
@ -191,7 +189,6 @@ public class gnuDynValue extends RecordAny implements DynValue,
|
||||||
throw new InvalidValue(ISNULL);
|
throw new InvalidValue(ISNULL);
|
||||||
return super.gnu_get_members_as_dyn_any();
|
return super.gnu_get_members_as_dyn_any();
|
||||||
}
|
}
|
||||||
;
|
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public NameValuePair[] get_members() throws InvalidValue
|
public NameValuePair[] get_members() throws InvalidValue
|
||||||
|
@ -201,7 +198,6 @@ public class gnuDynValue extends RecordAny implements DynValue,
|
||||||
else
|
else
|
||||||
return super.gnu_get_members();
|
return super.gnu_get_members();
|
||||||
}
|
}
|
||||||
;
|
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public void set_members_as_dyn_any(NameDynAnyPair[] value)
|
public void set_members_as_dyn_any(NameDynAnyPair[] value)
|
||||||
|
@ -210,7 +206,6 @@ public class gnuDynValue extends RecordAny implements DynValue,
|
||||||
super.set_members_as_dyn_any(value);
|
super.set_members_as_dyn_any(value);
|
||||||
isNull = false;
|
isNull = false;
|
||||||
}
|
}
|
||||||
;
|
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public void set_members(NameValuePair[] value)
|
public void set_members(NameValuePair[] value)
|
||||||
|
@ -219,7 +214,6 @@ public class gnuDynValue extends RecordAny implements DynValue,
|
||||||
super.set_members(value);
|
super.set_members(value);
|
||||||
isNull = false;
|
isNull = false;
|
||||||
}
|
}
|
||||||
;
|
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public boolean is_null()
|
public boolean is_null()
|
||||||
|
|
|
@ -1348,7 +1348,6 @@ public class gnuPOA
|
||||||
{
|
{
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the parent of this POA.
|
* Return the parent of this POA.
|
||||||
|
|
126
libjava/classpath/gnu/classpath/Pair.java
Normal file
126
libjava/classpath/gnu/classpath/Pair.java
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
/* Pair.java -- A heterogenous pair of objects.
|
||||||
|
Copyright (C) 2006
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.classpath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A container for a pair of heterogenous objects.
|
||||||
|
*
|
||||||
|
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
|
||||||
|
*/
|
||||||
|
public class Pair<A,B>
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The left-hand side of the pair.
|
||||||
|
*/
|
||||||
|
private A left;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The right-hand side of the pair.
|
||||||
|
*/
|
||||||
|
private B right;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new pair using the given left and
|
||||||
|
* right values.
|
||||||
|
*
|
||||||
|
* @param left the left-hand side of the pair.
|
||||||
|
* @param right the right-hand side of the pair.
|
||||||
|
*/
|
||||||
|
public Pair(A left, B right)
|
||||||
|
{
|
||||||
|
this.left = left;
|
||||||
|
this.right = right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the left-hand side of the pair.
|
||||||
|
*
|
||||||
|
* @return the left-hand value.
|
||||||
|
*/
|
||||||
|
public A getLeft()
|
||||||
|
{
|
||||||
|
return left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the right-hand side of the pair.
|
||||||
|
*
|
||||||
|
* @return the right-hand value.
|
||||||
|
*/
|
||||||
|
public B getRight()
|
||||||
|
{
|
||||||
|
return right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the specified object is also a
|
||||||
|
* pair with equivalent left and right values.
|
||||||
|
*
|
||||||
|
* @param obj the object to compare.
|
||||||
|
* @return true if the two are equal.
|
||||||
|
*/
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
if (obj instanceof Pair)
|
||||||
|
{
|
||||||
|
Pair<A,B> p = (Pair<A,B>) obj;
|
||||||
|
A lp = p.getLeft();
|
||||||
|
B rp = p.getRight();
|
||||||
|
return (lp == null ? left == null : lp.equals(left)) &&
|
||||||
|
(rp == null ? right == null : rp.equals(right));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a hashcode for the pair, created by the
|
||||||
|
* summation of the hashcodes of the left and right
|
||||||
|
* hand values.
|
||||||
|
*
|
||||||
|
* @return a hashcode for the pair.
|
||||||
|
*/
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
return (left == null ? 0 : left.hashCode())
|
||||||
|
+ (right == null ? 0 : right.hashCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -49,6 +49,7 @@ import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
|
import java.util.ServiceConfigurationError;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.LogRecord;
|
import java.util.logging.LogRecord;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
@ -176,7 +177,6 @@ public final class ServiceFactory
|
||||||
*/
|
*/
|
||||||
private static final Logger LOGGER = Logger.getLogger("gnu.classpath");
|
private static final Logger LOGGER = Logger.getLogger("gnu.classpath");
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Declared private in order to prevent constructing instances of
|
* Declared private in order to prevent constructing instances of
|
||||||
* this utility class.
|
* this utility class.
|
||||||
|
@ -224,6 +224,51 @@ public final class ServiceFactory
|
||||||
*/
|
*/
|
||||||
public static Iterator lookupProviders(Class spi,
|
public static Iterator lookupProviders(Class spi,
|
||||||
ClassLoader loader)
|
ClassLoader loader)
|
||||||
|
{
|
||||||
|
return lookupProviders(spi, loader, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds service providers that are implementing the specified
|
||||||
|
* Service Provider Interface.
|
||||||
|
*
|
||||||
|
* <p><b>On-demand loading:</b> Loading and initializing service
|
||||||
|
* providers is delayed as much as possible. The rationale is that
|
||||||
|
* typical clients will iterate through the set of installed service
|
||||||
|
* providers until one is found that matches some criteria (like
|
||||||
|
* supported formats, or quality of service). In such scenarios, it
|
||||||
|
* might make sense to install only the frequently needed service
|
||||||
|
* providers on the local machine. More exotic providers can be put
|
||||||
|
* onto a server; the server will only be contacted when no suitable
|
||||||
|
* service could be found locally.
|
||||||
|
*
|
||||||
|
* <p><b>Security considerations:</b> Any loaded service providers
|
||||||
|
* are loaded through the specified ClassLoader, or the system
|
||||||
|
* ClassLoader if <code>classLoader</code> is
|
||||||
|
* <code>null</code>. When <code>lookupProviders</code> is called,
|
||||||
|
* the current {@link AccessControlContext} gets recorded. This
|
||||||
|
* captured security context will determine the permissions when
|
||||||
|
* services get loaded via the <code>next()</code> method of the
|
||||||
|
* returned <code>Iterator</code>.
|
||||||
|
*
|
||||||
|
* @param spi the service provider interface which must be
|
||||||
|
* implemented by any loaded service providers.
|
||||||
|
*
|
||||||
|
* @param loader the class loader that will be used to load the
|
||||||
|
* service providers, or <code>null</code> for the system class
|
||||||
|
* loader. For using the context class loader, see {@link
|
||||||
|
* #lookupProviders(Class)}.
|
||||||
|
* @param error true if a {@link ServiceConfigurationError}
|
||||||
|
* should be thrown when an error occurs, rather
|
||||||
|
* than it merely being logged.
|
||||||
|
* @return an iterator over instances of <code>spi</code>.
|
||||||
|
*
|
||||||
|
* @throws IllegalArgumentException if <code>spi</code> is
|
||||||
|
* <code>null</code>.
|
||||||
|
*/
|
||||||
|
public static Iterator lookupProviders(Class spi,
|
||||||
|
ClassLoader loader,
|
||||||
|
boolean error)
|
||||||
{
|
{
|
||||||
String resourceName;
|
String resourceName;
|
||||||
Enumeration urls;
|
Enumeration urls;
|
||||||
|
@ -246,10 +291,14 @@ public final class ServiceFactory
|
||||||
* does not return anything (no providers installed).
|
* does not return anything (no providers installed).
|
||||||
*/
|
*/
|
||||||
log(Level.WARNING, "cannot access {0}", resourceName, ioex);
|
log(Level.WARNING, "cannot access {0}", resourceName, ioex);
|
||||||
|
if (error)
|
||||||
|
throw new ServiceConfigurationError("Failed to access + " +
|
||||||
|
resourceName, ioex);
|
||||||
|
else
|
||||||
return Collections.EMPTY_LIST.iterator();
|
return Collections.EMPTY_LIST.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ServiceIterator(spi, urls, loader,
|
return new ServiceIterator(spi, urls, loader, error,
|
||||||
AccessController.getContext());
|
AccessController.getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,6 +391,11 @@ public final class ServiceFactory
|
||||||
*/
|
*/
|
||||||
private Object nextProvider;
|
private Object nextProvider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True if a {@link ServiceConfigurationError} should be thrown
|
||||||
|
* when an error occurs, instead of it merely being logged.
|
||||||
|
*/
|
||||||
|
private boolean error;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs an Iterator that loads and initializes services on
|
* Constructs an Iterator that loads and initializes services on
|
||||||
|
@ -359,16 +413,21 @@ public final class ServiceFactory
|
||||||
* @param loader the ClassLoader that gets used for loading
|
* @param loader the ClassLoader that gets used for loading
|
||||||
* service providers.
|
* service providers.
|
||||||
*
|
*
|
||||||
|
* @param error true if a {@link ServiceConfigurationError}
|
||||||
|
* should be thrown when an error occurs, rather
|
||||||
|
* than it merely being logged.
|
||||||
|
*
|
||||||
* @param securityContext the security context to use when loading
|
* @param securityContext the security context to use when loading
|
||||||
* and initializing service providers.
|
* and initializing service providers.
|
||||||
*/
|
*/
|
||||||
ServiceIterator(Class spi, Enumeration urls, ClassLoader loader,
|
ServiceIterator(Class spi, Enumeration urls, ClassLoader loader,
|
||||||
AccessControlContext securityContext)
|
boolean error, AccessControlContext securityContext)
|
||||||
{
|
{
|
||||||
this.spi = spi;
|
this.spi = spi;
|
||||||
this.urls = urls;
|
this.urls = urls;
|
||||||
this.loader = loader;
|
this.loader = loader;
|
||||||
this.securityContext = securityContext;
|
this.securityContext = securityContext;
|
||||||
|
this.error = error;
|
||||||
this.nextProvider = loadNextServiceProvider();
|
this.nextProvider = loadNextServiceProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,6 +485,9 @@ public final class ServiceFactory
|
||||||
log(Level.WARNING, "IOException upon reading {0}", currentURL,
|
log(Level.WARNING, "IOException upon reading {0}", currentURL,
|
||||||
readProblem);
|
readProblem);
|
||||||
line = null;
|
line = null;
|
||||||
|
if (error)
|
||||||
|
throw new ServiceConfigurationError("Error reading " +
|
||||||
|
currentURL, readProblem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* When we are at the end of one list of services,
|
/* When we are at the end of one list of services,
|
||||||
|
@ -477,6 +539,13 @@ public final class ServiceFactory
|
||||||
log(Level.WARNING, msg,
|
log(Level.WARNING, msg,
|
||||||
new Object[] { line, spi.getName(), currentURL },
|
new Object[] { line, spi.getName(), currentURL },
|
||||||
ex);
|
ex);
|
||||||
|
if (error)
|
||||||
|
throw new ServiceConfigurationError("Cannot load service "+
|
||||||
|
"provider class " +
|
||||||
|
line + " specified by "+
|
||||||
|
"\"META-INF/services/"+
|
||||||
|
spi.getName() + "\" in "+
|
||||||
|
currentURL, ex);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -497,6 +566,9 @@ public final class ServiceFactory
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
log(Level.WARNING, "cannot close {0}", currentURL, ex);
|
log(Level.WARNING, "cannot close {0}", currentURL, ex);
|
||||||
|
if (error)
|
||||||
|
throw new ServiceConfigurationError("Cannot close " +
|
||||||
|
currentURL, ex);
|
||||||
}
|
}
|
||||||
reader = null;
|
reader = null;
|
||||||
currentURL = null;
|
currentURL = null;
|
||||||
|
@ -515,6 +587,9 @@ public final class ServiceFactory
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
log(Level.WARNING, "cannot open {0}", currentURL, ex);
|
log(Level.WARNING, "cannot open {0}", currentURL, ex);
|
||||||
|
if (error)
|
||||||
|
throw new ServiceConfigurationError("Cannot open " +
|
||||||
|
currentURL, ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (reader == null);
|
while (reader == null);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* VariableTable.java -- A class representing a Variable Table for a method
|
/* VariableTable.java -- A class representing a Variable Table for a method
|
||||||
Copyright (C) 2005 Free Software Foundation
|
Copyright (C) 2005, 2007 Free Software Foundation
|
||||||
|
|
||||||
This file is part of GNU Classpath.
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* ArrayValue.java -- JDWP wrapper class for an Object value
|
/* ObjectValue.java -- JDWP wrapper class for an Object value
|
||||||
Copyright (C) 2007 Free Software Foundation
|
Copyright (C) 2007 Free Software Foundation
|
||||||
|
|
||||||
This file is part of GNU Classpath.
|
This file is part of GNU Classpath.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* AWTUtilities.java -- Common utility methods for AWT and Swing.
|
/* AWTUtilities.java -- Common utility methods for AWT and Swing.
|
||||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
Copyright (C) 2005, 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU Classpath.
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ import java.awt.Point;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.util.AbstractSequentialList;
|
import java.util.AbstractSequentialList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -694,4 +695,204 @@ public class AWTUtilities
|
||||||
{
|
{
|
||||||
return java.awt.EventQueue.isDispatchThread();
|
return java.awt.EventQueue.isDispatchThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the specified key code is valid.
|
||||||
|
*/
|
||||||
|
public static boolean isValidKey(int keyCode)
|
||||||
|
{
|
||||||
|
switch (keyCode)
|
||||||
|
{
|
||||||
|
case KeyEvent.VK_ENTER:
|
||||||
|
case KeyEvent.VK_BACK_SPACE:
|
||||||
|
case KeyEvent.VK_TAB:
|
||||||
|
case KeyEvent.VK_CANCEL:
|
||||||
|
case KeyEvent.VK_CLEAR:
|
||||||
|
case KeyEvent.VK_SHIFT:
|
||||||
|
case KeyEvent.VK_CONTROL:
|
||||||
|
case KeyEvent.VK_ALT:
|
||||||
|
case KeyEvent.VK_PAUSE:
|
||||||
|
case KeyEvent.VK_CAPS_LOCK:
|
||||||
|
case KeyEvent.VK_ESCAPE:
|
||||||
|
case KeyEvent.VK_SPACE:
|
||||||
|
case KeyEvent.VK_PAGE_UP:
|
||||||
|
case KeyEvent.VK_PAGE_DOWN:
|
||||||
|
case KeyEvent.VK_END:
|
||||||
|
case KeyEvent.VK_HOME:
|
||||||
|
case KeyEvent.VK_LEFT:
|
||||||
|
case KeyEvent.VK_UP:
|
||||||
|
case KeyEvent.VK_RIGHT:
|
||||||
|
case KeyEvent.VK_DOWN:
|
||||||
|
case KeyEvent.VK_COMMA:
|
||||||
|
case KeyEvent.VK_MINUS:
|
||||||
|
case KeyEvent.VK_PERIOD:
|
||||||
|
case KeyEvent.VK_SLASH:
|
||||||
|
case KeyEvent.VK_0:
|
||||||
|
case KeyEvent.VK_1:
|
||||||
|
case KeyEvent.VK_2:
|
||||||
|
case KeyEvent.VK_3:
|
||||||
|
case KeyEvent.VK_4:
|
||||||
|
case KeyEvent.VK_5:
|
||||||
|
case KeyEvent.VK_6:
|
||||||
|
case KeyEvent.VK_7:
|
||||||
|
case KeyEvent.VK_8:
|
||||||
|
case KeyEvent.VK_9:
|
||||||
|
case KeyEvent.VK_SEMICOLON:
|
||||||
|
case KeyEvent.VK_EQUALS:
|
||||||
|
case KeyEvent.VK_A:
|
||||||
|
case KeyEvent.VK_B:
|
||||||
|
case KeyEvent.VK_C:
|
||||||
|
case KeyEvent.VK_D:
|
||||||
|
case KeyEvent.VK_E:
|
||||||
|
case KeyEvent.VK_F:
|
||||||
|
case KeyEvent.VK_G:
|
||||||
|
case KeyEvent.VK_H:
|
||||||
|
case KeyEvent.VK_I:
|
||||||
|
case KeyEvent.VK_J:
|
||||||
|
case KeyEvent.VK_K:
|
||||||
|
case KeyEvent.VK_L:
|
||||||
|
case KeyEvent.VK_M:
|
||||||
|
case KeyEvent.VK_N:
|
||||||
|
case KeyEvent.VK_O:
|
||||||
|
case KeyEvent.VK_P:
|
||||||
|
case KeyEvent.VK_Q:
|
||||||
|
case KeyEvent.VK_R:
|
||||||
|
case KeyEvent.VK_S:
|
||||||
|
case KeyEvent.VK_T:
|
||||||
|
case KeyEvent.VK_U:
|
||||||
|
case KeyEvent.VK_V:
|
||||||
|
case KeyEvent.VK_W:
|
||||||
|
case KeyEvent.VK_X:
|
||||||
|
case KeyEvent.VK_Y:
|
||||||
|
case KeyEvent.VK_Z:
|
||||||
|
case KeyEvent.VK_OPEN_BRACKET:
|
||||||
|
case KeyEvent.VK_BACK_SLASH:
|
||||||
|
case KeyEvent.VK_CLOSE_BRACKET:
|
||||||
|
case KeyEvent.VK_NUMPAD0:
|
||||||
|
case KeyEvent.VK_NUMPAD1:
|
||||||
|
case KeyEvent.VK_NUMPAD2:
|
||||||
|
case KeyEvent.VK_NUMPAD3:
|
||||||
|
case KeyEvent.VK_NUMPAD4:
|
||||||
|
case KeyEvent.VK_NUMPAD5:
|
||||||
|
case KeyEvent.VK_NUMPAD6:
|
||||||
|
case KeyEvent.VK_NUMPAD7:
|
||||||
|
case KeyEvent.VK_NUMPAD8:
|
||||||
|
case KeyEvent.VK_NUMPAD9:
|
||||||
|
case KeyEvent.VK_MULTIPLY:
|
||||||
|
case KeyEvent.VK_ADD:
|
||||||
|
case KeyEvent.VK_SEPARATOR:
|
||||||
|
case KeyEvent.VK_SUBTRACT:
|
||||||
|
case KeyEvent.VK_DECIMAL:
|
||||||
|
case KeyEvent.VK_DIVIDE:
|
||||||
|
case KeyEvent.VK_DELETE:
|
||||||
|
case KeyEvent.VK_NUM_LOCK:
|
||||||
|
case KeyEvent.VK_SCROLL_LOCK:
|
||||||
|
case KeyEvent.VK_F1:
|
||||||
|
case KeyEvent.VK_F2:
|
||||||
|
case KeyEvent.VK_F3:
|
||||||
|
case KeyEvent.VK_F4:
|
||||||
|
case KeyEvent.VK_F5:
|
||||||
|
case KeyEvent.VK_F6:
|
||||||
|
case KeyEvent.VK_F7:
|
||||||
|
case KeyEvent.VK_F8:
|
||||||
|
case KeyEvent.VK_F9:
|
||||||
|
case KeyEvent.VK_F10:
|
||||||
|
case KeyEvent.VK_F11:
|
||||||
|
case KeyEvent.VK_F12:
|
||||||
|
case KeyEvent.VK_F13:
|
||||||
|
case KeyEvent.VK_F14:
|
||||||
|
case KeyEvent.VK_F15:
|
||||||
|
case KeyEvent.VK_F16:
|
||||||
|
case KeyEvent.VK_F17:
|
||||||
|
case KeyEvent.VK_F18:
|
||||||
|
case KeyEvent.VK_F19:
|
||||||
|
case KeyEvent.VK_F20:
|
||||||
|
case KeyEvent.VK_F21:
|
||||||
|
case KeyEvent.VK_F22:
|
||||||
|
case KeyEvent.VK_F23:
|
||||||
|
case KeyEvent.VK_F24:
|
||||||
|
case KeyEvent.VK_PRINTSCREEN:
|
||||||
|
case KeyEvent.VK_INSERT:
|
||||||
|
case KeyEvent.VK_HELP:
|
||||||
|
case KeyEvent.VK_META:
|
||||||
|
case KeyEvent.VK_BACK_QUOTE:
|
||||||
|
case KeyEvent.VK_QUOTE:
|
||||||
|
case KeyEvent.VK_KP_UP:
|
||||||
|
case KeyEvent.VK_KP_DOWN:
|
||||||
|
case KeyEvent.VK_KP_LEFT:
|
||||||
|
case KeyEvent.VK_KP_RIGHT:
|
||||||
|
case KeyEvent.VK_DEAD_GRAVE:
|
||||||
|
case KeyEvent.VK_DEAD_ACUTE:
|
||||||
|
case KeyEvent.VK_DEAD_CIRCUMFLEX:
|
||||||
|
case KeyEvent.VK_DEAD_TILDE:
|
||||||
|
case KeyEvent.VK_DEAD_MACRON:
|
||||||
|
case KeyEvent.VK_DEAD_BREVE:
|
||||||
|
case KeyEvent.VK_DEAD_ABOVEDOT:
|
||||||
|
case KeyEvent.VK_DEAD_DIAERESIS:
|
||||||
|
case KeyEvent.VK_DEAD_ABOVERING:
|
||||||
|
case KeyEvent.VK_DEAD_DOUBLEACUTE:
|
||||||
|
case KeyEvent.VK_DEAD_CARON:
|
||||||
|
case KeyEvent.VK_DEAD_CEDILLA:
|
||||||
|
case KeyEvent.VK_DEAD_OGONEK:
|
||||||
|
case KeyEvent.VK_DEAD_IOTA:
|
||||||
|
case KeyEvent.VK_DEAD_VOICED_SOUND:
|
||||||
|
case KeyEvent.VK_DEAD_SEMIVOICED_SOUND:
|
||||||
|
case KeyEvent.VK_AMPERSAND:
|
||||||
|
case KeyEvent.VK_ASTERISK:
|
||||||
|
case KeyEvent.VK_QUOTEDBL:
|
||||||
|
case KeyEvent.VK_LESS:
|
||||||
|
case KeyEvent.VK_GREATER:
|
||||||
|
case KeyEvent.VK_BRACELEFT:
|
||||||
|
case KeyEvent.VK_BRACERIGHT:
|
||||||
|
case KeyEvent.VK_AT:
|
||||||
|
case KeyEvent.VK_COLON:
|
||||||
|
case KeyEvent.VK_CIRCUMFLEX:
|
||||||
|
case KeyEvent.VK_DOLLAR:
|
||||||
|
case KeyEvent.VK_EURO_SIGN:
|
||||||
|
case KeyEvent.VK_EXCLAMATION_MARK:
|
||||||
|
case KeyEvent.VK_INVERTED_EXCLAMATION_MARK:
|
||||||
|
case KeyEvent.VK_LEFT_PARENTHESIS:
|
||||||
|
case KeyEvent.VK_NUMBER_SIGN:
|
||||||
|
case KeyEvent.VK_PLUS:
|
||||||
|
case KeyEvent.VK_RIGHT_PARENTHESIS:
|
||||||
|
case KeyEvent.VK_UNDERSCORE:
|
||||||
|
case KeyEvent.VK_FINAL:
|
||||||
|
case KeyEvent.VK_CONVERT:
|
||||||
|
case KeyEvent.VK_NONCONVERT:
|
||||||
|
case KeyEvent.VK_ACCEPT:
|
||||||
|
case KeyEvent.VK_MODECHANGE:
|
||||||
|
case KeyEvent.VK_KANA:
|
||||||
|
case KeyEvent.VK_KANJI:
|
||||||
|
case KeyEvent.VK_ALPHANUMERIC:
|
||||||
|
case KeyEvent.VK_KATAKANA:
|
||||||
|
case KeyEvent.VK_HIRAGANA:
|
||||||
|
case KeyEvent.VK_FULL_WIDTH:
|
||||||
|
case KeyEvent.VK_HALF_WIDTH:
|
||||||
|
case KeyEvent.VK_ROMAN_CHARACTERS:
|
||||||
|
case KeyEvent.VK_ALL_CANDIDATES:
|
||||||
|
case KeyEvent.VK_PREVIOUS_CANDIDATE:
|
||||||
|
case KeyEvent.VK_CODE_INPUT:
|
||||||
|
case KeyEvent.VK_JAPANESE_KATAKANA:
|
||||||
|
case KeyEvent.VK_JAPANESE_HIRAGANA:
|
||||||
|
case KeyEvent.VK_JAPANESE_ROMAN:
|
||||||
|
case KeyEvent.VK_KANA_LOCK:
|
||||||
|
case KeyEvent.VK_INPUT_METHOD_ON_OFF:
|
||||||
|
case KeyEvent.VK_CUT:
|
||||||
|
case KeyEvent.VK_COPY:
|
||||||
|
case KeyEvent.VK_PASTE:
|
||||||
|
case KeyEvent.VK_UNDO:
|
||||||
|
case KeyEvent.VK_AGAIN:
|
||||||
|
case KeyEvent.VK_FIND:
|
||||||
|
case KeyEvent.VK_PROPS:
|
||||||
|
case KeyEvent.VK_STOP:
|
||||||
|
case KeyEvent.VK_COMPOSE:
|
||||||
|
case KeyEvent.VK_ALT_GRAPH:
|
||||||
|
case KeyEvent.VK_BEGIN:
|
||||||
|
case KeyEvent.VK_CONTEXT_MENU:
|
||||||
|
case KeyEvent.VK_WINDOWS:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Native implementation of functions in GThreadNativeMethodRunner
|
/* ClasspathGraphicsEnvironment.java
|
||||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU Classpath.
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
@ -35,36 +35,33 @@ this exception to your version of the library, but you are not
|
||||||
obligated to do so. If you do not wish to do so, delete this
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
exception statement from your version. */
|
exception statement from your version. */
|
||||||
|
|
||||||
|
package gnu.java.awt;
|
||||||
|
|
||||||
#include "gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h"
|
import java.awt.GraphicsEnvironment;
|
||||||
#include "gthread-jni.h"
|
import java.awt.image.ColorModel;
|
||||||
|
import java.awt.image.SampleModel;
|
||||||
|
import java.awt.image.WritableRaster;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Class: GThreadNativeMethodRunner
|
* This class extends the GraphicsEnvironment API with some Classpath-specific
|
||||||
* Method: nativeRun
|
* methods, in order to provide optimized graphics handling.
|
||||||
* Signature: (J)V
|
|
||||||
*
|
|
||||||
* Purpose: Run the C function whose function pointer is
|
|
||||||
*
|
*
|
||||||
|
* @author Francis Kung <fkung@redhat.com>
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL
|
public abstract class ClasspathGraphicsEnvironment
|
||||||
Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun
|
extends GraphicsEnvironment
|
||||||
(JNIEnv *env __attribute__((unused)),
|
|
||||||
jobject lcl_obj __attribute__((unused)),
|
|
||||||
jlong funcAddr, jlong funcArg)
|
|
||||||
{
|
{
|
||||||
/* Convert the function's address back into a pointer to a C function. */
|
/**
|
||||||
void *(*funcPtr)(void *) = (void *(*)(void *)) (size_t)funcAddr;
|
* Returns an appropriate Raster that can efficiently back a
|
||||||
|
* BufferedImage with the given ColorModel and SampleModel.
|
||||||
/* We do not need to worry about the return value from funcPtr(); it's
|
*
|
||||||
just thrown away. That is part of the g_threads spec, so no reason
|
* @param cm The color model.
|
||||||
to worry about returning it. */
|
* @param sm The samepl model.
|
||||||
(void) funcPtr((void *) (size_t)funcArg);
|
* @return An appropriate WritableRaster, or null if acceleration/optimization
|
||||||
/* Fall off the end and terminate the thread of control. */
|
* is not available for the given colour model / sample model.
|
||||||
|
*/
|
||||||
|
public WritableRaster createRaster(ColorModel cm, SampleModel sm)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Local Variables: */
|
|
||||||
/* c-file-style: "gnu" */
|
|
||||||
/* End: */
|
|
||||||
|
|
||||||
|
|
|
@ -38,36 +38,28 @@ exception statement from your version. */
|
||||||
|
|
||||||
package gnu.java.awt;
|
package gnu.java.awt;
|
||||||
|
|
||||||
import gnu.java.awt.EmbeddedWindow;
|
import gnu.java.awt.peer.ClasspathDesktopPeer;
|
||||||
import gnu.java.awt.peer.ClasspathFontPeer;
|
import gnu.java.awt.peer.ClasspathFontPeer;
|
||||||
import gnu.java.awt.peer.EmbeddedWindowPeer;
|
import gnu.java.awt.peer.EmbeddedWindowPeer;
|
||||||
import gnu.java.security.action.SetAccessibleAction;
|
import gnu.java.security.action.SetAccessibleAction;
|
||||||
|
|
||||||
import java.awt.AWTException;
|
import java.awt.AWTException;
|
||||||
import java.awt.Component;
|
import java.awt.Desktop;
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.DisplayMode;
|
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.FontMetrics;
|
import java.awt.FontFormatException;
|
||||||
import java.awt.GraphicsDevice;
|
import java.awt.GraphicsDevice;
|
||||||
import java.awt.GraphicsEnvironment;
|
import java.awt.GraphicsEnvironment;
|
||||||
import java.awt.Image;
|
import java.awt.HeadlessException;
|
||||||
import java.awt.Point;
|
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.font.FontRenderContext;
|
import java.awt.font.TextAttribute;
|
||||||
import java.awt.image.ColorModel;
|
import java.awt.peer.DesktopPeer;
|
||||||
import java.awt.image.ImageProducer;
|
|
||||||
import java.awt.peer.RobotPeer;
|
import java.awt.peer.RobotPeer;
|
||||||
import java.io.File;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.text.AttributedString;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.imageio.spi.IIORegistry;
|
import javax.imageio.spi.IIORegistry;
|
||||||
|
|
||||||
|
@ -118,7 +110,8 @@ public abstract class ClasspathToolkit
|
||||||
* this font peer should have, such as size, weight, family name, or
|
* this font peer should have, such as size, weight, family name, or
|
||||||
* transformation.
|
* transformation.
|
||||||
*/
|
*/
|
||||||
public abstract ClasspathFontPeer getClasspathFontPeer (String name, Map attrs);
|
public abstract ClasspathFontPeer getClasspathFontPeer (String name,
|
||||||
|
Map<?,?> attrs);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link Font}, in a platform-specific manner.
|
* Creates a {@link Font}, in a platform-specific manner.
|
||||||
|
@ -138,8 +131,7 @@ public abstract class ClasspathToolkit
|
||||||
{
|
{
|
||||||
Constructor fontConstructor = Font.class.getDeclaredConstructor
|
Constructor fontConstructor = Font.class.getDeclaredConstructor
|
||||||
(new Class[] { String.class, Map.class });
|
(new Class[] { String.class, Map.class });
|
||||||
AccessController.doPrivileged
|
AccessController.doPrivileged(new SetAccessibleAction(fontConstructor));
|
||||||
(new SetAccessibleAction(fontConstructor));
|
|
||||||
f = (Font) fontConstructor.newInstance(new Object[] { name, attrs });
|
f = (Font) fontConstructor.newInstance(new Object[] { name, attrs });
|
||||||
}
|
}
|
||||||
catch (IllegalAccessException e)
|
catch (IllegalAccessException e)
|
||||||
|
@ -224,5 +216,18 @@ public abstract class ClasspathToolkit
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.awt.Toolkit#createDesktopPeer(java.awt.Desktop)
|
||||||
|
*/
|
||||||
|
protected DesktopPeer createDesktopPeer(Desktop target)
|
||||||
|
throws HeadlessException
|
||||||
|
{
|
||||||
|
if (GraphicsEnvironment.isHeadless())
|
||||||
|
throw new HeadlessException();
|
||||||
|
|
||||||
|
return ClasspathDesktopPeer.getDesktop();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,13 @@ import java.util.Locale;
|
||||||
*/
|
*/
|
||||||
public interface FontDelegate
|
public interface FontDelegate
|
||||||
{
|
{
|
||||||
|
public static final int FLAG_FITTED = 1 << 0;
|
||||||
|
public static final int FLAG_NO_HINT_HORIZONTAL = 1 << 1;
|
||||||
|
public static final int FLAG_NO_HINT_VERTICAL = 1 << 2;
|
||||||
|
public static final int FLAG_NO_HINT_EDGE_POINTS = 1 << 3;
|
||||||
|
public static final int FLAG_NO_HINT_STRONG_POINTS = 1 << 4;
|
||||||
|
public static final int FLAG_NO_HINT_WEAK_POINTS = 1 << 5;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the full name of this font face in the specified
|
* Returns the full name of this font face in the specified
|
||||||
* locale, for example <i>“Univers Light”</i>.
|
* locale, for example <i>“Univers Light”</i>.
|
||||||
|
@ -221,7 +228,8 @@ public interface FontDelegate
|
||||||
float pointSize,
|
float pointSize,
|
||||||
AffineTransform transform,
|
AffineTransform transform,
|
||||||
boolean antialias,
|
boolean antialias,
|
||||||
boolean fractionalMetrics);
|
boolean fractionalMetrics,
|
||||||
|
int type);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -164,7 +164,9 @@ public class GNUGlyphVector
|
||||||
renderContext.usesFractionalMetrics(),
|
renderContext.usesFractionalMetrics(),
|
||||||
/* horizontal */ true,
|
/* horizontal */ true,
|
||||||
advance);
|
advance);
|
||||||
pos[p] = x += advance.x;
|
// FIXME: We shouldn't round here, but instead hint the metrics
|
||||||
|
// correctly.
|
||||||
|
pos[p] = x += Math.round(advance.x);
|
||||||
pos[p + 1] = y += advance.y;
|
pos[p + 1] = y += advance.y;
|
||||||
}
|
}
|
||||||
valid = true;
|
valid = true;
|
||||||
|
@ -284,6 +286,22 @@ public class GNUGlyphVector
|
||||||
return outline;
|
return outline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Shape getOutline(float x, float y, int type)
|
||||||
|
{
|
||||||
|
validate();
|
||||||
|
|
||||||
|
GeneralPath outline = new GeneralPath();
|
||||||
|
int len = glyphs.length;
|
||||||
|
for (int i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
GeneralPath p = new GeneralPath(getGlyphOutline(i, type));
|
||||||
|
outline.append(p, false);
|
||||||
|
}
|
||||||
|
AffineTransform t = new AffineTransform();
|
||||||
|
t.translate(x, y);
|
||||||
|
outline.transform(t);
|
||||||
|
return outline;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines the shape of the specified glyph.
|
* Determines the shape of the specified glyph.
|
||||||
|
@ -309,7 +327,8 @@ public class GNUGlyphVector
|
||||||
|
|
||||||
path = fontDelegate.getGlyphOutline(glyphs[glyphIndex], fontSize, tx,
|
path = fontDelegate.getGlyphOutline(glyphs[glyphIndex], fontSize, tx,
|
||||||
renderContext.isAntiAliased(),
|
renderContext.isAntiAliased(),
|
||||||
renderContext.usesFractionalMetrics());
|
renderContext.usesFractionalMetrics(),
|
||||||
|
FontDelegate.FLAG_FITTED);
|
||||||
|
|
||||||
tx = new AffineTransform();
|
tx = new AffineTransform();
|
||||||
tx.translate(pos[glyphIndex * 2], pos[glyphIndex * 2 + 1]);
|
tx.translate(pos[glyphIndex * 2], pos[glyphIndex * 2 + 1]);
|
||||||
|
@ -317,6 +336,32 @@ public class GNUGlyphVector
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Shape getGlyphOutline(int glyphIndex, int type)
|
||||||
|
{
|
||||||
|
AffineTransform tx, glyphTx;
|
||||||
|
GeneralPath path;
|
||||||
|
|
||||||
|
validate();
|
||||||
|
|
||||||
|
if ((transforms != null)
|
||||||
|
&& ((glyphTx = transforms[glyphIndex]) != null))
|
||||||
|
{
|
||||||
|
tx = new AffineTransform(transform);
|
||||||
|
tx.concatenate(glyphTx);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tx = transform;
|
||||||
|
|
||||||
|
path = fontDelegate.getGlyphOutline(glyphs[glyphIndex], fontSize, tx,
|
||||||
|
renderContext.isAntiAliased(),
|
||||||
|
renderContext.usesFractionalMetrics(),
|
||||||
|
type);
|
||||||
|
|
||||||
|
tx = new AffineTransform();
|
||||||
|
tx.translate(pos[glyphIndex * 2], pos[glyphIndex * 2 + 1]);
|
||||||
|
path.transform(tx);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines the position of the specified glyph, or the
|
* Determines the position of the specified glyph, or the
|
||||||
|
|
83
libjava/classpath/gnu/java/awt/font/autofit/AutoHinter.java
Normal file
83
libjava/classpath/gnu/java/awt/font/autofit/AutoHinter.java
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/* AutoHinter.java -- The entry point into the hinter implementation.
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.awt.font.autofit;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.opentype.Hinter;
|
||||||
|
import gnu.java.awt.font.opentype.OpenTypeFont;
|
||||||
|
import gnu.java.awt.font.opentype.truetype.Fixed;
|
||||||
|
import gnu.java.awt.font.opentype.truetype.Zone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The public interface to the automatic gridfitter.
|
||||||
|
*/
|
||||||
|
public class AutoHinter
|
||||||
|
implements Hinter
|
||||||
|
{
|
||||||
|
Latin latinScript;
|
||||||
|
LatinMetrics metrics;
|
||||||
|
GlyphHints hints;
|
||||||
|
|
||||||
|
HintScaler scaler = new HintScaler();
|
||||||
|
public void init(OpenTypeFont font)
|
||||||
|
{
|
||||||
|
// TODO: Should support other scripts too.
|
||||||
|
latinScript = new Latin();
|
||||||
|
metrics = new LatinMetrics(font);
|
||||||
|
latinScript.initMetrics(metrics, font);
|
||||||
|
scaler.face = font;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void applyHints(Zone outline)
|
||||||
|
{
|
||||||
|
if (hints == null)
|
||||||
|
hints = new GlyphHints();
|
||||||
|
scaler.xScale = Fixed.valueOf16(outline.scaleX * 64);
|
||||||
|
scaler.yScale = Fixed.valueOf16(outline.scaleY * 64);
|
||||||
|
latinScript.scaleMetrics(metrics, scaler);
|
||||||
|
latinScript.applyHints(hints, outline, metrics);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFlags(int flags)
|
||||||
|
{
|
||||||
|
if (hints == null)
|
||||||
|
hints = new GlyphHints();
|
||||||
|
hints.flags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
/* AxisHints.java -- FIXME: briefly describe file purpose
|
/* AxisHints.java -- Hints specific to an axis
|
||||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU Classpath.
|
This file is part of GNU Classpath.
|
||||||
|
@ -42,4 +42,71 @@ class AxisHints
|
||||||
{
|
{
|
||||||
|
|
||||||
Segment[] segments;
|
Segment[] segments;
|
||||||
|
int majorDir;
|
||||||
|
int numSegments;
|
||||||
|
int numEdges;
|
||||||
|
Edge[] edges;
|
||||||
|
|
||||||
|
AxisHints()
|
||||||
|
{
|
||||||
|
segments = new Segment[4];
|
||||||
|
edges = new Edge[4];
|
||||||
|
}
|
||||||
|
|
||||||
|
Segment newSegment()
|
||||||
|
{
|
||||||
|
if (numSegments >= segments.length)
|
||||||
|
{
|
||||||
|
// Grow array.
|
||||||
|
int newMax = segments.length;
|
||||||
|
newMax += (newMax >> 2) + 4; // From FreeType.
|
||||||
|
Segment[] newSegs = new Segment[newMax];
|
||||||
|
System.arraycopy(segments, 0, newSegs, 0, numSegments);
|
||||||
|
segments = newSegs;
|
||||||
|
}
|
||||||
|
Segment seg = new Segment();
|
||||||
|
segments[numSegments] = seg;
|
||||||
|
numSegments++;
|
||||||
|
return seg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Edge newEdge(int pos)
|
||||||
|
{
|
||||||
|
if (numEdges >= edges.length)
|
||||||
|
{
|
||||||
|
// Grow array.
|
||||||
|
int newMax = edges.length;
|
||||||
|
newMax += (newMax >> 2) + 4; // From FreeType.
|
||||||
|
Edge[] newEdges = new Edge[newMax];
|
||||||
|
System.arraycopy(edges, 0, newEdges, 0, numEdges);
|
||||||
|
edges = newEdges;
|
||||||
|
}
|
||||||
|
int edgeIndex = numEdges;
|
||||||
|
Edge edge = edges[edgeIndex] = new Edge();
|
||||||
|
while (edgeIndex > 0 && edges[edgeIndex - 1].fpos > pos)
|
||||||
|
{
|
||||||
|
edges[edgeIndex] = edges[edgeIndex - 1];
|
||||||
|
edgeIndex--;
|
||||||
|
}
|
||||||
|
edges[edgeIndex] = edge;
|
||||||
|
numEdges++;
|
||||||
|
edge.fpos = pos;
|
||||||
|
|
||||||
|
return edge;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int getEdgeIndex(Edge edge2)
|
||||||
|
{
|
||||||
|
int idx = -1;
|
||||||
|
for (int i = 0; i < numEdges; i++)
|
||||||
|
{
|
||||||
|
if (edges[i] == edge2)
|
||||||
|
{
|
||||||
|
idx = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,4 +58,29 @@ interface Constants
|
||||||
* The number of dimensions.
|
* The number of dimensions.
|
||||||
*/
|
*/
|
||||||
static final int DIMENSION_MAX = 2;
|
static final int DIMENSION_MAX = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates a vector with no specific direction.
|
||||||
|
*/
|
||||||
|
static final int DIR_NONE = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Right direction.
|
||||||
|
*/
|
||||||
|
static final int DIR_RIGHT = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Left direction.
|
||||||
|
*/
|
||||||
|
static final int DIR_LEFT = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Up direction.
|
||||||
|
*/
|
||||||
|
static final int DIR_UP = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Down direction.
|
||||||
|
*/
|
||||||
|
static final int DIR_DOWN = -2;
|
||||||
}
|
}
|
||||||
|
|
80
libjava/classpath/gnu/java/awt/font/autofit/Edge.java
Normal file
80
libjava/classpath/gnu/java/awt/font/autofit/Edge.java
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/* Edge.java -- An edge of segments
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.awt.font.autofit;
|
||||||
|
|
||||||
|
class Edge
|
||||||
|
{
|
||||||
|
int fpos;
|
||||||
|
Segment first;
|
||||||
|
Segment last;
|
||||||
|
int opos;
|
||||||
|
Edge link;
|
||||||
|
Edge serif;
|
||||||
|
int flags;
|
||||||
|
int dir;
|
||||||
|
Width blueEdge;
|
||||||
|
int pos;
|
||||||
|
int scale;
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
StringBuilder s = new StringBuilder();
|
||||||
|
s.append("[Edge] id");
|
||||||
|
s.append(hashCode());
|
||||||
|
s.append(", fpos: ");
|
||||||
|
s.append(fpos);
|
||||||
|
s.append(", opos: ");
|
||||||
|
s.append(opos);
|
||||||
|
s.append(", pos: ");
|
||||||
|
s.append(pos);
|
||||||
|
s.append(", dir: ");
|
||||||
|
s.append(dir);
|
||||||
|
s.append(", serif: ");
|
||||||
|
s.append(serif != null ? serif.hashCode() : "null");
|
||||||
|
s.append(", link: ");
|
||||||
|
s.append(link != null ? link.hashCode() : "null");
|
||||||
|
s.append(", flags: " + flags);
|
||||||
|
s.append(", blue: " + blueEdge);
|
||||||
|
s.append(", first: ");
|
||||||
|
s.append(first == null ? "null" : first.hashCode());
|
||||||
|
s.append(", last: ");
|
||||||
|
s.append(last == null ? "null" : last.hashCode());
|
||||||
|
return s.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,12 +38,16 @@ exception statement from your version. */
|
||||||
|
|
||||||
package gnu.java.awt.font.autofit;
|
package gnu.java.awt.font.autofit;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.FontDelegate;
|
||||||
|
import gnu.java.awt.font.opentype.truetype.Fixed;
|
||||||
|
import gnu.java.awt.font.opentype.truetype.Point;
|
||||||
import gnu.java.awt.font.opentype.truetype.Zone;
|
import gnu.java.awt.font.opentype.truetype.Zone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The data and methods used for the actual hinting process.
|
* The data and methods used for the actual hinting process.
|
||||||
*/
|
*/
|
||||||
class GlyphHints
|
class GlyphHints
|
||||||
|
implements Constants
|
||||||
{
|
{
|
||||||
|
|
||||||
int xScale;
|
int xScale;
|
||||||
|
@ -53,23 +57,584 @@ class GlyphHints
|
||||||
|
|
||||||
AxisHints[] axis;
|
AxisHints[] axis;
|
||||||
|
|
||||||
void rescale(ScriptMetrics metrics)
|
Point[] points;
|
||||||
|
int numPoints;
|
||||||
|
int maxPoints;
|
||||||
|
|
||||||
|
Point[] contours;
|
||||||
|
int numContours;
|
||||||
|
int maxContours;
|
||||||
|
|
||||||
|
ScriptMetrics metrics;
|
||||||
|
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
GlyphHints()
|
||||||
{
|
{
|
||||||
// TODO: Implement.
|
axis = new AxisHints[Constants.DIMENSION_MAX];
|
||||||
|
axis[Constants.DIMENSION_VERT] = new AxisHints();
|
||||||
|
axis[Constants.DIMENSION_HORZ] = new AxisHints();
|
||||||
|
|
||||||
|
xScale = Fixed.ONE;
|
||||||
|
yScale = Fixed.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void rescale(ScriptMetrics m)
|
||||||
|
{
|
||||||
|
metrics = m;
|
||||||
|
// TODO: Copy scalerFlags.
|
||||||
}
|
}
|
||||||
|
|
||||||
void reload(Zone outline)
|
void reload(Zone outline)
|
||||||
{
|
{
|
||||||
// TODO: Implement.
|
numPoints = 0;
|
||||||
|
numContours = 0;
|
||||||
|
axis[0].numSegments = 0;
|
||||||
|
axis[0].numEdges = 0;
|
||||||
|
axis[1].numSegments = 0;
|
||||||
|
axis[1].numEdges = 0;
|
||||||
|
|
||||||
|
// Create/reallocate the contours array.
|
||||||
|
int newMax = outline.getNumContours();
|
||||||
|
if (newMax > maxContours || contours == null)
|
||||||
|
{
|
||||||
|
newMax = (newMax + 3) & ~3; // Taken from afhints.c .
|
||||||
|
Point[] newContours = new Point[newMax];
|
||||||
|
if (contours != null)
|
||||||
|
{
|
||||||
|
System.arraycopy(contours, 0, newContours, 0, maxContours);
|
||||||
|
}
|
||||||
|
contours = newContours;
|
||||||
|
maxContours = newMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
void computeSegments(int dim)
|
// Create/reallocate the points array.
|
||||||
|
newMax = outline.getSize() + 2;
|
||||||
|
if (newMax > maxPoints || points == null)
|
||||||
{
|
{
|
||||||
// TODO: Implement.
|
newMax = (newMax + 2 + 7) & ~7; // Taken from afhints.c .
|
||||||
|
Point[] newPoints = new Point[newMax];
|
||||||
|
if (points != null)
|
||||||
|
{
|
||||||
|
System.arraycopy(points, 0, newPoints, 0, maxPoints);
|
||||||
|
}
|
||||||
|
points = newPoints;
|
||||||
|
maxPoints = newMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
void linkSegments(int dim)
|
numPoints = outline.getSize() - 4; // 4 phantom points.
|
||||||
|
numContours = outline.getNumContours();
|
||||||
|
|
||||||
|
// Set major direction. We don't handle Type 1 fonts yet.
|
||||||
|
axis[DIMENSION_HORZ].majorDir = DIR_UP;
|
||||||
|
axis[DIMENSION_VERT].majorDir = DIR_LEFT;
|
||||||
|
|
||||||
|
// TODO: Freetype seems to scale and translate the glyph at that point.
|
||||||
|
// I suppose that this is not really needed.
|
||||||
|
// The scales are scaling from font units to 1/64 device pixels.
|
||||||
|
xScale = Fixed.valueOf16(outline.scaleX * 64);
|
||||||
|
yScale = Fixed.valueOf16(outline.scaleY * 64);
|
||||||
|
|
||||||
|
// FIXME: What is that xDelta and yDelta used for?
|
||||||
|
System.arraycopy(outline.getPoints(), 0, points, 0, numPoints);
|
||||||
|
|
||||||
|
// Setup prev and next and contours array.
|
||||||
|
// TODO: Probably cache this.
|
||||||
|
contours = new Point[numContours];
|
||||||
|
Point currentContour = points[0];
|
||||||
|
for (int i = 0, cIndex = 0; i < numPoints; i++)
|
||||||
{
|
{
|
||||||
// TODO: Implement.
|
// Start new contour when the last point has been a contour end.
|
||||||
|
if (outline.isContourEnd(i))
|
||||||
|
{
|
||||||
|
// Connect the contour end point to the start point.
|
||||||
|
points[i].setNext(currentContour);
|
||||||
|
currentContour.setPrev(points[i]);
|
||||||
|
contours[cIndex] = currentContour;
|
||||||
|
cIndex++;
|
||||||
|
currentContour = i < numPoints - 1 ? points[i + 1] : null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Connect the current and the previous point.
|
||||||
|
points[i].setNext(points[i + 1]);
|
||||||
|
points[i + 1].setPrev(points[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Compute directions of in and out vectors of all points as well
|
||||||
|
// as the weak point flag.
|
||||||
|
for (int i = 0; i < numPoints; i++)
|
||||||
|
{
|
||||||
|
// Compute in and out dir.
|
||||||
|
Point p = points[i];
|
||||||
|
Point prev = p.getPrev();
|
||||||
|
int inX = p.getOrigX() - prev.getOrigX();
|
||||||
|
int inY = p.getOrigY() - prev.getOrigY();
|
||||||
|
p.setInDir(Utils.computeDirection(inX, inY));
|
||||||
|
Point next = p.getNext();
|
||||||
|
int outX = next.getOrigX() - p.getOrigX();
|
||||||
|
int outY = next.getOrigY() - p.getOrigY();
|
||||||
|
p.setOutDir(Utils.computeDirection(outX, outY));
|
||||||
|
|
||||||
|
if (p.isControlPoint())
|
||||||
|
{
|
||||||
|
setWeakPoint(p);
|
||||||
|
}
|
||||||
|
else if (p.getOutDir() == p.getInDir())
|
||||||
|
{
|
||||||
|
if (p.getOutDir() != DIR_NONE)
|
||||||
|
setWeakPoint(p);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int angleIn = Utils.atan(inY, inX);
|
||||||
|
int angleOut = Utils.atan(outY, outX);
|
||||||
|
int delta = Utils.angleDiff(angleIn, angleOut);
|
||||||
|
if (delta < 2 && delta > -2)
|
||||||
|
setWeakPoint(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (p.getInDir() == - p.getOutDir())
|
||||||
|
{
|
||||||
|
setWeakPoint(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
computeInflectionPoints();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setWeakPoint(Point p)
|
||||||
|
{
|
||||||
|
p.setFlags((byte) (p.getFlags() | Point.FLAG_WEAK_INTERPOLATION));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Computes the inflection points for a glyph.
|
||||||
|
*/
|
||||||
|
private void computeInflectionPoints()
|
||||||
|
{
|
||||||
|
// Do each contour separately.
|
||||||
|
contours : for (int c = 0; c < contours.length; c++)
|
||||||
|
{
|
||||||
|
Point point = contours[c];
|
||||||
|
Point first = point;
|
||||||
|
Point start = point;
|
||||||
|
Point end = point;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
end = end.getNext();
|
||||||
|
if (end == first)
|
||||||
|
continue contours;
|
||||||
|
} while (end.getOrigX() == first.getOrigX()
|
||||||
|
&& end.getOrigY() == first.getOrigY());
|
||||||
|
|
||||||
|
// Extend segment start whenever possible.
|
||||||
|
Point before = start;
|
||||||
|
int angleIn;
|
||||||
|
int angleSeg = Utils.atan(end.getOrigX() - start.getOrigX(),
|
||||||
|
end.getOrigY() - start.getOrigY());
|
||||||
|
do
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
start = before;
|
||||||
|
before = before.getPrev();
|
||||||
|
if (before == first)
|
||||||
|
continue contours;
|
||||||
|
} while (before.getOrigX() == start.getOrigX()
|
||||||
|
&& before.getOrigY() == start.getOrigY());
|
||||||
|
angleIn = Utils.atan(start.getOrigX() - before.getOrigX(),
|
||||||
|
start.getOrigY() - before.getOrigY());
|
||||||
|
} while (angleIn == angleSeg);
|
||||||
|
|
||||||
|
first = start;
|
||||||
|
int diffIn = Utils.angleDiff(angleIn, angleSeg);
|
||||||
|
// Now, process all segments in the contour.
|
||||||
|
Point after;
|
||||||
|
boolean finished = false;
|
||||||
|
int angleOut, diffOut;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
// First, extend the current segment's end whenever possible.
|
||||||
|
after = end;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
end = after;
|
||||||
|
after = after.getNext();
|
||||||
|
if (after == first)
|
||||||
|
finished = true;
|
||||||
|
} while (end.getOrigX() == after.getOrigX()
|
||||||
|
&& end.getOrigY() == after.getOrigY());
|
||||||
|
angleOut = Utils.atan(after.getOrigX() - end.getOrigX(),
|
||||||
|
after.getOrigY() - end.getOrigY());
|
||||||
|
} while (angleOut == angleSeg);
|
||||||
|
diffOut = Utils.angleDiff(angleSeg, angleOut);
|
||||||
|
if ((diffIn ^ diffOut) < 0)
|
||||||
|
{
|
||||||
|
// diffIn and diffOut have different signs, we have
|
||||||
|
// inflection points here.
|
||||||
|
do
|
||||||
|
{
|
||||||
|
start.addFlags(Point.FLAG_INFLECTION);
|
||||||
|
start = start.getNext();
|
||||||
|
} while (start != end);
|
||||||
|
start.addFlags(Point.FLAG_INFLECTION);
|
||||||
|
}
|
||||||
|
start = end;
|
||||||
|
end = after;
|
||||||
|
angleSeg = angleOut;
|
||||||
|
diffIn = diffOut;
|
||||||
|
} while (! finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean doHorizontal()
|
||||||
|
{
|
||||||
|
return (flags & FontDelegate.FLAG_NO_HINT_HORIZONTAL) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean doVertical()
|
||||||
|
{
|
||||||
|
return (flags & FontDelegate.FLAG_NO_HINT_VERTICAL) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void alignWeakPoints(int dim)
|
||||||
|
{
|
||||||
|
short touchFlag;
|
||||||
|
Point point;
|
||||||
|
// PASS 1 : Move segments to edge positions.
|
||||||
|
if (dim == DIMENSION_HORZ)
|
||||||
|
{
|
||||||
|
touchFlag = Point.FLAG_DONE_X;
|
||||||
|
for (int p = 0; p < numPoints; p++)
|
||||||
|
{
|
||||||
|
point = points[p];
|
||||||
|
point.setU(point.getX());
|
||||||
|
point.setV(point.getScaledX());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
touchFlag = Point.FLAG_DONE_Y;
|
||||||
|
for (int p = 0; p < numPoints; p++)
|
||||||
|
{
|
||||||
|
point = points[p];
|
||||||
|
point.setU(point.getY());
|
||||||
|
point.setV(point.getScaledY());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
point = points[0];
|
||||||
|
for (int c = 0; c < numContours; c++)
|
||||||
|
{
|
||||||
|
point = contours[c];
|
||||||
|
int idx = getPointIndex(point);
|
||||||
|
Point endPoint = point.getPrev();
|
||||||
|
int endIdx = getPointIndex(endPoint);
|
||||||
|
int firstIdx = idx;
|
||||||
|
while (idx <= endIdx
|
||||||
|
&& (point.getFlags() & touchFlag) == 0)
|
||||||
|
{
|
||||||
|
idx++;
|
||||||
|
point = points[idx];
|
||||||
|
}
|
||||||
|
if (idx <= endIdx)
|
||||||
|
{
|
||||||
|
int firstTouched = idx;
|
||||||
|
int curTouched = idx;
|
||||||
|
idx++;
|
||||||
|
point = points[idx];
|
||||||
|
while (idx <= endIdx)
|
||||||
|
{
|
||||||
|
if ((point.getFlags() & touchFlag) != 0)
|
||||||
|
{
|
||||||
|
// We found two successive touch points. We interpolate
|
||||||
|
// all contour points between them.
|
||||||
|
iupInterp(curTouched + 1, idx - 1, curTouched, idx);
|
||||||
|
curTouched = idx;
|
||||||
|
}
|
||||||
|
idx++;
|
||||||
|
point = points[idx];
|
||||||
|
}
|
||||||
|
if (curTouched == firstTouched)
|
||||||
|
{
|
||||||
|
// This is a special case: Only one point was touched in the
|
||||||
|
// contour. We thus simply shift the whole contour.
|
||||||
|
iupShift(firstIdx, endIdx, curTouched);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Now interpolate after the last touched point to the end
|
||||||
|
// of the contour.
|
||||||
|
iupInterp(curTouched + 1, endIdx, curTouched, firstTouched);
|
||||||
|
// If the first contour point isn't touched, interpolate
|
||||||
|
// from the contour start to the first touched point.
|
||||||
|
if (firstTouched > 0)
|
||||||
|
{
|
||||||
|
iupInterp(firstIdx, firstTouched - 1, curTouched,
|
||||||
|
firstTouched);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Now store the values back.
|
||||||
|
if (dim == DIMENSION_HORZ)
|
||||||
|
{
|
||||||
|
for (int p = 0; p < numPoints; p++)
|
||||||
|
{
|
||||||
|
point = points[p];
|
||||||
|
point.setX(point.getU());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int p = 0; p < numPoints; p++)
|
||||||
|
{
|
||||||
|
point = points[p];
|
||||||
|
point.setY(point.getU());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void iupShift(int p1, int p2, int ref)
|
||||||
|
{
|
||||||
|
int delta = points[ref].getU() - points[ref].getV();
|
||||||
|
for (int p = p1; p < ref; p++)
|
||||||
|
{
|
||||||
|
points[p].setU(points[p].getV() + delta);
|
||||||
|
}
|
||||||
|
for (int p = ref + 1; p <= p2; p++)
|
||||||
|
{
|
||||||
|
points[p].setU(points[p].getV() + delta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void iupInterp(int p1, int p2, int ref1, int ref2)
|
||||||
|
{
|
||||||
|
int v1 = points[ref1].getV();
|
||||||
|
int v2 = points[ref2].getV();
|
||||||
|
int d1 = points[ref1].getU() - v1;
|
||||||
|
int d2 = points[ref2].getU() - v2;
|
||||||
|
if (p1 > p2)
|
||||||
|
return;
|
||||||
|
if (v1 == v2)
|
||||||
|
{
|
||||||
|
for (int p = p1; p <= p2; p++)
|
||||||
|
{
|
||||||
|
int u = points[p].getV();
|
||||||
|
if (u <= v1)
|
||||||
|
u += d1;
|
||||||
|
else
|
||||||
|
u += d2;
|
||||||
|
points[p].setU(u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (v1 < v2)
|
||||||
|
{
|
||||||
|
for (int p = p1; p <= p2; p++)
|
||||||
|
{
|
||||||
|
int u = points[p].getV();
|
||||||
|
if (u <= v1)
|
||||||
|
u += d1;
|
||||||
|
else if (u >= v2)
|
||||||
|
u += d2;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
u = points[ref1].getU() + Utils.mulDiv(u - v1,
|
||||||
|
points[ref2].getU()
|
||||||
|
- points[ref1].getU(),
|
||||||
|
v2 - v1);
|
||||||
|
}
|
||||||
|
points[p].setU(u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int p = p1; p <= p2; p++)
|
||||||
|
{
|
||||||
|
int u = points[p].getV();
|
||||||
|
if (u <= v2)
|
||||||
|
u += d2;
|
||||||
|
else if (u >= v1)
|
||||||
|
u += d1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
u = points[ref1].getU() + Utils.mulDiv(u - v1,
|
||||||
|
points[ref2].getU()
|
||||||
|
- points[ref1].getU(),
|
||||||
|
v2 - v1);
|
||||||
|
}
|
||||||
|
points[p].setU(u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void alignStrongPoints(int dim)
|
||||||
|
{
|
||||||
|
AxisHints ax = axis[dim];
|
||||||
|
Edge[] edges = ax.edges;
|
||||||
|
int numEdges = ax.numEdges;
|
||||||
|
short touchFlag;
|
||||||
|
if (dim == DIMENSION_HORZ)
|
||||||
|
touchFlag = Point.FLAG_DONE_X;
|
||||||
|
else
|
||||||
|
touchFlag = Point.FLAG_DONE_Y;
|
||||||
|
|
||||||
|
if (numEdges > 0)
|
||||||
|
{
|
||||||
|
for (int p = 0; p < numPoints; p++)
|
||||||
|
{
|
||||||
|
Point point = points[p];
|
||||||
|
if ((point.getFlags() & touchFlag) != 0)
|
||||||
|
continue;
|
||||||
|
// If this point is a candidate for weak interpolation, we
|
||||||
|
// interpolate it after all strong points have been processed.
|
||||||
|
if ((point.getFlags() & Point.FLAG_WEAK_INTERPOLATION) != 0
|
||||||
|
&& (point.getFlags() & Point.FLAG_INFLECTION) == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
int u, ou, fu, delta;
|
||||||
|
if (dim == DIMENSION_VERT)
|
||||||
|
{
|
||||||
|
u = point.getOrigY();
|
||||||
|
ou = point.getScaledY();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
u = point.getOrigX();
|
||||||
|
ou = point.getScaledX();
|
||||||
|
}
|
||||||
|
fu = u;
|
||||||
|
// Is the point before the first edge?
|
||||||
|
Edge edge = edges[0];
|
||||||
|
// Inversed vertical dimension.
|
||||||
|
delta = edge.fpos - u;
|
||||||
|
if (delta >= 0)
|
||||||
|
{
|
||||||
|
u = edge.pos - (edge.opos - ou);
|
||||||
|
storePoint(point, u, dim, touchFlag);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Is the point after the last edge?
|
||||||
|
edge = edges[numEdges - 1];
|
||||||
|
delta = u - edge.fpos;
|
||||||
|
if (delta >= 0)
|
||||||
|
{
|
||||||
|
u = edge.pos + (ou - edge.opos);
|
||||||
|
storePoint(point, u, dim, touchFlag);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Find enclosing edges.
|
||||||
|
int min = 0;
|
||||||
|
int max = numEdges;
|
||||||
|
int mid, fpos;
|
||||||
|
boolean found = false;
|
||||||
|
while (min < max)
|
||||||
|
{
|
||||||
|
mid = (max + min) / 2;
|
||||||
|
edge = edges[mid];
|
||||||
|
fpos = edge.fpos;
|
||||||
|
if (u < fpos)
|
||||||
|
max = mid;
|
||||||
|
else if (u > fpos)
|
||||||
|
min = mid + 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Directly on the edge.
|
||||||
|
u = edge.pos;
|
||||||
|
storePoint(point, u, dim, touchFlag);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (! found)
|
||||||
|
{
|
||||||
|
Edge before = edges[min - 1];
|
||||||
|
Edge after = edges[min];
|
||||||
|
if (before.scale == 0)
|
||||||
|
{
|
||||||
|
before.scale = Fixed.div16(after.pos - before.pos,
|
||||||
|
after.fpos - before.fpos);
|
||||||
|
}
|
||||||
|
u = before.pos + Fixed.mul16(fu - before.fpos,
|
||||||
|
before.scale);
|
||||||
|
}
|
||||||
|
storePoint(point, u, dim, touchFlag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void storePoint(Point p, int u, int dim, short touchFlag)
|
||||||
|
{
|
||||||
|
if (dim == DIMENSION_HORZ)
|
||||||
|
p.setX(u);
|
||||||
|
else
|
||||||
|
p.setY(u);
|
||||||
|
p.addFlags(touchFlag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void alignEdgePoints(int dim)
|
||||||
|
{
|
||||||
|
AxisHints ax = axis[dim];
|
||||||
|
Edge[] edges = ax.edges;
|
||||||
|
int numEdges = ax.numEdges;
|
||||||
|
for (int e = 0; e < numEdges; e++)
|
||||||
|
{
|
||||||
|
Edge edge = edges[e];
|
||||||
|
Segment seg = edge.first;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
Point point = seg.first;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (dim == DIMENSION_HORZ)
|
||||||
|
{
|
||||||
|
point.setX(edge.pos);
|
||||||
|
point.addFlags(Point.FLAG_DONE_X);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
point.setY(edge.pos);
|
||||||
|
point.addFlags(Point.FLAG_DONE_Y);
|
||||||
|
}
|
||||||
|
if (point == seg.last)
|
||||||
|
break;
|
||||||
|
point = point.getNext();
|
||||||
|
}
|
||||||
|
seg = seg.edgeNext;
|
||||||
|
} while (seg != edge.first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getPointIndex(Point p)
|
||||||
|
{
|
||||||
|
int idx = -1;
|
||||||
|
for (int i = 0; i < numPoints; i++)
|
||||||
|
{
|
||||||
|
if (p == points[i])
|
||||||
|
{
|
||||||
|
idx = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean doAlignEdgePoints()
|
||||||
|
{
|
||||||
|
return (flags & FontDelegate.FLAG_NO_HINT_EDGE_POINTS) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean doAlignStrongPoints()
|
||||||
|
{
|
||||||
|
return (flags & FontDelegate.FLAG_NO_HINT_STRONG_POINTS) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean doAlignWeakPoints()
|
||||||
|
{
|
||||||
|
return (flags & FontDelegate.FLAG_NO_HINT_WEAK_POINTS) == 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ package gnu.java.awt.font.autofit;
|
||||||
|
|
||||||
import gnu.java.awt.font.opentype.OpenTypeFont;
|
import gnu.java.awt.font.opentype.OpenTypeFont;
|
||||||
|
|
||||||
class Scaler
|
class HintScaler
|
||||||
{
|
{
|
||||||
|
|
||||||
int xScale;
|
int xScale;
|
||||||
|
@ -48,5 +48,6 @@ class Scaler
|
||||||
int yScale;
|
int yScale;
|
||||||
int yDelta;
|
int yDelta;
|
||||||
OpenTypeFont face;
|
OpenTypeFont face;
|
||||||
|
int renderMode;
|
||||||
|
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load diff
|
@ -49,5 +49,14 @@ class LatinAxis
|
||||||
|
|
||||||
int widthCount;
|
int widthCount;
|
||||||
Width[] widths;
|
Width[] widths;
|
||||||
float edgeDistanceTreshold;
|
int edgeDistanceTreshold;
|
||||||
|
LatinBlue[] blues;
|
||||||
|
int blueCount;
|
||||||
|
int orgDelta;
|
||||||
|
int orgScale;
|
||||||
|
LatinAxis()
|
||||||
|
{
|
||||||
|
widths = new Width[Latin.MAX_WIDTHS];
|
||||||
|
blues = new LatinBlue[Latin.BLUE_MAX];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
59
libjava/classpath/gnu/java/awt/font/autofit/LatinBlue.java
Normal file
59
libjava/classpath/gnu/java/awt/font/autofit/LatinBlue.java
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
/* LatinBlue.java -- FIXME: briefly describe file purpose
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.awt.font.autofit;
|
||||||
|
|
||||||
|
public class LatinBlue
|
||||||
|
{
|
||||||
|
static final int FLAG_BLUE_ACTIVE = 1 << 0;
|
||||||
|
static final int FLAG_TOP = 1 << 1;
|
||||||
|
static final int FLAG_ADJUSTMENT = 1 << 2;
|
||||||
|
Width ref;
|
||||||
|
Width shoot;
|
||||||
|
int flags;
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
StringBuilder s = new StringBuilder();
|
||||||
|
s.append("[BlueZone]");
|
||||||
|
s.append(" ref: ");
|
||||||
|
s.append(ref.org);
|
||||||
|
s.append(", shoot: ");
|
||||||
|
s.append(shoot.org);
|
||||||
|
return s.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,6 +38,8 @@ exception statement from your version. */
|
||||||
|
|
||||||
package gnu.java.awt.font.autofit;
|
package gnu.java.awt.font.autofit;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.opentype.OpenTypeFont;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Latin specific metrics data.
|
* Latin specific metrics data.
|
||||||
*/
|
*/
|
||||||
|
@ -48,4 +50,17 @@ class LatinMetrics
|
||||||
LatinAxis[] axis;
|
LatinAxis[] axis;
|
||||||
|
|
||||||
int unitsPerEm;
|
int unitsPerEm;
|
||||||
|
|
||||||
|
LatinMetrics()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
axis = new LatinAxis[Constants.DIMENSION_MAX];
|
||||||
|
axis[Constants.DIMENSION_HORZ] = new LatinAxis();
|
||||||
|
axis[Constants.DIMENSION_VERT] = new LatinAxis();
|
||||||
|
}
|
||||||
|
LatinMetrics(OpenTypeFont face)
|
||||||
|
{
|
||||||
|
this();
|
||||||
|
unitsPerEm = face.unitsPerEm;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ exception statement from your version. */
|
||||||
package gnu.java.awt.font.autofit;
|
package gnu.java.awt.font.autofit;
|
||||||
|
|
||||||
import gnu.java.awt.font.opentype.OpenTypeFont;
|
import gnu.java.awt.font.opentype.OpenTypeFont;
|
||||||
|
import gnu.java.awt.font.opentype.truetype.Zone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines script specific methods for the auto fitter.
|
* Defines script specific methods for the auto fitter.
|
||||||
|
@ -51,12 +52,11 @@ interface Script
|
||||||
*/
|
*/
|
||||||
void initMetrics(ScriptMetrics metrics, OpenTypeFont face);
|
void initMetrics(ScriptMetrics metrics, OpenTypeFont face);
|
||||||
|
|
||||||
void scaleMetrics(ScriptMetrics metrics/* , scaler, map this */);
|
void scaleMetrics(ScriptMetrics metrics , HintScaler scaler);
|
||||||
|
|
||||||
void doneMetrics(ScriptMetrics metrics);
|
void doneMetrics(ScriptMetrics metrics);
|
||||||
|
|
||||||
void initHints(GlyphHints hints, ScriptMetrics metrics);
|
void initHints(GlyphHints hints, ScriptMetrics metrics);
|
||||||
|
|
||||||
void applyHints(GlyphHints hints, /* some outline object, */
|
void applyHints(GlyphHints hints, Zone outline, ScriptMetrics metrics);
|
||||||
ScriptMetrics metrics);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,5 +45,9 @@ class ScriptMetrics
|
||||||
{
|
{
|
||||||
|
|
||||||
Script script;
|
Script script;
|
||||||
Scaler scaler;
|
HintScaler scaler;
|
||||||
|
ScriptMetrics()
|
||||||
|
{
|
||||||
|
scaler = new HintScaler();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,10 +38,58 @@ exception statement from your version. */
|
||||||
|
|
||||||
package gnu.java.awt.font.autofit;
|
package gnu.java.awt.font.autofit;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.opentype.truetype.Point;
|
||||||
|
|
||||||
class Segment
|
class Segment
|
||||||
{
|
{
|
||||||
|
|
||||||
|
static final int FLAG_EDGE_NORMAL = 0;
|
||||||
|
static final int FLAG_EDGE_ROUND = 1;
|
||||||
|
static final int FLAG_EDGE_SERIF = 2;
|
||||||
|
static final int FLAG_EDGE_DONE = 4;
|
||||||
|
int dir;
|
||||||
|
int flags;
|
||||||
Segment link;
|
Segment link;
|
||||||
int index;
|
Segment serif;
|
||||||
|
int numLinked;
|
||||||
int pos;
|
int pos;
|
||||||
|
Point first;
|
||||||
|
Point last;
|
||||||
|
Point contour;
|
||||||
|
int minPos;
|
||||||
|
int maxPos;
|
||||||
|
int score;
|
||||||
|
int len;
|
||||||
|
Segment edgeNext;
|
||||||
|
Edge edge;
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
StringBuilder s = new StringBuilder();
|
||||||
|
s.append("[Segment] id: ");
|
||||||
|
s.append(hashCode());
|
||||||
|
s.append(", len:");
|
||||||
|
s.append(len);
|
||||||
|
s.append(", round: ");
|
||||||
|
s.append(((flags & FLAG_EDGE_ROUND) != 0));
|
||||||
|
s.append(", dir: ");
|
||||||
|
s.append(dir);
|
||||||
|
s.append(", pos: ");
|
||||||
|
s.append(pos);
|
||||||
|
s.append(", minPos: ");
|
||||||
|
s.append(minPos);
|
||||||
|
s.append(", maxPos: ");
|
||||||
|
s.append(maxPos);
|
||||||
|
s.append(", first: ");
|
||||||
|
s.append(first);
|
||||||
|
s.append(", last: ");
|
||||||
|
s.append(last);
|
||||||
|
s.append(", contour: ");
|
||||||
|
s.append(contour);
|
||||||
|
s.append(", link: ");
|
||||||
|
s.append(link == null ? "null" : link.hashCode());
|
||||||
|
s.append(", serif: ");
|
||||||
|
s.append(serif == null ? "null" : serif.hashCode());
|
||||||
|
return s.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
255
libjava/classpath/gnu/java/awt/font/autofit/Utils.java
Normal file
255
libjava/classpath/gnu/java/awt/font/autofit/Utils.java
Normal file
|
@ -0,0 +1,255 @@
|
||||||
|
/* Utils.java -- A collection of utility functions for the autofitter
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.awt.font.autofit;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.opentype.truetype.Fixed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of utility methods used all around the auto fitter.
|
||||||
|
*/
|
||||||
|
class Utils
|
||||||
|
implements Constants
|
||||||
|
{
|
||||||
|
|
||||||
|
private static final int ATAN_BITS = 8;
|
||||||
|
private static final byte[] ATAN = new byte[]
|
||||||
|
{
|
||||||
|
0, 0, 1, 1, 1, 2, 2, 2,
|
||||||
|
3, 3, 3, 3, 4, 4, 4, 5,
|
||||||
|
5, 5, 6, 6, 6, 7, 7, 7,
|
||||||
|
8, 8, 8, 9, 9, 9, 10, 10,
|
||||||
|
10, 10, 11, 11, 11, 12, 12, 12,
|
||||||
|
13, 13, 13, 14, 14, 14, 14, 15,
|
||||||
|
15, 15, 16, 16, 16, 17, 17, 17,
|
||||||
|
18, 18, 18, 18, 19, 19, 19, 20,
|
||||||
|
20, 20, 21, 21, 21, 21, 22, 22,
|
||||||
|
22, 23, 23, 23, 24, 24, 24, 24,
|
||||||
|
25, 25, 25, 26, 26, 26, 26, 27,
|
||||||
|
27, 27, 28, 28, 28, 28, 29, 29,
|
||||||
|
29, 30, 30, 30, 30, 31, 31, 31,
|
||||||
|
31, 32, 32, 32, 33, 33, 33, 33,
|
||||||
|
34, 34, 34, 34, 35, 35, 35, 35,
|
||||||
|
36, 36, 36, 36, 37, 37, 37, 38,
|
||||||
|
38, 38, 38, 39, 39, 39, 39, 40,
|
||||||
|
40, 40, 40, 41, 41, 41, 41, 42,
|
||||||
|
42, 42, 42, 42, 43, 43, 43, 43,
|
||||||
|
44, 44, 44, 44, 45, 45, 45, 45,
|
||||||
|
46, 46, 46, 46, 46, 47, 47, 47,
|
||||||
|
47, 48, 48, 48, 48, 48, 49, 49,
|
||||||
|
49, 49, 50, 50, 50, 50, 50, 51,
|
||||||
|
51, 51, 51, 51, 52, 52, 52, 52,
|
||||||
|
52, 53, 53, 53, 53, 53, 54, 54,
|
||||||
|
54, 54, 54, 55, 55, 55, 55, 55,
|
||||||
|
56, 56, 56, 56, 56, 57, 57, 57,
|
||||||
|
57, 57, 57, 58, 58, 58, 58, 58,
|
||||||
|
59, 59, 59, 59, 59, 59, 60, 60,
|
||||||
|
60, 60, 60, 61, 61, 61, 61, 61,
|
||||||
|
61, 62, 62, 62, 62, 62, 62, 63,
|
||||||
|
63, 63, 63, 63, 63, 64, 64, 64
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final int ANGLE_PI = 256;
|
||||||
|
private static final int ANGLE_PI2 = ANGLE_PI / 2;
|
||||||
|
private static final int ANGLE_PI4 = ANGLE_PI / 4;
|
||||||
|
private static final int ANGLE_2PI = ANGLE_PI * 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Computes the direction constant for the specified vector. The vector is
|
||||||
|
* given as differential value already.
|
||||||
|
*
|
||||||
|
* @param dx the x vector
|
||||||
|
* @param dy the y vector
|
||||||
|
*
|
||||||
|
* @return the direction of that vector, or DIR_NONE, if that vector is not
|
||||||
|
* approximating against one of the major axises
|
||||||
|
*/
|
||||||
|
static int computeDirection(int dx, int dy)
|
||||||
|
{
|
||||||
|
int dir = DIR_NONE;
|
||||||
|
if (dx < 0)
|
||||||
|
{
|
||||||
|
if (dy < 0)
|
||||||
|
{
|
||||||
|
if (-dx * 12 < -dy)
|
||||||
|
dir = DIR_UP;
|
||||||
|
else if (-dy * 12 < -dx)
|
||||||
|
dir = DIR_LEFT;
|
||||||
|
}
|
||||||
|
else // dy >= 0 .
|
||||||
|
{
|
||||||
|
if (-dx * 12 < dy)
|
||||||
|
dir = DIR_DOWN;
|
||||||
|
else if (dy * 12 < -dx)
|
||||||
|
dir = DIR_LEFT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // dx >= 0 .
|
||||||
|
{
|
||||||
|
if (dy < 0)
|
||||||
|
{
|
||||||
|
if (dx * 12 < -dy)
|
||||||
|
dir = DIR_UP;
|
||||||
|
else if (-dy * 12 < dx)
|
||||||
|
dir = DIR_RIGHT;
|
||||||
|
}
|
||||||
|
else // dy >= 0 .
|
||||||
|
{
|
||||||
|
if (dx * 12 < dy)
|
||||||
|
dir = DIR_DOWN;
|
||||||
|
else if (dy * 12 < dx)
|
||||||
|
dir = DIR_RIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int atan(int dx, int dy)
|
||||||
|
{
|
||||||
|
int angle;
|
||||||
|
// Trivial cases.
|
||||||
|
if (dy == 0)
|
||||||
|
{
|
||||||
|
angle = 0;
|
||||||
|
if (dx < 0)
|
||||||
|
angle = ANGLE_PI;
|
||||||
|
return angle;
|
||||||
|
}
|
||||||
|
else if (dx == 0)
|
||||||
|
{
|
||||||
|
angle = ANGLE_PI2;
|
||||||
|
if (dy < 0)
|
||||||
|
angle = - ANGLE_PI2;
|
||||||
|
return angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
angle = 0;
|
||||||
|
if (dx < 0)
|
||||||
|
{
|
||||||
|
dx = -dx;
|
||||||
|
dy = -dy;
|
||||||
|
angle = ANGLE_PI;
|
||||||
|
}
|
||||||
|
if (dy < 0)
|
||||||
|
{
|
||||||
|
int tmp = dx;
|
||||||
|
dx = -dy;
|
||||||
|
dy = tmp;
|
||||||
|
angle -= ANGLE_PI2;
|
||||||
|
}
|
||||||
|
if (dx == 0 && dy == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (dx == dy)
|
||||||
|
angle += ANGLE_PI4;
|
||||||
|
else if (dx > dy)
|
||||||
|
{
|
||||||
|
angle += ATAN[Fixed.div(dy, dx) << (ATAN_BITS - 6)];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
angle += ANGLE_PI2 - ATAN[Fixed.div(dx, dy) << (ATAN_BITS - 6)];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (angle > ANGLE_PI)
|
||||||
|
angle -= ANGLE_2PI;
|
||||||
|
return angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int angleDiff(int ang1, int ang2)
|
||||||
|
{
|
||||||
|
int delta = ang2 - ang1;
|
||||||
|
delta %= ANGLE_2PI;
|
||||||
|
if (delta < 0)
|
||||||
|
delta += ANGLE_2PI;
|
||||||
|
if (delta > ANGLE_PI)
|
||||||
|
delta -= ANGLE_2PI;
|
||||||
|
return delta;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sort(int num, int[] array)
|
||||||
|
{
|
||||||
|
int swap;
|
||||||
|
for (int i = 1; i < num; i++)
|
||||||
|
{
|
||||||
|
for (int j = i; j > 0; j--)
|
||||||
|
{
|
||||||
|
if (array[j] > array[j - 1])
|
||||||
|
break;
|
||||||
|
swap = array[j];
|
||||||
|
array[j] = array[j - 1];
|
||||||
|
array[j - 1] = swap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sort(int num, Width[] array)
|
||||||
|
{
|
||||||
|
Width swap;
|
||||||
|
for (int i = 1; i < num; i++)
|
||||||
|
{
|
||||||
|
for (int j = 1; j > 0; j--)
|
||||||
|
{
|
||||||
|
if (array[j].org > array[j - 1].org)
|
||||||
|
break;
|
||||||
|
swap = array[j];
|
||||||
|
array[j] = array[j - 1];
|
||||||
|
array[j - 1] = swap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pixRound(int val)
|
||||||
|
{
|
||||||
|
return pixFloor(val + 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pixFloor(int val)
|
||||||
|
{
|
||||||
|
return val & ~63;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int mulDiv(int a, int b, int c)
|
||||||
|
{
|
||||||
|
long prod = a * b;
|
||||||
|
long div = (prod / c);
|
||||||
|
return (int) div;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -43,4 +43,20 @@ public class Width
|
||||||
int org;
|
int org;
|
||||||
int cur;
|
int cur;
|
||||||
int fit;
|
int fit;
|
||||||
|
Width(int dist)
|
||||||
|
{
|
||||||
|
org = dist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
StringBuilder s = new StringBuilder();
|
||||||
|
s.append("[Width] org: ");
|
||||||
|
s.append(org);
|
||||||
|
s.append(", cur: ");
|
||||||
|
s.append(cur);
|
||||||
|
s.append(", fit: ");
|
||||||
|
s.append(fit);
|
||||||
|
return s.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
63
libjava/classpath/gnu/java/awt/font/opentype/Hinter.java
Normal file
63
libjava/classpath/gnu/java/awt/font/opentype/Hinter.java
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/* Hinter.java -- The interface to a hinting implementation
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.awt.font.opentype;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.opentype.truetype.Zone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The interface to a hinting implementation.
|
||||||
|
*/
|
||||||
|
public interface Hinter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Initializes the hinter.
|
||||||
|
*
|
||||||
|
* @param face the font for which the hinter should be used
|
||||||
|
*/
|
||||||
|
void init(OpenTypeFont face);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hints the specified outline.
|
||||||
|
*
|
||||||
|
* @param outline the outline to hint
|
||||||
|
*/
|
||||||
|
void applyHints(Zone outline);
|
||||||
|
|
||||||
|
void setFlags(int flags);
|
||||||
|
}
|
|
@ -51,6 +51,7 @@ import java.util.Locale;
|
||||||
|
|
||||||
import gnu.java.awt.font.FontDelegate;
|
import gnu.java.awt.font.FontDelegate;
|
||||||
import gnu.java.awt.font.GNUGlyphVector;
|
import gnu.java.awt.font.GNUGlyphVector;
|
||||||
|
import gnu.java.awt.font.autofit.AutoHinter;
|
||||||
import gnu.java.awt.font.opentype.truetype.TrueTypeScaler;
|
import gnu.java.awt.font.opentype.truetype.TrueTypeScaler;
|
||||||
import gnu.java.awt.font.opentype.truetype.Zone;
|
import gnu.java.awt.font.opentype.truetype.Zone;
|
||||||
|
|
||||||
|
@ -146,6 +147,7 @@ public final class OpenTypeFont
|
||||||
*/
|
*/
|
||||||
private GlyphNamer glyphNamer;
|
private GlyphNamer glyphNamer;
|
||||||
|
|
||||||
|
private Hinter hinter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs an OpenType or TrueType font.
|
* Constructs an OpenType or TrueType font.
|
||||||
|
@ -579,6 +581,9 @@ public final class OpenTypeFont
|
||||||
FontRenderContext frc,
|
FontRenderContext frc,
|
||||||
CharacterIterator ci)
|
CharacterIterator ci)
|
||||||
{
|
{
|
||||||
|
// Initialize hinter if necessary.
|
||||||
|
checkHinter(FontDelegate.FLAG_FITTED);
|
||||||
|
|
||||||
CharGlyphMap cmap;
|
CharGlyphMap cmap;
|
||||||
int numGlyphs;
|
int numGlyphs;
|
||||||
int[] glyphs;
|
int[] glyphs;
|
||||||
|
@ -689,13 +694,15 @@ public final class OpenTypeFont
|
||||||
float pointSize,
|
float pointSize,
|
||||||
AffineTransform transform,
|
AffineTransform transform,
|
||||||
boolean antialias,
|
boolean antialias,
|
||||||
boolean fractionalMetrics)
|
boolean fractionalMetrics,
|
||||||
|
int flags)
|
||||||
{
|
{
|
||||||
/* The synchronization is needed because the scaler is not
|
/* The synchronization is needed because the scaler is not
|
||||||
* synchronized.
|
* synchronized.
|
||||||
*/
|
*/
|
||||||
|
checkHinter(flags);
|
||||||
return scaler.getOutline(glyph, pointSize, transform,
|
return scaler.getOutline(glyph, pointSize, transform,
|
||||||
antialias, fractionalMetrics);
|
antialias, fractionalMetrics, hinter, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -837,4 +844,29 @@ public final class OpenTypeFont
|
||||||
c[3] = (char) (tag & 0xff);
|
c[3] = (char) (tag & 0xff);
|
||||||
return new String(c);
|
return new String(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a hinter is installed and installs one when not.
|
||||||
|
*/
|
||||||
|
private void checkHinter(int flags)
|
||||||
|
{
|
||||||
|
// When another hinting impl gets added (maybe a true TrueType hinter)
|
||||||
|
// then add some options here. The Hinter interface might need to be
|
||||||
|
// tweaked.
|
||||||
|
if (hinter == null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
hinter = new AutoHinter();
|
||||||
|
hinter.init(this);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Protect from problems inside hinter.
|
||||||
|
hinter = null;
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hinter.setFlags(flags);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,7 +90,8 @@ public abstract class Scaler
|
||||||
float pointSize,
|
float pointSize,
|
||||||
AffineTransform transform,
|
AffineTransform transform,
|
||||||
boolean antialias,
|
boolean antialias,
|
||||||
boolean fractionalMetrics);
|
boolean fractionalMetrics,
|
||||||
|
Hinter hinter, int type);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -48,7 +48,7 @@ package gnu.java.awt.font.opentype.truetype;
|
||||||
*
|
*
|
||||||
* @author Sascha Brawer (brawer@dandelis.ch)
|
* @author Sascha Brawer (brawer@dandelis.ch)
|
||||||
*/
|
*/
|
||||||
final class Fixed
|
public final class Fixed
|
||||||
{
|
{
|
||||||
public static final int ONE = 1<<6;
|
public static final int ONE = 1<<6;
|
||||||
|
|
||||||
|
@ -69,13 +69,20 @@ final class Fixed
|
||||||
return (int) ((((long) a) * b) >> 6);
|
return (int) ((((long) a) * b) >> 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int mul16(int a, int b)
|
||||||
|
{
|
||||||
|
return (int) ((((long) a) * b) >> 16);
|
||||||
|
}
|
||||||
|
|
||||||
public static int div(int a, int b)
|
public static int div(int a, int b)
|
||||||
{
|
{
|
||||||
return (int) ((((long) a) << 6) / b);
|
return (int) ((((long) a) << 6) / b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int div16(int a, int b)
|
||||||
|
{
|
||||||
|
return (int) ((((long) a) << 16) / b);
|
||||||
|
}
|
||||||
|
|
||||||
public static int ceil(int a)
|
public static int ceil(int a)
|
||||||
{
|
{
|
||||||
|
@ -119,7 +126,10 @@ final class Fixed
|
||||||
{
|
{
|
||||||
return ((float) f) / 64;
|
return ((float) f) / 64;
|
||||||
}
|
}
|
||||||
|
public static float floatValue16(int f)
|
||||||
|
{
|
||||||
|
return ((float) f) / 65536;
|
||||||
|
}
|
||||||
|
|
||||||
public static double doubleValue(int f)
|
public static double doubleValue(int f)
|
||||||
{
|
{
|
||||||
|
@ -138,6 +148,10 @@ final class Fixed
|
||||||
return (int) (d * 64);
|
return (int) (d * 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int valueOf16(double d)
|
||||||
|
{
|
||||||
|
return (int) (d * (1 << 16));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes a string representation of a fixed-point number.
|
* Makes a string representation of a fixed-point number.
|
||||||
|
|
|
@ -38,6 +38,8 @@ exception statement from your version. */
|
||||||
|
|
||||||
package gnu.java.awt.font.opentype.truetype;
|
package gnu.java.awt.font.opentype.truetype;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.opentype.Hinter;
|
||||||
|
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
|
@ -112,17 +114,17 @@ final class GlyphLoader
|
||||||
double pointSize,
|
double pointSize,
|
||||||
AffineTransform transform,
|
AffineTransform transform,
|
||||||
boolean antialias,
|
boolean antialias,
|
||||||
Zone glyphZone)
|
Zone glyphZone, Hinter hinter)
|
||||||
{
|
{
|
||||||
glyphZone.setNumPoints(4);
|
glyphZone.setNumPoints(4);
|
||||||
loadSubGlyph(glyphIndex, pointSize, transform, antialias, glyphZone,
|
loadSubGlyph(glyphIndex, pointSize, transform, antialias, glyphZone,
|
||||||
0, 0);
|
0, 0, hinter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadGlyph(int glyphIndex, AffineTransform transform,
|
public void loadGlyph(int glyphIndex, AffineTransform transform,
|
||||||
Zone glyphZone)
|
Zone glyphZone, Hinter hinter)
|
||||||
{
|
{
|
||||||
loadGlyph(glyphIndex, unitsPerEm, transform, false, glyphZone);
|
loadGlyph(glyphIndex, unitsPerEm, transform, false, glyphZone, hinter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadSubGlyph(int glyphIndex,
|
private void loadSubGlyph(int glyphIndex,
|
||||||
|
@ -131,7 +133,8 @@ final class GlyphLoader
|
||||||
boolean antialias,
|
boolean antialias,
|
||||||
Zone glyphZone,
|
Zone glyphZone,
|
||||||
int preTranslateX,
|
int preTranslateX,
|
||||||
int preTranslateY)
|
int preTranslateY,
|
||||||
|
Hinter hinter)
|
||||||
{
|
{
|
||||||
ByteBuffer glyph;
|
ByteBuffer glyph;
|
||||||
int numContours;
|
int numContours;
|
||||||
|
@ -159,11 +162,11 @@ final class GlyphLoader
|
||||||
if (numContours >= 0)
|
if (numContours >= 0)
|
||||||
loadSimpleGlyph(glyphIndex, pointSize, transform, antialias,
|
loadSimpleGlyph(glyphIndex, pointSize, transform, antialias,
|
||||||
numContours, glyph, glyphZone,
|
numContours, glyph, glyphZone,
|
||||||
preTranslateX, preTranslateY);
|
preTranslateX, preTranslateY, hinter);
|
||||||
else
|
else
|
||||||
loadCompoundGlyph(glyphIndex, pointSize, transform, antialias,
|
loadCompoundGlyph(glyphIndex, pointSize, transform, antialias,
|
||||||
glyph, glyphZone,
|
glyph, glyphZone,
|
||||||
preTranslateX, preTranslateY);
|
preTranslateX, preTranslateY, hinter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -172,7 +175,8 @@ final class GlyphLoader
|
||||||
boolean antialias,
|
boolean antialias,
|
||||||
int numContours, ByteBuffer glyph,
|
int numContours, ByteBuffer glyph,
|
||||||
Zone glyphZone,
|
Zone glyphZone,
|
||||||
int preTranslateX, int preTranslateY)
|
int preTranslateX, int preTranslateY,
|
||||||
|
Hinter hinter)
|
||||||
{
|
{
|
||||||
int numPoints;
|
int numPoints;
|
||||||
int posInstructions, numInstructions;
|
int posInstructions, numInstructions;
|
||||||
|
@ -203,9 +207,9 @@ final class GlyphLoader
|
||||||
glyphZone.transform(pointSize, transform, unitsPerEm,
|
glyphZone.transform(pointSize, transform, unitsPerEm,
|
||||||
preTranslateX, preTranslateY);
|
preTranslateX, preTranslateY);
|
||||||
|
|
||||||
if (execInstructions)
|
if (execInstructions && hinter != null)
|
||||||
{
|
{
|
||||||
// FIXME: Hint the glyph.
|
hinter.applyHints(glyphZone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +233,8 @@ final class GlyphLoader
|
||||||
boolean antialias,
|
boolean antialias,
|
||||||
ByteBuffer glyph,
|
ByteBuffer glyph,
|
||||||
Zone glyphZone,
|
Zone glyphZone,
|
||||||
int preTranslateX, int preTranslateY)
|
int preTranslateX, int preTranslateY,
|
||||||
|
Hinter hinter)
|
||||||
{
|
{
|
||||||
short flags;
|
short flags;
|
||||||
int subGlyphIndex;
|
int subGlyphIndex;
|
||||||
|
@ -326,7 +331,7 @@ final class GlyphLoader
|
||||||
loadSubGlyph(subGlyphIndex, pointSize, componentTransform,
|
loadSubGlyph(subGlyphIndex, pointSize, componentTransform,
|
||||||
antialias, subGlyphZone,
|
antialias, subGlyphZone,
|
||||||
Math.round((float) e + preTranslateX),
|
Math.round((float) e + preTranslateX),
|
||||||
Math.round(-((float) f + preTranslateY)));
|
Math.round(-((float) f + preTranslateY)), hinter);
|
||||||
glyphZone.combineWithSubGlyph(subGlyphZone, 4);
|
glyphZone.combineWithSubGlyph(subGlyphZone, 4);
|
||||||
glyph.limit(lim).position(pos);
|
glyph.limit(lim).position(pos);
|
||||||
}
|
}
|
||||||
|
|
285
libjava/classpath/gnu/java/awt/font/opentype/truetype/Point.java
Normal file
285
libjava/classpath/gnu/java/awt/font/opentype/truetype/Point.java
Normal file
|
@ -0,0 +1,285 @@
|
||||||
|
/* Point.java -- Holds information for one point on a glyph outline
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.awt.font.opentype.truetype;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encapsulates information regarding one point on a glyph outline.
|
||||||
|
*/
|
||||||
|
public class Point
|
||||||
|
{
|
||||||
|
public static final short FLAG_TOUCHED_X = 1;
|
||||||
|
public static final short FLAG_TOUCHED_Y = 2;
|
||||||
|
public static final short FLAG_ON_CURVE = 4;
|
||||||
|
public static final short FLAG_CONTOUR_END = 8;
|
||||||
|
public static final short FLAG_WEAK_INTERPOLATION = 16;
|
||||||
|
public static final short FLAG_INFLECTION = 32;
|
||||||
|
public static final short FLAG_DONE_X = 64;
|
||||||
|
public static final short FLAG_DONE_Y = 128;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Right direction.
|
||||||
|
*/
|
||||||
|
public static final int DIR_RIGHT = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Left direction.
|
||||||
|
*/
|
||||||
|
public static final int DIR_LEFT = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Up direction.
|
||||||
|
*/
|
||||||
|
public static final int DIR_UP = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Down direction.
|
||||||
|
*/
|
||||||
|
public static final int DIR_DOWN = -2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The original x coordinate in font units.
|
||||||
|
*/
|
||||||
|
int origX;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The original y coordinate in font units.
|
||||||
|
*/
|
||||||
|
int origY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The x coordinate scaled to the target.
|
||||||
|
*/
|
||||||
|
int scaledX;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The y coordinate scaled to the target.
|
||||||
|
*/
|
||||||
|
int scaledY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The final hinted and scaled x coordinate.
|
||||||
|
*/
|
||||||
|
int x;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The final hinted and scaled y coordinate.
|
||||||
|
*/
|
||||||
|
int y;
|
||||||
|
|
||||||
|
int u;
|
||||||
|
int v;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The glyph flags.
|
||||||
|
*/
|
||||||
|
short flags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The previous point in the contour.
|
||||||
|
*/
|
||||||
|
private Point prev;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The next point in the contour.
|
||||||
|
*/
|
||||||
|
private Point next;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The in-direction of the point, according to the DIR_* constants of this
|
||||||
|
* class.
|
||||||
|
*/
|
||||||
|
int inDir;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The out-direction of the point, according to the DIR_* constants of this
|
||||||
|
* class.
|
||||||
|
*/
|
||||||
|
int outDir;
|
||||||
|
|
||||||
|
public Point getNext()
|
||||||
|
{
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNext(Point next)
|
||||||
|
{
|
||||||
|
this.next = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Point getPrev()
|
||||||
|
{
|
||||||
|
return prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrev(Point prev)
|
||||||
|
{
|
||||||
|
this.prev = prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOrigX()
|
||||||
|
{
|
||||||
|
return origX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrigX(int origX)
|
||||||
|
{
|
||||||
|
this.origX = origX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOrigY()
|
||||||
|
{
|
||||||
|
return origY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrigY(int origY)
|
||||||
|
{
|
||||||
|
this.origY = origY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInDir()
|
||||||
|
{
|
||||||
|
return inDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInDir(int inDir)
|
||||||
|
{
|
||||||
|
this.inDir = inDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOutDir()
|
||||||
|
{
|
||||||
|
return outDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOutDir(int outDir)
|
||||||
|
{
|
||||||
|
this.outDir = outDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getFlags()
|
||||||
|
{
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFlags(short flags)
|
||||||
|
{
|
||||||
|
this.flags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addFlags(short flags)
|
||||||
|
{
|
||||||
|
this.flags |= flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isControlPoint()
|
||||||
|
{
|
||||||
|
return (flags & FLAG_ON_CURVE) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getU()
|
||||||
|
{
|
||||||
|
return u;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setU(int u)
|
||||||
|
{
|
||||||
|
this.u = u;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getV()
|
||||||
|
{
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setV(int v)
|
||||||
|
{
|
||||||
|
this.v = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
StringBuilder s = new StringBuilder();
|
||||||
|
s.append("[Point] origX: ");
|
||||||
|
s.append(origX);
|
||||||
|
s.append(", origY: ");
|
||||||
|
s.append(origY);
|
||||||
|
// TODO: Add more info when needed.
|
||||||
|
return s.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getX()
|
||||||
|
{
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setX(int x)
|
||||||
|
{
|
||||||
|
this.x = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getY()
|
||||||
|
{
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setY(int y)
|
||||||
|
{
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getScaledX()
|
||||||
|
{
|
||||||
|
return scaledX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScaledX(int scaledX)
|
||||||
|
{
|
||||||
|
this.scaledX = scaledX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getScaledY()
|
||||||
|
{
|
||||||
|
return scaledY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScaledY(int scaledY)
|
||||||
|
{
|
||||||
|
this.scaledY = scaledY;
|
||||||
|
}
|
||||||
|
}
|
|
@ -37,6 +37,7 @@ exception statement from your version. */
|
||||||
|
|
||||||
package gnu.java.awt.font.opentype.truetype;
|
package gnu.java.awt.font.opentype.truetype;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.opentype.Hinter;
|
||||||
import gnu.java.awt.font.opentype.Scaler;
|
import gnu.java.awt.font.opentype.Scaler;
|
||||||
|
|
||||||
import java.awt.FontFormatException;
|
import java.awt.FontFormatException;
|
||||||
|
@ -191,17 +192,18 @@ public final class TrueTypeScaler
|
||||||
float pointSize,
|
float pointSize,
|
||||||
AffineTransform deviceTransform,
|
AffineTransform deviceTransform,
|
||||||
boolean antialias,
|
boolean antialias,
|
||||||
boolean fractionalMetrics)
|
boolean fractionalMetrics, Hinter hinter,
|
||||||
|
int type)
|
||||||
{
|
{
|
||||||
glyphLoader.loadGlyph(glyphIndex, pointSize, deviceTransform,
|
glyphLoader.loadGlyph(glyphIndex, pointSize, deviceTransform,
|
||||||
antialias, glyphZone);
|
antialias, glyphZone, hinter);
|
||||||
return glyphZone.getPath();
|
return glyphZone.getPath(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Zone getRawOutline(int glyphIndex, AffineTransform transform)
|
public Zone getRawOutline(int glyphIndex, AffineTransform transform)
|
||||||
{
|
{
|
||||||
Zone zone = new Zone(glyphZone.getCapacity());
|
Zone zone = new Zone(glyphZone.getCapacity());
|
||||||
glyphLoader.loadGlyph(glyphIndex, transform, zone);
|
glyphLoader.loadGlyph(glyphIndex, transform, zone, null);
|
||||||
return zone;
|
return zone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,8 @@ exception statement from your version. */
|
||||||
|
|
||||||
package gnu.java.awt.font.opentype.truetype;
|
package gnu.java.awt.font.opentype.truetype;
|
||||||
|
|
||||||
|
import gnu.java.awt.font.FontDelegate;
|
||||||
|
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.GeneralPath;
|
import java.awt.geom.GeneralPath;
|
||||||
import java.awt.geom.PathIterator;
|
import java.awt.geom.PathIterator;
|
||||||
|
@ -47,27 +49,19 @@ import java.awt.geom.PathIterator;
|
||||||
*/
|
*/
|
||||||
public final class Zone
|
public final class Zone
|
||||||
{
|
{
|
||||||
private final int[] pos;
|
private Point[] points;
|
||||||
private final int[] origPos;
|
|
||||||
private final byte[] flags;
|
|
||||||
private int numPoints;
|
private int numPoints;
|
||||||
|
|
||||||
private static final int FLAG_TOUCHED_X = 1;
|
public double scaleX, scaleY, shearX, shearY;
|
||||||
private static final int FLAG_TOUCHED_Y = 2;
|
|
||||||
private static final int FLAG_ON_CURVE = 4;
|
|
||||||
private static final int FLAG_CONTOUR_END = 8;
|
|
||||||
|
|
||||||
public Zone(int maxNumPoints)
|
public Zone(int maxNumPoints)
|
||||||
{
|
{
|
||||||
origPos = new int[maxNumPoints * 2];
|
points = new Point[maxNumPoints];
|
||||||
pos = new int[maxNumPoints * 2];
|
|
||||||
flags = new byte[maxNumPoints];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getCapacity()
|
public int getCapacity()
|
||||||
{
|
{
|
||||||
return flags.length;
|
return points.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,91 +73,110 @@ public final class Zone
|
||||||
|
|
||||||
public int getX(int point)
|
public int getX(int point)
|
||||||
{
|
{
|
||||||
return pos[2 * point];
|
return getX(point, FontDelegate.FLAG_FITTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getX(int point, int flags)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
if ((flags & FontDelegate.FLAG_FITTED) != 0)
|
||||||
|
x = points[point].x;
|
||||||
|
else
|
||||||
|
x = points[point].scaledX;
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setX(int point, int value, boolean touch)
|
public void setX(int point, int value, boolean touch)
|
||||||
{
|
{
|
||||||
pos[2 * point] = value;
|
points[point].scaledX = value;
|
||||||
|
points[point].x = value;
|
||||||
if (touch)
|
if (touch)
|
||||||
flags[point] |= FLAG_TOUCHED_X;
|
points[point].flags |= Point.FLAG_TOUCHED_X;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setY(int point, int value, boolean touch)
|
public void setY(int point, int value, boolean touch)
|
||||||
{
|
{
|
||||||
pos[2 * point + 1] = value;
|
points[point].scaledY = value;
|
||||||
|
points[point].y = value;
|
||||||
if (touch)
|
if (touch)
|
||||||
flags[point] |= FLAG_TOUCHED_Y;
|
points[point].flags |= Point.FLAG_TOUCHED_Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getY(int point)
|
public int getY(int point)
|
||||||
{
|
{
|
||||||
return pos[2 * point + 1];
|
return getY(point, FontDelegate.FLAG_FITTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getY(int point, int flags)
|
||||||
|
{
|
||||||
|
int y;
|
||||||
|
if ((flags & FontDelegate.FLAG_FITTED) != 0)
|
||||||
|
y = points[point].y;
|
||||||
|
else
|
||||||
|
y = points[point].scaledY;
|
||||||
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getOriginalX(int point)
|
public int getOriginalX(int point)
|
||||||
{
|
{
|
||||||
return origPos[2 * point];
|
return points[point].origX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getOriginalY(int point)
|
public int getOriginalY(int point)
|
||||||
{
|
{
|
||||||
return origPos[2 * point + 1];
|
return points[point].origY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setOriginalX(int point, int x)
|
public void setOriginalX(int point, int x)
|
||||||
{
|
{
|
||||||
origPos[2 * point] = x;
|
points[point].origX = x;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOriginalY(int point, int y)
|
public void setOriginalY(int point, int y)
|
||||||
{
|
{
|
||||||
origPos[2 * point + 1] = y;
|
points[point].origY = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNumPoints(int numPoints)
|
public void setNumPoints(int numPoints)
|
||||||
{
|
{
|
||||||
this.numPoints = numPoints;
|
|
||||||
for (int i = 0; i < numPoints; i++)
|
for (int i = 0; i < numPoints; i++)
|
||||||
flags[i] = 0;
|
points[i] = new Point();
|
||||||
for (int i = 0; i < 2 * numPoints; i++)
|
this.numPoints = numPoints;
|
||||||
origPos[i] = pos[i] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isOnCurve(int point)
|
public boolean isOnCurve(int point)
|
||||||
{
|
{
|
||||||
return (flags[point] & FLAG_ON_CURVE) != 0;
|
return (points[point].flags & Point.FLAG_ON_CURVE) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setOnCurve(int point, boolean onCurve)
|
public void setOnCurve(int point, boolean onCurve)
|
||||||
{
|
{
|
||||||
if (onCurve)
|
if (onCurve)
|
||||||
flags[point] |= FLAG_ON_CURVE;
|
points[point].flags |= Point.FLAG_ON_CURVE;
|
||||||
else
|
else
|
||||||
flags[point] &= ~FLAG_ON_CURVE;
|
points[point].flags &= ~Point.FLAG_ON_CURVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isContourEnd(int point)
|
public boolean isContourEnd(int point)
|
||||||
{
|
{
|
||||||
return (flags[point] & FLAG_CONTOUR_END) != 0;
|
return (points[point].flags & Point.FLAG_CONTOUR_END) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setContourEnd(int point, boolean segEnd)
|
public void setContourEnd(int point, boolean segEnd)
|
||||||
{
|
{
|
||||||
if (segEnd)
|
if (segEnd)
|
||||||
flags[point] |= FLAG_CONTOUR_END;
|
points[point].flags |= Point.FLAG_CONTOUR_END;
|
||||||
else
|
else
|
||||||
flags[point] &= ~FLAG_CONTOUR_END;
|
points[point].flags &= ~Point.FLAG_CONTOUR_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -172,7 +185,6 @@ public final class Zone
|
||||||
void transform(double pointSize, AffineTransform deviceTransform,
|
void transform(double pointSize, AffineTransform deviceTransform,
|
||||||
int unitsPerEm, int preTranslateX, int preTranslateY)
|
int unitsPerEm, int preTranslateX, int preTranslateY)
|
||||||
{
|
{
|
||||||
double scaleX, scaleY, shearX, shearY;
|
|
||||||
double factor;
|
double factor;
|
||||||
|
|
||||||
factor = pointSize / (double) unitsPerEm;
|
factor = pointSize / (double) unitsPerEm;
|
||||||
|
@ -183,11 +195,13 @@ public final class Zone
|
||||||
|
|
||||||
for (int i = 0; i < numPoints; i++)
|
for (int i = 0; i < numPoints; i++)
|
||||||
{
|
{
|
||||||
int x = origPos[2 * i] + preTranslateX;
|
int x = points[i].origX + preTranslateX;
|
||||||
int y = origPos[2 * i + 1] + preTranslateY;
|
int y = points[i].origY + preTranslateY;
|
||||||
|
|
||||||
origPos[2*i] = pos[2 * i] = Fixed.valueOf(scaleX * x + shearX * y);
|
points[i].scaledX = points[i].x = Fixed.valueOf(scaleX * x
|
||||||
origPos[2*i+1] = pos[2 * i + 1] = Fixed.valueOf(shearY * x + scaleY * y);
|
+ shearX * y);
|
||||||
|
points[i].scaledY = points[i].y = Fixed.valueOf(shearY * x
|
||||||
|
+ scaleY * y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,11 +211,7 @@ public final class Zone
|
||||||
{
|
{
|
||||||
int offset = this.numPoints - numPhantomPoints;
|
int offset = this.numPoints - numPhantomPoints;
|
||||||
int count = zone.numPoints;
|
int count = zone.numPoints;
|
||||||
System.arraycopy(zone.origPos, 0, this.origPos, 2 * offset,
|
System.arraycopy(zone.points, 0, this.points, offset, count);
|
||||||
count * 2);
|
|
||||||
System.arraycopy(zone.pos, 0, this.pos, 2 * offset,
|
|
||||||
count * 2);
|
|
||||||
System.arraycopy(zone.flags, 0, this.flags, offset, count);
|
|
||||||
this.numPoints += count - numPhantomPoints;
|
this.numPoints += count - numPhantomPoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,9 +221,9 @@ public final class Zone
|
||||||
for (int i = 0; i < numPoints; i++)
|
for (int i = 0; i < numPoints; i++)
|
||||||
{
|
{
|
||||||
System.out.print(" " + i + ": ");
|
System.out.print(" " + i + ": ");
|
||||||
System.out.print(Fixed.toString(pos[i*2], pos[i*2+1]));
|
System.out.print(Fixed.toString(points[i].scaledX, points[i].scaledY));
|
||||||
System.out.print(' ');
|
System.out.print(' ');
|
||||||
System.out.print(Fixed.toString(origPos[i*2], origPos[i*2+1]));
|
System.out.print(Fixed.toString(points[i].origX, points[i].origY));
|
||||||
System.out.print(' ');
|
System.out.print(' ');
|
||||||
if (isOnCurve(i))
|
if (isOnCurve(i))
|
||||||
System.out.print('.');
|
System.out.print('.');
|
||||||
|
@ -228,16 +238,54 @@ public final class Zone
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public PathIterator getPathIterator()
|
public PathIterator getPathIterator(int type)
|
||||||
{
|
{
|
||||||
return new ZonePathIterator(this);
|
return new ZonePathIterator(this, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public GeneralPath getPath()
|
public GeneralPath getPath(int type)
|
||||||
{
|
{
|
||||||
GeneralPath p = new GeneralPath(GeneralPath.WIND_NON_ZERO, numPoints);
|
GeneralPath p = new GeneralPath(GeneralPath.WIND_NON_ZERO, numPoints);
|
||||||
p.append(getPathIterator(), /* connect */ false);
|
p.append(getPathIterator(type), /* connect */ false);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of contours in this outline.
|
||||||
|
*
|
||||||
|
* @return the number of contours in this outline
|
||||||
|
*/
|
||||||
|
public int getNumContours()
|
||||||
|
{
|
||||||
|
int num = 0;
|
||||||
|
for (int i = 0; i < numPoints; i++)
|
||||||
|
{
|
||||||
|
if (isContourEnd(i))
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getContourEnd(int n)
|
||||||
|
{
|
||||||
|
int idx = -1;
|
||||||
|
int num = 0;
|
||||||
|
for (int i = 0; i < numPoints; i++)
|
||||||
|
{
|
||||||
|
if (isContourEnd(i))
|
||||||
|
{
|
||||||
|
idx = i;
|
||||||
|
if (num == n)
|
||||||
|
break;
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Point[] getPoints()
|
||||||
|
{
|
||||||
|
return points;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,6 +116,7 @@ final class ZonePathIterator
|
||||||
private int contourStart;
|
private int contourStart;
|
||||||
|
|
||||||
|
|
||||||
|
private int type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a ZonePathIterator for the specified zone.
|
* Constructs a ZonePathIterator for the specified zone.
|
||||||
|
@ -123,9 +124,10 @@ final class ZonePathIterator
|
||||||
* @param zone the zone whose segments will be enumerated
|
* @param zone the zone whose segments will be enumerated
|
||||||
* by this iterator.
|
* by this iterator.
|
||||||
*/
|
*/
|
||||||
ZonePathIterator(Zone zone)
|
ZonePathIterator(Zone zone, int t)
|
||||||
{
|
{
|
||||||
this.zone = zone;
|
this.zone = zone;
|
||||||
|
type = t;
|
||||||
numPoints = zone.getSize() - /* four phantom points */ 4;
|
numPoints = zone.getSize() - /* four phantom points */ 4;
|
||||||
|
|
||||||
// The first segment that needs to be emitted is a SEG_MOVETO.
|
// The first segment that needs to be emitted is a SEG_MOVETO.
|
||||||
|
@ -309,8 +311,8 @@ final class ZonePathIterator
|
||||||
int curX, curY;
|
int curX, curY;
|
||||||
int succ, succX, succY;
|
int succ, succX, succY;
|
||||||
|
|
||||||
curX = zone.getX(cur);
|
curX = zone.getX(cur, type);
|
||||||
curY = zone.getY(cur);
|
curY = zone.getY(cur, type);
|
||||||
coords[0] = Fixed.floatValue(curX);
|
coords[0] = Fixed.floatValue(curX);
|
||||||
coords[1] = Fixed.floatValue(curY);
|
coords[1] = Fixed.floatValue(curY);
|
||||||
|
|
||||||
|
@ -318,8 +320,8 @@ final class ZonePathIterator
|
||||||
return PathIterator.SEG_LINETO;
|
return PathIterator.SEG_LINETO;
|
||||||
|
|
||||||
succ = getSuccessor(cur);
|
succ = getSuccessor(cur);
|
||||||
succX = zone.getX(succ);
|
succX = zone.getX(succ, type);
|
||||||
succY = zone.getY(succ);
|
succY = zone.getY(succ, type);
|
||||||
|
|
||||||
if (zone.isOnCurve(succ))
|
if (zone.isOnCurve(succ))
|
||||||
{
|
{
|
||||||
|
@ -359,8 +361,8 @@ final class ZonePathIterator
|
||||||
|
|
||||||
if (zone.isOnCurve(contourStart))
|
if (zone.isOnCurve(contourStart))
|
||||||
{
|
{
|
||||||
x = zone.getX(contourStart);
|
x = zone.getX(contourStart, type);
|
||||||
y = zone.getY(contourStart);
|
y = zone.getY(contourStart, type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -374,13 +376,13 @@ final class ZonePathIterator
|
||||||
/* An example is the 'o' glyph of the Helvetica which comes
|
/* An example is the 'o' glyph of the Helvetica which comes
|
||||||
* with Apple MacOS X 10.1.5.
|
* with Apple MacOS X 10.1.5.
|
||||||
*/
|
*/
|
||||||
x = zone.getX(contourEnd);
|
x = zone.getX(contourEnd, type);
|
||||||
y = zone.getY(contourEnd);
|
y = zone.getY(contourEnd, type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x = (zone.getX(contourStart) + zone.getX(contourEnd)) / 2;
|
x = (zone.getX(contourStart, type) + zone.getX(contourEnd, type)) / 2;
|
||||||
y = (zone.getY(contourStart) + zone.getY(contourEnd)) / 2;
|
y = (zone.getY(contourStart, type) + zone.getY(contourEnd, type)) / 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,6 @@ import java.awt.geom.Ellipse2D;
|
||||||
import java.awt.geom.GeneralPath;
|
import java.awt.geom.GeneralPath;
|
||||||
import java.awt.geom.Line2D;
|
import java.awt.geom.Line2D;
|
||||||
import java.awt.geom.NoninvertibleTransformException;
|
import java.awt.geom.NoninvertibleTransformException;
|
||||||
import java.awt.geom.PathIterator;
|
|
||||||
import java.awt.geom.Rectangle2D;
|
|
||||||
import java.awt.geom.RoundRectangle2D;
|
import java.awt.geom.RoundRectangle2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.awt.image.BufferedImageOp;
|
import java.awt.image.BufferedImageOp;
|
||||||
|
@ -82,7 +80,6 @@ import java.awt.image.renderable.RenderableImage;
|
||||||
import java.text.AttributedCharacterIterator;
|
import java.text.AttributedCharacterIterator;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -153,6 +150,11 @@ public abstract class AbstractGraphics2D
|
||||||
implements Cloneable
|
implements Cloneable
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default font to use on the graphics object.
|
||||||
|
*/
|
||||||
|
private static final Font FONT = new Font("SansSerif", Font.PLAIN, 12);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accuracy of the sampling in the anti-aliasing shape filler.
|
* Accuracy of the sampling in the anti-aliasing shape filler.
|
||||||
* Lower values give more speed, while higher values give more quality.
|
* Lower values give more speed, while higher values give more quality.
|
||||||
|
@ -164,7 +166,14 @@ public abstract class AbstractGraphics2D
|
||||||
* Caches certain shapes to avoid massive creation of such Shapes in
|
* Caches certain shapes to avoid massive creation of such Shapes in
|
||||||
* the various draw* and fill* methods.
|
* the various draw* and fill* methods.
|
||||||
*/
|
*/
|
||||||
private static final ThreadLocal shapeCache = new ThreadLocal();
|
private static final ThreadLocal<ShapeCache> shapeCache =
|
||||||
|
new ThreadLocal<ShapeCache>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The scanline converters by thread.
|
||||||
|
*/
|
||||||
|
private static final ThreadLocal<ScanlineConverter> scanlineConverters =
|
||||||
|
new ThreadLocal<ScanlineConverter>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The transformation for this Graphics2D instance
|
* The transformation for this Graphics2D instance
|
||||||
|
@ -176,6 +185,11 @@ public abstract class AbstractGraphics2D
|
||||||
*/
|
*/
|
||||||
private Paint paint;
|
private Paint paint;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The paint context during rendering.
|
||||||
|
*/
|
||||||
|
private PaintContext paintContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The background.
|
* The background.
|
||||||
*/
|
*/
|
||||||
|
@ -239,6 +253,17 @@ public abstract class AbstractGraphics2D
|
||||||
*/
|
*/
|
||||||
private boolean isOptimized = true;
|
private boolean isOptimized = true;
|
||||||
|
|
||||||
|
private static final BasicStroke STANDARD_STROKE = new BasicStroke();
|
||||||
|
|
||||||
|
private static final HashMap STANDARD_HINTS;
|
||||||
|
static {
|
||||||
|
HashMap hints = new HashMap();
|
||||||
|
hints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
|
||||||
|
hints.put(RenderingHints.KEY_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_ANTIALIAS_DEFAULT);
|
||||||
|
STANDARD_HINTS = hints;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Creates a new AbstractGraphics2D instance.
|
* Creates a new AbstractGraphics2D instance.
|
||||||
*/
|
*/
|
||||||
|
@ -247,13 +272,8 @@ public abstract class AbstractGraphics2D
|
||||||
transform = new AffineTransform();
|
transform = new AffineTransform();
|
||||||
background = Color.WHITE;
|
background = Color.WHITE;
|
||||||
composite = AlphaComposite.SrcOver;
|
composite = AlphaComposite.SrcOver;
|
||||||
stroke = new BasicStroke();
|
stroke = STANDARD_STROKE;
|
||||||
HashMap hints = new HashMap();
|
renderingHints = new RenderingHints(STANDARD_HINTS);
|
||||||
hints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
|
|
||||||
RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
|
|
||||||
hints.put(RenderingHints.KEY_ANTIALIASING,
|
|
||||||
RenderingHints.VALUE_ANTIALIAS_DEFAULT);
|
|
||||||
renderingHints = new RenderingHints(hints);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -958,15 +978,8 @@ public abstract class AbstractGraphics2D
|
||||||
*/
|
*/
|
||||||
public void drawGlyphVector(GlyphVector gv, float x, float y)
|
public void drawGlyphVector(GlyphVector gv, float x, float y)
|
||||||
{
|
{
|
||||||
int numGlyphs = gv.getNumGlyphs();
|
|
||||||
translate(x, y);
|
translate(x, y);
|
||||||
// TODO: We could use fill(gv.getOutline()), but that seems to be
|
fillShape(gv.getOutline(), true);
|
||||||
// slightly more inefficient.
|
|
||||||
for (int i = 0; i < numGlyphs; i++)
|
|
||||||
{
|
|
||||||
Shape o = gv.getGlyphOutline(i);
|
|
||||||
fillShape(o, true);
|
|
||||||
}
|
|
||||||
translate(-x, -y);
|
translate(-x, -y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1557,21 +1570,14 @@ public abstract class AbstractGraphics2D
|
||||||
antialias = (v == RenderingHints.VALUE_ANTIALIAS_ON);
|
antialias = (v == RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle2D userBounds = s.getBounds2D();
|
ScanlineConverter sc = getScanlineConverter();
|
||||||
Rectangle2D deviceBounds = new Rectangle2D.Double();
|
int resolution = 0;
|
||||||
ArrayList segs = getSegments(s, transform, deviceBounds, false);
|
|
||||||
Rectangle2D clipBounds = new Rectangle2D.Double();
|
|
||||||
ArrayList clipSegs = getSegments(clip, transform, clipBounds, true);
|
|
||||||
segs.addAll(clipSegs);
|
|
||||||
Rectangle2D inclClipBounds = new Rectangle2D.Double();
|
|
||||||
Rectangle2D.union(clipBounds, deviceBounds, inclClipBounds);
|
|
||||||
if (segs.size() > 0)
|
|
||||||
{
|
|
||||||
if (antialias)
|
if (antialias)
|
||||||
fillShapeAntialias(segs, deviceBounds, userBounds, inclClipBounds);
|
{
|
||||||
else
|
// Adjust resolution according to rendering hints.
|
||||||
fillShapeImpl(segs, deviceBounds, userBounds, inclClipBounds);
|
resolution = 2;
|
||||||
}
|
}
|
||||||
|
sc.renderShape(this, s, clip, transform, resolution);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1704,141 +1710,6 @@ public abstract class AbstractGraphics2D
|
||||||
throw new UnsupportedOperationException("Not implemented yet.");
|
throw new UnsupportedOperationException("Not implemented yet.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Fills the specified polygon without anti-aliasing.
|
|
||||||
*/
|
|
||||||
private void fillShapeImpl(ArrayList segs, Rectangle2D deviceBounds2D,
|
|
||||||
Rectangle2D userBounds,
|
|
||||||
Rectangle2D inclClipBounds)
|
|
||||||
{
|
|
||||||
// This is an implementation of a polygon scanline conversion algorithm
|
|
||||||
// described here:
|
|
||||||
// http://www.cs.berkeley.edu/~ug/slide/pipeline/assignments/scan/
|
|
||||||
|
|
||||||
// Create table of all edges.
|
|
||||||
// The edge buckets, sorted and indexed by their Y values.
|
|
||||||
|
|
||||||
double minX = deviceBounds2D.getMinX();
|
|
||||||
double minY = deviceBounds2D.getMinY();
|
|
||||||
double maxX = deviceBounds2D.getMaxX();
|
|
||||||
double maxY = deviceBounds2D.getMaxY();
|
|
||||||
double icMinY = inclClipBounds.getMinY();
|
|
||||||
double icMaxY = inclClipBounds.getMaxY();
|
|
||||||
Rectangle deviceBounds = new Rectangle((int) minX, (int) minY,
|
|
||||||
(int) Math.ceil(maxX) - (int) minX,
|
|
||||||
(int) Math.ceil(maxY) - (int) minY);
|
|
||||||
PaintContext pCtx = paint.createContext(getColorModel(), deviceBounds,
|
|
||||||
userBounds, transform, renderingHints);
|
|
||||||
|
|
||||||
ArrayList[] edgeTable = new ArrayList[(int) Math.ceil(icMaxY)
|
|
||||||
- (int) Math.ceil(icMinY) + 1];
|
|
||||||
|
|
||||||
for (Iterator i = segs.iterator(); i.hasNext();)
|
|
||||||
{
|
|
||||||
PolyEdge edge = (PolyEdge) i.next();
|
|
||||||
int yindex = (int) Math.ceil(edge.y0) - (int) Math.ceil(icMinY);
|
|
||||||
if (edgeTable[yindex] == null) // Create bucket when needed.
|
|
||||||
edgeTable[yindex] = new ArrayList();
|
|
||||||
edgeTable[yindex].add(edge); // Add edge to the bucket of its line.
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: The following could be useful for a future optimization.
|
|
||||||
// // Sort all the edges in the edge table within their buckets.
|
|
||||||
// for (int y = 0; y < edgeTable.length; y++)
|
|
||||||
// {
|
|
||||||
// if (edgeTable[y] != null)
|
|
||||||
// Collections.sort(edgeTable[y]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// The activeEdges list contains all the edges of the current scanline
|
|
||||||
// ordered by their intersection points with this scanline.
|
|
||||||
ArrayList activeEdges = new ArrayList();
|
|
||||||
PolyEdgeComparator comparator = new PolyEdgeComparator();
|
|
||||||
|
|
||||||
// Scan all relevant lines.
|
|
||||||
int minYInt = (int) Math.ceil(icMinY);
|
|
||||||
|
|
||||||
Rectangle devClip = getDeviceBounds();
|
|
||||||
int scanlineMax = (int) Math.min(maxY, devClip.getMaxY());
|
|
||||||
for (int y = minYInt; y < scanlineMax; y++)
|
|
||||||
{
|
|
||||||
ArrayList bucket = edgeTable[y - minYInt];
|
|
||||||
// Update all the x intersections in the current activeEdges table
|
|
||||||
// and remove entries that are no longer in the scanline.
|
|
||||||
for (Iterator i = activeEdges.iterator(); i.hasNext();)
|
|
||||||
{
|
|
||||||
PolyEdge edge = (PolyEdge) i.next();
|
|
||||||
if (y > edge.y1)
|
|
||||||
i.remove();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
edge.xIntersection += edge.slope;
|
|
||||||
//edge.xIntersection = edge.x0 + edge.slope * (y - edge.y0);
|
|
||||||
//System.err.println("edge.xIntersection: " + edge.xIntersection);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bucket != null)
|
|
||||||
activeEdges.addAll(bucket);
|
|
||||||
|
|
||||||
// Sort current edges. We are using a bubble sort, because the order
|
|
||||||
// of the intersections will not change in most situations. They
|
|
||||||
// will only change, when edges intersect each other.
|
|
||||||
int size = activeEdges.size();
|
|
||||||
if (size > 1)
|
|
||||||
{
|
|
||||||
for (int i = 1; i < size; i++)
|
|
||||||
{
|
|
||||||
PolyEdge e1 = (PolyEdge) activeEdges.get(i - 1);
|
|
||||||
PolyEdge e2 = (PolyEdge) activeEdges.get(i);
|
|
||||||
if (comparator.compare(e1, e2) > 0)
|
|
||||||
{
|
|
||||||
// Swap e2 with its left neighbor until it 'fits'.
|
|
||||||
int j = i;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
activeEdges.set(j, e1);
|
|
||||||
activeEdges.set(j - 1, e2);
|
|
||||||
j--;
|
|
||||||
if (j >= 1)
|
|
||||||
e1 = (PolyEdge) activeEdges.get(j - 1);
|
|
||||||
} while (j >= 1 && comparator.compare(e1, e2) > 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now draw all pixels inside the polygon.
|
|
||||||
// This is the last edge that intersected the scanline.
|
|
||||||
PolyEdge previous = null; // Gets initialized below.
|
|
||||||
boolean insideShape = false;
|
|
||||||
boolean insideClip = false;
|
|
||||||
//System.err.println("scanline: " + y);
|
|
||||||
for (Iterator i = activeEdges.iterator(); i.hasNext();)
|
|
||||||
{
|
|
||||||
PolyEdge edge = (PolyEdge) i.next();
|
|
||||||
if (edge.y1 <= y)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// Draw scanline when we are inside the shape AND inside the
|
|
||||||
// clip.
|
|
||||||
if (insideClip && insideShape)
|
|
||||||
{
|
|
||||||
int x0 = (int) previous.xIntersection;
|
|
||||||
int x1 = (int) edge.xIntersection;
|
|
||||||
if (x0 < x1)
|
|
||||||
fillScanline(pCtx, x0, x1, y);
|
|
||||||
}
|
|
||||||
// Update state.
|
|
||||||
previous = edge;
|
|
||||||
if (edge.isClip)
|
|
||||||
insideClip = ! insideClip;
|
|
||||||
else
|
|
||||||
insideShape = ! insideShape;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pCtx.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Paints a scanline between x0 and x1. Override this when your backend
|
* Paints a scanline between x0 and x1. Override this when your backend
|
||||||
* can efficiently draw/fill horizontal lines.
|
* can efficiently draw/fill horizontal lines.
|
||||||
|
@ -1847,8 +1718,9 @@ public abstract class AbstractGraphics2D
|
||||||
* @param x1 the right offset
|
* @param x1 the right offset
|
||||||
* @param y the scanline
|
* @param y the scanline
|
||||||
*/
|
*/
|
||||||
protected void fillScanline(PaintContext pCtx, int x0, int x1, int y)
|
protected void fillScanline(int x0, int x1, int y)
|
||||||
{
|
{
|
||||||
|
PaintContext pCtx = paintContext;
|
||||||
Raster paintRaster = pCtx.getRaster(x0, y, x1 - x0, 1);
|
Raster paintRaster = pCtx.getRaster(x0, y, x1 - x0, 1);
|
||||||
ColorModel paintColorModel = pCtx.getColorModel();
|
ColorModel paintColorModel = pCtx.getColorModel();
|
||||||
CompositeContext cCtx = composite.createContext(paintColorModel,
|
CompositeContext cCtx = composite.createContext(paintColorModel,
|
||||||
|
@ -1860,198 +1732,6 @@ public abstract class AbstractGraphics2D
|
||||||
cCtx.dispose();
|
cCtx.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Fills arbitrary shapes in an anti-aliased fashion.
|
|
||||||
*
|
|
||||||
* @param segs the line segments which define the shape which is to be filled
|
|
||||||
*/
|
|
||||||
private void fillShapeAntialias(ArrayList segs, Rectangle2D deviceBounds2D,
|
|
||||||
Rectangle2D userBounds,
|
|
||||||
Rectangle2D inclClipBounds)
|
|
||||||
{
|
|
||||||
// This is an implementation of a polygon scanline conversion algorithm
|
|
||||||
// described here:
|
|
||||||
// http://www.cs.berkeley.edu/~ug/slide/pipeline/assignments/scan/
|
|
||||||
// The antialiasing is implemented using a sampling technique, we do
|
|
||||||
// not scan whole lines but fractions of the line.
|
|
||||||
|
|
||||||
double minX = deviceBounds2D.getMinX();
|
|
||||||
double minY = deviceBounds2D.getMinY();
|
|
||||||
double maxX = deviceBounds2D.getMaxX();
|
|
||||||
double maxY = deviceBounds2D.getMaxY();
|
|
||||||
double icMinY = inclClipBounds.getMinY();
|
|
||||||
double icMaxY = inclClipBounds.getMaxY();
|
|
||||||
double icMinX = inclClipBounds.getMinX();
|
|
||||||
double icMaxX = inclClipBounds.getMaxX();
|
|
||||||
Rectangle deviceBounds = new Rectangle((int) minX, (int) minY,
|
|
||||||
(int) Math.ceil(maxX) - (int) minX,
|
|
||||||
(int) Math.ceil(maxY) - (int) minY);
|
|
||||||
PaintContext pCtx = paint.createContext(ColorModel.getRGBdefault(),
|
|
||||||
deviceBounds,
|
|
||||||
userBounds, transform,
|
|
||||||
renderingHints);
|
|
||||||
|
|
||||||
// This array will contain the oversampled transparency values for
|
|
||||||
// each pixel in the scanline.
|
|
||||||
int numScanlines = (int) Math.ceil(icMaxY) - (int) icMinY;
|
|
||||||
int numScanlinePixels = (int) Math.ceil(icMaxX) - (int) icMinX + 1;
|
|
||||||
if (alpha == null || alpha.length < (numScanlinePixels + 1))
|
|
||||||
alpha = new int[numScanlinePixels + 1];
|
|
||||||
|
|
||||||
int firstLine = (int) icMinY;
|
|
||||||
//System.err.println("minY: " + minY);
|
|
||||||
int firstSubline = (int) (Math.ceil((icMinY - Math.floor(icMinY)) * AA_SAMPLING));
|
|
||||||
double firstLineDouble = firstLine + firstSubline / (double) AA_SAMPLING;
|
|
||||||
//System.err.println("firstSubline: " + firstSubline);
|
|
||||||
|
|
||||||
// Create table of all edges.
|
|
||||||
// The edge buckets, sorted and indexed by their Y values.
|
|
||||||
//System.err.println("numScanlines: " + numScanlines);
|
|
||||||
if (edgeTable == null
|
|
||||||
|| edgeTable.length < numScanlines * AA_SAMPLING + AA_SAMPLING)
|
|
||||||
edgeTable = new ArrayList[numScanlines * AA_SAMPLING + AA_SAMPLING];
|
|
||||||
|
|
||||||
//System.err.println("firstLineDouble: " + firstLineDouble);
|
|
||||||
|
|
||||||
for (Iterator i = segs.iterator(); i.hasNext();)
|
|
||||||
{
|
|
||||||
PolyEdge edge = (PolyEdge) i.next();
|
|
||||||
int yindex = (int) (Math.ceil((edge.y0 - firstLineDouble) * AA_SAMPLING));
|
|
||||||
//System.err.println("yindex: " + yindex + " for y0: " + edge.y0);
|
|
||||||
// Initialize edge's slope and initial xIntersection.
|
|
||||||
edge.slope = ((edge.x1 - edge.x0) / (edge.y1 - edge.y0)) / AA_SAMPLING;
|
|
||||||
if (edge.y0 == edge.y1) // Horizontal edge.
|
|
||||||
edge.xIntersection = Math.min(edge.x0, edge.x1);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
double alignedFirst = Math.ceil(edge.y0 * AA_SAMPLING) / AA_SAMPLING;
|
|
||||||
edge.xIntersection = edge.x0 + (edge.slope * AA_SAMPLING) * (alignedFirst - edge.y0);
|
|
||||||
}
|
|
||||||
//System.err.println(edge);
|
|
||||||
// FIXME: Sanity check should not be needed when clipping works.
|
|
||||||
if (yindex >= 0 && yindex < edgeTable.length)
|
|
||||||
{
|
|
||||||
if (edgeTable[yindex] == null) // Create bucket when needed.
|
|
||||||
edgeTable[yindex] = new ArrayList();
|
|
||||||
edgeTable[yindex].add(edge); // Add edge to the bucket of its line.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// The activeEdges list contains all the edges of the current scanline
|
|
||||||
// ordered by their intersection points with this scanline.
|
|
||||||
ArrayList activeEdges = new ArrayList();
|
|
||||||
PolyEdgeComparator comparator = new PolyEdgeComparator();
|
|
||||||
|
|
||||||
// Scan all lines.
|
|
||||||
int yindex = 0;
|
|
||||||
//System.err.println("firstLine: " + firstLine + ", maxY: " + maxY + ", firstSubline: " + firstSubline);
|
|
||||||
for (int y = firstLine; y <= icMaxY; y++)
|
|
||||||
{
|
|
||||||
int leftX = (int) icMaxX;
|
|
||||||
int rightX = (int) icMinX;
|
|
||||||
boolean emptyScanline = true;
|
|
||||||
for (int subY = firstSubline; subY < AA_SAMPLING; subY++)
|
|
||||||
{
|
|
||||||
//System.err.println("scanline: " + y + ", subScanline: " + subY);
|
|
||||||
ArrayList bucket = edgeTable[yindex];
|
|
||||||
// Update all the x intersections in the current activeEdges table
|
|
||||||
// and remove entries that are no longer in the scanline.
|
|
||||||
for (Iterator i = activeEdges.iterator(); i.hasNext();)
|
|
||||||
{
|
|
||||||
PolyEdge edge = (PolyEdge) i.next();
|
|
||||||
// TODO: Do the following using integer arithmetics.
|
|
||||||
if ((y + ((double) subY / (double) AA_SAMPLING)) > edge.y1)
|
|
||||||
i.remove();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
edge.xIntersection += edge.slope;
|
|
||||||
//System.err.println("edge: " + edge);
|
|
||||||
//edge.xIntersection = edge.x0 + edge.slope * (y - edge.y0);
|
|
||||||
//System.err.println("edge.xIntersection: " + edge.xIntersection);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bucket != null)
|
|
||||||
{
|
|
||||||
activeEdges.addAll(bucket);
|
|
||||||
edgeTable[yindex].clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort current edges. We are using a bubble sort, because the order
|
|
||||||
// of the intersections will not change in most situations. They
|
|
||||||
// will only change, when edges intersect each other.
|
|
||||||
int size = activeEdges.size();
|
|
||||||
if (size > 1)
|
|
||||||
{
|
|
||||||
for (int i = 1; i < size; i++)
|
|
||||||
{
|
|
||||||
PolyEdge e1 = (PolyEdge) activeEdges.get(i - 1);
|
|
||||||
PolyEdge e2 = (PolyEdge) activeEdges.get(i);
|
|
||||||
if (comparator.compare(e1, e2) > 0)
|
|
||||||
{
|
|
||||||
// Swap e2 with its left neighbor until it 'fits'.
|
|
||||||
int j = i;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
activeEdges.set(j, e1);
|
|
||||||
activeEdges.set(j - 1, e2);
|
|
||||||
j--;
|
|
||||||
if (j >= 1)
|
|
||||||
e1 = (PolyEdge) activeEdges.get(j - 1);
|
|
||||||
} while (j >= 1 && comparator.compare(e1, e2) > 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now draw all pixels inside the polygon.
|
|
||||||
// This is the last edge that intersected the scanline.
|
|
||||||
PolyEdge previous = null; // Gets initialized below.
|
|
||||||
boolean insideClip = false;
|
|
||||||
boolean insideShape = false;
|
|
||||||
//System.err.println("scanline: " + y + ", subscanline: " + subY);
|
|
||||||
for (Iterator i = activeEdges.iterator(); i.hasNext();)
|
|
||||||
{
|
|
||||||
PolyEdge edge = (PolyEdge) i.next();
|
|
||||||
if (edge.y1 <= (y + (subY / (double) AA_SAMPLING)))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (insideClip && insideShape)
|
|
||||||
{
|
|
||||||
// TODO: Use integer arithmetics here.
|
|
||||||
if (edge.y1 > (y + (subY / (double) AA_SAMPLING)))
|
|
||||||
{
|
|
||||||
//System.err.println(edge);
|
|
||||||
// TODO: Eliminate the aligments.
|
|
||||||
int x0 = (int) Math.min(Math.max(previous.xIntersection, minX), maxX);
|
|
||||||
int x1 = (int) Math.min(Math.max(edge.xIntersection, minX), maxX);
|
|
||||||
//System.err.println("minX: " + minX + ", x0: " + x0 + ", x1: " + x1 + ", maxX: " + maxX);
|
|
||||||
// TODO: Pull out cast.
|
|
||||||
int left = x0 - (int) minX;
|
|
||||||
int right = x1 - (int) minX + 1;
|
|
||||||
alpha[left]++;
|
|
||||||
alpha[right]--;
|
|
||||||
leftX = Math.min(x0, leftX);
|
|
||||||
rightX = Math.max(x1+2, rightX);
|
|
||||||
emptyScanline = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
previous = edge;
|
|
||||||
if (edge.isClip)
|
|
||||||
insideClip = ! insideClip;
|
|
||||||
else
|
|
||||||
insideShape = ! insideShape;
|
|
||||||
}
|
|
||||||
yindex++;
|
|
||||||
}
|
|
||||||
firstSubline = 0;
|
|
||||||
// Render full scanline.
|
|
||||||
//System.err.println("scanline: " + y);
|
|
||||||
if (! emptyScanline)
|
|
||||||
fillScanlineAA(alpha, leftX, y, rightX - leftX, pCtx, (int) minX);
|
|
||||||
}
|
|
||||||
|
|
||||||
pCtx.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fills a horizontal line between x0 and x1 for anti aliased rendering.
|
* Fills a horizontal line between x0 and x1 for anti aliased rendering.
|
||||||
|
@ -2113,7 +1793,6 @@ public abstract class AbstractGraphics2D
|
||||||
cCtx.dispose();
|
cCtx.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes this graphics object. This must be called by subclasses in
|
* Initializes this graphics object. This must be called by subclasses in
|
||||||
* order to correctly initialize the state of this object.
|
* order to correctly initialize the state of this object.
|
||||||
|
@ -2121,13 +1800,8 @@ public abstract class AbstractGraphics2D
|
||||||
protected void init()
|
protected void init()
|
||||||
{
|
{
|
||||||
setPaint(Color.BLACK);
|
setPaint(Color.BLACK);
|
||||||
setFont(new Font("SansSerif", Font.PLAIN, 12));
|
setFont(FONT);
|
||||||
isOptimized = true;
|
isOptimized = true;
|
||||||
|
|
||||||
// FIXME: Should not be necessary. A clip of null should mean
|
|
||||||
// 'clip against device bounds.
|
|
||||||
destinationRaster = getDestinationRaster();
|
|
||||||
clip = getDeviceBounds();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2266,80 +1940,6 @@ public abstract class AbstractGraphics2D
|
||||||
p.transform(t);
|
p.transform(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts the specified shape into a list of segments.
|
|
||||||
*
|
|
||||||
* @param s the shape to convert
|
|
||||||
* @param t the transformation to apply before converting
|
|
||||||
* @param deviceBounds an output parameter; holds the bounding rectangle of
|
|
||||||
* s in device space after return
|
|
||||||
* @param isClip true when the shape is a clip, false for normal shapes;
|
|
||||||
* this influences the settings in the created PolyEdge instances.
|
|
||||||
*
|
|
||||||
* @return a list of PolyEdge that form the shape in device space
|
|
||||||
*/
|
|
||||||
private ArrayList getSegments(Shape s, AffineTransform t,
|
|
||||||
Rectangle2D deviceBounds, boolean isClip)
|
|
||||||
{
|
|
||||||
// Flatten the path. TODO: Determine the best flattening factor
|
|
||||||
// wrt to speed and quality.
|
|
||||||
PathIterator path = s.getPathIterator(getTransform(), 1.0);
|
|
||||||
|
|
||||||
// Build up polygons and let the native backend render this using
|
|
||||||
// rawFillShape() which would provide a default implementation for
|
|
||||||
// drawPixel using a PolyScan algorithm.
|
|
||||||
double[] seg = new double[6];
|
|
||||||
|
|
||||||
// TODO: Use ArrayList<PolyEdge> here when availble.
|
|
||||||
ArrayList segs = new ArrayList();
|
|
||||||
double segX = 0.; // The start point of the current edge.
|
|
||||||
double segY = 0.;
|
|
||||||
double polyX = 0.; // The start point of the current polygon.
|
|
||||||
double polyY = 0.;
|
|
||||||
|
|
||||||
double minX = Integer.MAX_VALUE;
|
|
||||||
double maxX = Integer.MIN_VALUE;
|
|
||||||
double minY = Integer.MAX_VALUE;
|
|
||||||
double maxY = Integer.MIN_VALUE;
|
|
||||||
|
|
||||||
//System.err.println("fill polygon");
|
|
||||||
while (! path.isDone())
|
|
||||||
{
|
|
||||||
int segType = path.currentSegment(seg);
|
|
||||||
minX = Math.min(minX, seg[0]);
|
|
||||||
maxX = Math.max(maxX, seg[0]);
|
|
||||||
minY = Math.min(minY, seg[1]);
|
|
||||||
maxY = Math.max(maxY, seg[1]);
|
|
||||||
|
|
||||||
//System.err.println("segment: " + segType + ", " + seg[0] + ", " + seg[1]);
|
|
||||||
if (segType == PathIterator.SEG_MOVETO)
|
|
||||||
{
|
|
||||||
segX = seg[0];
|
|
||||||
segY = seg[1];
|
|
||||||
polyX = seg[0];
|
|
||||||
polyY = seg[1];
|
|
||||||
}
|
|
||||||
else if (segType == PathIterator.SEG_CLOSE)
|
|
||||||
{
|
|
||||||
// Close the polyline.
|
|
||||||
PolyEdge edge = new PolyEdge(segX, segY,
|
|
||||||
polyX, polyY, isClip);
|
|
||||||
segs.add(edge);
|
|
||||||
}
|
|
||||||
else if (segType == PathIterator.SEG_LINETO)
|
|
||||||
{
|
|
||||||
PolyEdge edge = new PolyEdge(segX, segY,
|
|
||||||
seg[0], seg[1], isClip);
|
|
||||||
segs.add(edge);
|
|
||||||
segX = seg[0];
|
|
||||||
segY = seg[1];
|
|
||||||
}
|
|
||||||
path.next();
|
|
||||||
}
|
|
||||||
deviceBounds.setRect(minX, minY, maxX - minX, maxY - minY);
|
|
||||||
return segs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the ShapeCache for the calling thread.
|
* Returns the ShapeCache for the calling thread.
|
||||||
*
|
*
|
||||||
|
@ -2347,7 +1947,7 @@ public abstract class AbstractGraphics2D
|
||||||
*/
|
*/
|
||||||
private ShapeCache getShapeCache()
|
private ShapeCache getShapeCache()
|
||||||
{
|
{
|
||||||
ShapeCache sc = (ShapeCache) shapeCache.get();
|
ShapeCache sc = shapeCache.get();
|
||||||
if (sc == null)
|
if (sc == null)
|
||||||
{
|
{
|
||||||
sc = new ShapeCache();
|
sc = new ShapeCache();
|
||||||
|
@ -2355,4 +1955,20 @@ public abstract class AbstractGraphics2D
|
||||||
}
|
}
|
||||||
return sc;
|
return sc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the scanline converter for this thread.
|
||||||
|
*
|
||||||
|
* @return the scanline converter for this thread
|
||||||
|
*/
|
||||||
|
private ScanlineConverter getScanlineConverter()
|
||||||
|
{
|
||||||
|
ScanlineConverter sc = scanlineConverters.get();
|
||||||
|
if (sc == null)
|
||||||
|
{
|
||||||
|
sc = new ScanlineConverter();
|
||||||
|
scanlineConverters.set(sc);
|
||||||
|
}
|
||||||
|
return sc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
195
libjava/classpath/gnu/java/awt/java2d/ActiveEdges.java
Normal file
195
libjava/classpath/gnu/java/awt/java2d/ActiveEdges.java
Normal file
|
@ -0,0 +1,195 @@
|
||||||
|
/* ActiveEdges.java -- A collection of active edges for scanline conversion
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.awt.java2d;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of active edges for scanline conversion.
|
||||||
|
*/
|
||||||
|
final class ActiveEdges
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The active edges. This can contain null values at arbirary locations.
|
||||||
|
* The method #sort() packs this together.
|
||||||
|
*/
|
||||||
|
private PolyEdge[] activeEdges;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The actual number of active edges. The array can be bigger than this
|
||||||
|
* number.
|
||||||
|
*/
|
||||||
|
private int numActiveEdges;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new ActiveEdges object.
|
||||||
|
*/
|
||||||
|
ActiveEdges()
|
||||||
|
{
|
||||||
|
activeEdges = new PolyEdge[8];
|
||||||
|
numActiveEdges = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears out all active edges. This is cheap as it simply resets the
|
||||||
|
* counter to 0. It does not release all references to PolyEdge instances.
|
||||||
|
*/
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
numActiveEdges = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the specified edge to the list of active edges. This does not yet
|
||||||
|
* sort the edges and therefore does destroy any order of the list.
|
||||||
|
*
|
||||||
|
* @param edge the edge to add
|
||||||
|
*/
|
||||||
|
void add(PolyEdge edge)
|
||||||
|
{
|
||||||
|
// Grow array when necessary.
|
||||||
|
int oldSize = activeEdges.length;
|
||||||
|
if (numActiveEdges >= oldSize)
|
||||||
|
{
|
||||||
|
int newSize = oldSize + oldSize / 4 + 1;
|
||||||
|
PolyEdge[] newEdges = new PolyEdge[newSize];
|
||||||
|
System.arraycopy(activeEdges, 0, newEdges, 0, oldSize);
|
||||||
|
activeEdges = newEdges;
|
||||||
|
}
|
||||||
|
activeEdges[numActiveEdges] = edge;
|
||||||
|
numActiveEdges++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Intersects all active edges, sorts them according to their intersection
|
||||||
|
* points and packs the array to remove unneeded edges. This does also
|
||||||
|
* remove any edges that do not intersect the scanline (i.e. they end above
|
||||||
|
* of the scanline).
|
||||||
|
*
|
||||||
|
* @param y the scanline height
|
||||||
|
*/
|
||||||
|
void intersectSortAndPack(int n, int y)
|
||||||
|
{
|
||||||
|
// Intersect and pack in one go.
|
||||||
|
int last = 0;
|
||||||
|
PolyEdge tmp;
|
||||||
|
for (int i = 0; i < numActiveEdges; i++)
|
||||||
|
{
|
||||||
|
PolyEdge edge = activeEdges[i];
|
||||||
|
// Clear out edge that ends above the scanline.
|
||||||
|
if (edge != null && edge.y1 >= y)
|
||||||
|
{
|
||||||
|
assert edge.y1 >= y && edge.y0 <= y : "edge must cross scanline";
|
||||||
|
edge.intersect(n, y);
|
||||||
|
activeEdges[last] = edge;
|
||||||
|
last++;
|
||||||
|
|
||||||
|
// Bubble up the added edge.
|
||||||
|
for (int j = last - 1; j > 0; j--)
|
||||||
|
{
|
||||||
|
if (activeEdges[j].xIntersection
|
||||||
|
< activeEdges[j - 1].xIntersection)
|
||||||
|
{
|
||||||
|
tmp = activeEdges[j];
|
||||||
|
activeEdges[j] = activeEdges[j - 1];
|
||||||
|
activeEdges[j - 1] = tmp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// The beginning of the list is already sorted.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
numActiveEdges = last;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of active edges. This is only reliable after a
|
||||||
|
* call to {@link #intersectSortAndPack(int, int)}.
|
||||||
|
*
|
||||||
|
* @return the number of active edges
|
||||||
|
*/
|
||||||
|
int getNumActiveEdges()
|
||||||
|
{
|
||||||
|
return numActiveEdges;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the active edge at the position <code>i</code>.
|
||||||
|
*
|
||||||
|
* @param i the index
|
||||||
|
*
|
||||||
|
* @return the active edge at the specified index
|
||||||
|
*/
|
||||||
|
PolyEdge getActiveEdge(int i)
|
||||||
|
{
|
||||||
|
return activeEdges[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all edges that end above the specified height.
|
||||||
|
*
|
||||||
|
* @param y the cut-off height
|
||||||
|
*/
|
||||||
|
void remove(int y)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < numActiveEdges; i++)
|
||||||
|
{
|
||||||
|
PolyEdge edge = activeEdges[i];
|
||||||
|
if (edge != null && edge.y1 < y)
|
||||||
|
{
|
||||||
|
activeEdges[i] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
StringBuilder s = new StringBuilder();
|
||||||
|
s.append("[ActiveEdges] ");
|
||||||
|
for (int i = 0; i < numActiveEdges; i++)
|
||||||
|
{
|
||||||
|
s.append(activeEdges[i]);
|
||||||
|
s.append(',');
|
||||||
|
}
|
||||||
|
return s.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,37 +38,62 @@ exception statement from your version. */
|
||||||
|
|
||||||
package gnu.java.awt.java2d;
|
package gnu.java.awt.java2d;
|
||||||
|
|
||||||
|
import gnu.java.math.Fixed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An edge in a polygon. This is used by the scanline conversion algorithm
|
* An edge in a polygon.
|
||||||
* implemented in {@link AbstractGraphics2D#rawFillShape}.
|
|
||||||
*
|
*
|
||||||
* @author Roman Kennke (kennke@aicas.com)
|
* @author Roman Kennke (kennke@aicas.com)
|
||||||
*/
|
*/
|
||||||
public class PolyEdge
|
final class PolyEdge
|
||||||
implements Comparable
|
implements Comparable
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The start and end coordinates of the edge. y0 is always smaller or equal
|
* The start and end coordinates of the edge. y0 is always smaller or equal
|
||||||
* than y1.
|
* than y1.
|
||||||
|
*
|
||||||
|
* These values are stored as fixed-point decimals.
|
||||||
*/
|
*/
|
||||||
public double x0, y0, x1, y1;
|
public int x0, y0, x1, y1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The slope of the edge. This is dx / dy.
|
* The slope of the edge. This is dx / dy.
|
||||||
|
*
|
||||||
|
* This is a fixed point decimal.
|
||||||
*/
|
*/
|
||||||
double slope;
|
private int slope;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The intersection of this edge with the current scanline.
|
* The intersection of this edge with the current scanline.
|
||||||
|
*
|
||||||
|
* This is a fixed point decimal.
|
||||||
*/
|
*/
|
||||||
double xIntersection;
|
int xIntersection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates whether this edge is from the clip or from the target shape.
|
* Indicates whether this edge is from the clip or from the target shape.
|
||||||
*/
|
*/
|
||||||
boolean isClip;
|
boolean isClip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements a linked list for the edge pool.
|
||||||
|
*/
|
||||||
|
PolyEdge poolNext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements a linked list for the scanline edge lists.
|
||||||
|
*/
|
||||||
|
PolyEdge scanlineNext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an uninitialized edge.
|
||||||
|
*/
|
||||||
|
PolyEdge()
|
||||||
|
{
|
||||||
|
// Nothing to do here.
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new PolyEdge with the specified coordinates.
|
* Creates a new PolyEdge with the specified coordinates.
|
||||||
*
|
*
|
||||||
|
@ -77,7 +102,20 @@ public class PolyEdge
|
||||||
* @param x1 the end point, x coordinate
|
* @param x1 the end point, x coordinate
|
||||||
* @param y1 the end point, y coordinate
|
* @param y1 the end point, y coordinate
|
||||||
*/
|
*/
|
||||||
PolyEdge(double x0, double y0, double x1, double y1, boolean clip)
|
PolyEdge(int n, int x0, int y0, int x1, int y1, boolean clip)
|
||||||
|
{
|
||||||
|
init(n, x0, y0, x1, y1, clip);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (Re-) Initializes this edge.
|
||||||
|
*
|
||||||
|
* @param x0
|
||||||
|
* @param y0
|
||||||
|
* @param x1
|
||||||
|
* @param y1
|
||||||
|
*/
|
||||||
|
void init(int n, int x0, int y0, int x1, int y1, boolean clip)
|
||||||
{
|
{
|
||||||
isClip = clip;
|
isClip = clip;
|
||||||
if (y0 < y1)
|
if (y0 < y1)
|
||||||
|
@ -94,11 +132,7 @@ public class PolyEdge
|
||||||
this.x1 = x0;
|
this.x1 = x0;
|
||||||
this.y1 = y0;
|
this.y1 = y0;
|
||||||
}
|
}
|
||||||
slope = (this.x1 - this.x0) / (this.y1 - this.y0);
|
slope = Fixed.div(n, this.x1 - this.x0, this.y1 - this.y0);
|
||||||
if (this.y0 == this.y1) // Horizontal edge.
|
|
||||||
xIntersection = Math.min(this.x0, this.x1);
|
|
||||||
else
|
|
||||||
xIntersection = this.x0 + slope * (Math.ceil(this.y0) - this.y0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -115,6 +149,19 @@ public class PolyEdge
|
||||||
return comp;
|
return comp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Intersects this edge with the scanline at height y. The result is
|
||||||
|
* stored in {@link #xIntersection}.
|
||||||
|
*
|
||||||
|
* @param y the scanline
|
||||||
|
*/
|
||||||
|
void intersect(int n, int y)
|
||||||
|
{
|
||||||
|
int dy = y - y0;
|
||||||
|
int dx = Fixed.mul(n, slope, dy);
|
||||||
|
xIntersection = x0 + dx;
|
||||||
|
}
|
||||||
|
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return "Edge: " + x0 + ", " + y0 + ", " + x1 + ", " + y1 + ", slope: "
|
return "Edge: " + x0 + ", " + y0 + ", " + x1 + ", " + y1 + ", slope: "
|
||||||
|
|
91
libjava/classpath/gnu/java/awt/java2d/Scanline.java
Normal file
91
libjava/classpath/gnu/java/awt/java2d/Scanline.java
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
/* Scanline.java -- A scanline for the scanline converter
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.awt.java2d;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a scanline in the {@link ScanlineConverter}. This is basically
|
||||||
|
* a sorted list of {@link PolyEdge}s that is made for maximum reuse.
|
||||||
|
*/
|
||||||
|
class Scanline
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The actual edges array. The fields can be null.
|
||||||
|
*/
|
||||||
|
private PolyEdge edges;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears this scanline. This only resets the number of edges to 0. The
|
||||||
|
* actual PolyEdge objects are preserved for possible later reuse.
|
||||||
|
*/
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
edges = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new Scanline.
|
||||||
|
*/
|
||||||
|
Scanline()
|
||||||
|
{
|
||||||
|
// Nothing to do.
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts an edge into this scanline. This is performed in a sorted fashion,
|
||||||
|
* and so that it reuses as much existing resources as possible.
|
||||||
|
*/
|
||||||
|
void addEdge(PolyEdge edge)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Allocate PolyEdge when necessary or reuse an old one.
|
||||||
|
edge.scanlineNext = edges;
|
||||||
|
edges = edge;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the edges queue.
|
||||||
|
*
|
||||||
|
* @return the edges queue
|
||||||
|
*/
|
||||||
|
PolyEdge getEdges()
|
||||||
|
{
|
||||||
|
return edges;
|
||||||
|
}
|
||||||
|
}
|
404
libjava/classpath/gnu/java/awt/java2d/ScanlineConverter.java
Normal file
404
libjava/classpath/gnu/java/awt/java2d/ScanlineConverter.java
Normal file
|
@ -0,0 +1,404 @@
|
||||||
|
/* ScanlineConverter.java -- Rasterizes Shapes
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.awt.java2d;
|
||||||
|
|
||||||
|
import gnu.java.math.Fixed;
|
||||||
|
|
||||||
|
import java.awt.Shape;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
|
import java.awt.geom.PathIterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rasterizes {@link Shape} objects on an AbstractGraphics2D.
|
||||||
|
*/
|
||||||
|
final class ScanlineConverter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of digits to use for fixed point arithmetics.
|
||||||
|
*/
|
||||||
|
private static int FIXED_DIGITS = 6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The fixed value for the number 1.
|
||||||
|
*/
|
||||||
|
private static int ONE = Fixed.fixedValue(FIXED_DIGITS, 1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The actual number of scanlines.
|
||||||
|
*/
|
||||||
|
private int numScanlines;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of scanlines. This can contain more elements than we have
|
||||||
|
* scanlines. The real number of scanlines is stored in
|
||||||
|
* {@link #numScanlines}. This can also contain null values for empty
|
||||||
|
* scanlines.
|
||||||
|
*/
|
||||||
|
private Scanline[] scanlines;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The upper bounds which correspond to the index 0 in the scanline array.
|
||||||
|
*
|
||||||
|
* This is a fixed point value.
|
||||||
|
*/
|
||||||
|
private int upperBounds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The resolution of the scanline converter.
|
||||||
|
*
|
||||||
|
* This is a fixed point value.
|
||||||
|
*/
|
||||||
|
private int resolution;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* One half step according to the resolution. This is stored to avoid
|
||||||
|
* unnecessary operations during rendering.
|
||||||
|
*/
|
||||||
|
private int halfStep;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is used in {@link #addShape(PathIterator, boolean)} to
|
||||||
|
* receive the coordinates of the path.
|
||||||
|
*/
|
||||||
|
private float[] coords;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The active edges.
|
||||||
|
*/
|
||||||
|
private ActiveEdges activeEdges;
|
||||||
|
|
||||||
|
private PolyEdge edgePool;
|
||||||
|
private PolyEdge edgePoolLast;
|
||||||
|
|
||||||
|
private int minY;
|
||||||
|
private int maxY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new ScanlineConverter.
|
||||||
|
*/
|
||||||
|
ScanlineConverter()
|
||||||
|
{
|
||||||
|
scanlines = new Scanline[10];
|
||||||
|
coords = new float[6];
|
||||||
|
activeEdges = new ActiveEdges();
|
||||||
|
edgePool = new PolyEdge();
|
||||||
|
edgePoolLast = edgePool;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders the specified shape using the specified clip and transform.
|
||||||
|
*
|
||||||
|
* @param shape the shape to render
|
||||||
|
* @param clip the clip
|
||||||
|
* @param trans the transform
|
||||||
|
*/
|
||||||
|
void renderShape(AbstractGraphics2D g, Shape shape, Shape clip,
|
||||||
|
AffineTransform trans, int res)
|
||||||
|
{
|
||||||
|
// Prepare resolution and upper bounds.
|
||||||
|
clear();
|
||||||
|
setResolution(res);
|
||||||
|
|
||||||
|
boolean haveClip = clip != null;
|
||||||
|
|
||||||
|
// Add shapes.
|
||||||
|
PathIterator path = shape.getPathIterator(trans, resolution);
|
||||||
|
addShape(path, false);
|
||||||
|
if (haveClip)
|
||||||
|
{
|
||||||
|
path= clip.getPathIterator(trans, resolution);
|
||||||
|
addShape(path, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
setUpperBounds(minY);
|
||||||
|
|
||||||
|
PolyEdge edge = edgePool;
|
||||||
|
while (edge != edgePoolLast)
|
||||||
|
{
|
||||||
|
addEdge(edge);
|
||||||
|
edge = edge.poolNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
int y = upperBounds;
|
||||||
|
int lastIndex = scanlineIndex(y - resolution);
|
||||||
|
int index;
|
||||||
|
activeEdges.clear();
|
||||||
|
// The render loop...
|
||||||
|
Scanline scanline = null;
|
||||||
|
while (y <= maxY)
|
||||||
|
{
|
||||||
|
// First we put together our list of active edges.
|
||||||
|
index = scanlineIndex(y);
|
||||||
|
// If we go outside the scanline array we still need to render the
|
||||||
|
// remaining edges until they end.
|
||||||
|
scanline = index < scanlines.length ? scanlines[index] : null;
|
||||||
|
if (scanline != null)
|
||||||
|
{
|
||||||
|
edge = scanline.getEdges();
|
||||||
|
while (edge != null)
|
||||||
|
{
|
||||||
|
activeEdges.add(edge);
|
||||||
|
edge = edge.scanlineNext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Then we intersect all active edges with the current scanline
|
||||||
|
// and sort them according to their intersection points.
|
||||||
|
activeEdges.intersectSortAndPack(FIXED_DIGITS, y + halfStep);
|
||||||
|
|
||||||
|
// Ok, now we can perform the actual scanlining.
|
||||||
|
boolean push = lastIndex != index;
|
||||||
|
doScanline(g, y, push, haveClip);
|
||||||
|
|
||||||
|
// Remove obsolete active edges.
|
||||||
|
//activeEdges.remove(y + halfStep);
|
||||||
|
|
||||||
|
// Go on with the next line...
|
||||||
|
y += resolution;
|
||||||
|
lastIndex = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears all scanlines.
|
||||||
|
*/
|
||||||
|
private void clear()
|
||||||
|
{
|
||||||
|
// Reset edge pool.
|
||||||
|
edgePoolLast = edgePool;
|
||||||
|
|
||||||
|
// Reset scanlines.
|
||||||
|
for (int i = scanlines.length - 1; i >= 0 ; i--)
|
||||||
|
{
|
||||||
|
Scanline sl = scanlines[i];
|
||||||
|
if (sl != null)
|
||||||
|
sl.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset bounds.
|
||||||
|
minY = Integer.MAX_VALUE;
|
||||||
|
maxY = Integer.MIN_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the scanlining on the current set of active edges.
|
||||||
|
*/
|
||||||
|
private void doScanline(AbstractGraphics2D g, int y, boolean push,
|
||||||
|
boolean haveClip)
|
||||||
|
{
|
||||||
|
// We begin outside the clip and outside the shape. We only draw when
|
||||||
|
// we are inside the clip AND inside the shape.
|
||||||
|
boolean inClip = ! haveClip;
|
||||||
|
boolean inShape = false;
|
||||||
|
PolyEdge lastEdge = null;
|
||||||
|
int numEdges = activeEdges.getNumActiveEdges();
|
||||||
|
for (int i = 0; i < numEdges; i++)
|
||||||
|
{
|
||||||
|
PolyEdge edge = activeEdges.getActiveEdge(i);
|
||||||
|
if (inClip && inShape)
|
||||||
|
{
|
||||||
|
assert lastEdge != null;
|
||||||
|
int x0 = lastEdge.xIntersection;
|
||||||
|
int x1 = edge.xIntersection;
|
||||||
|
assert x0 <= x1;
|
||||||
|
if (push)
|
||||||
|
{
|
||||||
|
if (resolution == ONE)
|
||||||
|
{
|
||||||
|
// Non-AA rendering.
|
||||||
|
g.fillScanline(Fixed.intValue(FIXED_DIGITS, x0),
|
||||||
|
Fixed.intValue(FIXED_DIGITS, x1 - resolution),
|
||||||
|
Fixed.intValue(FIXED_DIGITS, y));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// AA rendering.
|
||||||
|
// FIXME: Implement.
|
||||||
|
System.err.println("Implement AA rendering.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (edge.isClip)
|
||||||
|
inClip = ! inClip;
|
||||||
|
else
|
||||||
|
inShape = ! inShape;
|
||||||
|
|
||||||
|
lastEdge = edge;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the resolution. A value of 0 rasterizes the shape normally without
|
||||||
|
* anti-aliasing. Greater values renders with a resolution of 2 ^ res.
|
||||||
|
*
|
||||||
|
* @param res the resolution
|
||||||
|
*/
|
||||||
|
private void setResolution(int res)
|
||||||
|
{
|
||||||
|
int one = Fixed.fixedValue(FIXED_DIGITS, 1);
|
||||||
|
resolution = one / (1 << res);
|
||||||
|
halfStep = resolution / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the vertical bounds of that shape that is beeing rendered.
|
||||||
|
*
|
||||||
|
* @param y0 the upper bounds
|
||||||
|
*/
|
||||||
|
private void setUpperBounds(int y0)
|
||||||
|
{
|
||||||
|
upperBounds = fit(y0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a shape to the scanline converter.
|
||||||
|
*
|
||||||
|
* @param path
|
||||||
|
* @param clip
|
||||||
|
*/
|
||||||
|
private void addShape(PathIterator path, boolean clip)
|
||||||
|
{
|
||||||
|
int startX = 0;
|
||||||
|
int startY = 0;
|
||||||
|
int lastX = 0;
|
||||||
|
int lastY = 0;
|
||||||
|
while (! path.isDone())
|
||||||
|
{
|
||||||
|
int type = path.currentSegment(coords);
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case PathIterator.SEG_MOVETO:
|
||||||
|
startX = lastX = Fixed.fixedValue(FIXED_DIGITS, coords[0]);
|
||||||
|
startY = lastY = Fixed.fixedValue(FIXED_DIGITS, coords[1]);
|
||||||
|
minY = Math.min(startY, minY);
|
||||||
|
maxY = Math.max(startY, maxY);
|
||||||
|
break;
|
||||||
|
case PathIterator.SEG_LINETO:
|
||||||
|
int x = Fixed.fixedValue(FIXED_DIGITS, coords[0]);
|
||||||
|
int y = Fixed.fixedValue(FIXED_DIGITS, coords[1]);
|
||||||
|
edgePoolAdd(lastX, lastY, x, y, clip);
|
||||||
|
lastX = x;
|
||||||
|
lastY = y;
|
||||||
|
minY = Math.min(lastY, minY);
|
||||||
|
maxY = Math.max(lastY, maxY);
|
||||||
|
break;
|
||||||
|
case PathIterator.SEG_CLOSE:
|
||||||
|
edgePoolAdd(lastX, lastY, startX, startY, clip);
|
||||||
|
lastX = startX;
|
||||||
|
lastY = startY;
|
||||||
|
break;
|
||||||
|
case PathIterator.SEG_CUBICTO:
|
||||||
|
case PathIterator.SEG_QUADTO:
|
||||||
|
default:
|
||||||
|
assert false;
|
||||||
|
}
|
||||||
|
path.next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds an edge into the scanline array.
|
||||||
|
*/
|
||||||
|
private void addEdge(PolyEdge edge)
|
||||||
|
{
|
||||||
|
// Determine index.
|
||||||
|
int upper = Math.min(edge.y0, edge.y1);
|
||||||
|
// Fit to raster.
|
||||||
|
int index = scanlineIndex(upper);
|
||||||
|
// Grow array when necessary.
|
||||||
|
if (index >= scanlines.length)
|
||||||
|
{
|
||||||
|
int oldSize = scanlines.length;
|
||||||
|
int newSize = Math.max(oldSize + oldSize / 2 + 1, index + 10);
|
||||||
|
Scanline[] newScanlines = new Scanline[newSize];
|
||||||
|
System.arraycopy(scanlines, 0, newScanlines, 0, oldSize);
|
||||||
|
scanlines = newScanlines;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add edge.
|
||||||
|
if (scanlines[index] == null)
|
||||||
|
{
|
||||||
|
scanlines[index] = new Scanline();
|
||||||
|
}
|
||||||
|
scanlines[index].addEdge(edge);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fits an Y coordinate to the grid.
|
||||||
|
*
|
||||||
|
* @param y the Y coordinate to fit
|
||||||
|
*
|
||||||
|
* @return the fitted Y coordinate
|
||||||
|
*/
|
||||||
|
private int fit(int y)
|
||||||
|
{
|
||||||
|
int val1 = Fixed.div(FIXED_DIGITS, y, resolution);
|
||||||
|
int rounded = Fixed.round(FIXED_DIGITS, val1);
|
||||||
|
return Fixed.div(FIXED_DIGITS, rounded, resolution);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the scanline index for the specified y coordinate.
|
||||||
|
*
|
||||||
|
* @param y the y coordinate as fixed point value
|
||||||
|
*
|
||||||
|
* @return the scanline index
|
||||||
|
*/
|
||||||
|
private int scanlineIndex(int y)
|
||||||
|
{
|
||||||
|
int fitted = fit(y);
|
||||||
|
// Cleverly skip the fixed point conversions here.
|
||||||
|
return (fitted - upperBounds)/ resolution;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void edgePoolAdd(int x0, int y0, int x1, int y1, boolean clip)
|
||||||
|
{
|
||||||
|
// Don't need no horizontal edges.
|
||||||
|
if (y0 != y1)
|
||||||
|
{
|
||||||
|
edgePoolLast.init(FIXED_DIGITS, x0, y0, x1, y1, clip);
|
||||||
|
if (edgePoolLast.poolNext == null)
|
||||||
|
{
|
||||||
|
edgePoolLast.poolNext = new PolyEdge();
|
||||||
|
}
|
||||||
|
edgePoolLast = edgePoolLast.poolNext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
301
libjava/classpath/gnu/java/awt/peer/ClasspathDesktopPeer.java
Normal file
301
libjava/classpath/gnu/java/awt/peer/ClasspathDesktopPeer.java
Normal file
|
@ -0,0 +1,301 @@
|
||||||
|
/* ClasspathDesktopPeer.java -- Offers a concrete implementation for DesktopPeer
|
||||||
|
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
package gnu.java.awt.peer;
|
||||||
|
|
||||||
|
import java.awt.AWTPermission;
|
||||||
|
import java.awt.Desktop.Action;
|
||||||
|
import java.awt.peer.DesktopPeer;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
import java.util.prefs.Preferences;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Offers a common implementation for the Desktop peers, that enables
|
||||||
|
* access to default system application within java processes.
|
||||||
|
*
|
||||||
|
* @author Mario Torre <neugens@limasoftware.net>
|
||||||
|
*/
|
||||||
|
public class ClasspathDesktopPeer
|
||||||
|
implements DesktopPeer
|
||||||
|
{
|
||||||
|
/** This is the fallback browser, if no desktop was detected. */
|
||||||
|
protected static final String _DEFAULT_BROWSER = "firefox";
|
||||||
|
|
||||||
|
/** gnu.java.awt.peer.Desktop.html.command */
|
||||||
|
protected static final String _BROWSE = "html";
|
||||||
|
|
||||||
|
/** gnu.java.awt.peer.Desktop.mail.command */
|
||||||
|
protected static final String _MAIL = "mail";
|
||||||
|
|
||||||
|
/** gnu.java.awt.peer.Desktop.edit.command */
|
||||||
|
protected static final String _EDIT = "edit";
|
||||||
|
|
||||||
|
/** gnu.java.awt.peer.Desktop.print.command */
|
||||||
|
protected static final String _PRINT = "print";
|
||||||
|
|
||||||
|
/** gnu.java.awt.peer.Desktop.open.command */
|
||||||
|
protected static final String _OPEN = "open";
|
||||||
|
|
||||||
|
/** */
|
||||||
|
protected static final KDEDesktopPeer kde = new KDEDesktopPeer();
|
||||||
|
|
||||||
|
/** */
|
||||||
|
protected static final GnomeDesktopPeer gnome = new GnomeDesktopPeer();
|
||||||
|
|
||||||
|
/** */
|
||||||
|
protected static final ClasspathDesktopPeer classpath =
|
||||||
|
new ClasspathDesktopPeer();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preference subsystem. Packagers and users can override the default
|
||||||
|
* behaviour of this class via preferences and system properties.
|
||||||
|
*/
|
||||||
|
protected Preferences prefs =
|
||||||
|
Preferences.userNodeForPackage(ClasspathDesktopPeer.class).node("Desktop");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param target
|
||||||
|
*/
|
||||||
|
protected ClasspathDesktopPeer()
|
||||||
|
{
|
||||||
|
/* nothing to do */
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSupported(Action action)
|
||||||
|
{
|
||||||
|
String check = null;
|
||||||
|
|
||||||
|
switch(action)
|
||||||
|
{
|
||||||
|
case BROWSE:
|
||||||
|
check = _BROWSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAIL:
|
||||||
|
check = _MAIL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDIT:
|
||||||
|
check = _EDIT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PRINT:
|
||||||
|
check = _PRINT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OPEN: default:
|
||||||
|
check = _OPEN;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.supportCommand(check);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void browse(URI url) throws IOException
|
||||||
|
{
|
||||||
|
checkPermissions();
|
||||||
|
|
||||||
|
String browser = getCommand(_BROWSE);
|
||||||
|
|
||||||
|
if (browser == null)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
browser = browser + " " + url.toString();
|
||||||
|
|
||||||
|
Runtime.getRuntime().exec(browser);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void edit(File file) throws IOException
|
||||||
|
{
|
||||||
|
checkPermissions(file, false);
|
||||||
|
|
||||||
|
String edit = getCommand(_EDIT);
|
||||||
|
|
||||||
|
if (edit == null)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
edit = edit + " " + file.getAbsolutePath();
|
||||||
|
Runtime.getRuntime().exec(edit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mail(URI mailtoURL) throws IOException
|
||||||
|
{
|
||||||
|
checkPermissions();
|
||||||
|
|
||||||
|
String scheme = mailtoURL.getScheme();
|
||||||
|
if (scheme == null || !scheme.equalsIgnoreCase("mailto"))
|
||||||
|
throw new IllegalArgumentException("URI Scheme not of type mailto");
|
||||||
|
|
||||||
|
String mail = getCommand(_MAIL);
|
||||||
|
|
||||||
|
if (mail == null)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
mail = mail + " " + mailtoURL.toString();
|
||||||
|
|
||||||
|
Runtime.getRuntime().exec(mail);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mail() throws IOException
|
||||||
|
{
|
||||||
|
checkPermissions();
|
||||||
|
|
||||||
|
String mail = getCommand(_MAIL);
|
||||||
|
|
||||||
|
if (mail == null)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
Runtime.getRuntime().exec(mail);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void open(File file) throws IOException
|
||||||
|
{
|
||||||
|
checkPermissions(file, true);
|
||||||
|
|
||||||
|
String open = getCommand(_OPEN);
|
||||||
|
|
||||||
|
if (open == null)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
open = open + " " + file.getAbsolutePath();
|
||||||
|
Runtime.getRuntime().exec(open);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print(File file) throws IOException
|
||||||
|
{
|
||||||
|
checkPrintPermissions(file);
|
||||||
|
|
||||||
|
String print = getCommand(_PRINT);
|
||||||
|
|
||||||
|
if (print == null)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
print = print + " " + file.getAbsolutePath();
|
||||||
|
Runtime.getRuntime().exec(print);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getCommand(String action)
|
||||||
|
{
|
||||||
|
// check if a system property exist
|
||||||
|
String command =
|
||||||
|
System.getProperty("gnu.java.awt.peer.Desktop." + action + ".command");
|
||||||
|
|
||||||
|
// otherwise, get it from preferences, if any
|
||||||
|
if (command == null)
|
||||||
|
{
|
||||||
|
command = prefs.node(action).get("command", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Note: Checks for AWTPermission("showWindowWithoutWarningBanner") only.
|
||||||
|
*/
|
||||||
|
protected void checkPermissions()
|
||||||
|
{
|
||||||
|
SecurityManager sm = System.getSecurityManager();
|
||||||
|
if (sm != null) {
|
||||||
|
sm.checkPermission(new AWTPermission("showWindowWithoutWarningBanner"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls checkPermissions() and checks for SecurityManager.checkRead()
|
||||||
|
* and, if readOnly is false, for SecurityManager.checkWrite()
|
||||||
|
*/
|
||||||
|
protected void checkPermissions(File file, boolean readOnly)
|
||||||
|
{
|
||||||
|
checkPermissions();
|
||||||
|
|
||||||
|
SecurityManager sm = System.getSecurityManager();
|
||||||
|
if (sm != null) {
|
||||||
|
sm.checkRead(file.toString());
|
||||||
|
if (!readOnly) sm.checkWrite(file.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls checkPermissions(file, true) and checks for
|
||||||
|
* SecurityManager.checkPrintJobAccess()
|
||||||
|
*/
|
||||||
|
protected void checkPrintPermissions(File file)
|
||||||
|
{
|
||||||
|
checkPermissions(file, true);
|
||||||
|
|
||||||
|
SecurityManager sm = System.getSecurityManager();
|
||||||
|
if (sm != null) {
|
||||||
|
sm.checkPrintJobAccess();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param check
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected boolean supportCommand(String check)
|
||||||
|
{
|
||||||
|
return ((this.getCommand(check) != null) ? true : false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static DesktopPeer getDesktop()
|
||||||
|
{
|
||||||
|
// check if we are under Gnome or KDE or anything else
|
||||||
|
String desktopSession = System.getenv("GNOME_DESKTOP_SESSION_ID");
|
||||||
|
if (desktopSession == null)
|
||||||
|
{
|
||||||
|
desktopSession = System.getenv("KDE_FULL_SESSION");
|
||||||
|
if (desktopSession != null)
|
||||||
|
return kde;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return gnome;
|
||||||
|
}
|
||||||
|
|
||||||
|
// revert to this class for default values
|
||||||
|
return classpath;
|
||||||
|
}
|
||||||
|
}
|
|
@ -54,6 +54,7 @@ import java.awt.peer.FontPeer;
|
||||||
import java.text.AttributedCharacterIterator;
|
import java.text.AttributedCharacterIterator;
|
||||||
import java.text.CharacterIterator;
|
import java.text.CharacterIterator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -120,6 +121,23 @@ public abstract class ClasspathFontPeer
|
||||||
*/
|
*/
|
||||||
protected AffineTransform transform;
|
protected AffineTransform transform;
|
||||||
|
|
||||||
|
static class LRUCache<K,V> extends LinkedHashMap<K,V>
|
||||||
|
{
|
||||||
|
int max_entries;
|
||||||
|
public LRUCache(int max)
|
||||||
|
{
|
||||||
|
super(max, 0.75f, true);
|
||||||
|
max_entries = max;
|
||||||
|
}
|
||||||
|
protected boolean removeEldestEntry(Map.Entry eldest)
|
||||||
|
{
|
||||||
|
return size() > max_entries;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static LRUCache<AffineTransform,TransformAttribute> transCache =
|
||||||
|
new LRUCache<AffineTransform,TransformAttribute>(50);
|
||||||
|
|
||||||
protected static ClasspathToolkit tk()
|
protected static ClasspathToolkit tk()
|
||||||
{
|
{
|
||||||
return (ClasspathToolkit)(Toolkit.getDefaultToolkit ());
|
return (ClasspathToolkit)(Toolkit.getDefaultToolkit ());
|
||||||
|
@ -200,7 +218,19 @@ public abstract class ClasspathFontPeer
|
||||||
protected static void copyTransformToAttrs (AffineTransform trans, Map attrs)
|
protected static void copyTransformToAttrs (AffineTransform trans, Map attrs)
|
||||||
{
|
{
|
||||||
if (trans != null)
|
if (trans != null)
|
||||||
attrs.put(TextAttribute.TRANSFORM, new TransformAttribute (trans));
|
{
|
||||||
|
TransformAttribute ta;
|
||||||
|
synchronized(transCache)
|
||||||
|
{
|
||||||
|
ta = transCache.get(trans);
|
||||||
|
if (ta == null)
|
||||||
|
{
|
||||||
|
ta = new TransformAttribute(trans);
|
||||||
|
transCache.put(trans, ta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attrs.put(TextAttribute.TRANSFORM, ta);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
153
libjava/classpath/gnu/java/awt/peer/GnomeDesktopPeer.java
Normal file
153
libjava/classpath/gnu/java/awt/peer/GnomeDesktopPeer.java
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
/* GnomeDesktopPeer.java -- Offers a GNOME Desktop peer for DesktopPeer
|
||||||
|
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
package gnu.java.awt.peer;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Mario Torre <neugens@limasoftware.net>
|
||||||
|
*/
|
||||||
|
public class GnomeDesktopPeer
|
||||||
|
extends ClasspathDesktopPeer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Query string to use if a GNOME desktop is detected to get the name of the
|
||||||
|
* default browser. This requires gconftool-2 (part of GNOME).
|
||||||
|
*/
|
||||||
|
private static final String BROWSER_QUERY_GNOME =
|
||||||
|
"gconftool-2 -g /desktop/gnome/url-handlers/http/command";
|
||||||
|
|
||||||
|
protected String getCommand(String action)
|
||||||
|
{
|
||||||
|
// check if a command already exists
|
||||||
|
String command = super.getCommand(action);
|
||||||
|
|
||||||
|
if (command == null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (action == _BROWSE)
|
||||||
|
{
|
||||||
|
command = execQuery(BROWSER_QUERY_GNOME);
|
||||||
|
}
|
||||||
|
else if (action == _PRINT)
|
||||||
|
{
|
||||||
|
command = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
command = "gnome-open";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
command = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void browse(URI url) throws IOException
|
||||||
|
{
|
||||||
|
checkPermissions();
|
||||||
|
|
||||||
|
String browser = getCommand(_BROWSE);
|
||||||
|
|
||||||
|
if (browser == null)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
browser = browser + " " + url.toString();
|
||||||
|
|
||||||
|
Runtime.getRuntime().exec(browser);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean supportCommand(String check)
|
||||||
|
{
|
||||||
|
if (check == _PRINT)
|
||||||
|
{
|
||||||
|
return super.supportCommand(check);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mail() throws IOException
|
||||||
|
{
|
||||||
|
checkPermissions();
|
||||||
|
|
||||||
|
String mail = getCommand(_MAIL);
|
||||||
|
|
||||||
|
if (mail == null)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
Runtime.getRuntime().exec(mail + " mailto:");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String execQuery(String command) throws IOException
|
||||||
|
{
|
||||||
|
InputStream in = null;
|
||||||
|
StringBuilder output = new StringBuilder();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Process process = Runtime.getRuntime().exec(command);
|
||||||
|
|
||||||
|
// Get the input stream and read from it
|
||||||
|
in = process.getInputStream();
|
||||||
|
int c;
|
||||||
|
while ((c = in.read()) != - 1)
|
||||||
|
{
|
||||||
|
output.append((char) c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (in != null)
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove %s from the string, leave only the command line
|
||||||
|
int index = output.indexOf("%s");
|
||||||
|
output.delete(index, index + 1);
|
||||||
|
|
||||||
|
return output.toString().trim();
|
||||||
|
}
|
||||||
|
}
|
135
libjava/classpath/gnu/java/awt/peer/KDEDesktopPeer.java
Normal file
135
libjava/classpath/gnu/java/awt/peer/KDEDesktopPeer.java
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
/* GnomeDesktopPeer.java -- Offers a KDE Desktop peer for DesktopPeer
|
||||||
|
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301 USA.
|
||||||
|
|
||||||
|
Linking this library statically or dynamically with other modules is
|
||||||
|
making a combined work based on this library. Thus, the terms and
|
||||||
|
conditions of the GNU General Public License cover the whole
|
||||||
|
combination.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent
|
||||||
|
modules, and to copy and distribute the resulting executable under
|
||||||
|
terms of your choice, provided that you also meet, for each linked
|
||||||
|
independent module, the terms and conditions of the license of that
|
||||||
|
module. An independent module is a module which is not derived from
|
||||||
|
or based on this library. If you modify this library, you may extend
|
||||||
|
this exception to your version of the library, but you are not
|
||||||
|
obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version. */
|
||||||
|
|
||||||
|
package gnu.java.awt.peer;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Mario Torre <neugens@limasoftware.net>
|
||||||
|
*/
|
||||||
|
public class KDEDesktopPeer
|
||||||
|
extends ClasspathDesktopPeer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Query string to use if a GNOME desktop is detected to get the name of the
|
||||||
|
* default browser. This requires gconftool-2 (part of GNOME).
|
||||||
|
*/
|
||||||
|
private static final String BROWSER_QUERY_GNOME =
|
||||||
|
"gconftool-2 -g /desktop/gnome/url-handlers/http/command";
|
||||||
|
|
||||||
|
protected String getCommand(String action)
|
||||||
|
{
|
||||||
|
// check if a command already exists
|
||||||
|
String command = super.getCommand(action);
|
||||||
|
|
||||||
|
if (command == null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (action == _MAIL)
|
||||||
|
{
|
||||||
|
command = "kfmclient exec";
|
||||||
|
}
|
||||||
|
else if (action == _PRINT)
|
||||||
|
{
|
||||||
|
command = "kprinter";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
command = "kfmclient openURL";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
command = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean supportCommand(String check)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mail() throws IOException
|
||||||
|
{
|
||||||
|
checkPermissions();
|
||||||
|
|
||||||
|
String mail = getCommand(_MAIL);
|
||||||
|
|
||||||
|
if (mail == null)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
Runtime.getRuntime().exec(mail + " 'mailto: '");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String execQuery(String command) throws IOException
|
||||||
|
{
|
||||||
|
InputStream in = null;
|
||||||
|
StringBuilder output = new StringBuilder();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Process process = Runtime.getRuntime().exec(command);
|
||||||
|
|
||||||
|
// Get the input stream and read from it
|
||||||
|
in = process.getInputStream();
|
||||||
|
int c;
|
||||||
|
while ((c = in.read()) != - 1)
|
||||||
|
{
|
||||||
|
output.append((char) c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (in != null)
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove %s from the string, leave only the command line
|
||||||
|
int index = output.indexOf("%s");
|
||||||
|
output.delete(index, index + 1);
|
||||||
|
|
||||||
|
return output.toString().trim();
|
||||||
|
}
|
||||||
|
}
|
|
@ -61,11 +61,11 @@ public class AsyncImage
|
||||||
private class NullImageSource
|
private class NullImageSource
|
||||||
implements ImageProducer
|
implements ImageProducer
|
||||||
{
|
{
|
||||||
private ArrayList consumers;
|
private ArrayList<ImageConsumer> consumers;
|
||||||
|
|
||||||
NullImageSource()
|
NullImageSource()
|
||||||
{
|
{
|
||||||
consumers = new ArrayList();
|
consumers = new ArrayList<ImageConsumer>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addConsumer(ImageConsumer ic)
|
public void addConsumer(ImageConsumer ic)
|
||||||
|
@ -145,14 +145,14 @@ public class AsyncImage
|
||||||
*
|
*
|
||||||
* This is package private to avoid accessor methods.
|
* This is package private to avoid accessor methods.
|
||||||
*/
|
*/
|
||||||
HashSet observers;
|
HashSet<ImageObserver> observers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new AsyncImage that loads from the specified URL.
|
* Creates a new AsyncImage that loads from the specified URL.
|
||||||
*/
|
*/
|
||||||
AsyncImage(URL url)
|
AsyncImage(URL url)
|
||||||
{
|
{
|
||||||
observers = new HashSet();
|
observers = new HashSet<ImageObserver>();
|
||||||
Loader l = new Loader(url);
|
Loader l = new Loader(url);
|
||||||
Thread t = new Thread(l);
|
Thread t = new Thread(l);
|
||||||
t.start();
|
t.start();
|
||||||
|
@ -221,7 +221,7 @@ public class AsyncImage
|
||||||
{
|
{
|
||||||
// This field gets null when image loading is complete and we don't
|
// This field gets null when image loading is complete and we don't
|
||||||
// need to store any more observers.
|
// need to store any more observers.
|
||||||
HashSet observs = observers;
|
HashSet<ImageObserver> observs = observers;
|
||||||
if (observs != null)
|
if (observs != null)
|
||||||
{
|
{
|
||||||
observs.add(obs);
|
observs.add(obs);
|
||||||
|
|
|
@ -40,6 +40,7 @@ package gnu.java.awt.peer.gtk;
|
||||||
|
|
||||||
import java.awt.AlphaComposite;
|
import java.awt.AlphaComposite;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.Composite;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.GraphicsConfiguration;
|
import java.awt.GraphicsConfiguration;
|
||||||
|
@ -49,7 +50,6 @@ import java.awt.Shape;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.font.GlyphVector;
|
import java.awt.font.GlyphVector;
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.Point2D;
|
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.awt.image.ColorModel;
|
import java.awt.image.ColorModel;
|
||||||
|
@ -74,12 +74,6 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
*/
|
*/
|
||||||
private BufferedImage image, buffer;
|
private BufferedImage image, buffer;
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows us to lock the image from updates (if we want to perform a few
|
|
||||||
* intermediary operations on the cairo surface, then update it all at once)
|
|
||||||
*/
|
|
||||||
private boolean locked;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Image size.
|
* Image size.
|
||||||
*/
|
*/
|
||||||
|
@ -93,7 +87,8 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
/**
|
/**
|
||||||
* Cache BufferedImageGraphics surfaces.
|
* Cache BufferedImageGraphics surfaces.
|
||||||
*/
|
*/
|
||||||
static WeakHashMap bufferedImages = new WeakHashMap();
|
static WeakHashMap<BufferedImage, CairoSurface> bufferedImages
|
||||||
|
= new WeakHashMap<BufferedImage, CairoSurface>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Its corresponding cairo_t.
|
* Its corresponding cairo_t.
|
||||||
|
@ -109,7 +104,6 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
this.image = bi;
|
this.image = bi;
|
||||||
imageWidth = bi.getWidth();
|
imageWidth = bi.getWidth();
|
||||||
imageHeight = bi.getHeight();
|
imageHeight = bi.getHeight();
|
||||||
locked = false;
|
|
||||||
|
|
||||||
if (!(image.getSampleModel() instanceof SinglePixelPackedSampleModel))
|
if (!(image.getSampleModel() instanceof SinglePixelPackedSampleModel))
|
||||||
hasFastCM = false;
|
hasFastCM = false;
|
||||||
|
@ -118,7 +112,8 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
hasFastCM = true;
|
hasFastCM = true;
|
||||||
hasAlpha = false;
|
hasAlpha = false;
|
||||||
}
|
}
|
||||||
else if(bi.getColorModel().equals(CairoSurface.cairoColorModel))
|
else if(bi.getColorModel().equals(CairoSurface.cairoColorModel)
|
||||||
|
|| bi.getColorModel().equals(CairoSurface.cairoCM_pre))
|
||||||
{
|
{
|
||||||
hasFastCM = true;
|
hasFastCM = true;
|
||||||
hasAlpha = true;
|
hasAlpha = true;
|
||||||
|
@ -128,7 +123,7 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
|
|
||||||
// Cache surfaces.
|
// Cache surfaces.
|
||||||
if( bufferedImages.get( bi ) != null )
|
if( bufferedImages.get( bi ) != null )
|
||||||
surface = (CairoSurface)bufferedImages.get( bi );
|
surface = bufferedImages.get( bi );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
surface = new CairoSurface( imageWidth, imageHeight );
|
surface = new CairoSurface( imageWidth, imageHeight );
|
||||||
|
@ -148,9 +143,6 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
int minY = image.getRaster().getSampleModelTranslateY();
|
int minY = image.getRaster().getSampleModelTranslateY();
|
||||||
|
|
||||||
// Pull pixels directly out of data buffer
|
// Pull pixels directly out of data buffer
|
||||||
if(raster instanceof CairoSurface)
|
|
||||||
pixels = ((CairoSurface)raster).getPixels(raster.getWidth() * raster.getHeight());
|
|
||||||
else
|
|
||||||
pixels = ((DataBufferInt)raster.getDataBuffer()).getData();
|
pixels = ((DataBufferInt)raster.getDataBuffer()).getData();
|
||||||
|
|
||||||
// Discard pixels that fall outside of the image's bounds
|
// Discard pixels that fall outside of the image's bounds
|
||||||
|
@ -161,7 +153,8 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
int scanline = sm.getScanlineStride();
|
int scanline = sm.getScanlineStride();
|
||||||
|
|
||||||
for (int i = 0; i < imageHeight; i++)
|
for (int i = 0; i < imageHeight; i++)
|
||||||
System.arraycopy(pixels, (i - minY) * scanline - minX, pixels2, i * imageWidth, imageWidth);
|
System.arraycopy(pixels, (i - minY) * scanline - minX, pixels2,
|
||||||
|
i * imageWidth, imageWidth);
|
||||||
|
|
||||||
pixels = pixels2;
|
pixels = pixels2;
|
||||||
}
|
}
|
||||||
|
@ -173,11 +166,13 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pixels = CairoGraphics2D.findSimpleIntegerArray(image.getColorModel(),image.getData());
|
pixels = CairoGraphics2D.findSimpleIntegerArray(image.getColorModel(),
|
||||||
|
image.getData());
|
||||||
|
if (pixels != null)
|
||||||
|
System.arraycopy(pixels, 0, surface.getData(),
|
||||||
|
0, pixels.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
surface.setPixels( pixels );
|
|
||||||
|
|
||||||
setup( cairo_t );
|
setup( cairo_t );
|
||||||
setClip(0, 0, imageWidth, imageHeight);
|
setClip(0, 0, imageWidth, imageHeight);
|
||||||
}
|
}
|
||||||
|
@ -189,7 +184,6 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
cairo_t = surface.newCairoContext();
|
cairo_t = surface.newCairoContext();
|
||||||
imageWidth = copyFrom.imageWidth;
|
imageWidth = copyFrom.imageWidth;
|
||||||
imageHeight = copyFrom.imageHeight;
|
imageHeight = copyFrom.imageHeight;
|
||||||
locked = false;
|
|
||||||
|
|
||||||
hasFastCM = copyFrom.hasFastCM;
|
hasFastCM = copyFrom.hasFastCM;
|
||||||
hasAlpha = copyFrom.hasAlpha;
|
hasAlpha = copyFrom.hasAlpha;
|
||||||
|
@ -202,17 +196,14 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
*/
|
*/
|
||||||
private void updateBufferedImage(int x, int y, int width, int height)
|
private void updateBufferedImage(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
if (locked)
|
Rectangle bounds = new Rectangle(x, y, width, height);
|
||||||
return;
|
bounds = getTransformedBounds(bounds, transform).getBounds();
|
||||||
|
x = bounds.x;
|
||||||
|
y = bounds.y;
|
||||||
|
width = bounds.width;
|
||||||
|
height = bounds.height;
|
||||||
|
|
||||||
double[] points = new double[]{x, y, width+x, height+y};
|
int[] pixels = surface.getData();
|
||||||
transform.transform(points, 0, points, 0, 2);
|
|
||||||
x = (int)points[0];
|
|
||||||
y = (int)points[1];
|
|
||||||
width = (int)Math.ceil(points[2] - points[0]);
|
|
||||||
height = (int)Math.ceil(points[3] - points[1]);
|
|
||||||
|
|
||||||
int[] pixels = surface.getPixels(imageWidth * imageHeight);
|
|
||||||
|
|
||||||
if( x > imageWidth || y > imageHeight )
|
if( x > imageWidth || y > imageHeight )
|
||||||
return;
|
return;
|
||||||
|
@ -403,14 +394,10 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
BufferedImage bImg = (BufferedImage) img;
|
BufferedImage bImg = (BufferedImage) img;
|
||||||
|
|
||||||
// Find translated bounds
|
// Find translated bounds
|
||||||
Point2D origin = new Point2D.Double(bImg.getMinX(), bImg.getMinY());
|
Rectangle2D bounds = new Rectangle(bImg.getMinX(), bImg.getMinY(),
|
||||||
Point2D pt = new Point2D.Double(bImg.getWidth() + bImg.getMinX(),
|
bImg.getWidth(), bImg.getHeight());
|
||||||
bImg.getHeight() + bImg.getMinY());
|
|
||||||
if (xform != null)
|
if (xform != null)
|
||||||
{
|
bounds = getTransformedBounds(bounds, xform);
|
||||||
origin = xform.transform(origin, origin);
|
|
||||||
pt = xform.transform(pt, pt);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create buffer and draw image
|
// Create buffer and draw image
|
||||||
createBuffer();
|
createBuffer();
|
||||||
|
@ -420,10 +407,7 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
g2d.drawImage(img, xform, obs);
|
g2d.drawImage(img, xform, obs);
|
||||||
|
|
||||||
// Perform compositing
|
// Perform compositing
|
||||||
return drawComposite(new Rectangle2D.Double(origin.getX(),
|
return drawComposite(bounds, obs);
|
||||||
origin.getY(),
|
|
||||||
pt.getX(), pt.getY()),
|
|
||||||
obs);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,6 +422,11 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
if (comp == null || comp instanceof AlphaComposite)
|
if (comp == null || comp instanceof AlphaComposite)
|
||||||
{
|
{
|
||||||
super.drawGlyphVector(gv, x, y);
|
super.drawGlyphVector(gv, x, y);
|
||||||
|
|
||||||
|
// this returns an integer-based Rectangle (rather than a
|
||||||
|
// Rectangle2D), which takes care of any necessary rounding for us.
|
||||||
|
bounds = bounds.getBounds();
|
||||||
|
|
||||||
updateBufferedImage((int)bounds.getX(), (int)bounds.getY(),
|
updateBufferedImage((int)bounds.getX(), (int)bounds.getY(),
|
||||||
(int)bounds.getWidth(), (int)bounds.getHeight());
|
(int)bounds.getWidth(), (int)bounds.getHeight());
|
||||||
}
|
}
|
||||||
|
@ -468,12 +457,7 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
private boolean drawComposite(Rectangle2D bounds, ImageObserver observer)
|
private boolean drawComposite(Rectangle2D bounds, ImageObserver observer)
|
||||||
{
|
{
|
||||||
// Find bounds in device space
|
// Find bounds in device space
|
||||||
double[] points = new double[] {bounds.getX(), bounds.getY(),
|
bounds = getTransformedBounds(bounds, transform);
|
||||||
bounds.getMaxX(), bounds.getMaxY()};
|
|
||||||
transform.transform(points, 0, points, 0, 2);
|
|
||||||
bounds = new Rectangle2D.Double(points[0], points[1],
|
|
||||||
(points[2] - points[0]),
|
|
||||||
(points[3] - points[1]));
|
|
||||||
|
|
||||||
// Clip bounds by the stored clip, and by the internal buffer
|
// Clip bounds by the stored clip, and by the internal buffer
|
||||||
Rectangle2D devClip = this.getClipInDevSpace();
|
Rectangle2D devClip = this.getClipInDevSpace();
|
||||||
|
@ -482,17 +466,15 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
buffer.getWidth(), buffer.getHeight());
|
buffer.getWidth(), buffer.getHeight());
|
||||||
Rectangle2D.intersect(bounds, devClip, bounds);
|
Rectangle2D.intersect(bounds, devClip, bounds);
|
||||||
|
|
||||||
// Round bounds as needed, but be conservative in our rounding
|
// Round bounds as needed, but be careful in our rounding
|
||||||
// (otherwise it may leave unpainted stripes)
|
// (otherwise it may leave unpainted stripes)
|
||||||
double x = bounds.getX();
|
double x = bounds.getX();
|
||||||
double y = bounds.getY();
|
double y = bounds.getY();
|
||||||
double w = bounds.getWidth();
|
double maxX = x + bounds.getWidth();
|
||||||
double h = bounds.getHeight();
|
double maxY = y + bounds.getHeight();
|
||||||
if (Math.floor(x) != x)
|
x = Math.round(x);
|
||||||
w--;
|
y = Math.round(y);
|
||||||
if (Math.floor(y) != y)
|
bounds.setRect(x, y, Math.round(maxX - x), Math.round(maxY - y));
|
||||||
h--;
|
|
||||||
bounds.setRect(Math.ceil(x), Math.ceil(y), Math.floor(w), Math.floor(h));
|
|
||||||
|
|
||||||
// Find subimage of internal buffer for updating
|
// Find subimage of internal buffer for updating
|
||||||
BufferedImage buffer2 = buffer;
|
BufferedImage buffer2 = buffer;
|
||||||
|
@ -511,9 +493,10 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
compCtx.compose(buffer2.getRaster(), current.getRaster(),
|
compCtx.compose(buffer2.getRaster(), current.getRaster(),
|
||||||
current.getRaster());
|
current.getRaster());
|
||||||
|
|
||||||
// Prevent the clearRect in CairoGraphics2D.drawImage from clearing
|
// Set cairo's composite to direct SRC, since we've already done our own
|
||||||
// our composited image
|
// compositing
|
||||||
locked = true;
|
Composite oldcomp = comp;
|
||||||
|
setComposite(AlphaComposite.Src);
|
||||||
|
|
||||||
// This MUST call directly into the "action" method in CairoGraphics2D,
|
// This MUST call directly into the "action" method in CairoGraphics2D,
|
||||||
// not one of the wrappers, to ensure that the composite isn't processed
|
// not one of the wrappers, to ensure that the composite isn't processed
|
||||||
|
@ -521,8 +504,9 @@ public class BufferedImageGraphics extends CairoGraphics2D
|
||||||
boolean rv = super.drawImage(current,
|
boolean rv = super.drawImage(current,
|
||||||
AffineTransform.getTranslateInstance(bounds.getX(),
|
AffineTransform.getTranslateInstance(bounds.getX(),
|
||||||
bounds.getY()),
|
bounds.getY()),
|
||||||
new Color(0,0,0,0), null);
|
null, null);
|
||||||
locked = false;
|
setComposite(oldcomp);
|
||||||
|
updateColor();
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -173,6 +173,12 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
*/
|
*/
|
||||||
private RenderingHints hints;
|
private RenderingHints hints;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status of the anti-alias flag in cairo.
|
||||||
|
*/
|
||||||
|
private boolean antialias = false;
|
||||||
|
private boolean ignoreAA = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some operations (drawing rather than filling) require that their
|
* Some operations (drawing rather than filling) require that their
|
||||||
* coords be shifted to land on 0.5-pixel boundaries, in order to land on
|
* coords be shifted to land on 0.5-pixel boundaries, in order to land on
|
||||||
|
@ -228,6 +234,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
setPaint(Color.black);
|
setPaint(Color.black);
|
||||||
setStroke(new BasicStroke());
|
setStroke(new BasicStroke());
|
||||||
setTransform(new AffineTransform());
|
setTransform(new AffineTransform());
|
||||||
|
cairoSetAntialias(nativePointer, antialias);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -274,6 +281,9 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
setTransformImpl(transform);
|
setTransformImpl(transform);
|
||||||
setClip(clip);
|
setClip(clip);
|
||||||
setComposite(comp);
|
setComposite(comp);
|
||||||
|
|
||||||
|
antialias = !g.antialias;
|
||||||
|
setAntialias(g.antialias);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -311,8 +321,8 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
|
|
||||||
public abstract GraphicsConfiguration getDeviceConfiguration();
|
public abstract GraphicsConfiguration getDeviceConfiguration();
|
||||||
|
|
||||||
protected abstract void copyAreaImpl(int x, int y,
|
protected abstract void copyAreaImpl(int x, int y, int width, int height,
|
||||||
int width, int height, int dx, int dy);
|
int dx, int dy);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -390,9 +400,9 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
/*
|
/*
|
||||||
* Draws a Glyph Vector
|
* Draws a Glyph Vector
|
||||||
*/
|
*/
|
||||||
native void cairoDrawGlyphVector(long pointer, GdkFontPeer font,
|
protected native void cairoDrawGlyphVector(long pointer, GdkFontPeer font,
|
||||||
float x, float y, int n,
|
float x, float y, int n,
|
||||||
int[] codes, float[] positions);
|
int[] codes, float[] positions, long[] fontset);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the font in cairo.
|
* Set the font in cairo.
|
||||||
|
@ -454,10 +464,16 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
protected native void cairoClip(long pointer);
|
protected native void cairoClip(long pointer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save clip
|
* Clear clip
|
||||||
*/
|
*/
|
||||||
protected native void cairoResetClip(long pointer);
|
protected native void cairoResetClip(long pointer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set antialias.
|
||||||
|
*/
|
||||||
|
protected native void cairoSetAntialias(long pointer, boolean aa);
|
||||||
|
|
||||||
|
|
||||||
///////////////////////// TRANSFORMS ///////////////////////////////////
|
///////////////////////// TRANSFORMS ///////////////////////////////////
|
||||||
/**
|
/**
|
||||||
* Set the current transform
|
* Set the current transform
|
||||||
|
@ -648,6 +664,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
setColor((Color) paint);
|
setColor((Color) paint);
|
||||||
customPaint = false;
|
customPaint = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (paint instanceof TexturePaint)
|
else if (paint instanceof TexturePaint)
|
||||||
{
|
{
|
||||||
TexturePaint tp = (TexturePaint) paint;
|
TexturePaint tp = (TexturePaint) paint;
|
||||||
|
@ -667,6 +684,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
setPaintPixels(nativePointer, pixels, width, height, width, true, 0, 0);
|
setPaintPixels(nativePointer, pixels, width, height, width, true, 0, 0);
|
||||||
customPaint = false;
|
customPaint = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (paint instanceof GradientPaint)
|
else if (paint instanceof GradientPaint)
|
||||||
{
|
{
|
||||||
GradientPaint gp = (GradientPaint) paint;
|
GradientPaint gp = (GradientPaint) paint;
|
||||||
|
@ -703,15 +721,11 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
int userHeight = bounds.height;
|
int userHeight = bounds.height;
|
||||||
|
|
||||||
// Find bounds in device space
|
// Find bounds in device space
|
||||||
Point2D origin = transform.transform(new Point2D.Double(userX, userY),
|
Rectangle2D bounds2D = getTransformedBounds(bounds, transform);
|
||||||
null);
|
int deviceX = (int)bounds2D.getX();
|
||||||
Point2D extreme = transform.transform(new Point2D.Double(userWidth + userX,
|
int deviceY = (int)bounds2D.getY();
|
||||||
userHeight + userY),
|
int deviceWidth = (int)Math.ceil(bounds2D.getWidth());
|
||||||
null);
|
int deviceHeight = (int)Math.ceil(bounds2D.getHeight());
|
||||||
int deviceX = (int)origin.getX();
|
|
||||||
int deviceY = (int)origin.getY();
|
|
||||||
int deviceWidth = (int)Math.ceil(extreme.getX() - origin.getX());
|
|
||||||
int deviceHeight = (int)Math.ceil(extreme.getY() - origin.getY());
|
|
||||||
|
|
||||||
// Get raster of the paint background
|
// Get raster of the paint background
|
||||||
PaintContext pc = paint.createContext(CairoSurface.cairoColorModel,
|
PaintContext pc = paint.createContext(CairoSurface.cairoColorModel,
|
||||||
|
@ -802,6 +816,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
double[] double_dashes = new double[dashes.length];
|
double[] double_dashes = new double[dashes.length];
|
||||||
for (int i = 0; i < dashes.length; i++)
|
for (int i = 0; i < dashes.length; i++)
|
||||||
double_dashes[i] = dashes[i];
|
double_dashes[i] = dashes[i];
|
||||||
|
|
||||||
cairoSetDash(nativePointer, double_dashes, double_dashes.length,
|
cairoSetDash(nativePointer, double_dashes, double_dashes.length,
|
||||||
(double) bs.getDashPhase());
|
(double) bs.getDashPhase());
|
||||||
}
|
}
|
||||||
|
@ -864,6 +879,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
{
|
{
|
||||||
if (fg == null)
|
if (fg == null)
|
||||||
fg = Color.BLACK;
|
fg = Color.BLACK;
|
||||||
|
|
||||||
cairoSetRGBAColor(nativePointer, fg.getRed() / 255.0,
|
cairoSetRGBAColor(nativePointer, fg.getRed() / 255.0,
|
||||||
fg.getGreen() / 255.0,fg.getBlue() / 255.0,
|
fg.getGreen() / 255.0,fg.getBlue() / 255.0,
|
||||||
fg.getAlpha() / 255.0);
|
fg.getAlpha() / 255.0);
|
||||||
|
@ -916,18 +932,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
if (transform == null)
|
if (transform == null)
|
||||||
return uclip;
|
return uclip;
|
||||||
else
|
else
|
||||||
{
|
return getTransformedBounds(clip.getBounds2D(), transform);
|
||||||
Point2D pos = transform.transform(new Point2D.Double(uclip.getX(),
|
|
||||||
uclip.getY()),
|
|
||||||
(Point2D) null);
|
|
||||||
Point2D extent = transform.deltaTransform(new Point2D.Double(uclip
|
|
||||||
.getWidth(),
|
|
||||||
uclip
|
|
||||||
.getHeight()),
|
|
||||||
(Point2D) null);
|
|
||||||
return new Rectangle2D.Double(pos.getX(), pos.getY(), extent.getX(),
|
|
||||||
extent.getY());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setClip(int x, int y, int width, int height)
|
public void setClip(int x, int y, int width, int height)
|
||||||
|
@ -1067,6 +1072,8 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
setCustomPaint(r);
|
setCustomPaint(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setAntialias(!hints.get(RenderingHints.KEY_ANTIALIASING)
|
||||||
|
.equals(RenderingHints.VALUE_ANTIALIAS_OFF));
|
||||||
createPath(s, true);
|
createPath(s, true);
|
||||||
cairoStroke(nativePointer);
|
cairoStroke(nativePointer);
|
||||||
}
|
}
|
||||||
|
@ -1078,6 +1085,8 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
if (customPaint)
|
if (customPaint)
|
||||||
setCustomPaint(s.getBounds());
|
setCustomPaint(s.getBounds());
|
||||||
|
|
||||||
|
setAntialias(!hints.get(RenderingHints.KEY_ANTIALIASING)
|
||||||
|
.equals(RenderingHints.VALUE_ANTIALIAS_OFF));
|
||||||
double alpha = 1.0;
|
double alpha = 1.0;
|
||||||
if (comp instanceof AlphaComposite)
|
if (comp instanceof AlphaComposite)
|
||||||
alpha = ((AlphaComposite) comp).getAlpha();
|
alpha = ((AlphaComposite) comp).getAlpha();
|
||||||
|
@ -1263,6 +1272,8 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
public void copyArea(int ox, int oy, int owidth, int oheight,
|
public void copyArea(int ox, int oy, int owidth, int oheight,
|
||||||
int odx, int ody)
|
int odx, int ody)
|
||||||
{
|
{
|
||||||
|
// FIXME: does this handle a rotation transform properly?
|
||||||
|
// (the width/height might not be correct)
|
||||||
Point2D pos = transform.transform(new Point2D.Double(ox, oy),
|
Point2D pos = transform.transform(new Point2D.Double(ox, oy),
|
||||||
(Point2D) null);
|
(Point2D) null);
|
||||||
Point2D dim = transform.transform(new Point2D.Double(ox + owidth,
|
Point2D dim = transform.transform(new Point2D.Double(ox + owidth,
|
||||||
|
@ -1325,10 +1336,10 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
return hints.get(hintKey);
|
return hints.get(hintKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRenderingHints(Map hints)
|
public void setRenderingHints(Map<?,?> hints)
|
||||||
{
|
{
|
||||||
this.hints = new RenderingHints(getDefaultHints());
|
this.hints = new RenderingHints(getDefaultHints());
|
||||||
this.hints.add(new RenderingHints(hints));
|
this.hints.putAll(hints);
|
||||||
|
|
||||||
shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE)
|
shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE)
|
||||||
|| hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT);
|
|| hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT);
|
||||||
|
@ -1342,7 +1353,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
|
|
||||||
public void addRenderingHints(Map hints)
|
public void addRenderingHints(Map hints)
|
||||||
{
|
{
|
||||||
this.hints.add(new RenderingHints(hints));
|
this.hints.putAll(hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RenderingHints getRenderingHints()
|
public RenderingHints getRenderingHints()
|
||||||
|
@ -1374,6 +1385,24 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
return INTERPOLATION_BILINEAR;
|
return INTERPOLATION_BILINEAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set antialias if needed. If the ignoreAA flag is set, this method will
|
||||||
|
* return without doing anything.
|
||||||
|
*
|
||||||
|
* @param needAA RenderingHints.VALUE_ANTIALIAS_ON or RenderingHints.VALUE_ANTIALIAS_OFF
|
||||||
|
*/
|
||||||
|
private void setAntialias(boolean needAA)
|
||||||
|
{
|
||||||
|
if (ignoreAA)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (needAA != antialias)
|
||||||
|
{
|
||||||
|
antialias = !antialias;
|
||||||
|
cairoSetAntialias(nativePointer, antialias);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////// IMAGE. METHODS ///////////////////////////////////
|
///////////////////////// IMAGE. METHODS ///////////////////////////////////
|
||||||
|
|
||||||
protected boolean drawImage(Image img, AffineTransform xform,
|
protected boolean drawImage(Image img, AffineTransform xform,
|
||||||
|
@ -1427,7 +1456,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
// use the cached CairoSurface that BIG is drawing onto
|
// use the cached CairoSurface that BIG is drawing onto
|
||||||
|
|
||||||
if( BufferedImageGraphics.bufferedImages.get( b ) != null )
|
if( BufferedImageGraphics.bufferedImages.get( b ) != null )
|
||||||
raster = (Raster)BufferedImageGraphics.bufferedImages.get( b );
|
raster = BufferedImageGraphics.bufferedImages.get( b );
|
||||||
else
|
else
|
||||||
raster = b.getRaster();
|
raster = b.getRaster();
|
||||||
|
|
||||||
|
@ -1437,10 +1466,10 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
if (comp instanceof AlphaComposite)
|
if (comp instanceof AlphaComposite)
|
||||||
alpha = ((AlphaComposite) comp).getAlpha();
|
alpha = ((AlphaComposite) comp).getAlpha();
|
||||||
|
|
||||||
if(raster instanceof CairoSurface)
|
if(raster instanceof CairoSurface
|
||||||
|
&& ((CairoSurface)raster).sharedBuffer == true)
|
||||||
{
|
{
|
||||||
((CairoSurface)raster).drawSurface(nativePointer, i2u, alpha,
|
drawCairoSurface((CairoSurface)raster, xform, alpha, getInterpolation());
|
||||||
getInterpolation());
|
|
||||||
updateColor();
|
updateColor();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1450,25 +1479,32 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
Color oldColor = bg;
|
Color oldColor = bg;
|
||||||
setBackground(bgcolor);
|
setBackground(bgcolor);
|
||||||
|
|
||||||
double[] origin = new double[] {0,0};
|
Rectangle2D bounds = new Rectangle2D.Double(0, 0, width, height);
|
||||||
double[] dimensions = new double[] {width, height};
|
bounds = getTransformedBounds(bounds, xform);
|
||||||
xform.transform(origin, 0, origin, 0, 1);
|
|
||||||
xform.deltaTransform(dimensions, 0, dimensions, 0, 1);
|
clearRect((int)bounds.getX(), (int)bounds.getY(),
|
||||||
clearRect((int)origin[0], (int)origin[1],
|
(int)bounds.getWidth(), (int)bounds.getHeight());
|
||||||
(int)dimensions[0], (int)dimensions[1]);
|
|
||||||
|
|
||||||
setBackground(oldColor);
|
setBackground(oldColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] pixels = b.getRGB(0, 0, width, height, null, 0, width);
|
int[] pixels = b.getRGB(0, 0, width, height, null, 0, width);
|
||||||
|
|
||||||
// FIXME: The above method returns data in the standard ARGB colorspace,
|
// FIXME: The above method returns data in the standard ARGB colorspace,
|
||||||
// meaning data should NOT be alpha pre-multiplied; however Cairo expects
|
// meaning data should NOT be alpha pre-multiplied; however Cairo expects
|
||||||
// data to be premultiplied.
|
// data to be premultiplied.
|
||||||
|
|
||||||
|
cairoSave(nativePointer);
|
||||||
|
Rectangle2D bounds = new Rectangle2D.Double(0, 0, width, height);
|
||||||
|
bounds = getTransformedBounds(bounds, xform);
|
||||||
|
cairoRectangle(nativePointer, bounds.getX(), bounds.getY(),
|
||||||
|
bounds.getWidth(), bounds.getHeight());
|
||||||
|
cairoClip(nativePointer);
|
||||||
|
|
||||||
drawPixels(nativePointer, pixels, width, height, width, i2u, alpha,
|
drawPixels(nativePointer, pixels, width, height, width, i2u, alpha,
|
||||||
getInterpolation());
|
getInterpolation());
|
||||||
|
|
||||||
|
cairoRestore(nativePointer);
|
||||||
|
|
||||||
// Cairo seems to lose the current color which must be restored.
|
// Cairo seems to lose the current color which must be restored.
|
||||||
updateColor();
|
updateColor();
|
||||||
return true;
|
return true;
|
||||||
|
@ -1579,6 +1615,66 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
return drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null, observer);
|
return drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null, observer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Optimized method for drawing a CairoSurface onto this graphics context.
|
||||||
|
*
|
||||||
|
* @param surface The surface to draw.
|
||||||
|
* @param tx The transformation matrix (cannot be null).
|
||||||
|
* @param alpha The alpha value to paint with ( 0 <= alpha <= 1).
|
||||||
|
* @param interpolation The interpolation type.
|
||||||
|
*/
|
||||||
|
protected void drawCairoSurface(CairoSurface surface, AffineTransform tx,
|
||||||
|
double alpha, int interpolation)
|
||||||
|
{
|
||||||
|
// Find offset required if this surface is a sub-raster, and append offset
|
||||||
|
// to transformation.
|
||||||
|
if (surface.getSampleModelTranslateX() != 0
|
||||||
|
|| surface.getSampleModelTranslateY() != 0)
|
||||||
|
{
|
||||||
|
Point2D origin = new Point2D.Double(0, 0);
|
||||||
|
Point2D offset = new Point2D.Double(surface.getSampleModelTranslateX(),
|
||||||
|
surface.getSampleModelTranslateY());
|
||||||
|
|
||||||
|
tx.transform(origin, origin);
|
||||||
|
tx.transform(offset, offset);
|
||||||
|
|
||||||
|
tx.translate(offset.getX() - origin.getX(),
|
||||||
|
offset.getY() - origin.getY());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find dimensions of this surface relative to the root parent surface
|
||||||
|
Rectangle bounds = new Rectangle(-surface.getSampleModelTranslateX(),
|
||||||
|
-surface.getSampleModelTranslateY(),
|
||||||
|
surface.width, surface.height);
|
||||||
|
|
||||||
|
// Clip to the translated image
|
||||||
|
// We use direct cairo methods to avoid the overhead of maintaining a
|
||||||
|
// java copy of the clip, since we will be reverting it immediately
|
||||||
|
// after drawing
|
||||||
|
Shape newBounds = tx.createTransformedShape(bounds);
|
||||||
|
cairoSave(nativePointer);
|
||||||
|
walkPath(newBounds.getPathIterator(null), false);
|
||||||
|
cairoClip(nativePointer);
|
||||||
|
|
||||||
|
// Draw the surface
|
||||||
|
try
|
||||||
|
{
|
||||||
|
double[] i2u = new double[6];
|
||||||
|
tx.createInverse().getMatrix(i2u);
|
||||||
|
surface.nativeDrawSurface(surface.surfacePointer, nativePointer, i2u,
|
||||||
|
alpha, interpolation);
|
||||||
|
}
|
||||||
|
catch (NoninvertibleTransformException ex)
|
||||||
|
{
|
||||||
|
// This should never happen(?), so we don't need to do anything here.
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore clip
|
||||||
|
cairoRestore(nativePointer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////// TEXT METHODS ////////////////////////////////////
|
///////////////////////// TEXT METHODS ////////////////////////////////////
|
||||||
|
|
||||||
public void drawString(String str, float x, float y)
|
public void drawString(String str, float x, float y)
|
||||||
|
@ -1592,7 +1688,15 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
tl = new TextLayout( str, getFont(), getFontRenderContext() );
|
tl = new TextLayout( str, getFont(), getFontRenderContext() );
|
||||||
fontPeer.textLayoutCache.put(str, tl);
|
fontPeer.textLayoutCache.put(str, tl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set antialias to text_antialiasing, and set the ignoreAA flag so that
|
||||||
|
// the setting doesn't get overridden in a draw() or fill() call.
|
||||||
|
setAntialias(!hints.get(RenderingHints.KEY_TEXT_ANTIALIASING)
|
||||||
|
.equals(RenderingHints.VALUE_TEXT_ANTIALIAS_OFF));
|
||||||
|
ignoreAA = true;
|
||||||
|
|
||||||
tl.draw(this, x, y);
|
tl.draw(this, x, y);
|
||||||
|
ignoreAA = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawString(String str, int x, int y)
|
public void drawString(String str, int x, int y)
|
||||||
|
@ -1617,10 +1721,16 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
|
|
||||||
if (comp instanceof AlphaComposite)
|
if (comp instanceof AlphaComposite)
|
||||||
alpha = ((AlphaComposite) comp).getAlpha();
|
alpha = ((AlphaComposite) comp).getAlpha();
|
||||||
|
|
||||||
|
setAntialias(!hints.get(RenderingHints.KEY_TEXT_ANTIALIASING)
|
||||||
|
.equals(RenderingHints.VALUE_TEXT_ANTIALIAS_OFF));
|
||||||
|
ignoreAA = true;
|
||||||
|
|
||||||
if (gv instanceof FreetypeGlyphVector && alpha == 1.0)
|
if (gv instanceof FreetypeGlyphVector && alpha == 1.0)
|
||||||
{
|
{
|
||||||
int n = gv.getNumGlyphs ();
|
int n = gv.getNumGlyphs ();
|
||||||
int[] codes = gv.getGlyphCodes (0, n, null);
|
int[] codes = gv.getGlyphCodes (0, n, null);
|
||||||
|
long[] fontset = ((FreetypeGlyphVector)gv).getGlyphFonts (0, n, null);
|
||||||
float[] positions = gv.getGlyphPositions (0, n, null);
|
float[] positions = gv.getGlyphPositions (0, n, null);
|
||||||
|
|
||||||
setFont (gv.getFont ());
|
setFont (gv.getFont ());
|
||||||
|
@ -1628,7 +1738,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
synchronized (fontPeer)
|
synchronized (fontPeer)
|
||||||
{
|
{
|
||||||
cairoDrawGlyphVector(nativePointer, fontPeer,
|
cairoDrawGlyphVector(nativePointer, fontPeer,
|
||||||
x, y, n, codes, positions);
|
x, y, n, codes, positions, fontset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1637,6 +1747,8 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
fill(gv.getOutline());
|
fill(gv.getOutline());
|
||||||
translate(-x, -y);
|
translate(-x, -y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ignoreAA = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawString(AttributedCharacterIterator ci, float x, float y)
|
public void drawString(AttributedCharacterIterator ci, float x, float y)
|
||||||
|
@ -1796,6 +1908,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
double alpha = 1.0;
|
double alpha = 1.0;
|
||||||
if (comp instanceof AlphaComposite)
|
if (comp instanceof AlphaComposite)
|
||||||
alpha = ((AlphaComposite) comp).getAlpha();
|
alpha = ((AlphaComposite) comp).getAlpha();
|
||||||
|
|
||||||
drawPixels(nativePointer, pixels, r.getWidth(), r.getHeight(),
|
drawPixels(nativePointer, pixels, r.getWidth(), r.getHeight(),
|
||||||
r.getWidth(), i2u, alpha, getInterpolation());
|
r.getWidth(), i2u, alpha, getInterpolation());
|
||||||
|
|
||||||
|
@ -1815,7 +1928,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
double shift = 0.5;
|
double shift = 0.5;
|
||||||
if (!transform.isIdentity())
|
if (!transform.isIdentity())
|
||||||
shift /= transform.getScaleX();
|
shift /= transform.getScaleX();
|
||||||
return Math.round(coord) + shift;
|
return (coord + shift);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return coord;
|
return coord;
|
||||||
|
@ -1831,7 +1944,7 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
double shift = 0.5;
|
double shift = 0.5;
|
||||||
if (!transform.isIdentity())
|
if (!transform.isIdentity())
|
||||||
shift /= transform.getScaleY();
|
shift /= transform.getScaleY();
|
||||||
return Math.round(coord) + shift;
|
return (coord + shift);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return coord;
|
return coord;
|
||||||
|
@ -1893,9 +2006,10 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
/**
|
/**
|
||||||
* Used by setRenderingHints()
|
* Used by setRenderingHints()
|
||||||
*/
|
*/
|
||||||
private Map getDefaultHints()
|
private Map<RenderingHints.Key, Object> getDefaultHints()
|
||||||
{
|
{
|
||||||
HashMap defaultHints = new HashMap();
|
HashMap<RenderingHints.Key, Object> defaultHints =
|
||||||
|
new HashMap<RenderingHints.Key, Object>();
|
||||||
|
|
||||||
defaultHints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
|
defaultHints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
|
||||||
RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
|
RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
|
||||||
|
@ -1972,12 +2086,28 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
if (clip == null)
|
if (clip == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// If the clip is a rectangle, and the transformation preserves the shape
|
||||||
|
// (translate/stretch only), then keep the clip as a rectangle
|
||||||
|
double[] matrix = new double[4];
|
||||||
|
t.getMatrix(matrix);
|
||||||
|
if (clip instanceof Rectangle2D && matrix[1] == 0 && matrix[2] == 0)
|
||||||
|
{
|
||||||
|
Rectangle2D rect = (Rectangle2D)clip;
|
||||||
|
double[] origin = new double[] {rect.getX(), rect.getY()};
|
||||||
|
double[] dimensions = new double[] {rect.getWidth(), rect.getHeight()};
|
||||||
|
t.transform(origin, 0, origin, 0, 1);
|
||||||
|
t.deltaTransform(dimensions, 0, dimensions, 0, 1);
|
||||||
|
rect.setRect(origin[0], origin[1], dimensions[0], dimensions[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (! (clip instanceof GeneralPath))
|
if (! (clip instanceof GeneralPath))
|
||||||
clip = new GeneralPath(clip);
|
clip = new GeneralPath(clip);
|
||||||
|
|
||||||
GeneralPath p = (GeneralPath) clip;
|
GeneralPath p = (GeneralPath) clip;
|
||||||
p.transform(t);
|
p.transform(t);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static Rectangle computeIntersection(int x, int y, int w, int h,
|
private static Rectangle computeIntersection(int x, int y, int w, int h,
|
||||||
Rectangle rect)
|
Rectangle rect)
|
||||||
|
@ -1999,4 +2129,39 @@ public abstract class CairoGraphics2D extends Graphics2D
|
||||||
|
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Rectangle2D getTransformedBounds(Rectangle2D bounds, AffineTransform tx)
|
||||||
|
{
|
||||||
|
double x1 = bounds.getX();
|
||||||
|
double x2 = bounds.getX() + bounds.getWidth();
|
||||||
|
double x3 = x1;
|
||||||
|
double x4 = x2;
|
||||||
|
double y1 = bounds.getY();
|
||||||
|
double y2 = y1;
|
||||||
|
double y3 = bounds.getY() + bounds.getHeight();
|
||||||
|
double y4 = y3;
|
||||||
|
|
||||||
|
double[] points = new double[] {x1, y1, x2, y2, x3, y3, x4, y4};
|
||||||
|
tx.transform(points, 0, points, 0, 4);
|
||||||
|
|
||||||
|
double minX = points[0];
|
||||||
|
double maxX = minX;
|
||||||
|
double minY = points[1];
|
||||||
|
double maxY = minY;
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
if (points[i] < minX)
|
||||||
|
minX = points[i];
|
||||||
|
if (points[i] > maxX)
|
||||||
|
maxX = points[i];
|
||||||
|
i++;
|
||||||
|
|
||||||
|
if (points[i] < minY)
|
||||||
|
minY = points[i];
|
||||||
|
if (points[i] > maxY)
|
||||||
|
maxY = points[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Rectangle2D.Double(minX, minY, (maxX - minX), (maxY - minY));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* CairoSurface.java
|
/* CairoSurface.java
|
||||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU Classpath.
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
@ -42,15 +42,22 @@ import gnu.java.awt.Buffers;
|
||||||
|
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.awt.Shape;
|
||||||
import java.awt.color.ColorSpace;
|
import java.awt.color.ColorSpace;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.awt.image.ColorModel;
|
import java.awt.image.ColorModel;
|
||||||
import java.awt.image.DataBuffer;
|
import java.awt.image.DataBuffer;
|
||||||
|
import java.awt.image.DataBufferInt;
|
||||||
import java.awt.image.DirectColorModel;
|
import java.awt.image.DirectColorModel;
|
||||||
|
import java.awt.image.Raster;
|
||||||
|
import java.awt.image.RasterFormatException;
|
||||||
import java.awt.image.SampleModel;
|
import java.awt.image.SampleModel;
|
||||||
import java.awt.image.SinglePixelPackedSampleModel;
|
import java.awt.image.SinglePixelPackedSampleModel;
|
||||||
import java.awt.image.WritableRaster;
|
import java.awt.image.WritableRaster;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,9 +75,9 @@ public class CairoSurface extends WritableRaster
|
||||||
long surfacePointer;
|
long surfacePointer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The native pointer to the image's data buffer
|
* Whether the data buffer is shared between java and cairo.
|
||||||
*/
|
*/
|
||||||
long bufferPointer;
|
boolean sharedBuffer;
|
||||||
|
|
||||||
// FIXME: use only the cairoCM_pre colormodel
|
// FIXME: use only the cairoCM_pre colormodel
|
||||||
// since that's what Cairo really uses (is there a way to do this cheaply?
|
// since that's what Cairo really uses (is there a way to do this cheaply?
|
||||||
|
@ -98,22 +105,12 @@ public class CairoSurface extends WritableRaster
|
||||||
* @param width, height - the image size
|
* @param width, height - the image size
|
||||||
* @param stride - the buffer row stride. (in ints)
|
* @param stride - the buffer row stride. (in ints)
|
||||||
*/
|
*/
|
||||||
private native void create(int width, int height, int stride);
|
private native void create(int width, int height, int stride, int[] buf);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroys the cairo surface and frees the buffer.
|
* Destroys the cairo surface and frees the buffer.
|
||||||
*/
|
*/
|
||||||
private native void destroy(long surfacePointer, long bufferPointer);
|
private native void destroy(long surfacePointer, int[] buf);
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets buffer elements
|
|
||||||
*/
|
|
||||||
private native int nativeGetElem(long bufferPointer, int i);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets buffer elements.
|
|
||||||
*/
|
|
||||||
private native void nativeSetElem(long bufferPointer, int i, int val);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draws this image to a given CairoGraphics context,
|
* Draws this image to a given CairoGraphics context,
|
||||||
|
@ -123,33 +120,30 @@ public class CairoSurface extends WritableRaster
|
||||||
double[] i2u, double alpha,
|
double[] i2u, double alpha,
|
||||||
int interpolation);
|
int interpolation);
|
||||||
|
|
||||||
public void drawSurface(long contextPointer, double[] i2u, double alpha,
|
/**
|
||||||
int interpolation)
|
* Synchronizes the image's data buffers, copying any changes made in the
|
||||||
{
|
* Java array into the native array.
|
||||||
nativeDrawSurface(surfacePointer, contextPointer, i2u, alpha, interpolation);
|
*
|
||||||
}
|
* This method should only be called if (sharedBuffers == false).
|
||||||
|
*/
|
||||||
|
native void syncNativeToJava(long surfacePointer, int[] buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getPixels -return the pixels as a java array.
|
* Synchronizes the image's data buffers, copying any changes made in the
|
||||||
|
* native array into the Java array.
|
||||||
|
*
|
||||||
|
* This method should only be called if (sharedBuffers == false).
|
||||||
*/
|
*/
|
||||||
native int[] nativeGetPixels(long bufferPointer, int size);
|
native void syncJavaToNative(long surfacePointer, int[] buffer);
|
||||||
|
|
||||||
public int[] getPixels(int size)
|
|
||||||
{
|
|
||||||
return nativeGetPixels(bufferPointer, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getPixels -return the pixels as a java array.
|
* Return the buffer, with the sample values of each pixel reversed
|
||||||
|
* (ie, in ABGR instead of ARGB).
|
||||||
|
*
|
||||||
|
* @return A pointer to a flipped buffer. The memory is allocated in native
|
||||||
|
* code, and must be explicitly freed when it is no longer needed.
|
||||||
*/
|
*/
|
||||||
native void nativeSetPixels(long bufferPointer, int[] pixels);
|
native long getFlippedBuffer(long surfacePointer);
|
||||||
|
|
||||||
public void setPixels(int[] pixels)
|
|
||||||
{
|
|
||||||
nativeSetPixels(bufferPointer, pixels);
|
|
||||||
}
|
|
||||||
|
|
||||||
native long getFlippedBuffer(long bufferPointer, int size);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a cairo_surface_t with specified width and height.
|
* Create a cairo_surface_t with specified width and height.
|
||||||
|
@ -158,20 +152,38 @@ public class CairoSurface extends WritableRaster
|
||||||
*/
|
*/
|
||||||
public CairoSurface(int width, int height)
|
public CairoSurface(int width, int height)
|
||||||
{
|
{
|
||||||
super(createCairoSampleModel(width, height),
|
this(0, 0, width, height);
|
||||||
null, new Point(0, 0));
|
}
|
||||||
|
|
||||||
|
public CairoSurface(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
super(createCairoSampleModel(width, height), null, new Point(x, y));
|
||||||
|
|
||||||
if(width <= 0 || height <= 0)
|
if(width <= 0 || height <= 0)
|
||||||
throw new IllegalArgumentException("Image must be at least 1x1 pixels.");
|
throw new IllegalArgumentException("Image must be at least 1x1 pixels.");
|
||||||
|
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
create(width, height, width);
|
dataBuffer = new DataBufferInt(width * height);
|
||||||
|
create(width, height, width, getData());
|
||||||
|
|
||||||
if(surfacePointer == 0 || bufferPointer == 0)
|
if(surfacePointer == 0)
|
||||||
throw new Error("Could not allocate bitmap.");
|
throw new Error("Could not allocate bitmap.");
|
||||||
|
}
|
||||||
|
|
||||||
dataBuffer = new CairoDataBuffer();
|
/**
|
||||||
|
* Create a Cairo Surface that is a subimage of another Cairo Surface
|
||||||
|
*/
|
||||||
|
public CairoSurface(SampleModel sm, CairoSurface parent, Rectangle bounds,
|
||||||
|
Point origin)
|
||||||
|
{
|
||||||
|
super(sm, parent.dataBuffer, bounds, origin, parent);
|
||||||
|
|
||||||
|
this.width = super.width;
|
||||||
|
this.height = super.height;
|
||||||
|
this.surfacePointer = parent.surfacePointer;
|
||||||
|
this.sharedBuffer = parent.sharedBuffer;
|
||||||
|
this.dataBuffer = parent.dataBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -220,7 +232,7 @@ public class CairoSurface extends WritableRaster
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setPixels( data );
|
System.arraycopy(data, 0, getData(), 0, data.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -228,8 +240,8 @@ public class CairoSurface extends WritableRaster
|
||||||
*/
|
*/
|
||||||
public void dispose()
|
public void dispose()
|
||||||
{
|
{
|
||||||
if(surfacePointer != 0)
|
if(surfacePointer != 0 && parent == null)
|
||||||
destroy(surfacePointer, bufferPointer);
|
destroy(surfacePointer, getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -245,8 +257,17 @@ public class CairoSurface extends WritableRaster
|
||||||
*/
|
*/
|
||||||
public GtkImage getGtkImage()
|
public GtkImage getGtkImage()
|
||||||
{
|
{
|
||||||
return new GtkImage( width, height,
|
return new GtkImage(width, height, getFlippedBuffer(surfacePointer));
|
||||||
getFlippedBuffer(bufferPointer, width * height ));
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience method to quickly grab the data array backing this Raster.
|
||||||
|
*
|
||||||
|
* @return The array behind the databuffer.
|
||||||
|
*/
|
||||||
|
public int[] getData()
|
||||||
|
{
|
||||||
|
return ((DataBufferInt)dataBuffer).getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -276,34 +297,6 @@ public class CairoSurface extends WritableRaster
|
||||||
new Hashtable());
|
new Hashtable());
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CairoDataBuffer extends DataBuffer
|
|
||||||
{
|
|
||||||
public CairoDataBuffer()
|
|
||||||
{
|
|
||||||
super(DataBuffer.TYPE_INT, width * height);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DataBuffer.getElem implementation
|
|
||||||
*/
|
|
||||||
public int getElem(int bank, int i)
|
|
||||||
{
|
|
||||||
if(bank != 0 || i < 0 || i >= width * height)
|
|
||||||
throw new IndexOutOfBoundsException(i+" size: "+width * height);
|
|
||||||
return nativeGetElem(bufferPointer, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DataBuffer.setElem implementation
|
|
||||||
*/
|
|
||||||
public void setElem(int bank, int i, int val)
|
|
||||||
{
|
|
||||||
if(bank != 0 || i < 0 || i >= width*height)
|
|
||||||
throw new IndexOutOfBoundsException(i+" size: "+width * height);
|
|
||||||
nativeSetElem(bufferPointer, i, val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a Graphics2D drawing to the CairoSurface.
|
* Return a Graphics2D drawing to the CairoSurface.
|
||||||
*/
|
*/
|
||||||
|
@ -325,16 +318,25 @@ public class CairoSurface extends WritableRaster
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy an area of the surface. Expects parameters must be within bounds.
|
* Copy a portion of this surface to another area on the surface. The given
|
||||||
* Count on a segfault otherwise.
|
* parameters must be within bounds - count on a segfault otherwise.
|
||||||
|
*
|
||||||
|
* @param x The x coordinate of the area to be copied from.
|
||||||
|
* @param y The y coordinate of the area to be copied from.
|
||||||
|
* @param width The width of the area to be copied.
|
||||||
|
* @param height The height of the area to be copied.
|
||||||
|
* @param dx The destination x coordinate.
|
||||||
|
* @param dy The destination y coordinate.
|
||||||
|
* @param stride The scanline stride.
|
||||||
*/
|
*/
|
||||||
native void copyAreaNative2(long bufferPointer, int x, int y, int width,
|
|
||||||
int height, int dx, int dy, int stride);
|
|
||||||
public void copyAreaNative(int x, int y, int width,
|
public void copyAreaNative(int x, int y, int width,
|
||||||
int height, int dx, int dy, int stride)
|
int height, int dx, int dy, int stride)
|
||||||
{
|
{
|
||||||
copyAreaNative2(bufferPointer, x, y, width, height, dx, dy, stride);
|
copyAreaNative2(surfacePointer, x, y, width, height, dx, dy, stride);
|
||||||
}
|
}
|
||||||
|
native void copyAreaNative2(long surfacePointer,
|
||||||
|
int x, int y, int width, int height,
|
||||||
|
int dx, int dy, int stride);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a SampleModel that matches Cairo's native format
|
* Creates a SampleModel that matches Cairo's native format
|
||||||
|
@ -345,4 +347,83 @@ public class CairoSurface extends WritableRaster
|
||||||
new int[]{0x00FF0000, 0x0000FF00,
|
new int[]{0x00FF0000, 0x0000FF00,
|
||||||
0x000000FF, 0xFF000000});
|
0x000000FF, 0xFF000000});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this ColorModel is compatible with Cairo's native types.
|
||||||
|
*
|
||||||
|
* @param cm The color model to check.
|
||||||
|
* @return Whether it is compatible.
|
||||||
|
*/
|
||||||
|
public static boolean isCompatibleColorModel(ColorModel cm)
|
||||||
|
{
|
||||||
|
return (cm.equals(cairoCM_pre) || cm.equals(cairoCM_opaque) ||
|
||||||
|
cm.equals(cairoColorModel));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this SampleModel is compatible with Cairo's native types.
|
||||||
|
*
|
||||||
|
* @param sm The sample model to check.
|
||||||
|
* @return Whether it is compatible.
|
||||||
|
*/
|
||||||
|
public static boolean isCompatibleSampleModel(SampleModel sm)
|
||||||
|
{
|
||||||
|
return (sm instanceof SinglePixelPackedSampleModel
|
||||||
|
&& sm.getDataType() == DataBuffer.TYPE_INT
|
||||||
|
&& Arrays.equals(((SinglePixelPackedSampleModel)sm).getBitMasks(),
|
||||||
|
new int[]{0x00FF0000, 0x0000FF00,
|
||||||
|
0x000000FF, 0xFF000000}));
|
||||||
|
}
|
||||||
|
|
||||||
|
///// Methods interhited from Raster and WritableRaster /////
|
||||||
|
public Raster createChild(int parentX, int parentY, int width, int height,
|
||||||
|
int childMinX, int childMinY, int[] bandList)
|
||||||
|
{
|
||||||
|
return createWritableChild(parentX, parentY, width, height,
|
||||||
|
childMinX, childMinY, bandList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WritableRaster createCompatibleWritableRaster()
|
||||||
|
{
|
||||||
|
return new CairoSurface(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WritableRaster createCompatibleWritableRaster (int x, int y,
|
||||||
|
int w, int h)
|
||||||
|
{
|
||||||
|
return new CairoSurface(x, y, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Raster createTranslatedChild(int childMinX, int childMinY)
|
||||||
|
{
|
||||||
|
return createWritableTranslatedChild(childMinX, childMinY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WritableRaster createWritableChild(int parentX, int parentY,
|
||||||
|
int w, int h, int childMinX,
|
||||||
|
int childMinY, int[] bandList)
|
||||||
|
{
|
||||||
|
if (parentX < minX || parentX + w > minX + width
|
||||||
|
|| parentY < minY || parentY + h > minY + height)
|
||||||
|
throw new RasterFormatException("Child raster extends beyond parent");
|
||||||
|
|
||||||
|
SampleModel sm = (bandList == null) ?
|
||||||
|
sampleModel :
|
||||||
|
sampleModel.createSubsetSampleModel(bandList);
|
||||||
|
|
||||||
|
return new CairoSurface(sm, this,
|
||||||
|
new Rectangle(childMinX, childMinY, w, h),
|
||||||
|
new Point(sampleModelTranslateX + childMinX - parentX,
|
||||||
|
sampleModelTranslateY + childMinY - parentY));
|
||||||
|
}
|
||||||
|
|
||||||
|
public WritableRaster createWritableTranslatedChild(int x, int y)
|
||||||
|
{
|
||||||
|
int tcx = sampleModelTranslateX - minX + x;
|
||||||
|
int tcy = sampleModelTranslateY - minY + y;
|
||||||
|
|
||||||
|
return new CairoSurface(sampleModel, this,
|
||||||
|
new Rectangle(x, y, width, height),
|
||||||
|
new Point(tcx, tcy));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ package gnu.java.awt.peer.gtk;
|
||||||
|
|
||||||
import java.awt.AlphaComposite;
|
import java.awt.AlphaComposite;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.Composite;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.GraphicsConfiguration;
|
import java.awt.GraphicsConfiguration;
|
||||||
|
@ -50,7 +51,6 @@ import java.awt.Shape;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.font.GlyphVector;
|
import java.awt.font.GlyphVector;
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.Point2D;
|
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.awt.image.ColorModel;
|
import java.awt.image.ColorModel;
|
||||||
|
@ -116,6 +116,18 @@ public class CairoSurfaceGraphics extends CairoGraphics2D
|
||||||
*/
|
*/
|
||||||
public void draw(Shape s)
|
public void draw(Shape s)
|
||||||
{
|
{
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncJavaToNative(surface.surfacePointer, surface.getData());
|
||||||
|
|
||||||
|
// Find total bounds of shape
|
||||||
|
Rectangle r = findStrokedBounds(s);
|
||||||
|
if (shiftDrawCalls)
|
||||||
|
{
|
||||||
|
r.width++;
|
||||||
|
r.height++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do the drawing
|
||||||
if (comp == null || comp instanceof AlphaComposite)
|
if (comp == null || comp instanceof AlphaComposite)
|
||||||
super.draw(s);
|
super.draw(s);
|
||||||
|
|
||||||
|
@ -126,14 +138,21 @@ public class CairoSurfaceGraphics extends CairoGraphics2D
|
||||||
Graphics2D g2d = (Graphics2D)buffer.getGraphics();
|
Graphics2D g2d = (Graphics2D)buffer.getGraphics();
|
||||||
g2d.setStroke(this.getStroke());
|
g2d.setStroke(this.getStroke());
|
||||||
g2d.setColor(this.getColor());
|
g2d.setColor(this.getColor());
|
||||||
|
g2d.setTransform(transform);
|
||||||
g2d.draw(s);
|
g2d.draw(s);
|
||||||
|
|
||||||
drawComposite(s.getBounds2D(), null);
|
drawComposite(r.getBounds2D(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncNativeToJava(surface.surfacePointer, surface.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void fill(Shape s)
|
public void fill(Shape s)
|
||||||
{
|
{
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncJavaToNative(surface.surfacePointer, surface.getData());
|
||||||
|
|
||||||
if (comp == null || comp instanceof AlphaComposite)
|
if (comp == null || comp instanceof AlphaComposite)
|
||||||
super.fill(s);
|
super.fill(s);
|
||||||
|
|
||||||
|
@ -144,14 +163,21 @@ public class CairoSurfaceGraphics extends CairoGraphics2D
|
||||||
Graphics2D g2d = (Graphics2D)buffer.getGraphics();
|
Graphics2D g2d = (Graphics2D)buffer.getGraphics();
|
||||||
g2d.setPaint(this.getPaint());
|
g2d.setPaint(this.getPaint());
|
||||||
g2d.setColor(this.getColor());
|
g2d.setColor(this.getColor());
|
||||||
|
g2d.setTransform(transform);
|
||||||
g2d.fill(s);
|
g2d.fill(s);
|
||||||
|
|
||||||
drawComposite(s.getBounds2D(), null);
|
drawComposite(s.getBounds2D(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncNativeToJava(surface.surfacePointer, surface.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawRenderedImage(RenderedImage image, AffineTransform xform)
|
public void drawRenderedImage(RenderedImage image, AffineTransform xform)
|
||||||
{
|
{
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncJavaToNative(surface.surfacePointer, surface.getData());
|
||||||
|
|
||||||
if (comp == null || comp instanceof AlphaComposite)
|
if (comp == null || comp instanceof AlphaComposite)
|
||||||
super.drawRenderedImage(image, xform);
|
super.drawRenderedImage(image, xform);
|
||||||
|
|
||||||
|
@ -161,18 +187,25 @@ public class CairoSurfaceGraphics extends CairoGraphics2D
|
||||||
|
|
||||||
Graphics2D g2d = (Graphics2D)buffer.getGraphics();
|
Graphics2D g2d = (Graphics2D)buffer.getGraphics();
|
||||||
g2d.setRenderingHints(this.getRenderingHints());
|
g2d.setRenderingHints(this.getRenderingHints());
|
||||||
|
g2d.setTransform(transform);
|
||||||
g2d.drawRenderedImage(image, xform);
|
g2d.drawRenderedImage(image, xform);
|
||||||
|
|
||||||
drawComposite(buffer.getRaster().getBounds(), null);
|
drawComposite(buffer.getRaster().getBounds(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncNativeToJava(surface.surfacePointer, surface.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean drawImage(Image img, AffineTransform xform,
|
protected boolean drawImage(Image img, AffineTransform xform,
|
||||||
Color bgcolor, ImageObserver obs)
|
Color bgcolor, ImageObserver obs)
|
||||||
{
|
{
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncJavaToNative(surface.surfacePointer, surface.getData());
|
||||||
|
|
||||||
|
boolean ret;
|
||||||
if (comp == null || comp instanceof AlphaComposite)
|
if (comp == null || comp instanceof AlphaComposite)
|
||||||
return super.drawImage(img, xform, bgcolor, obs);
|
ret = super.drawImage(img, xform, bgcolor, obs);
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -187,14 +220,10 @@ public class CairoSurfaceGraphics extends CairoGraphics2D
|
||||||
BufferedImage bImg = (BufferedImage) img;
|
BufferedImage bImg = (BufferedImage) img;
|
||||||
|
|
||||||
// Find translated bounds
|
// Find translated bounds
|
||||||
Point2D origin = new Point2D.Double(bImg.getMinX(), bImg.getMinY());
|
Rectangle2D bounds = new Rectangle(bImg.getMinX(), bImg.getMinY(),
|
||||||
Point2D pt = new Point2D.Double(bImg.getWidth() + bImg.getMinX(),
|
bImg.getWidth(), bImg.getHeight());
|
||||||
bImg.getHeight() + bImg.getMinY());
|
|
||||||
if (xform != null)
|
if (xform != null)
|
||||||
{
|
bounds = getTransformedBounds(bounds, xform);
|
||||||
origin = xform.transform(origin, origin);
|
|
||||||
pt = xform.transform(pt, pt);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create buffer and draw image
|
// Create buffer and draw image
|
||||||
createBuffer();
|
createBuffer();
|
||||||
|
@ -204,15 +233,20 @@ public class CairoSurfaceGraphics extends CairoGraphics2D
|
||||||
g2d.drawImage(img, xform, obs);
|
g2d.drawImage(img, xform, obs);
|
||||||
|
|
||||||
// Perform compositing
|
// Perform compositing
|
||||||
return drawComposite(new Rectangle2D.Double(origin.getX(),
|
ret = drawComposite(bounds, obs);
|
||||||
origin.getY(),
|
|
||||||
pt.getX(), pt.getY()),
|
|
||||||
obs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncNativeToJava(surface.surfacePointer, surface.getData());
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawGlyphVector(GlyphVector gv, float x, float y)
|
public void drawGlyphVector(GlyphVector gv, float x, float y)
|
||||||
{
|
{
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncJavaToNative(surface.surfacePointer, surface.getData());
|
||||||
|
|
||||||
if (comp == null || comp instanceof AlphaComposite)
|
if (comp == null || comp instanceof AlphaComposite)
|
||||||
super.drawGlyphVector(gv, x, y);
|
super.drawGlyphVector(gv, x, y);
|
||||||
|
|
||||||
|
@ -230,51 +264,64 @@ public class CairoSurfaceGraphics extends CairoGraphics2D
|
||||||
bounds.getWidth(), bounds.getHeight());
|
bounds.getWidth(), bounds.getHeight());
|
||||||
drawComposite(bounds, null);
|
drawComposite(bounds, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!surface.sharedBuffer)
|
||||||
|
surface.syncNativeToJava(surface.surfacePointer, surface.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean drawComposite(Rectangle2D bounds, ImageObserver observer)
|
private boolean drawComposite(Rectangle2D bounds, ImageObserver observer)
|
||||||
{
|
{
|
||||||
// Clip source to visible areas that need updating
|
// Find bounds in device space
|
||||||
Rectangle2D clip = this.getClipBounds();
|
bounds = getTransformedBounds(bounds, transform);
|
||||||
Rectangle2D.intersect(bounds, clip, bounds);
|
|
||||||
clip = new Rectangle(buffer.getMinX(), buffer.getMinY(),
|
|
||||||
buffer.getWidth(), buffer.getHeight());
|
|
||||||
Rectangle2D.intersect(bounds, clip, bounds);
|
|
||||||
|
|
||||||
|
// Clip bounds by the stored clip, and by the internal buffer
|
||||||
|
Rectangle2D devClip = this.getClipInDevSpace();
|
||||||
|
Rectangle2D.intersect(bounds, devClip, bounds);
|
||||||
|
devClip = new Rectangle(buffer.getMinX(), buffer.getMinY(),
|
||||||
|
buffer.getWidth(), buffer.getHeight());
|
||||||
|
Rectangle2D.intersect(bounds, devClip, bounds);
|
||||||
|
|
||||||
|
// Round bounds as needed, but be careful in our rounding
|
||||||
|
// (otherwise it may leave unpainted stripes)
|
||||||
|
double x = bounds.getX();
|
||||||
|
double y = bounds.getY();
|
||||||
|
double maxX = x + bounds.getWidth();
|
||||||
|
double maxY = y + bounds.getHeight();
|
||||||
|
x = Math.round(x);
|
||||||
|
y = Math.round(y);
|
||||||
|
bounds.setRect(x, y, Math.round(maxX - x), Math.round(maxY - y));
|
||||||
|
|
||||||
|
// Find subimage of internal buffer for updating
|
||||||
BufferedImage buffer2 = buffer;
|
BufferedImage buffer2 = buffer;
|
||||||
if (!bounds.equals(buffer2.getRaster().getBounds()))
|
if (!bounds.equals(buffer2.getRaster().getBounds()))
|
||||||
buffer2 = buffer2.getSubimage((int)bounds.getX(), (int)bounds.getY(),
|
buffer2 = buffer2.getSubimage((int)bounds.getX(), (int)bounds.getY(),
|
||||||
(int)bounds.getWidth(),
|
(int)bounds.getWidth(),
|
||||||
(int)bounds.getHeight());
|
(int)bounds.getHeight());
|
||||||
|
|
||||||
// Get destination clip to bounds
|
// Find subimage of main image for updating
|
||||||
double[] points = new double[] {bounds.getX(), bounds.getY(),
|
|
||||||
bounds.getMaxX(), bounds.getMaxY()};
|
|
||||||
transform.transform(points, 0, points, 0, 2);
|
|
||||||
|
|
||||||
Rectangle2D deviceBounds = new Rectangle2D.Double(points[0], points[1],
|
|
||||||
points[2] - points[0],
|
|
||||||
points[3] - points[1]);
|
|
||||||
|
|
||||||
Rectangle2D.intersect(deviceBounds, this.getClipInDevSpace(), deviceBounds);
|
|
||||||
|
|
||||||
BufferedImage current = CairoSurface.getBufferedImage(surface);
|
BufferedImage current = CairoSurface.getBufferedImage(surface);
|
||||||
current = current.getSubimage((int)deviceBounds.getX(),
|
current = current.getSubimage((int)bounds.getX(), (int)bounds.getY(),
|
||||||
(int)deviceBounds.getY(),
|
(int)bounds.getWidth(),
|
||||||
(int)deviceBounds.getWidth(),
|
(int)bounds.getHeight());
|
||||||
(int)deviceBounds.getHeight());
|
|
||||||
|
|
||||||
// Perform actual composite operation
|
// Perform actual composite operation
|
||||||
compCtx.compose(buffer2.getRaster(), current.getRaster(),
|
compCtx.compose(buffer2.getRaster(), current.getRaster(),
|
||||||
buffer2.getRaster());
|
buffer2.getRaster());
|
||||||
|
|
||||||
|
// Set cairo's composite to direct SRC, since we've already done our own
|
||||||
|
// compositing
|
||||||
|
Composite oldcomp = comp;
|
||||||
|
setComposite(AlphaComposite.Src);
|
||||||
|
|
||||||
// This MUST call directly into the "action" method in CairoGraphics2D,
|
// This MUST call directly into the "action" method in CairoGraphics2D,
|
||||||
// not one of the wrappers, to ensure that the composite isn't processed
|
// not one of the wrappers, to ensure that the composite isn't processed
|
||||||
// more than once!
|
// more than once!
|
||||||
boolean rv = super.drawImage(buffer2,
|
boolean rv = super.drawImage(buffer2,
|
||||||
AffineTransform.getTranslateInstance(bounds.getX(),
|
AffineTransform.getTranslateInstance(bounds.getX(),
|
||||||
bounds.getY()),
|
bounds.getY()),
|
||||||
new Color(0,0,0,0), null);
|
null, null);
|
||||||
|
setComposite(oldcomp);
|
||||||
|
updateColor();
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,6 @@ import java.awt.Shape;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.font.GlyphVector;
|
import java.awt.font.GlyphVector;
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.Line2D;
|
|
||||||
import java.awt.geom.Point2D;
|
import java.awt.geom.Point2D;
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
@ -78,7 +77,7 @@ public class ComponentGraphics extends CairoGraphics2D
|
||||||
protected long cairo_t;
|
protected long cairo_t;
|
||||||
private BufferedImage buffer, componentBuffer;
|
private BufferedImage buffer, componentBuffer;
|
||||||
|
|
||||||
private static ThreadLocal hasLock = new ThreadLocal();
|
private static ThreadLocal<Integer> hasLock = new ThreadLocal<Integer>();
|
||||||
private static Integer ONE = Integer.valueOf(1);
|
private static Integer ONE = Integer.valueOf(1);
|
||||||
|
|
||||||
ComponentGraphics()
|
ComponentGraphics()
|
||||||
|
@ -122,7 +121,7 @@ public class ComponentGraphics extends CairoGraphics2D
|
||||||
*/
|
*/
|
||||||
private void lock()
|
private void lock()
|
||||||
{
|
{
|
||||||
Integer i = (Integer) hasLock.get();
|
Integer i = hasLock.get();
|
||||||
if (i == null)
|
if (i == null)
|
||||||
{
|
{
|
||||||
start_gdk_drawing();
|
start_gdk_drawing();
|
||||||
|
@ -137,7 +136,7 @@ public class ComponentGraphics extends CairoGraphics2D
|
||||||
*/
|
*/
|
||||||
private void unlock()
|
private void unlock()
|
||||||
{
|
{
|
||||||
Integer i = (Integer) hasLock.get();
|
Integer i = hasLock.get();
|
||||||
if (i == null)
|
if (i == null)
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
if (i == ONE)
|
if (i == ONE)
|
||||||
|
@ -145,6 +144,8 @@ public class ComponentGraphics extends CairoGraphics2D
|
||||||
hasLock.set(null);
|
hasLock.set(null);
|
||||||
end_gdk_drawing();
|
end_gdk_drawing();
|
||||||
}
|
}
|
||||||
|
else if (i.intValue() == 2)
|
||||||
|
hasLock.set(ONE);
|
||||||
else
|
else
|
||||||
hasLock.set(Integer.valueOf(i.intValue() - 1));
|
hasLock.set(Integer.valueOf(i.intValue() - 1));
|
||||||
}
|
}
|
||||||
|
@ -908,4 +909,33 @@ public class ComponentGraphics extends CairoGraphics2D
|
||||||
unlock();
|
unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void cairoSetAntialias(long pointer, boolean aa)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
lock();
|
||||||
|
super.cairoSetAntialias(pointer, aa);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void drawCairoSurface(CairoSurface surface, AffineTransform tx,
|
||||||
|
double alpha, int interpolation)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
lock();
|
||||||
|
super.drawCairoSurface(surface, tx, alpha, interpolation);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,6 +80,11 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
*/
|
*/
|
||||||
private int[] glyphCodes;
|
private int[] glyphCodes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The set of fonts used in this glyph vector.
|
||||||
|
*/
|
||||||
|
private long[] fontSet = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Glyph transforms. (de facto only the translation is used)
|
* Glyph transforms. (de facto only the translation is used)
|
||||||
*/
|
*/
|
||||||
|
@ -87,6 +92,19 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
|
|
||||||
private GlyphMetrics[] metricsCache;
|
private GlyphMetrics[] metricsCache;
|
||||||
|
|
||||||
|
private native void dispose(long[] fonts);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a pointer to the native PangoFcFont object.
|
||||||
|
*
|
||||||
|
* The object will be referenced with g_object_ref n times before being
|
||||||
|
* returned, and must be unreferenced a corresponding number of times.
|
||||||
|
*
|
||||||
|
* @param n Number of times to reference the object.
|
||||||
|
* @return Pointer to the native default font.
|
||||||
|
*/
|
||||||
|
private native long getNativeFontPointer(int n);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a glyphvector from a given (Freetype) font and a String.
|
* Create a glyphvector from a given (Freetype) font and a String.
|
||||||
*/
|
*/
|
||||||
|
@ -115,7 +133,7 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
// reverse the glyph ordering.
|
// reverse the glyph ordering.
|
||||||
int[] temp = new int[ nGlyphs ];
|
int[] temp = new int[ nGlyphs ];
|
||||||
for(int i = 0; i < nGlyphs; i++)
|
for(int i = 0; i < nGlyphs; i++)
|
||||||
temp[ i ] = glyphCodes[ nGlyphs - i - 1];
|
temp[i] = glyphCodes[nGlyphs - i - 1];
|
||||||
glyphCodes = temp;
|
glyphCodes = temp;
|
||||||
}
|
}
|
||||||
performDefaultLayout();
|
performDefaultLayout();
|
||||||
|
@ -135,6 +153,13 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
glyphCodes = new int[ codes.length ];
|
glyphCodes = new int[ codes.length ];
|
||||||
System.arraycopy(codes, 0, glyphCodes, 0, codes.length);
|
System.arraycopy(codes, 0, glyphCodes, 0, codes.length);
|
||||||
nGlyphs = glyphCodes.length;
|
nGlyphs = glyphCodes.length;
|
||||||
|
|
||||||
|
if (fontSet == null)
|
||||||
|
{
|
||||||
|
fontSet = new long[nGlyphs];
|
||||||
|
Arrays.fill(fontSet, getNativeFontPointer(nGlyphs));
|
||||||
|
}
|
||||||
|
|
||||||
performDefaultLayout();
|
performDefaultLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,6 +182,7 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
}
|
}
|
||||||
|
|
||||||
glyphCodes = new int[ nGlyphs ];
|
glyphCodes = new int[ nGlyphs ];
|
||||||
|
fontSet = new long[nGlyphs];
|
||||||
glyphPositions = new float[(nGlyphs + 1) * 2];
|
glyphPositions = new float[(nGlyphs + 1) * 2];
|
||||||
glyphTransforms = new AffineTransform[ nGlyphs ];
|
glyphTransforms = new AffineTransform[ nGlyphs ];
|
||||||
for(int i = 0; i < nGlyphs; i++ )
|
for(int i = 0; i < nGlyphs; i++ )
|
||||||
|
@ -166,6 +192,13 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
}
|
}
|
||||||
System.arraycopy(gv.glyphPositions, 0, glyphPositions, 0,
|
System.arraycopy(gv.glyphPositions, 0, glyphPositions, 0,
|
||||||
glyphPositions.length);
|
glyphPositions.length);
|
||||||
|
System.arraycopy(gv.glyphCodes, 0, glyphCodes, 0, nGlyphs);
|
||||||
|
System.arraycopy(gv.fontSet, 0, fontSet, 0, nGlyphs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void finalize()
|
||||||
|
{
|
||||||
|
dispose(fontSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -175,6 +208,7 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
{
|
{
|
||||||
nGlyphs = s.codePointCount( 0, s.length() );
|
nGlyphs = s.codePointCount( 0, s.length() );
|
||||||
glyphCodes = new int[ nGlyphs ];
|
glyphCodes = new int[ nGlyphs ];
|
||||||
|
fontSet = new long[ nGlyphs ];
|
||||||
int[] codePoints = new int[ nGlyphs ];
|
int[] codePoints = new int[ nGlyphs ];
|
||||||
int stringIndex = 0;
|
int stringIndex = 0;
|
||||||
|
|
||||||
|
@ -194,22 +228,22 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glyphCodes = getGlyphs( codePoints );
|
getGlyphs( codePoints, glyphCodes, fontSet );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the glyph code within the font for a given character
|
* Returns the glyph code within the font for a given character
|
||||||
*/
|
*/
|
||||||
public native int[] getGlyphs(int[] codepoints);
|
public native void getGlyphs(int[] codepoints, int[] glyphs, long[] fonts);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the kerning of a glyph pair
|
* Returns the kerning of a glyph pair
|
||||||
*/
|
*/
|
||||||
private native Point2D getKerning(int leftGlyph, int rightGlyph);
|
private native Point2D getKerning(int leftGlyph, int rightGlyph, long font);
|
||||||
|
|
||||||
private native double[] getMetricsNative( int glyphCode );
|
private native double[] getMetricsNative(int glyphCode, long font);
|
||||||
|
|
||||||
private native GeneralPath getGlyphOutlineNative(int glyphIndex);
|
private native GeneralPath getGlyphOutlineNative(int glyphIndex, long font);
|
||||||
|
|
||||||
|
|
||||||
public Object clone()
|
public Object clone()
|
||||||
|
@ -268,9 +302,11 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
x += gm.getAdvanceX();
|
x += gm.getAdvanceX();
|
||||||
y += gm.getAdvanceY();
|
y += gm.getAdvanceY();
|
||||||
|
|
||||||
if (i != nGlyphs-1)
|
// Get the kerning only if it's not the last glyph, and the two glyphs are
|
||||||
|
// using the same font
|
||||||
|
if (i != nGlyphs-1 && fontSet[i] == fontSet[i+1])
|
||||||
{
|
{
|
||||||
Point2D p = getKerning(glyphCodes[i], glyphCodes[i + 1]);
|
Point2D p = getKerning(glyphCodes[i], glyphCodes[i + 1], fontSet[i]);
|
||||||
x += p.getX();
|
x += p.getX();
|
||||||
y += p.getY();
|
y += p.getY();
|
||||||
}
|
}
|
||||||
|
@ -305,6 +341,26 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns pointers to the fonts used in this glyph vector.
|
||||||
|
*
|
||||||
|
* The array index matches that of the glyph vector itself.
|
||||||
|
*/
|
||||||
|
protected long[] getGlyphFonts(int beginGlyphIndex, int numEntries,
|
||||||
|
long[] codeReturn)
|
||||||
|
{
|
||||||
|
long[] rval;
|
||||||
|
|
||||||
|
if( codeReturn == null || codeReturn.length < numEntries)
|
||||||
|
rval = new long[ numEntries ];
|
||||||
|
else
|
||||||
|
rval = codeReturn;
|
||||||
|
|
||||||
|
System.arraycopy(fontSet, beginGlyphIndex, rval, 0, numEntries);
|
||||||
|
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
public Shape getGlyphLogicalBounds(int glyphIndex)
|
public Shape getGlyphLogicalBounds(int glyphIndex)
|
||||||
{
|
{
|
||||||
GlyphMetrics gm = getGlyphMetrics( glyphIndex );
|
GlyphMetrics gm = getGlyphMetrics( glyphIndex );
|
||||||
|
@ -335,20 +391,18 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
|
|
||||||
for(int i = 0; i < nGlyphs; i++)
|
for(int i = 0; i < nGlyphs; i++)
|
||||||
{
|
{
|
||||||
GlyphMetrics gm = (GlyphMetrics)
|
GlyphMetrics gm = (GlyphMetrics)peer.getGlyphMetrics(glyphCodes[i]);
|
||||||
peer.getGlyphMetrics( glyphCodes[ i ] );
|
|
||||||
if( gm == null )
|
if( gm == null )
|
||||||
{
|
{
|
||||||
double[] val = getMetricsNative( glyphCodes[ i ] );
|
double[] val = getMetricsNative(glyphCodes[i], fontSet[i]);
|
||||||
if( val == null )
|
if( val == null )
|
||||||
gm = null;
|
gm = null;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gm = new GlyphMetrics( true,
|
gm = new GlyphMetrics(true,
|
||||||
(float)val[1],
|
(float)val[1],
|
||||||
(float)val[2],
|
(float)val[2],
|
||||||
new Rectangle2D.Double
|
new Rectangle2D.Double(val[3], val[4],
|
||||||
( val[3], val[4],
|
|
||||||
val[5], val[6] ),
|
val[5], val[6] ),
|
||||||
GlyphMetrics.STANDARD );
|
GlyphMetrics.STANDARD );
|
||||||
peer.putGlyphMetrics( glyphCodes[ i ], gm );
|
peer.putGlyphMetrics( glyphCodes[ i ], gm );
|
||||||
|
@ -371,13 +425,21 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the outline of a single glyph.
|
* Returns the outline of a single glyph.
|
||||||
|
*
|
||||||
|
* Despite what the Sun API says, this method returns the glyph relative to
|
||||||
|
* the origin of the *entire string*, not each individual glyph.
|
||||||
*/
|
*/
|
||||||
public Shape getGlyphOutline(int glyphIndex)
|
public Shape getGlyphOutline(int glyphIndex)
|
||||||
{
|
{
|
||||||
GeneralPath gp = getGlyphOutlineNative( glyphCodes[ glyphIndex ] );
|
GeneralPath gp = getGlyphOutlineNative(glyphCodes[glyphIndex],
|
||||||
if (glyphTransforms[glyphIndex] != null)
|
fontSet[glyphIndex]);
|
||||||
gp.transform( glyphTransforms[glyphIndex]);
|
|
||||||
|
|
||||||
|
AffineTransform tx = AffineTransform.getTranslateInstance(glyphPositions[glyphIndex*2],
|
||||||
|
glyphPositions[glyphIndex*2+1]);
|
||||||
|
if (glyphTransforms[glyphIndex] != null)
|
||||||
|
tx.concatenate( glyphTransforms[glyphIndex]);
|
||||||
|
|
||||||
|
gp.transform(tx);
|
||||||
return gp;
|
return gp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -432,7 +494,6 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
return logicalBounds;
|
return logicalBounds;
|
||||||
|
|
||||||
Rectangle2D rect = (Rectangle2D)getGlyphLogicalBounds( 0 );
|
Rectangle2D rect = (Rectangle2D)getGlyphLogicalBounds( 0 );
|
||||||
AffineTransform tx = new AffineTransform();
|
|
||||||
for( int i = 1; i < nGlyphs; i++ )
|
for( int i = 1; i < nGlyphs; i++ )
|
||||||
{
|
{
|
||||||
Rectangle2D r2 = (Rectangle2D)getGlyphLogicalBounds( i );
|
Rectangle2D r2 = (Rectangle2D)getGlyphLogicalBounds( i );
|
||||||
|
@ -458,14 +519,8 @@ public class FreetypeGlyphVector extends GlyphVector
|
||||||
public Shape getOutline()
|
public Shape getOutline()
|
||||||
{
|
{
|
||||||
GeneralPath path = new GeneralPath();
|
GeneralPath path = new GeneralPath();
|
||||||
AffineTransform tx = new AffineTransform();
|
|
||||||
for( int i = 0; i < getNumGlyphs(); i++ )
|
for( int i = 0; i < getNumGlyphs(); i++ )
|
||||||
{
|
path.append(getGlyphOutline(i), false);
|
||||||
Shape outline = getGlyphOutline(i);
|
|
||||||
tx.setToTranslation(glyphPositions[i*2], glyphPositions[i*2 +1]);
|
|
||||||
outline = tx.createTransformedShape(outline);
|
|
||||||
path.append(outline, false);
|
|
||||||
}
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue