revert: [multiple changes]

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GdkGraphics.java (drawImage variants):
	Update image observer.
	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage):
	Start image production.
	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Protect
	against negative menu bar widths.
	(setBounds): Likewise.
	(postConfigureEvent): Likewise.
	* gnu/java/awt/peer/gtk/GtkImage.java (imageComplete): Don't
	remove consumer unless only a single frame has completed.
	* gnu/java/awt/peer/gtk/GtkImagePainter.java (GtkImagePainter):
	Add observer parameter.
	(setPixels): Update image observer.
	(imageComplete): Likewise.
	* java/applet/Applet.java (width): New field.
	(height): Likewise.
	(setStub): Set size if width or height field has been set.
	(resize): If stub is null save width and height values.
	* java/awt/Component.java (reshape): Protect against null
	parent.
	* java/awt/image/MemoryImageSource.java
	(MemoryImageSource(int,int,ColorModel,byte[],int,int)):
	Document.
	(MemoryImageSource(int,int,ColorModel,int[],int,int)):
	Likewise.
	(MemoryImageSource(int,int,ColorModel,byte[],int,int,Hashtable)):
	Reference pixel array directly, rather than creating a local
	copy.
	(MemoryImageSource(int,int,ColorModel,int[],int,int,Hashtable)):
	Likewise.
	(newPixels(int,int,int,int)): Fix for loop and array copy
	bounds.
	(newPixels(int,int,int,int,boolean)): Likewise.
	(startProduction): If animated call imageComplete with
	SINGLEFRAME.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Uncomment
	gdk_flush lines.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
	(drawPixels): Return if g is null or g->drawable is not a gdk
	drawable.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/DefaultSingleSelectionModel.java,
	javax/swing/JPasswordField.java,
	javax/swing/tree/AbstractLayoutCache.java:
	Reformatted and javadocs cleaned up.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/Component.java:
	Fixed argument names to match javadocs.
	(setFont): Rewritten set property first and then fire event.
	(setLocale): Likewise.
	* javax/swing/text/JTextComponent.java
	(setEditable): Likewise.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/Button.java
	(AccessibleAWTButton.getAccessibleActionDescription): Explain the
	source of 'click'.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/Checkbox.java: Remove stub comments.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/Button.java
	(AccessibleAWTButton.getAccessibleActionDescription): Return
	'click'.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/CardLayout.java:
	Made some constants static.
	(serialVersionUID): Made private.
	(addLayoutComponent): Simplified code.
	* java/awt/event/InputEvent.java
	(getModifiersEx): Added missing @param tag.
	* java/awt/image/RGBImageFilter.java
	(filterRGBPixels): Reformatted, removed wrong @param tag.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/FieldView.java,
	javax/swing/text/JTextComponent.java:
	Removed debug code.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/BorderFactory.java
	(BorderFactory): Added private constructor.
	* javax/swing/SwingUtilities.java
	(SwingUtilities): Likewise.
	(computeStringWidth): New method.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/color/ICC_Profile.java
	(icSigNamedColorTag): Removed.
	* java/awt/datatransfer/DataFlavor.java
	(isMimeTypeEqual): Made final.
	* java/awt/image/AffineTransformOp.java:
	Reworked javadocs.
	(TYPE_BICUBIC): Added @since tag.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/Checkbox.java (AccessibleAWTCheckBox): Remove todo
	comments.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/Checkbox.java (itemStateChanged): Implement function.
	(getAccessibleContext): Add AccessibleAWTCheckBox to item listeners.

2004-11-30  Sven de Marothy  <sven@physto.se>

	* java/awt/Polygon.java (contains): Reimplemented.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/print/PrinterJob.java: Reformatted.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/image/AffineTransformOp.java,
	java/awt/image/ColorConvertOp.java,
	java/awt/image/LookupOp.java,
	java/awt/image/RescaleOp.java:
	Added final keywords where they belong.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/CardLayout.java,
	java/awt/Component.java,
	java/awt/Font.java,
	java/awt/image/SinglePixelPackedSampleModel.java:
	Fixed javadocs and argument names all over.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/image/DataBufferShort.java: Fixed file header.
	* java/awt/image/DataBufferUShort.java: Likewise.
	(DataBufferUShort): Throw NullPointerException if dataArray is null.

2004-11-30  Sven de Marothy  <sven@physto.se>

	* java/awt/geom/Arc2D.java
	(setAngleStart): Corrected (wrong sign on atan2 y parameter).
	(setAngles): Likewise.
	(containsAngle): Return false on zero extent, don't include
	final angle.
	(contains): Treat OPEN-type arcs like CHORD ones, not as PIE
	ones.

2004-11-30  Sven de Marothy  <sven@physto.se>

	* java/awt/geom/AffineTransform.java,
	(inverseTransform): Fixed bug and simplified code.
	(createTransformedShape): Return null on null parameter.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/color/ICC_ColorSpace.java,
	java/awt/color/ICC_Profile.java,
	java/awt/color/ICC_ProfileGray.java,
	java/awt/color/ICC_ProfileRGB.java:
	Re-indent copyright header to be standardish.
	* java/awt/datatransfer/StringSelection.java:
	Reformatted.
	* java/awt/geom/Area.java
	(EPSILON): Made static.
	(RS_EPSILON): Likewise.
	(PE_EPSILON): Likewide.

2004-11-30  Sven de Marothy  <sven@physto.se>

	* javax/swing/SwingUtilities.java:
	(computeDifference): Implemented
	(computeIntersection): Likewise
	(computeUnion): Likewise
	(isRectangleContainingRectangle): Likewise

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/BasicStroke.java,
	java/awt/Button.java,
	java/awt/Canvas.java,
	java/awt/CheckboxMenuItem.java,
	java/awt/Container.java,
	java/awt/EventQueue.java,
	java/awt/FileDialog.java,
	java/awt/FlowLayout.java,
	java/awt/FontMetrics.java,
	java/awt/Graphics.java,
	java/awt/GridLayout.java,
	java/awt/KeyboardFocusManager.java,
	java/awt/Label.java,
	java/awt/LayoutManager2.java,
	java/awt/List.java,
	java/awt/MenuBar.java,
	java/awt/Scrollbar.java,
	java/awt/Toolkit.java,
	java/awt/Window.java,
	java/awt/datatransfer/DataFlavor.java,
	java/awt/datatransfer/FlavorTable.java,
	java/awt/event/ActionListener.java,
	java/awt/event/HierarchyBoundsAdapter.java,
	java/awt/geom/Arc2D.java,
	java/awt/geom/Rectangle2D.java,
	java/awt/geom/RectangularShape.java,
	java/awt/im/spi/InputMethod.java,
	java/awt/image/ByteLookupTable.java,
	java/awt/image/ColorModel.java,
	java/awt/image/DirectColorModel.java,
	java/awt/image/ShortLookupTable.java,
	java/awt/print/Book.java:
	Fixed javadocs and method argument names all over.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/peer/gtk/GdkFontPeer.java
	(buildString): Optimise String building.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/TextArea.java (AccessibleAWTTextArea,
	getAccessibleContext): Implement.
	* java/awt/TextField.java (AccessibleAWTTextField,
	getAccessibleContext): Implement.

2004-11-30  Tom Tromey  <tromey@redhat.com>

	* Makefile.in: Rebuilt.
	* Makefile.am (jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo):
	Fixed typo.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/Menu.java (AccessibleAWTMenu, getAccessibleContext):
	Implement.
	* java/awt/PopupMenu.java (AccessibleAWTMenu, getAccessibleContext):
	Implement.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/print/PrinterJob.java (lookupPrintServices,
	getPrintService, setPrintService): Implement.
	(lookupStreamPrintServices): Add commented out implementation.
	(printer): New field.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* javax/swing/ToolTipManager.java (mouseMoved): Set currentComponent
	when not yet set.

2004-11-30  Sven de Marothy  <sven@physto.se>

	* java/awt/geom/GeneralPath.java (evaluateCrossings):
	Fixed epsilon value, should always be nonzero.

2004-11-30  Paul Jenner  <psj.home@ntlworld.com>

	* java/awt/image/Raster.java
	(createPackedRaster): Implemented.

2004-11-30  Graydon Hoare  <graydon@redhat.com>

	* javax/swing/plaf/basic/BasicTextUI.java:
	Listen to focus events, indicate focus via caret.
	* javax/swing/text/GapContent.java (getString): Return substring.
	* javax/swing/text/PlainDocument.java (reindex): New method.
	(createDefaultRoot): Call it.
	(insertUpdate): Likewise.
	(removeUpdate): Likewise.
	* javax/swing/text/Utilities.java (drawTabbedText): Always advance
	on tab and newline, even if no painting happens.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* Makefile.am: List peer JNI header: Java source file
	dependencies explicitly.  Likewise for JNI .lo: JNI header
	dependencies.
	* Makefile.in: Regenerate.

2004-11-30  Graydon Hoare  <graydon@redhat.com>

	* Makefile.am: Add entry for BasicTextPaneUI.java
	* Makefile.in: Regenerate.
	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
	(GdkGraphics2D): Set clip after transform.
	(drawImage): Protect against null image.
	* gnu/java/awt/peer/gtk/GtkFramePeer.java
	(setIconImage): Protect against non-GtkImage args.
	* gnu/java/awt/peer/gtk/GtkToolkit.java
	(checkImage): Protect against non-GtkImage args.
	* java/awt/print/PrinterJob.java:
	(print): Add variant taking PrintRequestAttributeSet.
	(printDialog): Likewise.
	* javax/swing/JComponent.java:
	(transferHandler): New field.
	(getComponentGraphics): Build new Graphics for each sub-paint.
	(getTransferHandler): New method.
	(setTransferHandler): New method.
	* javax/swing/JDesktopPane.java
	(setDragMode): Force LIVE_DRAG_MODE.
	* javax/swing/JMenuItem.java
	(menuSelectionChanged): Protect against null parent.
	* javax/swing/JTable.java (setDefaultRenderer): New method.
	* javax/swing/JTree.java: Get basic ctors and UI working.
	* javax/swing/JViewport.java (JViewport): Set scroll mode.
	* javax/swing/RepaintManager.java
	(addDirtyRegion): Skip empty regions.
	* javax/swing/ScrollPaneLayout.java (minimumLayoutSize): Do not
	bound scrollpane minimum by central view minimum.
	* javax/swing/ToolTipManager.java
	(showTip): Guard against null component.
	* javax/swing/TransferHandler.java: Stub out.
	* javax/swing/plaf/basic/BasicLookAndFeel.java:
	Add entry for TextPaneUI, change Tree icons to pngs.
	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	(installDefaults): Set text position and alignment.
	(paintMenuItem): Layout icon with normal compound function.
	* javax/swing/plaf/basic/BasicTableHeaderUI.java:
	(getMaximumSize): Delete.
	(getMinimumSize): Delete.
	(getPreferredSize): Use column model's total width.
	* javax/swing/plaf/basic/BasicTextPaneUI.java: New file.
	* javax/swing/plaf/basic/BasicTextUI.java
	(modelChanged): Make resilient against nulls.
	* javax/swing/plaf/basic/BasicTreeUI.java:
	Add some simplistic config / painting functions.
	* javax/swing/plaf/basic/BasicViewportUI.java
	(paintSimple): Add new non-backingstore paint mode.
	(paintBackingStore): Split out backing store code.
	(paint): Switch on painting mode.
	* javax/swing/text/SimpleAttributeSet.java
	(SimpleAttributeSet): Resist nulls.
	* javax/swing/tree/DefaultTreeCellRenderer.java: Implement.
	* javax/swing/tree/DefaultTreeModel.java: Partially implement.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (setFont):
	Set pango context's description and language.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* java/awt/image/LookupOp.java: Comments and indentation fixes.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/Checkbox.java (AccessibleAWTCheckBox): Implement.
	(getAccessibleContext): Implement.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/TextComponent.java (AccessibleAWTTextComponent):
	Implement.
	(getIndexAtPoint, getCharacterBounds): New methods.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/Button.java (AccessibleAWTButton): Implement.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
	(filenameFilterCallback): Made static.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
	(cairoShowGlyphs) Removed.

2004-11-30  Sven de Marothy <sven@physto.se>

	* gnu/java/awt/color/RgbProfileConverter.java (RgbProfileConverter):
	Don't invert matrix when reverse CLUT is available.
	* gnu/java/awt/color/LinearRGBConverter.java: Documentation update.
	* java/awt/color/ICC_ColorSpace.java: Likewise.
	* java/awt/color/ICC_Profile.java: Likewise.
	* java/awt/color/ICC_ProfileGray.java: Likewise.
	* java/awt/color/ICC_ProfileRGB.java: Likewise.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/MenuItem.java (AccessibleAWTMenuItem): Implement.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/Choice.java (AccessibleAWTChoice): Implement.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/BandedSampleModel.java (scanlineStride): Remove
	field hiding ComponentSampleModel.scanlineStride.

2004-11-30  Noa Resare  <noa@resare.com>

	* java/awt/geom/GeneralPath.java (currentSegment):
	Fix typo in transform.transform() invocation.

2004-11-30  Sven de Marothy <sven@physto.se>

	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
	(createImage): Created bitmap should be filled with bg color

2004-11-30  Noa Resare  <noa@resare.com>

	* java/awt/Choice.java (add):
	Implement correct selection behavior when peer == null.
	(insert): Likewise.
	(remove): Likewise.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (GtkChoicePeer):
	Call select() when Choice has a selected item.

2004-11-30  Michael Koch  <address@bogus.example.com>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
	Fixed method names to start at begin of line. This is desired by GNU
	coding style guide.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
	(gtkWidgetSetVisible): Unused. Removed.
	(connectJObject): Likewise.
	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
	(gtkScrolledWindowSetScrollPosition): Commented out.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
	(Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText): Installed and
	renamed from Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText): Removed.
	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
	(init_dpi_conversion_factor): Correct prototype.

2004-11-30  Sven de Marothy  <sven@physto.se>

	* java/awt/image/ConvolveOp.java: Added missing
	copyright notice.

2004-11-30  Robert Schuster  <theBohemian@gmx.net>

	Fixes bug #10908
	* gnu/java/beans/IntrospectionIncubator.java:
	(addMethod): static methods are discarded now, too.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* Makefile.am (awt_java_source_files): Add new gnu/java/awt/color
	java source files.
	* Makefile.in: Regenerated.

2004-11-30  Sven de Marothy  <sven@physto.se>

	* gnu/java/awt/color/CieXyzConverter.java,
	gnu/java/awt/color/GrayScaleConverter.java,
	gnu/java/awt/color/SrgbConverter.java,
	gnu/java/awt/color/ClutProfileConverter.java,
	gnu/java/awt/color/LinearRGBConverter.java,
	gnu/java/awt/color/TagEntry.java,
	gnu/java/awt/color/ColorLookUpTable.java,
	gnu/java/awt/color/ProfileHeader.java,
	gnu/java/awt/color/ToneReproductionCurve.java,
	gnu/java/awt/color/ColorSpaceConverter.java,
	gnu/java/awt/color/PyccConverter.java,
	gnu/java/awt/color/GrayProfileConverter.java,
	gnu/java/awt/color/RgbProfileConverter.java:
	New files.
	* java/awt/color/ICC_ColorSpace.java,
	java/awt/color/ICC_Profile.java,
	java/awt/color/ICC_ProfileGray.java,
	java/awt/color/ICC_ProfileRGB.java:
	Implemented (sans PhotoYCC color space).

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/AffineTransformOp.java (filter):  Implement
	bilinear interpolation for Rasters.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/IndexColorModel.java (IndexColorModel): Actually
	use the provided colormap.  Throw documented exceptions.  Document
	exceptions.

2004-11-30  Paul Jenner  <psj.home@ntlworld.com>

	* java/awt/image/IndexColorModel.java (IndexColorModel): Fix
	constructor.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/AffineTransformOp.java: Add TYPE_BICUBIC.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/AffineTransformOp.java (filter): Implement Raster
	filtering.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ComponentSampleModel.java (getDataElements,
	setDataElements): Implement SHORT, FLOAT, and INT transfer types.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* java/awt/Font.java (name): New field.
	(size): Likewise.
	(style): Likewise.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/Raster.java (createBandedRaster): Implement.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ConvolveOp.java: New class.
	* Makefile.am: Add ConvolveOp.
	* Makefile.in: Regenerate.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/RescaleOp.java (BandCombineOp, ColorConvertOp,
	LookupOp, RescaleOp): Fix loop bounds.

2004-11-30  jlquinn  <jlquinn@optonline.net>

	* Makefile.am: Fix typo in BandCombineOp.
	* Makefile.in: Regenerate.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/BandCombineOp.java: New class.
	* Makefile.am: Add BandCombineOp.
	* Makefile.in: Regenerate.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/LookupOp.java: New class.
	* Makefile.am: Add LookupOp.
	* Makefile.in: Regenerate.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/SampleModel.java (createSubsetSampleModel): Add
	javadocs.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ColorModel.java (cloneColorModel): Fix line
	wrap.  Use Boolean.valueOf.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
	(releasePeerGraphicsResource): Fixed typo in method name.
	* gnu/java/awt/peer/gtk/GdkFontPeer.java
	(finalize): Fixed typo in releasePeerGraphicsResource.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/font/TextAttribute.java
	(RUN_DIRECTION_LTR): Initialie with static value instead of
	calculating it.
	(RUN_DIRECTION_RTL): Likewise.
	(STRIKETHROUGH_ON): Likewise.
	(SWAP_COLORS_ON): Likewise.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ColorConvertOp.java: New class.
	* java/awt/image/ColorModel.java (cloneColorModel): New method.
	* Makefile.am: Add ColorConvertOp.
	* Makefile.in: Regenerate.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
	Track Window focus owner on FOCUS_GAINED events.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.

2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
	(Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun):
	Fix pointer warning.

2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter):
	Fix pointer warning.

	* jni/gtk-peer/gtkpeer.h: Introduce widget_union to fix type punned
	warnings.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
	(Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect): Use widget_union
	to fix type punned pointer warning.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (pre_event_handler):
	Likewise.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(window_get_new_state): Introduce unions to fix warnings as above.
	(window_property_changed_cb): Likewise.
	(window_active_state_change_cb): Mark unused variables unused.
	(window_focus_state_change_cb): Likewise.
	(window_focus_in_cb): Likewise.
	(window_focus_out_cb): Likewise.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont): Convert
	PangoFontMap correctly with PANGO_FT2FONT_MAP macro.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JMenuBar.java
	(updateUI): Simplified.
	* javax/swing/tree/DefaultTreeSelectionModel.java:
	Reorganized import statements.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/font/TextAttribute.java,
	javax/swing/JComponent.java,
	javax/swing/JInternalFrame.java,
	javax/swing/table/TableColumn.java,
	javax/swing/text/StyleConstants.java:
	Replaced "new Boolean(boolean)" with "Boolean.valueOf(boolean)".

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/tree/DefaultTreeCellEditor.java,
	javax/swing/tree/DefaultTreeModel.java,
	javax/swing/tree/DefaultTreeSelectionModel.java:
	Jalopied.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/tree/DefaultTreeCellEditor.java
	(EditorContainer.EditorContainer): Fixed arguments.
	(EditorContainer.EditorContainer): New method.
	(DefaultTextField.DefaultTextField): Fixed arguments, implemented.
	(DefaultTextField.getBorder): Implemented.
	(listenerList): New field.
	(addCellEditorListener): Implemented.
	(removeCellEditorListener): Implemented.
	(getCellEditorListeners): New method.
	* javax/swing/tree/DefaultTreeModel.java
	(addTreeModelListener): Fixed javadoc.
	(removeTreeModelListener): Likewise.
	(getTreeModelListeners): New method.
	(fireTreeNodesChanged): Implemented.
	(fireTreeNodesInserted): Likewise.
	(fireTreeNodesRemoved): Likewise.
	(fireTreeStructureChanged): Likewise.
	(getListeners): Fixed javadoc.
	* javax/swing/tree/DefaultTreeSelectionModel.java
	(addTreeSelectionListener): Implemented.
	(removeTreeSelectionListener): Likewise.
	(fireValueChanged): Likewise.
	(getListeners): Likewise.
	(addPropertyChangeListener): Likewise.
	(removePropertyChangeListener): Likewise.
	(getTreeSelectionListeners): New method.
	(getPropertyChangeListeners): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicScrollBarUI.java
	(maximumThumbSize): Removed static keyword.
	(minimumThumbSize): Likewise.
	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
	(CloseAction): Made public.
	(IconifyAction): Likewise.
	(MaximizeAction): Likewise.
	(MoveAction): Likewise.
	(RestoreAction): Likewise.
	(SizeAction): Likewise.
	(SystemMenuBar): Likewise.
	* javax/swing/plaf/basic/BasicSliderUI.java
	(TrackListener): Likewise.
	* javax/swing/plaf/basic/BasicSplitPaneUI.java
	(KeyboardDownRightHandler): Likewise.
	(KeyboardEndHandler): Likewise.
	(KeyboardHomeHandler): Likewise.
	(KeyboardResizeToggleHandler): Likewise.
	(KeyboardUpLeftHandler): Likewise.
	(PropertyHandler): Likewise.
	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
	(PropertyChangeHandler): Likewise.
	(TabSelectionHandler): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/JTextComponent.java
	(getKeymap): Made public.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JEditorPane.java
	(getStream): Throws IOException.
	(read): Likewise.
	* javax/swing/JRootPane.java
	(createContentPane): Fixed return type.
	* javax/swing/JSpinner.java
	(commitEdit): Throws ParseException.
	* javax/swing/plaf/metal/MetalLookAndFeel.java
	(serialVersionUID): New field.
	* javax/swing/table/TableColumn.java
	(resizedPostingDisableCount): Added @deprecated tag.
	(disableResizedPosting): Likewise.
	(enableResizedPosting): Likewise.
	* javax/swing/text/Document.java
	(TitleProperty): Fixed value.
	* javax/swing/tree/TreeCellEditor.java
	(TreeCellEditor): Extends CellEditor.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JWindow.java
	javax/swing/SpinnerModel.java
	javax/swing/Timer.java
	javax/swing/event/MenuKeyEvent.java
	javax/swing/plaf/basic/BasicButtonUI.java
	javax/swing/plaf/basic/BasicIconFactory.java
	javax/swing/plaf/basic/BasicTabbedPaneUI.java
	javax/swing/text/AttributeSet.java
	javax/swing/text/Highlighter.java
	javax/swing/text/StyleConstants.java
	javax/swing/tree/TreeCellEditor.java:
	Removed redundant and reordered modifiers.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicToolTipUI.java:
	Reformatted copyright header.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/AbstractAction.java,
	javax/swing/AbstractButton.java,
	javax/swing/AbstractCellEditor.java,
	javax/swing/AbstractListModel.java,
	javax/swing/AbstractSpinnerModel.java,
	javax/swing/ActionMap.java,
	javax/swing/BorderFactory.java,
	javax/swing/Box.java,
	javax/swing/ButtonModel.java,
	javax/swing/CellEditor.java,
	javax/swing/CellRendererPane.java,
	javax/swing/DefaultBoundedRangeModel.java,
	javax/swing/DefaultButtonModel.java,
	javax/swing/DefaultCellEditor.java,
	javax/swing/DefaultDesktopManager.java,
	javax/swing/DefaultListCellRenderer.java,
	javax/swing/DefaultListSelectionModel.java,
	javax/swing/DefaultSingleSelectionModel.java,
	javax/swing/GrayFilter.java,
	javax/swing/InputMap.java,
	javax/swing/JApplet.java,
	javax/swing/JCheckBoxMenuItem.java,
	javax/swing/JColorChooser.java,
	javax/swing/JComboBox.java,
	javax/swing/JComponent.java,
	javax/swing/JDesktopPane.java,
	javax/swing/JDialog.java,
	javax/swing/JEditorPane.java,
	javax/swing/JFileChooser.java,
	javax/swing/JFormattedTextField.java,
	javax/swing/JFrame.java,
	javax/swing/JInternalFrame.java,
	javax/swing/JLabel.java,
	javax/swing/JLayeredPane.java,
	javax/swing/JList.java,
	javax/swing/JMenu.java,
	javax/swing/JMenuBar.java,
	javax/swing/JMenuItem.java,
	javax/swing/JOptionPane.java,
	javax/swing/JPanel.java,
	javax/swing/JPasswordField.java,
	javax/swing/JPopupMenu.java,
	javax/swing/JRadioButtonMenuItem.java,
	javax/swing/JRootPane.java,
	javax/swing/JSpinner.java,
	javax/swing/JSplitPane.java,
	javax/swing/JTabbedPane.java,
	javax/swing/JTable.java,
	javax/swing/JTextArea.java,
	javax/swing/JTextPane.java,
	javax/swing/JToggleButton.java,
	javax/swing/JToolBar.java,
	javax/swing/JToolTip.java,
	javax/swing/JTree.java,
	javax/swing/JViewport.java,
	javax/swing/ListModel.java,
	javax/swing/LookAndFeel.java,
	javax/swing/MenuSelectionManager.java,
	javax/swing/ProgressMonitorInputStream.java,
	javax/swing/RepaintManager.java,
	javax/swing/RootPaneContainer.java,
	javax/swing/ScrollPaneLayout.java,
	javax/swing/SpringLayout.java,
	javax/swing/SwingUtilities.java,
	javax/swing/Timer.java,
	javax/swing/ToolTipManager.java,
	javax/swing/UIDefaults.java,
	javax/swing/UIManager.java,
	javax/swing/border/MatteBorder.java,
	javax/swing/colorchooser/AbstractColorChooserPanel.java,
	javax/swing/colorchooser/ColorSelectionModel.java,
	javax/swing/colorchooser/DefaultColorSelectionModel.java,
	javax/swing/colorchooser/DefaultHSBChooserPanel.java,
	javax/swing/colorchooser/DefaultPreviewPanel.java,
	javax/swing/colorchooser/DefaultRGBChooserPanel.java,
	javax/swing/colorchooser/DefaultSwatchChooserPanel.java,
	javax/swing/event/AncestorEvent.java,
	javax/swing/event/HyperlinkEvent.java,
	javax/swing/event/InternalFrameEvent.java,
	javax/swing/event/MenuDragMouseEvent.java,
	javax/swing/event/TableColumnModelEvent.java,
	javax/swing/event/TableModelEvent.java,
	javax/swing/event/TreeExpansionEvent.java,
	javax/swing/event/TreeModelEvent.java,
	javax/swing/event/TreeSelectionEvent.java,
	javax/swing/event/TreeWillExpandListener.java,
	javax/swing/event/UndoableEditEvent.java,
	javax/swing/filechooser/FileView.java,
	javax/swing/plaf/BorderUIResource.java,
	javax/swing/plaf/ComponentUI.java,
	javax/swing/plaf/FileChooserUI.java,
	javax/swing/plaf/IconUIResource.java,
	javax/swing/plaf/ListUI.java,
	javax/swing/plaf/PopupMenuUI.java,
	javax/swing/plaf/SplitPaneUI.java,
	javax/swing/plaf/TabbedPaneUI.java,
	javax/swing/plaf/TextUI.java,
	javax/swing/plaf/TreeUI.java,
	javax/swing/plaf/basic/BasicArrowButton.java,
	javax/swing/plaf/basic/BasicBorders.java,
	javax/swing/plaf/basic/BasicButtonUI.java,
	javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java,
	javax/swing/plaf/basic/BasicColorChooserUI.java,
	javax/swing/plaf/basic/BasicComboBoxEditor.java,
	javax/swing/plaf/basic/BasicComboBoxRenderer.java,
	javax/swing/plaf/basic/BasicComboBoxUI.java,
	javax/swing/plaf/basic/BasicComboPopup.java,
	javax/swing/plaf/basic/BasicDesktopIconUI.java,
	javax/swing/plaf/basic/BasicDesktopPaneUI.java,
	javax/swing/plaf/basic/BasicIconFactory.java,
	javax/swing/plaf/basic/BasicInternalFrameTitlePane.java,
	javax/swing/plaf/basic/BasicInternalFrameUI.java,
	javax/swing/plaf/basic/BasicListUI.java,
	javax/swing/plaf/basic/BasicLookAndFeel.java,
	javax/swing/plaf/basic/BasicMenuBarUI.java,
	javax/swing/plaf/basic/BasicMenuItemUI.java,
	javax/swing/plaf/basic/BasicMenuUI.java,
	javax/swing/plaf/basic/BasicOptionPaneUI.java,
	javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java,
	javax/swing/plaf/basic/BasicPopupMenuUI.java,
	javax/swing/plaf/basic/BasicProgressBarUI.java,
	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
	javax/swing/plaf/basic/BasicRootPaneUI.java,
	javax/swing/plaf/basic/BasicScrollBarUI.java,
	javax/swing/plaf/basic/BasicSeparatorUI.java,
	javax/swing/plaf/basic/BasicSliderUI.java,
	javax/swing/plaf/basic/BasicSpinnerUI.java,
	javax/swing/plaf/basic/BasicSplitPaneDivider.java,
	javax/swing/plaf/basic/BasicSplitPaneUI.java,
	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
	javax/swing/plaf/basic/BasicTableHeaderUI.java,
	javax/swing/plaf/basic/BasicTableUI.java,
	javax/swing/plaf/basic/BasicTextAreaUI.java,
	javax/swing/plaf/basic/BasicTextFieldUI.java,
	javax/swing/plaf/basic/BasicTextUI.java,
	javax/swing/plaf/basic/BasicToolBarSeparatorUI.java,
	javax/swing/plaf/basic/BasicToolBarUI.java,
	javax/swing/plaf/basic/BasicToolTipUI.java,
	javax/swing/plaf/basic/BasicTreeUI.java,
	javax/swing/plaf/basic/BasicViewportUI.java,
	javax/swing/plaf/basic/ComboPopup.java,
	javax/swing/table/AbstractTableModel.java,
	javax/swing/table/DefaultTableCellRenderer.java,
	javax/swing/table/DefaultTableColumnModel.java,
	javax/swing/table/DefaultTableModel.java,
	javax/swing/table/JTableHeader.java,
	javax/swing/table/TableCellEditor.java,
	javax/swing/table/TableCellRenderer.java,
	javax/swing/table/TableColumn.java,
	javax/swing/table/TableColumnModel.java,
	javax/swing/text/AbstractDocument.java,
	javax/swing/text/Caret.java,
	javax/swing/text/DefaultCaret.java,
	javax/swing/text/DefaultEditorKit.java,
	javax/swing/text/DefaultHighlighter.java,
	javax/swing/text/EditorKit.java,
	javax/swing/text/JTextComponent.java,
	javax/swing/text/LayeredHighlighter.java,
	javax/swing/text/PasswordView.java,
	javax/swing/text/SimpleAttributeSet.java,
	javax/swing/text/StyleConstants.java,
	javax/swing/text/StyleContext.java,
	javax/swing/text/StyledEditorKit.java,
	javax/swing/text/TextAction.java,
	javax/swing/text/View.java,
	javax/swing/tree/AbstractLayoutCache.java,
	javax/swing/tree/DefaultTreeCellRenderer.java,
	javax/swing/tree/DefaultTreeModel.java,
	javax/swing/tree/DefaultTreeSelectionModel.java,
	javax/swing/tree/FixedHeightLayoutCache.java,
	javax/swing/tree/TreeCellRenderer.java,
	javax/swing/tree/TreeSelectionModel.java,
	javax/swing/tree/VariableHeightLayoutCache.java,
	javax/swing/undo/AbstractUndoableEdit.java,
	javax/swing/undo/UndoableEditSupport.java:
	Imports cleaned up.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/Container.java,
	java/awt/Font.java,
	java/awt/font/TextLayout.java:
	Imports cleaned up.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/AbstractButton.java
	(getLabel): Added @deprecated tag.
	(setLabel): Likewise.
	* javax/swing/FocusManager.java
	(disableSwingFocusManager): Likewise.
	(isFocusManagerEnabled): Likewise.
	* javax/swing/JComponent.java
	(isManagingFocus): Added version to @deprecated tag.
	(getNextFocusableComponent): Moved @deprecated tag to bottom of
	javadoc.
	(getConditionForKeyStroke): Likewise.
	(getActionForKeyStroke): Likewise.
	* javax/swing/JDesktopPane.java
	(LIVE_DRAG_MODE): Added @specnote tag.
	(OUTLINE_DRAG_MODE): Likewise.
	* javax/swing/JInternalFrame.java
	(MENU_BAR_PROPERTY): Fixed value.
	(getMenuBar): Added @deprecated tag.
	(setMenuBar): Likewise.
	* javax/swing/JViewport.java
	(isBackingStoreEnabled): Likewise.
	(setBackingStoreEnabled): Likewise.
	* javax/swing/plaf/basic/BasicDesktopPaneUI.java
	(closeKey): Likewise.
	(maximizeKey): Likewise.
	(minimizeKey): Likewise.
	(navigateKey): Likewise.
	(navigateKey2): Likewise.
	* javax/swing/plaf/basic/BasicInternalFrameUI.java
	(openMenuKey): Likewise.
	* javax/swing/plaf/basic/BasicSplitPaneUI.java
	(keyboardDownRightListener): Likewise.
	(keyboardEndListener): Likewise.
	(keyboardHomeListener): Likewise.
	(keyboardResizeToggleListener): Likewise.
	(keyboardUpLeftListener): Likewise.
	(dividerResizeToggleKey): Likewise.
	(downKey): Likewise.
	(endKey): Likewise.
	(homeKey): Likewise.
	(leftKey): Likewise.
	(rightKey): Likewise.
	(upKey): Likewise.
	(createKeyboardUpLeftListener): Likewise.
	(createKeyboardDownRightListener): Likewise.
	(createKeyboardHomeListener): Likewise.
	(createKeyboardEndListener): Likewise.
	(createKeyboardResizeToggleListener): Likewise.
	(getDividerBorderSize): Likewise.
	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
	(downKey): Likewise.
	(leftKey): Likewise.
	(rightKey): Likewise.
	(upKey): Likewise.

2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Use the
	GTK_TEXT_VIEW macro.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
	(connect_awt_hook_cb): Mark unused variable unused.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c (selection_get):
	Do the cast right.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create): According to
	the gtk API gtk_combo_box_new_text actually returns a GtkWidget.
	Remove unused var menu.
	(selection_changed): Remove unused value.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds): Fix pointer
	warning with using an intermediate variable.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
	(area_updated): Fix unused var warning for BE archs.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
	(Java_gnu_java_awt_peer_gtk_GdkGraphics_connectSignals): Remove unused
	var.
	(realize_cb): Mark unused variable unused.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
	(seek_glyphstring_idx): Fix a C90 warning.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
	(Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun):
	Mark unused arguments unused.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_initState),
	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setGlyphCodes),
	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphCharIndex),
	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphIsHorizontal):
	Likewise.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
	(Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerFontMetrics),
	(Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerTextMetrics):
	Likewise.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter):
	Likewise.
	(filenameFilterCallback): Remove unused var.
	(handle_response): Declare str_fileName and remove last else statement.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c:
	New File.
	(nativeGetNumFontsFamilies) New function.
	(nativeGetFontFamilies) Likewise.
	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
	(getAvailableFontFamilyNames): Implement.
	* Makefile.am (gtk_c_source_files): Add GdkGraphicsEnvironment.c.
	* Makefile.in: Regenerate.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/ClasspathFontPeer.java
	(setStandardAttributes(String,Map)): If size attribute doesn't
	exist, default to size 12.  Clamp size value to a minimum of 1.

2004-11-30  Jeroen Frijters  <jeroen@frijters.net>

	* javax/swing/JDialog.java
	(decorated): Likewise.
	* javax/swing/JFrame.java
	(defaultLookAndFeelDecorated): Likewise.

2004-11-30  Jeroen Frijters  <jeroen@frijters.net>

	* javax/swing/plaf/basic/BasicToolBarUI.java
	(offset, regular): Made final.
	* javax/swing/plaf/basic/BasicScrollBarUI.java
	(DECREASE_HIGHLIGHT, INCREASE_HIGHLIGHT, NO_HIGHLIGHT,
	POSITIVE_SCROLL, NEGATIVE_SCROLL): Made final.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/BitwiseXORComposite.java,
	gnu/java/awt/ClasspathToolkit.java,
	gnu/java/awt/image/XBMDecoder.java,
	gnu/java/awt/peer/GLightweightPeer.java,
	gnu/java/awt/peer/gtk/GdkGlyphVector.java:
	Reorganized import statements.

2004-11-30  Jeroen Frijters  <jeroen@frijters.net>

	* java/awt/Button.java
	(next_button_number): Removed useless initializer.
	* java/awt/Frame.java
	(next_frame_number): Likewise.
	* java/awt/Panel.java
	(next_panel_number): Likewise,
	* java/awt/Scrollbar.java
	(next_scrollbar_number): Likewise.
	* java/awt/TextArea.java
	(next_text_number): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/image/ByteLookupTable.java
	(ByteLookupTable) :Fixed HTML entities in javadocs.
	(lookupPixel): Fix case when dst is null.
	* java/awt/image/ShortLookupTable.java
	(ShortLookupTable) :Fixed HTML entities in javadocs.
	(lookupPixel): Fix case when dst is null.
	* java/awt/image/DataBufferByte.java,
	java/awt/image/DataBufferDouble.java,
	java/awt/image/DataBufferFloat.java,
	java/awt/image/DataBufferInt.java,
	java/awt/image/DataBufferShort.java,
	java/awt/image/DataBufferUShort.java:
	Fix initialization of bankData in constructors.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
	(setNativeBounds): Set GtkEventBox, GtkButton and GtkLabel size
	requests.
	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(setNativeBounds): Make package private.  Set size request even
	if GTK parent is NULL.
	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
	(setNativeBounds): Set GtkEventBox and GtkLabel size requests.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	Workaround for bug #17952.
	*  jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(request_frame_extents): Check window->window != NULL.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* jni/gtk-peer/gdkfont.h: Include gtkpeer.h not gtkcairopeer.h.

2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Use
	native_text_layout_state_table here.

	* jni/gtk-peer/gdkfont.h: Mark native_text_layout_state_table extern.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
	(setChars): Only call pango_itemize() when vec->glyphitems != NULL.
	Only call pango_shape() when gi->glyphs->num_glyphs > 0.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/peer/gtk/GtkToolkit.java:
	Merged import statements.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
	(isBufferedImageGraphics): Simplified.

2004-11-30  Paul Jenner  <psj.home@ntlworld.com>

	* javax/swing/JTree.java
	(isRootVisible): Fixed typo in method name.
	* javax/swing/JScrollBar.java
	(setValues): Likewise.
	* javax/swing/JScrollPane.java
	(createScrollListener): Call JScrollBar.setValues.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (endValidate):
	Don't call setParentAndBounds on GtkWindowPeers.

	* java/awt/Component.java (static): Don't set default keyboard
	focus manager.
	* java/awt/KeyboardFocusManager.java
	(getCurrentKeyboardFocusManager): If current keyboard focus
	manager is null set a default.

	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
	(gtkWidgetSetBackground): New method.
	(block_expose_events_cb): New function.
	(connectSignals): Block the AWT's expose event processing on
	button press and release.
	(gtkSetLabel): Set text on proper widget.
	(gtkWidgetModifyFont): Modify font on proper widget.
	(gtkWidgetSetBackground): Set normal, active and prelight
	colours.
	(gtkWidgetSetForeground): Set forground colour of proper widget.
	(gtkActivate): Activate the correct widget.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (clearRect):
	Only clear rectangle if the backing component is not an event
	box.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
	(beginNativeRepaintID): New variable.
	(endNativeRepaintID): Likewise.
	(gtkInit): Initialize new fields with method IDs.
	* jni/gtk-peer/gtkpeer.h (beginNativeRepaintID): Declare extern.
	(endNativeRepaintID): Likewise.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* javax/swing/JList.java (init): Revert accidental commit.

	* gnu/java/awt/peer/gtk/GdkGraphics.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (GdkGraphics):
	Call initComponentGraphics or connectSignals depending on
	component's realization status.
	(realize_cb): New function.
	(initComponentGraphics): New method.
	(connectSignals): New method.
	(clipRect): Return immediately if component is not realized.
	(setClip): Likewise.
	(translate): Likewise.
	(drawImage variants): Return false immediately if component is
	not realized.
	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
	(connectSignals): New method.
	(GdkGraphics2D): Call initComponentGraphics2D or connectSignals
	depending on component's realization status.  Move other
	initialization calls to ...
	(initComponentGraphics2D): New method.
	(realize_cb): New function.
	(cairoSetMatrix): Return immediately if gr is NULL.
	(cairoNewPath): Likewise.
	(cairoRectangle): Likewise.
	(cairoClip): Likewise.
	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(gtkWidgetRepaintArea): Remove method.
	(isRealized): New method.
	(GtkComponentPeer): Move setParent, connectJObject and setCursor
	calls to setParentAndBounds.  Call setParentAndBounds.
	(setParentAndBounds): New method.
	(setComponentBounds): Return immediately if bounds are all zero.
	(repaint): Remove call to gtkWidgetRepaintArea.  Return
	immediately if requested paint region is 0x0.
	(setCursor): New method.
	(gtkWidgetSetParent): Only set widget's parent if its parent is
	currently NULL.
	(setNativeBounds): Only set widget's bounds if it has a parent.
	(connectSignals): Don't call gtk_widget_realize.  Connect
	"realize" signal to connect_awt_hook_cb handler.
	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (isValidating):
	New field.
	(beginValidate): Set isValidating true.
	(endValidate): Set parents and bounds for children first, then
	for this.  Set isValidating false.
	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
	(connectJObject): Remove method.
	(connectSignals): Don't call gtk_widget_realize.
	* gnu/java/awt/peer/gtk/GtkListPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
	(connectJObject): Remove method.
	(connectSignals): Don't call gtk_widget_realize.
	* gnu/java/awt/peer/gtk/GtkPanelPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
	(connectJObject): Remove method.
	* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
	(connectJObject): Remove method.
	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(create): Don't call gtk_widget_realize.
	(connectJObject): Remove method.
	(connectSignals): Don't call gtk_widget_realize.  Connect
	"realize" signal to connect_awt_hook_cb handler.
	(nativeSetBounds): Don't attempt to move GDK window if it is
	NULL.
	* java/awt/Container.java (addImpl): Don't call comp.addNotify
	if peer is not null.
	(validateTree): Create peers for all children before calling
	doLayout.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
	(connectSignals): Don't call gtk_widget_realize.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
	(connect_awt_hook_cb): New function.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
	(initComponentGraphicsID): New variable.
	(initComponentGraphics2DID): Likewise.
	(setCursorID): Likewise.
	(gtkInit): Initialize new fields with method IDs.
	* jni/gtk-peer/gtkpeer.h (initComponentGraphicsID): Declare
	extern.
	(initComponentGraphics2DID): Declare extern.
	(setCursorID): Likewise.
	(connect_awt_hook_cb): Declare function.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java,
	gnu/java/awt/peer/gtk/GdkGlyphVector.java,
	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java,
	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
	gnu/java/awt/peer/gtk/GtkButtonPeer.java,
	gnu/java/awt/peer/gtk/GtkClipboard.java,
	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
	gnu/java/awt/peer/gtk/GtkFontPeer.java,
	gnu/java/awt/peer/gtk/GtkListPeer.java,
	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
	gnu/java/awt/peer/gtk/GtkToolkit.java,
	gnu/java/awt/peer/gtk/GtkWindowPeer.java:
	Import statements reworked.  Some little reformattings.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/image/AffineTransformOp.java
	(TYPE_BILINEAR): Initialize with 2.
	* java/awt/print/Printable.java: Jalopied.
	(PAGE_EXISTS): Initialize with 0;
	(NO_SUCH_PAGE): Initialized with 1.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* Makefile.am: Add BufferedImageFilter.java.
	* Makefile.in: Regenerate.

2004-11-30  Graydon Hoare  <graydon@redhat.com>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
	(install_font_peer): Minor bug fixes to track cairo font semantics.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/BufferedImageFilter.java: Implement.

2004-11-30  Graydon Hoare  <graydon@redhat.com>

	* Makefile.am
	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c)
	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c)
	(gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java)
	(gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java): Remove.
	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c)
	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c)
	(gnu/java/awt/peer/gtk/GdkTextLayout.java)
	(gnu/java/awt/peer/gtk/GdkFontPeer.java)
	(gnu/java/awt/peer/ClasspathTextLayoutPeer.java): Add
	* Makefile.in: Regenerate.
	* gnu/awt/xlib/XToolkit.java
	(getClasspathTextLayoutPeer): Add stub.
	* gnu/java/awt/ClasspathToolkit.java
	(getClasspathTextLayoutPeer) Add.
	* gnu/java/awt/peer/ClasspathFontPeer.java
	(copyStyleToAttrs)
	(copySizeToAttrs): Make public.
	* gnu/java/awt/peer/ClasspathTextLayoutPeer.java: New file.
	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java: Remove.
	* gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java: Remove.
	* gnu/java/awt/peer/gtk/GdkFontMetrics.java: Rewrite.
	* gnu/java/awt/peer/gtk/GdkFontPeer.java: New file.
	* gnu/java/awt/peer/gtk/GdkGlyphVector.java: Adjust type names.
	* gnu/java/awt/peer/gtk/GdkGraphics.java
	(getFontPeer): New function.
	(drawString): Pass font peer to native side.
	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
	(cairoSetFont)
	(cairoShowGlyphs)
	(PainterThread): Remove.
	(GdkGraphics2D): Set hints during construction.
	(shifted)
	(walkPath)
	(draw)
	(setRenderingHint)
	(setRenderingHints): Reimplement normalization logic.
	(getDefaultHints)
	(updateBufferedImage)
	(isBufferedImageGraphics)
	(updateImagePixels)
	(drawImage): Make final.
	(drawImage): Always paint synchronously.
	(drawString)
	(drawGlyphVector): Rewrite.
	(releasePeerGraphicResource)
	(getPeerTextMetrics)
	(getPeerFontMetrics)
	(drawGdkGlyphVector)
	(drawGdkTextLayout)
	(cairoDrawGdkGlyphVector)
	(cairoDrawGdkTextLayout)
	(cairoDrawString)
	(getFontPeer): New functions.
	* gnu/java/awt/peer/gtk/GdkTextLayout.java: New file.
	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
	(getFontMetrics): Get metrics via toolkit, to hit cache.
	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Use getFontMetrics.
	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
	* gnu/java/awt/peer/gtk/GtkToolkit.java (LRUCache): New class.
	(fontCache)
	(metricsCache)
	(imageCache): New members.
	(getFontMetrics)
	(getImage)
	(getClasspathFontPeer): Use caches.
	(getFontPeer): Route through getClasspathFontPeer.
	* java/awt/Font.java (attrsToMap): Remove, adjust ctors.
	* java/awt/font/TextLayout.java: Implement in terms of peer.
	* javax/swing/plaf/basic/BasicSliderUI.java
	(paintThumb): Use polyline rather than polygon.
	* javax/swing/plaf/basic/BasicGraphicsUtils.java:
	Update comment but, alas, still do not switch to using TextLayouts.
	* javax/swing/text/Utilities.java (drawTabbedText):
	Draw text run-at-a-time, not char-at-a-time.
	* jni/gtk-peer/gdkfont.h: Publicize some of the font interface, add
	layout table.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c:
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
	Remove files.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Rewrite to
	incorporate brains of old GdkClasspathFontPeerMetrics.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Rewrite to
	incorporate brains of old GdkClasspathFontPeer.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: New file.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
	(drawString): Rewrite to use persistent layout in peer font.
	Comment out extraneous gdk_flush calls.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
	(metrics_cairo)
	(metrics_surface): New static variables.
	(paint_glyph_run)
	(install_font_peer): New helper functions.
	(releasePeerGraphicResource)
	(getPeerTextMetrics)
	(getPeerFontMetrics)
	(cairoDrawGdkTextLayout)
	(cairoDrawGdkGlyphVector): New native methods.
	(cairoDrawString): Rewrite, leaving layout-based version
	commented out for the time being.
	* jni/gtk-peer/gtkpeer.h (graphics): Add fields for pango stuff.

2004-11-30  David Gilbert  <david.gilbert@object-refinery.com>

	* java/awt/geom/AffineTransform.java:
	Fixed javadocs overall.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ComponentColorModel.java: Remove FIXME comment since
	it's correct.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/IndexColorModel.java: Fix use of immutable
	BigIntegers.

2004-11-30  Tom Tromey  <tromey@redhat.com>

	* javax/swing/plaf/basic/BasicOptionPaneUI.java (MessageIcon):
	Renamed from 'messageIcon'.
	(errorIcon, infoIcon, warningIcon, questionIcon): Updated.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/RescaleOp.java: Fix formatting.

2004-11-30   Olga Rodimina  <rodimina@redhat.com>

	* javax/swing/plaf/basic/BasicComboPopup.java
	(SCROLL_DOWN): made final.
	(SCROLL_UP): made final.

2004-11-30   Olga Rodimina  <rodimina@redhat.com>

	* javax/swing/plaf/basic/BasicComboPopup.java:
	Added javadocs for undocumented fields.
	(show): scroll down to the selected item and
	highlight selected item.
	(startAutoScrolling): Implemented.
	(stopAutoScrolling): Implemented.
	(autoScrollUp): Implemented.
	(autoScrollDown): Implemented.
	(InvocationMouseHandler.mouseReleased): Implemented.
	(InvocationMouseMotionHandler.mouseDragged): Implemented.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/RescaleOp.java: Implement.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/IndexColorModel.java (getRGBs,
	convertToIntDiscrete): Implement.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/IndexColorModel.java: Add class docs.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/IndexColorModel.java (isValid, getValidPixels):
	Implement.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/MenuBar.java,
	java/awt/peer/MenuBarPeer.java:
	Revert accidentally commited changes.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/AWTKeyStroke.java,
	java/awt/Canvas.java,
	java/awt/CardLayout.java,
	java/awt/CheckboxMenuItem.java,
	java/awt/Component.java,
	java/awt/Container.java,
	java/awt/DefaultKeyboardFocusManager.java,
	java/awt/EventDispatchThread.java,
	java/awt/FileDialog.java,
	java/awt/FlowLayout.java,
	java/awt/Font.java,
	java/awt/Frame.java,
	java/awt/Graphics2D.java,
	java/awt/GraphicsEnvironment.java,
	java/awt/GridBagConstraints.java,
	java/awt/GridBagLayout.java,
	java/awt/GridLayout.java,
	java/awt/Image.java,
	java/awt/KeyboardFocusManager.java,
	java/awt/Label.java,
	java/awt/List.java,
	java/awt/MediaTracker.java,
	java/awt/Menu.java,
	java/awt/MenuBar.java,
	java/awt/MenuComponent.java,
	java/awt/Panel.java,
	java/awt/PopupMenu.java,
	java/awt/ScrollPane.java,
	java/awt/Scrollbar.java,
	java/awt/SystemColor.java,
	java/awt/TextArea.java,
	java/awt/TextField.java,
	java/awt/Toolkit.java,
	java/awt/Window.java,
	java/awt/color/ICC_Profile.java,
	java/awt/datatransfer/DataFlavor.java,
	java/awt/datatransfer/StringSelection.java,
	java/awt/datatransfer/SystemFlavorMap.java,
	java/awt/dnd/Autoscroll.java,
	java/awt/dnd/DropTarget.java,
	java/awt/dnd/DropTargetContext.java,
	java/awt/dnd/DropTargetDragEvent.java,
	java/awt/dnd/peer/DropTargetContextPeer.java,
	java/awt/event/AdjustmentEvent.java,
	java/awt/event/InputEvent.java,
	java/awt/event/InvocationEvent.java,
	java/awt/event/KeyEvent.java,
	java/awt/event/MouseEvent.java,
	java/awt/font/TextLayout.java,
	java/awt/geom/GeneralPath.java,
	java/awt/geom/Point2D.java,
	java/awt/im/InputContext.java,
	java/awt/im/spi/InputMethodContext.java,
	java/awt/image/AffineTransformOp.java,
	java/awt/image/BufferedImage.java,
	java/awt/image/ColorModel.java,
	java/awt/image/ComponentColorModel.java,
	java/awt/image/CropImageFilter.java,
	java/awt/image/DirectColorModel.java,
	java/awt/image/MemoryImageSource.java,
	java/awt/image/PackedColorModel.java,
	java/awt/image/PixelGrabber.java,
	java/awt/image/RasterOp.java,
	java/awt/peer/MenuBarPeer.java:
	Some fixes for checkstyle. Import statement and modifier order
	redordering.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JTable.java
	(setModel): Reimplemented.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JTextArea.java
	(append): Re-implemented.
	(insert): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JSpinner.java
	(serialVersionUID): New static field.
	* javax/swing/JToggleButton.java
	(JToggleButton): Fixed email addresses.
	* javax/swing/SpinnerNumberModel.java
	(serialVersionUID): Added javadoc.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JTextArea.java:
	Don't use JTextComponent.doc directly. GCJ from java-gui-branch has a
	bug here which is fixed in HEAD ...

2004-11-30  Andrew John Hughes  <address@hidden>

	* javax/swing/JTextArea.java: Added additional
	documentation.

2004-11-30  Andrew John Hughes  <address@hidden>

	* javax/swing/JRadioButton.java:
	Implemented additional constructors and accessibility
	classes.  Added documentation and fixed a typo in
	AbstractButton.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/IndexColorModel.java (IndexColorModel): Implement
	missing constructor.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ComponentColorModel.java (ComponentColorModel):
	Implement missing 1.4 constructor.

2004-11-30  Andrew John Hughes  <address@hidden>

	* javax/swing/JToggleButton.java:
	Implemented additional constructors and accessibility
	classes.  Added documentation and fixed a typo in
	AbstractButton.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ColorModel.java (getDataElement,
	getDataElements): Document since 1.4.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/BandedSampleModel.java: Implement.
	* Makefile.am: Add java/awt/image/BandedSampleModel.java.
	* Makefile.in: Regenerated.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* java/awt/Window.java: Fixed whitespace difference with GNU
	classpath.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* Makefile.am: Add javax/swing/SpinnerListModel.java.
	* Makefile.in: Regenerated.

2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>

	* javax/swing/SpinnerListModel.java, javax/swing/SpinnerModel.java
	Implemented SpinnerListModel.  Added documentation to
	SpinnerModel.

2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
	(init_dpi_conversion_factor): Apply the patch from main correctly.
	2004-06-26  Andreas Tobler  <a.tobler@schweiz.ch>

2004-11-30  Tom Tromey  <tromey@redhat.com>

	Bug 9948.
	* javax/swing/JDesktopPane.java (LIVE_DRAG_MODE): Now final.
	(OUTLINE_DRAG_MODE): LIVE_DRAG_MODE.
	* javax/swing/plaf/basic/BasicSplitPaneUI.java
	(NON_CONTINUOUS_DIVIDER): Now final.  Initialize.

2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>

	* java/awt/Canvas.java
	(AccessibleAWTCanvas): added serialization UID
	* java/awt/Label.java
	(AccessibleAWTLabel): added serialization UID
	* javax/swing/JRootPane.java
	(AccessibleJRootPane): added comment to existing UID
	* javax/swing/JSpinner.java
	(DefaultEditor): added serialization UID
	(NumberEditor): added serialization UID
	* javax/swing/text/html/HTML.java
	(UnknownTag): added serialization UID

2004-11-30  Jeroen Frijters  <jeroen@frijters.net>

	* javax/swing/JInternalFrame.java
	(CONTENT_PANE_PROPERTY,FRAME_ICON_PROPERTY,GLASS_PANE_PROPERTY,
	IS_CLOSED_PROPERTY,IS_ICON_PROPERTY,IS_MAXIMUM_PROPERTY,
	IS_SELECTED_PROPERTY,LAYERED_PANE_PROPERTY,MENU_BAR_PROPERTY,
	ROOT_PANE_PROPERTY,TITLE_PROPERTY): Made final as per API spec.
	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
	(CLOSE_CMD,ICONIFY_CMD,MAXIMIZE_CMD,MOVE_CMD,RESTORE_CMD,SIZE_CMD):
	Made final as per API spec.

2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>

	* jni/gtk-peer/gtkpeer.h: Remove duplicated copyright string.

2004-11-30  Sven de Marothy  <sven@physto.se>

	* java/awt/geom/Arc2D.java: Reformatted.
	(setArc): Correct documentation to say 'upper left corner'.
	(setArcByTangent,contains,intersects): Implemented.
	(containsAngle): Corrected to handle negative extents.
	(ArcIterator): Set to private.
	(ArcIterator): Corrected for CHORD-type arcs, negative extents.
	(intersects): Fix: Now checks the arc segment.
	(contains): Cleaned up.
	* java/awt/geom/CubicCurve2a.javaD: Fix insideness-test. Reindent.
	(contains): Implemented.
	(intersects): Implemented.
	* java/awt/geom/QuadCurve2D.java: Fix insideness-test. Reindent.
	* java/awt/geom/GeneralPath: Fix insideness-test. Reindent and
	document.  Fully (re)implemented using separate xpoints and ypoints
	float[] coords.

2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>

	* configure.ac: Introduce AC_C_BIGENDIAN_CROSS for WORDS_BIGENDIAN.
	* configure: Regenerate.
	* include/config.h.in: Likewise.
	* jni/gtk-peer/gtkpeer.h (SWAPU32): Introduce macro to swap pixels.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c: Moved SWAPU32
	macro to gtkpeer.h.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePixels): Convert
	pixels from  0xBBGGRRAA to 0xAARRGGBB only on Little Endian
	architectures.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_updated):
	Likewise.

2004-11-30  David Gilbert  <david.gilbert@object-refinery.com>

	* java/awt/SystemColor.java: Fix @link doc entries.

2004-11-30  David Gilbert  <david.gilbert@object-refinery.com>

	* java/awt/RenderingHints.java: Documented.
	(RenderingHints): Accept null init Map.
	(putAll): Preprocess map to generate appropriate exceptions.
	(remove): Cast object to Key and remove from hintMap.

2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>

	* java/awt/MenuComponent.java, java/awt/MenuBar.java:
	Implementation of accessibility classes and methods
	for these two components.

2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>

	* java/awt/KeyboardFocusManager.java:
	Added missing documentation.

2004-11-30  Andrew John Hughes <gnu_andrew@member.fsf.org>

	* java/awt/Label.java, java/awt/Canvas.java:
	Added accessibility classes to AWT Label and Canvas,
	as well as additional documentation for Canvas.

2004-11-30  David Gilbert  <address@bogus.example.com>

	* java/awt/image/DataBuffer.java: Update API documentation.
	* java/awt/image/DataBufferByte.java: Likewise.
	* java/awt/image/DataBufferDouble.java: Likewise.
	* java/awt/image/DataBufferFloat.java: Likewise.
	* java/awt/image/DataBufferInt.java: Likewise.
	* java/awt/image/DataBufferShort.java: Likewise.
	* java/awt/image/DataBufferUShort.java: Likewise.

2004-11-30  Dalibor Topic  <robilad@kaffe.org>

	* java/awt/Component.java (postEvent):
	Only delegate to parent if a parent exists.
	Reported by: Stephane Meslin-Weber <steph@tangency.co.uk>

2004-11-30  Sven de Marothy  <sven@physto.se>

	*java/awt/AWTEventMulticaster.java,
	java/awt/Adjustable.java,
	java/awt/Point.java,
	java/awt/Polygon.java,
	java/awt/Rectangle.java,
	java/awt/Shape.java,
	java/awt/geom/Area.java,
	java/awt/geom/Ellipse2D.java,
	java/awt/geom/PathIterator.java,
	java/awt/geom/Point2D.java,
	java/awt/geom/Rectangle2D.java,
	java/lang/Comparable.java,
	java/util/Arrays.java:
	Fixed documentation errors

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ComponentSampleModel.java: Add documentation.


2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ComponentSampleModel.java (constructor):
	Initialize numBanks when figuring out the max bank index.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/Raster.java (createPackedRaster): Implement
	MultiPixelPackedSampleModel codepath.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/MultiPixelPackedSampleModel.java: Implement.
	* Makefile.am: Add MultiPixelPackedSampleModel.java.
	* Makefile.in: Regenerate.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/Raster.java (getNumBands): Implement.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/Raster.java
	(createPackedRaster(int,int,int,int,int,Point)): Implement for
	bands>1.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/SinglePixelPackedSampleModel.java
	(SinglePixelPackedSampleModel): Throw exception for unsupported
	datatype.

2004-11-30  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ColorModel.java (getDataElement): Implemented.
	Update javadoc.
	(getDataElements): Add missing version.  Remove bogus version.
	Update javadoc.

2004-11-30  Olga Rodimina  <rodimina@redhat.com>

	* javax/swing/plaf/basic/BasicComboBoxUI.java:
	(paintCurrentValue): Pass correct parameters to
	getListCellRendererComponent().
	(ListDataHandler.intervalRemoved): Implemented.
	(PropertyChangeHandler.propertyChange): Handle changes in
	MODEL_CHANGED_PROPERTY of the JComboBox
	* javax/swing/plaf/basic/BasicComboPopup.java:
	(BasicComboPopup): Moved code that configures popup to
	configurePopup() and call it instead.
	(firePopupMenuWillBecomeVisible): Implemented.
	(firePopupMenuWillBecomeInvisible): Likewise.
	(firePopupMenuCanceled): Likewise.
	(configureList): Set list's visibleRowCount same as
	comboBox's visibleRowCount.
	(configurePopup): Implemented.
	(getPopupHeightForRowCount): Get item's from JComboBox's model and
	not from model of the JList.
	(ListMouseMotionHandler.mouseMoved): Implemented.
	(PropertyChangeHandler.propertyChange): Handles change in the
	JComboBox's model.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JComponent.java
	(isMaximumSizeSet): New method.
	(isMinimumSizeSet): Likewise.
	(isPreferredSizeSet): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JSpinner.java:
	Some Re-formatting.
	(spinner): New field.
	(DefaultEditor): New method.
	(getSpinner): Likewise.
	(NumberEdito): Likewise.
	(getModel): Likewise

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/InputVerifier.java:
	Re-formatted.
	* javax/swing/JComponent.java
	(inputVerifier): New property field.
	(getInputVerifier): New method.
	(setInputVerifier): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JComponent.java
	(JComponent): Added javadoc comment.
	(setBorder): Fire property change eventr.
	(setEnabled): Likewise.
	(setMaximumSize): Likewise.
	(setMinimumSize): Likewise.
	(setPreferredSize): Likewise.
	(setOpaque): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JTextField.java
	(action): New field.
	(actionCommand): Likewise.
	(actionPropertyChangeListener): Likewise.
	(setHorizontalAlignment): Abort soon if new value == old value. Fire
	event before repainting.
	(postActionEvent): New method.
	(getAction): Likewise.
	(setAction): Likewise.
	(getActionCommand): Likewise.
	(setActionCommand): Likewise.
	(createActionPropertyChangeListener): Likewise.
	(configurePropertiesFromAction): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/DebugGraphics.java:
	Re-formatted. Fixed some javadocs.
	* javax/swing/JApplet.java
	(rootPaneCheckingEnabled): Renamed from checking.
	* javax/swing/JCheckBox.java
	(BORDER_PAINTED_FLAT_CHANGED_PROPERTY): New statif field.
	* javax/swing/JFrame.java:
	Re-formatted a bit and reordered some methods.
	(rootPaneCheckingEnabled): Renamed from checking.
	(getPreferredSize): Simplified.
	* javax/swing/JTextArea.java
	(getColumnWidth): New method.
	(getLineCount): Likewise.
	(getLineStartOffset): Likewise.
	(getLineEndOffset): Likewise.
	(getLineOfOffset): Likewise.
	(getRowHeight): Likewise.
	(insert): Likewise.
	(replaceRange): Likewise.
	* javax/swing/JTextField.java
	(scrollOffset): new field.
	(getScrollOffset): New method.
	(setScrollOffset): Likewise.
	(getColumnWidth): Likewise.
	* javax/swing/JTree.java
	(ANCHOR_SELECTION_PATH_PROPERTY): New static field.
	(CELL_EDITOR_PROPERTY): Likewise.
	(CELL_RENDERER_PROPERTY): Likewise.
	(EDITABLE_PROPERTY): Likewise.
	(EXPANDS_SELECTED_PATHS_PROPERTY): Likewise.
	(INVOKES_STOP_CELL_EDITING_PROPERTY): Likewise.
	(LARGE_MODEL_PROPERTY): Likewise.
	(LEAD_SELECTION_PATH_PROPERTY): Likewise.
	(ROOT_VISIBLE_PROPERTY): Likewise.
	(ROW_HEIGHT_PROPERTY): Likewise.
	(SCROLLS_ON_EXPAND_PROPERTY): Likewise.
	(SELECTION_MODEL_PROPERTY): Likewise.
	(SHOWS_ROOT_HANDLES_PROPERTY): Likewise.
	(TOGGLE_CLICK_COUNT_PROPERTY): Likewise.
	(TREE_MODEL_PROPERTY): Likewise.
	(VISIBLE_ROW_COUNT_PROPERTY): Likewise.
	(cellEditor): New field.
	(invokesStopCellEditing): Likewise.
	(largeModel): Likewise.
	(rowHeight): Likewise.
	(scrollsOnExpand): Likewise.
	(selectionModel): Likewise.
	(toggleClickCount): Likewise.
	(visibleRowCount): Likewise.
	(setShowsRootHandles): Fixed typo in method name.
	(getCellEditor): New method.
	(setCellEditor): Likewise.
	(getSelectionModel): Likewise.
	(setSelectionModel): Likewise.
	(getVisibleRowCount): Likewise.
	(setVisibleRowCount): Likewise.
	(isLargeModel): Likewise.
	(setLargeModel): Likewise.
	(getRowHeight): Likewise.
	(setRowHeight): Likewise.
	(getInvokesStopCellEditing): Likewise.
	(setInvokesStopCellEditing): Likewise.
	(getToggleClickCount): Likewise.
	(setToggleClickCount): Likewise.
	(getScrollsOnExpand): Likewise.
	(setScrollsOnExpand): Likewise.
	* javax/swing/table/DefaultTableColumnModel.java
	(addColumnModelListener): Fixed javadoc.
	(removeColumnModelListener): Implemented. Fixed javadoc.
	(getColumnModelListeners): New method.
	* javax/swing/table/JTableHeader.java
	(columnModel): Made protected.
	(draggedColumn): Likewise.
	(draggedDistance): Likewise.
	(reorderingAllowed): Likewise.
	(resizingAllowed): Likewise.
	(resizingColumn): Likewise.
	(table): Likewise.
	(updateTableInRealTime): Likewise.
	(createDefaultColumnModel): Renamed from
	createDefaultTableColumnModel.
	(setDefaultRenderer): New method.
	* javax/swing/table/TableColumn.java
	(getPropertyChangeListeners): New method.
	* javax/swing/text/DefaultHighlighter.java
	(drawsLayeredHighlights): New field.
	(getDrawsLayeredHighlights): New method.
	(setDrawsLayeredHighlights): Likewise.
	* javax/swing/text/DocumentFilter.java
	(FilterBypass): New inner class.
	(insertString): New method.
	(remove): Likewise.
	(replace): Likewise.
	* javax/swing/text/JTextComponent.java
	(dragEnabled): New field.
	(getSelectedText): New method.
	(getDragEnabled): Likewise.
	(setDragEnabled): Likewise.
	(replaceSelection): Reimplemented.
	* javax/swing/text/NavigationFilter.java
	(FilterBypass): New inner class.
	(NavigationFilter): New method.
	(moveDot): Likewise.
	(setDot): Likewise.
	* javax/swing/text/SimpleAttributeSet.java
	(EMPTY): Made public final.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/SpinnerNumberModel.java
	(getMinimum): New method.
	(setMinimum): Likewise.
	(getMaximum): Likewise.
	(setMaximum): Likewise.
	(getStepSize): Likewise.
	(setStepSize): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JMenu.java
	(getMenuListeners): New method.
	(fireMenuSelected): Simplified.
	* javax/swing/JRootPane.java
	(NONE): New static field.
	(FRAME): Likewise.
	(PLAIN_DIALOG): Likewise.
	(INFORMATION_DIALOG): Likewise.
	(ERROR_DIALOG): Likewise.
	(COLOR_CHOOSER_DIALOG): Likewise.
	(FILE_CHOOSER_DIALOG): Likewise.
	(QUESTION_DIALOG): Likewise.
	(WARNING_DIALOG): Likewise.
	(defaultButton): New field.
	(getDefaultButton): New method.
	(setDefaultButton): Likewise.
	* javax/swing/JScrollPane.java
	(getUI): New method.
	(setUI): Likewise.
	* javax/swing/JTable.java
	(getUI): Javadoc added.
	(setUI): New method.
	* javax/swing/JViewport.java
	(getUI): New method.
	(setUI): Likewise.
	* javax/swing/UIDefaults.java
	(removePropertyChangeListener): Made public.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JApplet.java, javax/swing/JFrame.java:
	Re-indented.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/AbstractButton.java:
	Little re-formatting.
	(changeEvent): Made protected.
	(fireStateChanged): Removed argument.
	(setHorizontalAlignment): Abort method when old value is equal too new
	value.
	(setHorizontalTextPosition): Likewise.
	(setVerticalAlignment): Likewise.
	(setVerticalTextPosition): Likewise.
	(setBorderPainted): Likewise.
	(setIcon): Likewise.
	(setText): Likewise.
	(setIconTextGap): Likewise.
	(setMargin): Likewise.
	(setPressedIcon): Likewise.
	(setFocusPainted): Likewise.
	(setDisabledSelectedIcon): Likewise.
	(setRolloverIcon): Likewise.
	(setRolloverSelectedIcon): Likewise.
	(setSelectedIcon): Likewise.
	(setContentAreaFilled): Likewise.

2004-11-30  Kim Ho  <kho@redhat.com>

	* javax/swing/plaf/basic/BasicArrowButton.java:
	Jalopy. Reimplement.
	* javax/swing/plaf/basic/BasicScrollBarUI.java:
	Jalopy.
	(arrowIcon, upIcon, downIcon, leftIcon,
	rightIcon): Removed.
	(createIncreaseButton): Use BasicArrowButton.
	(createDecreaseButton): Ditto.
	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
	(createRightOneTouchButton): Remove button border.
	(createLeftOneTouchButton): Ditto.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JSpinner.java
	(setModel): New method.
	* javax/swing/SpringLayout.java
	(Constraints): May not be final.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/peer/gtk/GtkClipboard.java,
	java/awt/datatransfer/Clipboard.java,
	java/awt/datatransfer/ClipboardOwner.java:
	Reformated to make it use our coding standard.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/SpinnerNumberModel.java
	(SpinnerNumberModel): Implements java.io.Serializable.
	(serialVersionUID): New field.
	(SpinnerNumberModel): Added missing @throws tags to javadocs.
	* javax/swing/UIManager.java
	(get): New method.
	(getBoolean): Likewise.
	(getBorder): Likewise.
	(getColor): Likewise.
	(getDimension): Likewise.
	(getFont): Likewise.
	(getIcon): Likewise.
	(getInsets): Likewise.
	(getInt): Likewise.
	(getString): Likewise.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JPasswordField.java:
	Reformated. Implemented construtors.
	* javax/swing/plaf/basic/BasicPasswordFieldUI.java
	(create): New method.
	* javax/swing/text/PlainView.java
	(selectedColor): Made package-private to allow access from sub-classes
	in same package too.
	(unselectedColor): Likewise.
	(font): Likewise.
	(drawSelectedText): Make protected.
	(drawUnselectedText): Likewise.
	* javax/swing/text/PasswordView.java: New file.
	* Makefile.am: Added javax/swing/text/PasswordView.java.
	* Makefile.in: Regenerated.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Set menu
	bar's width.
	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (nativeSetHelpMenu):
	Add FIXME comment.
	(addHelpMenu): Elide call to nativeSetHelpMenu.
	* java/awt/Menu.java (isTearOff): Rename to tearOff.
	(menuSerializedDataVersion): Initialize to 1.
	(separatorLabel): Mark transient.
	(insert(MenuItem,int)): Implement.
	* java/awt/MenuBar.java (setHelpMenu): Call getPeer to retrieve
	peer.
	(countMenus): Count help menu.
	* java/awt/MenuComponent.java (nameExplicitlySet, newEventsOnly,
	accessibleContext): Add fields.
	* java/awt/MenuItem.java: Remove event mask FIXME.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
	(gtkWidgetModifyFont): Only set font if label is non-NULL.
	(setLabel): Don't treat "-" specially.

2004-11-30  Kim Ho  <kho@redhat.com>

	* javax/swing/colorchooser/DefaultHSBChooserPanel.java:
	(stateChanged): Only update the image and the track if
	the values are not being adjusted.
	(updateChooser): Grab the new mouse point from the
	spinner values. Update the image and track only if
	the values are not being adjusted.
	(getHSBValues): New method.
	* javax/swing/colorchooser/DefaultRGBChooserPanel.java:
	(SliderHandler::stateChanged): Changed internalChange
	to updateChange. Set sliderChange.
	(SpinnerHandler::stateChanged): Ditto. Set spinnerChange.
	(spinnerChange): New variable.
	(sliderChange): Ditto.
	(updateChange): Renamed from internalChange.
	(updateChooser): Do not update sliders if the sliders
	were the original source of the change. Ditto for spinners.
	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
	(mousePress): Don't scroll the JViewport if there will
	be extra space at the end of the run. Change layout() to
	revalidate().
	(calculateSize): Use the component's width/height unless
	it is smaller than the max tab width/height.
	(calculateTabRects): Subtract the tab run overlay.
	(rotateTabRuns): Don't rotate if there's only one run.
	(layoutContainer): Reuse the viewport point.
	(createLayoutManager): Set the viewport to use no layout.
	(paintTabArea): Don't paint the tabs that are not visible
	to the JViewport.
	(paintContentBorderTopEdge): Check for scroll tab layout before
	looking for gap.
	(paintContentBorderLeftEdge): Ditto.
	(paintContentBorderBottomEdge): Ditto.
	(paintContentBorderRightEdge): Ditto.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkButtonPeer.java (gtkWidgetSetFont):
	Rename ...
	(gtkWidgetModifyFont): New method.
	* gnu/java/awt/peer/gtk/GtkFramePeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
	(setMenuBarWidth): New method.
	(setBounds): Set the menu bar width.
	(postConfigureEvent): Set the menu bar width if the window's
	width has changed.
	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (GtkMenuBarPeer):
	Don't call create.
	(setFont): New method.
	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java (create): New
	method.
	(setFont): Likewise.
	(GtkMenuComponentPeer): Call create and setFont.
	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
	(connectSignals): Make package private.
	(gtkWidgetModifyFont): New method.
	(create): Likewise.
	(GtkMenuItemPeer): Don't call create.
	(setFont): New method.
	* java/awt/CheckboxMenuItem.java (addNotify): Fix peer == null
	condition.
	* java/awt/Container.java (validateTree): Fix comment typos.
	* java/awt/MenuComponent.java (getFont): Return parent's font if
	our font is null.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
	(create): Remove call to deprecated
	gtk_check_menu_item_set_show_toggle function.

2004-11-30  Hans Boehm <Hans.Boehm@hp.com>

	* java/lang/natObject.cc (LOCK_LOG, LOG): Add debug tracing.
	(Almost everywhere): add LOG calls, fix, add comments.
	(_Jv_MonitorEnter): Replace masking of LOCKED bit with assertion.
	Add explicit check for LOCKED bit in slow case (PR 16662).
	(_Jv_MonitorExit): Add casts in debug-only code.
	Always release LOCKED bit before throwing exception.
	(_Jv_ObjectCheckMonitor): Lock may be held if lightweight lock
	isn't.  Handle easy cases without lock acquisition.
	(Object::wait): Use NotifyAll for lock inflation.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkFramePeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
	(gtkFixedMove): Remove method.

2004-11-30  Sven de Marothy  <sven@physto.se>

	* java/awt/geom/Area.java: Implemented.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* java/awt/geom/Arc2D.java (ArcIterator): Make package private.

2004-11-30 Sven de Marothy <sven@physto.se>

	* java/awt/geom/Arc2D.java
	Reformatted.
	(setArc): Correct documentation to say 'upper left corner'.
	(setArcByTangent,contains,intersects): Implemented.
	(containsAngle): Corrected to handle negative extents.
	(ArcIterator): Set to private.
	(ArcIterator): Corrected for CHORD-type arcs, negative extents.
	* java/awt/geom/Ellipse2D.java
	Documented.
	(contains,intersects): Implemented.
	* java/awt/geom/Line2D.java
	(linesIntersect): Correct handling of special cases.

2004-11-30  Mark Wielaard  <mark@klomp.org>

	* gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Use
	Color.BLACK if c == null, don't create new Color object each time.
	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (comp): New private
	field.
	(setColor): Use Color.BLACK when argument null.
	(setComposite): Set this.comp field.
	(getComposite): Return this.comp, or AlphaComposite.SrcOver when null.
	(DrawState.comp): New private field.
	(DrawState.save): Save Composite.
	(DrawState.restore): Restore comp field.
	* java/awt/FontMetrics.java (gRC): New static final private field.
	(getLineMetrics(String, Graphics)): New method.
	(getLineMetrics(String, int, int, Graphics)): Likewise.
	(getLineMetrics(char[], int, int, Graphics)): Likewise.
	(getLineMetrics(CharacterIterator, int, int, Graphics)): Likewise.
	* javax/swing/JMenu.java (JMenu(String, boolean)): Ignore tearoff
	argument. PR SWING/17294.
	* javax/swing/plaf/basic/BasicGraphicsUtils.java (): Always use
	the fall-back code since none of the TextArea methods are really
	implemented now. PR SWING/17296.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
	(GdkGlyphVector_setChars): Replace assert() with if block when
	pango_itemize() returns null. PR AWT/17295.
	(GdkGlyphVector_allInkExtents): Likewise when vec->glyphitems is null.

2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* Makefile.am (gtk_c_source_files): Add
	gnu_java_awt_peer_gtk_GtkFramePeer.c.
	* Makefile.in: Regenerate.
	* gnu/java/awt/peer/gtk/GdkGraphics.java (getClipBounds): Remove
	comment.
	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
	(create): Pack GtkButton in GtkEventBox.
	(connectJObject): Remove.
	(focus_in_cb): New function.
	(focus_out_cb): Likewise.
	(connectSignals): Connect focus-in-event and focus-out-event
	signals.
	(gtkSetFont): Rename to ...
	(gtkWidgetModifyFont): New method.
	(gtkWidgetRequestFocus): New method.
	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
	(gtkSetFont): Rename to ...
	(gtkWidgetModifyFont): New method.
	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(isInRepaint): New field.
	(gtkSetFont): Remove method.
	(addExposeFilter): Likewise.
	(removeExposeFilter): Likewise.
	(gtkWidgetQueueDrawArea): Rename to ...
	(gtkWidgetRepaintArea): New method.
	(beginNativeRepaint): New method.
	(endNativeRepaint): New method.
	(setComponentBounds): Move implementation here from
	GtkComponentPeer.
	(paint): Remove implementation.
	(repaint): Wrap call to gtkWidgetRepaintArea with calls to
	beginNativeRepaint and endNativeRepaint.
	(setBounds): Use menu bar height in bounds calculation.
	(postExposeEvent): Only post paint event if we're not doing a
	native repaint.
	(gtkWidgetSetParent): Replace gtk_layout_put with gtk_fixed_put.
	(setNativeBounds): Replace gtk_layout_move with gtk_fixed_move.
	(find_gtk_layout): Remove function.
	(filter_expose_event_handler): Likewise.
	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (postExposeEvent):
	Likewise.
	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
	(setComponentBounds): Call GtkComponentPeer's
	setComponentBounds.
	* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight):
	New method.
	(moveLayout): Rename to ...
	(gtkFixedMove): New method.
	(gtkLayoutSetVisible): Rename to ...
	(gtkFixedSetVisible): New method.
	(setMenuBar): Rearrange, to make the three separate cases
	clearer.
	(postExposeEvent): Only post paint event if we're not doing a
	native repaint.
	* gnu/java/awt/peer/gtk/GtkGenericPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
	(gtkWidgetModifyFont): New method.
	* gnu/java/awt/peer/gtk/GtkImagePainter.java
	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,Color)):
	Call run directly, rather than spawning a new thread.
	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,int,int,int,int,Color)):
	Likewise.
	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (gtkSetFont):
	Rename to ...
	(gtkWidgetModifyFont): New method.
	(create): Rename ebox to eventbox.
	* gnu/java/awt/peer/gtk/GtkListPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
	Rename to ...
	(gtkWidgetModifyFont): New method.
	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
	(GtkMenuComponentPeer): Set the default font.
	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
	(gtkSetFont): Rename to ...
	(gtkWidgetModifyFont): New method.
	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
	* java/awt/Component.java (locale): Initialize to default
	locale.
	* java/awt/Container.java (invalidateTree): Make
	package-private.
	(paint): Paint self first.
	(setMenuBar): Call invalidateTree.
	* java/awt/Panel.java (dispatchEventImpl): Remove method.
	* java/awt/Window.java (show): Call no-parameter variant of
	requestFocusInWindow.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (initState):
	Remove special case for window widget.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
	(grab_current_drawable): Likewise.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
	(create): Replace GtkLayout with GtkFixed.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
	(pre_event_handler): Remove special cases for GDK_EXPOSE events.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: New file.
	Move all GtkFramePeer native method implementations here from
	gnu_java_awt_peer_gtk_GtkWindowPeer.c.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
	Replace GtkLayout with GtkFixed.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(find_layout): Remove function.
	(create): Replace GtkLayout with GtkFixed.
	(connectSignals): Remove find_layout call.
	(toBack): Replace XFlush with gdk_flush.
	(toFront): Replace XFlush with gdk_flush.
	Move GtkFramePeer native method implementations to
	gnu_java_awt_peer_gtk_GtkFramePeer.c.
	* jni/gtk-peer/gtkpeer.h: Remove declaration of find_gtk_layout.

2004-11-30  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JTextArea.java
	(lineWrap): Renamed from "wrapping".
	(wrapStyleWord): NEw field.
	(getLineWrap): Re-edited javadoc comment.
	(setLineWrap): Likewise.
	(getWrapStyleWord): New method.
	(setWrapStyleWord): Likewise.

From-SVN: r91544
This commit is contained in:
Graydon Hoare 2004-11-30 23:59:12 +00:00
parent c21accc5d9
commit ea28b8f60f
429 changed files with 29663 additions and 8685 deletions

File diff suppressed because it is too large Load Diff

View File

@ -235,9 +235,6 @@ libgcj_la_LINK = $(LIBLINK)
# Gtk/Cairo JNI sources.
if GTK_CAIRO
gtk_cairo_c_source_files = \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
else
gtk_cairo_c_source_files =
@ -246,8 +243,12 @@ endif
## Gtk JNI sources.
gtk_c_source_files = \
$(gtk_cairo_c_source_files) \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \
@ -260,6 +261,7 @@ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c \
@ -287,9 +289,9 @@ jni/classpath/primlib.c
## Java sources for Gtk peers.
gtk_awt_peer_sources = \
gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java \
gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java \
gnu/java/awt/peer/gtk/GdkTextLayout.java \
gnu/java/awt/peer/gtk/GdkFontMetrics.java \
gnu/java/awt/peer/gtk/GdkFontPeer.java \
gnu/java/awt/peer/gtk/GdkGlyphVector.java \
gnu/java/awt/peer/gtk/GdkGraphics.java \
gnu/java/awt/peer/gtk/GdkGraphics2D.java \
@ -307,7 +309,6 @@ gnu/java/awt/peer/gtk/GtkContainerPeer.java \
gnu/java/awt/peer/gtk/GtkDialogPeer.java \
gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java \
gnu/java/awt/peer/gtk/GtkFileDialogPeer.java \
gnu/java/awt/peer/gtk/GtkFontPeer.java \
gnu/java/awt/peer/gtk/GtkFramePeer.java \
gnu/java/awt/peer/gtk/GtkGenericPeer.java \
gnu/java/awt/peer/gtk/GtkImage.java \
@ -335,11 +336,96 @@ gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
gtk_jni_headers = $(patsubst %.java,jniinclude/%.h,$(subst /,_,$(gtk_awt_peer_sources)))
$(gtk_jni_headers): $(gtk_awt_peer_sources)
jniinclude/gnu_java_awt_peer_gtk_GdkFontMetrics.h: gnu/java/awt/peer/gtk/GdkFontMetrics.java
jniinclude/gnu_java_awt_peer_gtk_GdkGlyphVector.h: gnu/java/awt/peer/gtk/GdkGlyphVector.java
jniinclude/gnu_java_awt_peer_gtk_GdkGraphics.h: gnu/java/awt/peer/gtk/GdkGraphics.java
jniinclude/gnu_java_awt_peer_gtk_GdkGraphics2D.h: gnu/java/awt/peer/gtk/GdkGraphics2D.java
jniinclude/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h: gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
jniinclude/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
jniinclude/gnu_java_awt_peer_gtk_GtkButtonPeer.h: gnu/java/awt/peer/gtk/GtkButtonPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkCanvasPeer.h: gnu/java/awt/peer/gtk/GtkCanvasPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h: gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h: gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h: gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkChoicePeer.h: gnu/java/awt/peer/gtk/GtkChoicePeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkClipboard.h: gnu/java/awt/peer/gtk/GtkClipboard.java
jniinclude/gnu_java_awt_peer_gtk_GtkComponentPeer.h: gnu/java/awt/peer/gtk/GtkComponentPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkContainerPeer.h: gnu/java/awt/peer/gtk/GtkContainerPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkDialogPeer.h: gnu/java/awt/peer/gtk/GtkDialogPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h: gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h: gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkFontPeer.h: gnu/java/awt/peer/gtk/GtkFontPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkFramePeer.h: gnu/java/awt/peer/gtk/GtkFramePeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkGenericPeer.h: gnu/java/awt/peer/gtk/GtkGenericPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkImage.h: gnu/java/awt/peer/gtk/GtkImage.java
jniinclude/gnu_java_awt_peer_gtk_GtkImagePainter.h: gnu/java/awt/peer/gtk/GtkImagePainter.java
jniinclude/gnu_java_awt_peer_gtk_GtkLabelPeer.h: gnu/java/awt/peer/gtk/GtkLabelPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkListPeer.h: gnu/java/awt/peer/gtk/GtkListPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkMainThread.h: gnu/java/awt/peer/gtk/GtkMainThread.java
jniinclude/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h: gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h: gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h: gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkMenuPeer.h: gnu/java/awt/peer/gtk/GtkMenuPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkOffScreenImage.h: gnu/java/awt/peer/gtk/GtkOffScreenImage.java
jniinclude/gnu_java_awt_peer_gtk_GtkPanelPeer.h: gnu/java/awt/peer/gtk/GtkPanelPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h: gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h: gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h: gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkTextComponentPeer.h: gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
jniinclude/gnu_java_awt_peer_gtk_GtkToolkit.h: gnu/java/awt/peer/gtk/GtkToolkit.java
jniinclude/gnu_java_awt_peer_gtk_GtkWindowPeer.h: gnu/java/awt/peer/gtk/GtkWindowPeer.java
jniinclude/gnu_java_awt_peer_gtk_GThreadMutex.h: gnu/java/awt/peer/gtk/GThreadMutex.java
jniinclude/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h: gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
jniinclude/gnu_java_awt_peer_gtk_GdkTextLayout.h: gnu/java/awt/peer/gtk/GdkTextLayout.java
jniinclude/gnu_java_awt_peer_gtk_GdkFontPeer.h: gnu/java/awt/peer/gtk/GdkFontPeer.java
$(gtk_jni_headers): %.h:
@input=`echo $@ | sed -e 's,jniinclude/,,' -e 's,_,.,g' -e 's,.h$$,,'`; \
echo "$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input"; \
$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkFontMetrics.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkFontPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGlyphVector.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGraphics2D.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGraphics.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkTextLayout.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkButtonPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCanvasPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkComponentPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkChoicePeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkClipboard.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkComponentPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkFramePeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkGenericPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkImagePainter.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkLabelPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkListPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMainThread.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkPanelPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkTextComponentPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkToolkit.h
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkWindowPeer.h
## For the peer library, DEPENDENCIES need to come before OBJECTS so
## that JNI headers are built before JNI C files.
$(lib_gnu_java_awt_peer_gtk_la_OBJECTS): $(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES)
@ -1046,11 +1132,25 @@ gnu/java/awt/ClasspathToolkit.java \
gnu/java/awt/EmbeddedWindow.java \
gnu/java/awt/EmbeddedWindowSupport.java \
gnu/java/awt/EventModifier.java \
gnu/java/awt/color/CieXyzConverter.java \
gnu/java/awt/color/ClutProfileConverter.java \
gnu/java/awt/color/ColorLookUpTable.java \
gnu/java/awt/color/ColorSpaceConverter.java \
gnu/java/awt/color/GrayProfileConverter.java \
gnu/java/awt/color/GrayScaleConverter.java \
gnu/java/awt/color/LinearRGBConverter.java \
gnu/java/awt/color/ProfileHeader.java \
gnu/java/awt/color/PyccConverter.java \
gnu/java/awt/color/RgbProfileConverter.java \
gnu/java/awt/color/SrgbConverter.java \
gnu/java/awt/color/TagEntry.java \
gnu/java/awt/color/ToneReproductionCurve.java \
gnu/java/awt/image/ImageDecoder.java \
gnu/java/awt/image/XBMDecoder.java \
gnu/java/awt/peer/EmbeddedWindowPeer.java \
gnu/java/awt/peer/GLightweightPeer.java \
gnu/java/awt/peer/ClasspathFontPeer.java \
gnu/java/awt/peer/ClasspathTextLayoutPeer.java \
gnu/java/beans/editors/ColorEditor.java \
gnu/java/beans/editors/FontEditor.java \
gnu/java/beans/editors/NativeBooleanEditor.java \
@ -1230,12 +1330,17 @@ java/awt/geom/CubicCurve2D.java \
java/awt/geom/FlatteningPathIterator.java \
java/awt/geom/GeneralPath.java \
java/awt/geom/QuadCurve2D.java \
java/awt/image/BandCombineOp.java \
java/awt/image/BandedSampleModel.java \
java/awt/image/AffineTransformOp.java \
java/awt/image/BufferedImage.java \
java/awt/image/BufferedImageFilter.java \
java/awt/image/ByteLookupTable.java \
java/awt/image/ColorConvertOp.java \
java/awt/image/ColorModel.java \
java/awt/image/ComponentColorModel.java \
java/awt/image/ComponentSampleModel.java \
java/awt/image/ConvolveOp.java \
java/awt/image/DataBuffer.java \
java/awt/image/DataBufferByte.java \
java/awt/image/DataBufferDouble.java \
@ -1249,11 +1354,14 @@ java/awt/image/ImageObserver.java \
java/awt/image/ImageProducer.java \
java/awt/image/IndexColorModel.java \
java/awt/image/Kernel.java \
java/awt/image/LookupOp.java \
java/awt/image/LookupTable.java \
java/awt/image/MultiPixelPackedSampleModel.java \
java/awt/image/PackedColorModel.java \
java/awt/image/PixelInterleavedSampleModel.java \
java/awt/image/Raster.java \
java/awt/image/RasterOp.java \
java/awt/image/RescaleOp.java \
java/awt/image/SampleModel.java \
java/awt/image/ShortLookupTable.java \
java/awt/image/SinglePixelPackedSampleModel.java \
@ -1491,6 +1599,7 @@ javax/swing/plaf/basic/BasicTableUI.java \
javax/swing/plaf/basic/BasicTableHeaderUI.java \
javax/swing/plaf/basic/BasicTextAreaUI.java \
javax/swing/plaf/basic/BasicTextFieldUI.java \
javax/swing/plaf/basic/BasicTextPaneUI.java \
javax/swing/plaf/basic/BasicTextUI.java \
javax/swing/plaf/basic/BasicToggleButtonUI.java \
javax/swing/plaf/basic/BasicToolBarSeparatorUI.java \
@ -1614,6 +1723,7 @@ javax/swing/ListModel.java \
javax/swing/ListSelectionModel.java \
javax/swing/LookAndFeel.java \
javax/swing/Scrollable.java \
javax/swing/SpinnerListModel.java \
javax/swing/SpinnerModel.java \
javax/swing/SpinnerNumberModel.java \
javax/swing/Spring.java \
@ -1690,6 +1800,7 @@ javax/swing/text/Keymap.java \
javax/swing/text/LayeredHighlighter.java \
javax/swing/text/MutableAttributeSet.java \
javax/swing/text/NavigationFilter.java \
javax/swing/text/PasswordView.java \
javax/swing/text/PlainDocument.java \
javax/swing/text/PlainView.java \
javax/swing/text/Position.java \

File diff suppressed because it is too large Load Diff

View File

@ -19,6 +19,7 @@ import java.awt.image.ImageObserver;
import java.net.*;
import java.awt.datatransfer.Clipboard;
import java.io.InputStream;
import java.text.AttributedString;
import java.util.Map;
import java.util.Properties;
import gnu.gcj.xlib.Display;
@ -26,6 +27,7 @@ import gnu.gcj.xlib.Screen;
import gnu.gcj.xlib.Visual;
import gnu.java.awt.ClasspathToolkit;
import gnu.java.awt.peer.ClasspathFontPeer;
import gnu.java.awt.peer.ClasspathTextLayoutPeer;
public class XToolkit extends ClasspathToolkit
{
@ -400,6 +402,12 @@ public class XToolkit extends ClasspathToolkit
return new XFontPeer (name,style,size);
}
public ClasspathTextLayoutPeer
getClasspathTextLayoutPeer (AttributedString str, FontRenderContext frc)
{
throw new Error("not implemented");
}
/** Creates a font, reading the glyph definitions from a stream.
*

View File

@ -1,5 +1,5 @@
/* BitwiseXORComposite.java -- Composite for emulating old-style XOR.
Copyright (C) 2003 Free Software Foundation, Inc.
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -41,7 +41,6 @@ package gnu.java.awt;
import java.awt.Color;
import java.awt.Composite;
import java.awt.CompositeContext;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.image.ColorModel;

View File

@ -1,5 +1,5 @@
/* ClasspathToolkit.java -- Abstract superclass for Classpath toolkits.
Copyright (C) 2003 Free Software Foundation, Inc.
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,27 +38,27 @@ exception statement from your version. */
package gnu.java.awt;
import gnu.java.awt.peer.ClasspathFontPeer;
import gnu.java.awt.peer.ClasspathTextLayoutPeer;
import java.awt.Image;
import java.awt.Dimension;
import java.awt.DisplayMode;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.FontMetrics;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.font.FontRenderContext;
import java.awt.image.ColorModel;
import java.awt.image.ImageProducer;
import java.io.File;
import java.io.InputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.AttributedString;
import java.util.HashMap;
import java.util.Map;
import gnu.java.awt.peer.ClasspathFontPeer;
/**
* An abstract superclass for Classpath toolkits.
@ -171,6 +171,9 @@ public abstract class ClasspathToolkit
public abstract ClasspathFontPeer getClasspathFontPeer (String name, Map attrs);
public abstract ClasspathTextLayoutPeer
getClasspathTextLayoutPeer (AttributedString str, FontRenderContext frc);
/**
* Creates a {@link Font}, in a platform-specific manner.

View File

@ -0,0 +1,74 @@
/* CieXyzConverter.java -- CieXyz conversion class
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
/**
* CieXyzConverter - converts to/from a D50-relative CIE XYZ color space.
*
* The sRGB<->CIE XYZ conversions in SrgbConverter are used.
*
* @author Sven de Marothy
*/
public class CieXyzConverter implements ColorSpaceConverter
{
public float[] toCIEXYZ(float[] in)
{
float[] out = new float[3];
System.arraycopy(in, 0, out, 0, 3);
return out;
}
public float[] fromCIEXYZ(float[] in)
{
float[] out = new float[3];
System.arraycopy(in, 0, out, 0, 3);
return out;
}
public float[] toRGB(float[] in)
{
return SrgbConverter.XYZtoRGB(in);
}
public float[] fromRGB(float[] in)
{
return SrgbConverter.RGBtoXYZ(in);
}
}

View File

@ -0,0 +1,154 @@
/* ClutProfileConverter.java -- Conversion routines for CLUT-Based profiles
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
import java.awt.color.ColorSpace;
import java.awt.color.ICC_Profile;
/**
* ClutProfileConverter - conversions through a CLUT-based profile
*
* @author Sven de Marothy
*/
public class ClutProfileConverter implements ColorSpaceConverter
{
private ColorLookUpTable toPCS;
private ColorLookUpTable fromPCS;
private int nChannels;
public ClutProfileConverter(ICC_Profile profile)
{
nChannels = profile.getNumComponents();
// Sun does not specifiy which rendering intent should be used,
// neither does the ICC v2 spec really.
// Try intent 0
try
{
toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB0Tag);
}
catch (Exception e)
{
toPCS = null;
}
try
{
fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA0Tag);
}
catch (Exception e)
{
fromPCS = null;
}
if (toPCS != null || fromPCS != null)
return;
// If no intent 0 clut is available, look for a intent 1 clut.
try
{
toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB1Tag);
}
catch (Exception e)
{
toPCS = null;
}
try
{
fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA1Tag);
}
catch (Exception e)
{
fromPCS = null;
}
if (toPCS != null || fromPCS != null)
return;
// Last shot.. intent 2 CLUT.
try
{
toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB2Tag);
}
catch (Exception e)
{
toPCS = null;
}
try
{
fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA2Tag);
}
catch (Exception e)
{
fromPCS = null;
}
if (toPCS == null && fromPCS == null)
throw new IllegalArgumentException("No CLUTs in profile!");
}
public float[] toCIEXYZ(float[] in)
{
if (toPCS != null)
return toPCS.lookup(in);
else
return new float[3];
}
public float[] toRGB(float[] in)
{
return SrgbConverter.XYZtoRGB(toCIEXYZ(in));
}
public float[] fromCIEXYZ(float[] in)
{
if (fromPCS != null)
return fromPCS.lookup(in);
else
return new float[nChannels];
}
public float[] fromRGB(float[] in)
{
return fromCIEXYZ(SrgbConverter.RGBtoXYZ(in));
}
}

View File

@ -0,0 +1,430 @@
/* ColorLookUpTable.java -- ICC v2 CLUT
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
import java.awt.color.ColorSpace;
import java.awt.color.ICC_Profile;
import java.nio.ByteBuffer;
/**
* ColorLookUpTable handles color lookups through a color lookup table,
* as defined in the ICC specification.
* Both 'mft2' and 'mft1' (8 and 16-bit) type CLUTs are handled.
*
* This will have to be updated later for ICC 4.0.0
*
* @author Sven de Marothy
*/
public class ColorLookUpTable
{
/**
* CIE 1931 D50 white point (in Lab coordinates)
*/
private static float[] D50 = { 0.96422f, 1.00f, 0.82521f };
/**
* Number of input/output channels
*/
int nIn;
/**
* Number of input/output channels
*/
int nOut;
int nInTableEntries; // Number of input table entries
int nOutTableEntries; // Number of output table entries
int gridpoints; // Number of gridpoints
int nClut; // This is nOut*(gridpoints**nIn)
double[][] inTable; // 1D input table ([channel][table])
short[][] outTable; // 1D input table ([channel][table])
double[] clut; // The color lookup table
float[][] inMatrix; // input matrix (XYZ only)
boolean useMatrix; // Whether to use the matrix or not.
int[] multiplier;
int[] offsets; // Hypercube offsets
boolean inputLab; // Set if the CLUT input CS is Lab
boolean outputLab; // Set if the CLUT output CS is Lab
/**
* Constructor
* Requires a profile file to get the CLUT from and the tag of the
* CLUT to create. (icSigXToYZTag where X,Y = [A | B], Z = [0,1,2])
*/
public ColorLookUpTable(ICC_Profile profile, int tag)
{
useMatrix = false;
switch (tag)
{
case ICC_Profile.icSigAToB0Tag:
case ICC_Profile.icSigAToB1Tag:
case ICC_Profile.icSigAToB2Tag:
if (profile.getColorSpaceType() == ColorSpace.TYPE_XYZ)
useMatrix = true;
inputLab = false;
outputLab = (profile.getPCSType() == ColorSpace.TYPE_Lab);
break;
case ICC_Profile.icSigBToA0Tag:
case ICC_Profile.icSigBToA1Tag:
case ICC_Profile.icSigBToA2Tag:
if (profile.getPCSType() == ColorSpace.TYPE_XYZ)
useMatrix = true;
inputLab = (profile.getPCSType() == ColorSpace.TYPE_Lab);
outputLab = false;
break;
default:
throw new IllegalArgumentException("Not a clut-type tag.");
}
byte[] data = profile.getData(tag);
if (data == null)
throw new IllegalArgumentException("Unsuitable profile, does not contain a CLUT.");
// check 'mft'
if (data[0] != 0x6d || data[1] != 0x66 || data[2] != 0x74)
throw new IllegalArgumentException("Unsuitable profile, invalid CLUT data.");
if (data[3] == 0x32)
readClut16(data);
else if (data[3] == 0x31)
readClut8(data);
else
throw new IllegalArgumentException("Unknown/invalid CLUT type.");
}
/**
* Loads a 16-bit CLUT into our data structures
*/
private void readClut16(byte[] data)
{
ByteBuffer buf = ByteBuffer.wrap(data);
nIn = data[8] & (0xFF);
nOut = data[9] & (0xFF);
nInTableEntries = buf.getShort(48);
nOutTableEntries = buf.getShort(50);
gridpoints = data[10] & (0xFF);
inMatrix = new float[3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
inMatrix[i][j] = ((float) (buf.getInt(12 + (i * 3 + j) * 4))) / 65536.0f;
inTable = new double[nIn][nInTableEntries];
for (int channel = 0; channel < nIn; channel++)
for (int i = 0; i < nInTableEntries; i++)
inTable[channel][i] = (double) ((int) buf.getShort(52
+ (channel * nInTableEntries
+ i) * 2)
& (0xFFFF)) / 65536.0;
nClut = nOut;
multiplier = new int[nIn];
multiplier[nIn - 1] = nOut;
for (int i = 0; i < nIn; i++)
{
nClut *= gridpoints;
if (i > 0)
multiplier[nIn - i - 1] = multiplier[nIn - i] * gridpoints;
}
int clutOffset = 52 + nIn * nInTableEntries * 2;
clut = new double[nClut];
for (int i = 0; i < nClut; i++)
clut[i] = (double) ((int) buf.getShort(clutOffset + i * 2) & (0xFFFF)) / 65536.0;
outTable = new short[nOut][nOutTableEntries];
for (int channel = 0; channel < nOut; channel++)
for (int i = 0; i < nOutTableEntries; i++)
outTable[channel][i] = buf.getShort(clutOffset
+ (nClut
+ channel * nOutTableEntries + i) * 2);
// calculate the hypercube corner offsets
offsets = new int[(1 << nIn)];
offsets[0] = 0;
for (int j = 0; j < nIn; j++)
{
int factor = 1 << j;
for (int i = 0; i < factor; i++)
offsets[factor + i] = offsets[i] + multiplier[j];
}
}
/**
* Loads a 8-bit CLUT into our data structures.
*/
private void readClut8(byte[] data)
{
ByteBuffer buf = ByteBuffer.wrap(data);
nIn = (data[8] & (0xFF));
nOut = (data[9] & (0xFF));
nInTableEntries = 256; // always 256
nOutTableEntries = 256; // always 256
gridpoints = (data[10] & (0xFF));
inMatrix = new float[3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
inMatrix[i][j] = ((float) (buf.getInt(12 + (i * 3 + j) * 4))) / 65536.0f;
inTable = new double[nIn][nInTableEntries];
for (int channel = 0; channel < nIn; channel++)
for (int i = 0; i < nInTableEntries; i++)
inTable[channel][i] = (double) ((int) buf.get(48
+ (channel * nInTableEntries
+ i)) & (0xFF)) / 255.0;
nClut = nOut;
multiplier = new int[nIn];
multiplier[nIn - 1] = nOut;
for (int i = 0; i < nIn; i++)
{
nClut *= gridpoints;
if (i > 0)
multiplier[nIn - i - 1] = multiplier[nIn - i] * gridpoints;
}
int clutOffset = 48 + nIn * nInTableEntries;
clut = new double[nClut];
for (int i = 0; i < nClut; i++)
clut[i] = (double) ((int) buf.get(clutOffset + i) & (0xFF)) / 255.0;
outTable = new short[nOut][nOutTableEntries];
for (int channel = 0; channel < nOut; channel++)
for (int i = 0; i < nOutTableEntries; i++)
outTable[channel][i] = (short) (buf.get(clutOffset + nClut
+ channel * nOutTableEntries
+ i) * 257);
// calculate the hypercube corner offsets
offsets = new int[(1 << nIn)];
offsets[0] = 0;
for (int j = 0; j < nIn; j++)
{
int factor = 1 << j;
for (int i = 0; i < factor; i++)
offsets[factor + i] = offsets[i] + multiplier[j];
}
}
/**
* Performs a lookup through the Color LookUp Table.
* If the CLUT tag type is AtoB the conversion will be from the device
* color space to the PCS, BtoA type goes in the opposite direction.
*
* For convenience, the PCS values for input or output will always be
* CIE XYZ (D50), if the actual PCS is Lab, the values will be converted.
*
* N-dimensional linear interpolation is used.
*/
float[] lookup(float[] in)
{
float[] in2 = new float[in.length];
if (useMatrix)
{
for (int i = 0; i < 3; i++)
in2[i] = in[0] * inMatrix[i][0] + in[1] * inMatrix[i][1]
+ in[2] * inMatrix[i][2];
}
else if (inputLab)
in2 = XYZtoLab(in);
else
System.arraycopy(in, 0, in2, 0, in.length);
// input table
for (int i = 0; i < nIn; i++)
{
int index = (int) Math.floor(in2[i] * (double) (nInTableEntries - 1)); // floor in
// clip values.
if (index >= nInTableEntries - 1)
in2[i] = (float) inTable[i][nInTableEntries - 1];
else if (index < 0)
in2[i] = (float) inTable[i][0];
else
{
// linear interpolation
double alpha = in2[i] * ((double) nInTableEntries - 1.0) - index;
in2[i] = (float) (inTable[i][index] * (1 - alpha)
+ inTable[i][index + 1] * alpha);
}
}
// CLUT lookup
double[] output2 = new double[nOut];
double[] weights = new double[(1 << nIn)];
double[] clutalpha = new double[nIn]; // interpolation values
int offset = 0; // = gp
for (int i = 0; i < nIn; i++)
{
int index = (int) Math.floor(in2[i] * ((double) gridpoints - 1.0));
double alpha = in2[i] * ((double) gridpoints - 1.0) - (double) index;
// clip values.
if (index >= gridpoints - 1)
{
index = gridpoints - 1;
alpha = 1.0;
}
else if (index < 0)
index = 0;
clutalpha[i] = alpha;
offset += index * multiplier[i];
}
// Calculate interpolation weights
weights[0] = 1.0;
for (int j = 0; j < nIn; j++)
{
int factor = 1 << j;
for (int i = 0; i < factor; i++)
{
weights[factor + i] = weights[i] * clutalpha[j];
weights[i] *= (1.0 - clutalpha[j]);
}
}
for (int i = 0; i < nOut; i++)
output2[i] = weights[0] * clut[offset + i];
for (int i = 1; i < (1 << nIn); i++)
{
int offset2 = offset + offsets[i];
for (int f = 0; f < nOut; f++)
output2[f] += weights[i] * clut[offset2 + f];
}
// output table
float[] output = new float[nOut];
for (int i = 0; i < nOut; i++)
{
int index = (int) Math.floor(output2[i] * ((double) nOutTableEntries
- 1.0));
// clip values.
if (index >= nOutTableEntries - 1)
output[i] = outTable[i][nOutTableEntries - 1];
else if (index < 0)
output[i] = outTable[i][0];
else
{
// linear interpolation
double a = output2[i] * ((double) nOutTableEntries - 1.0)
- (double) index;
output[i] = (float) ((double) ((int) outTable[i][index] & (0xFFFF)) * (1
- a)
+ (double) ((int) outTable[i][index + 1] & (0xFFFF)) * a) / 65536f;
}
}
if (outputLab)
return LabtoXYZ(output);
return output;
}
/**
* Converts CIE Lab coordinates to (D50) XYZ ones.
*/
private float[] LabtoXYZ(float[] in)
{
// Convert from byte-packed format to a
// more convenient one (actual Lab values)
// (See ICC spec for details)
// factor is 100 * 65536 / 65280
in[0] = (float) (100.392156862745 * in[0]);
in[1] = (in[1] * 256.0f) - 128.0f;
in[2] = (in[2] * 256.0f) - 128.0f;
float[] out = new float[3];
out[1] = (in[0] + 16.0f) / 116.0f;
out[0] = in[1] / 500.0f + out[1];
out[2] = out[1] - in[2] / 200.0f;
for (int i = 0; i < 3; i++)
{
double exp = out[i] * out[i] * out[i];
if (exp <= 0.008856)
out[i] = (out[i] - 16.0f / 116.0f) / 7.787f;
else
out[i] = (float) exp;
out[i] = D50[i] * out[i];
}
return out;
}
/**
* Converts CIE XYZ coordinates to Lab ones.
*/
private float[] XYZtoLab(float[] in)
{
float[] temp = new float[3];
for (int i = 0; i < 3; i++)
{
temp[i] = in[i] / D50[i];
if (temp[i] <= 0.008856f)
temp[i] = (7.7870689f * temp[i]) + (16f / 116.0f);
else
temp[i] = (float) Math.exp((1.0 / 3.0) * Math.log(temp[i]));
}
float[] out = new float[3];
out[0] = (116.0f * temp[1]) - 16f;
out[1] = 500.0f * (temp[0] - temp[1]);
out[2] = 200.0f * (temp[1] - temp[2]);
// Normalize to packed format
out[0] = (float) (out[0] / 100.392156862745);
out[1] = (out[1] + 128f) / 256f;
out[2] = (out[2] + 128f) / 256f;
for (int i = 0; i < 3; i++)
{
if (out[i] < 0f)
out[i] = 0f;
if (out[i] > 1f)
out[i] = 1f;
}
return out;
}
}

View File

@ -0,0 +1,70 @@
/* ColorSpaceConverter.java -- an interface for colorspace conversion
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
/**
* ColorSpaceConverter - used by java.awt.color.ICC_ColorSpace
*
* Color space conversion can occur in several ways:
*
* -Directly (for the built in spaces sRGB, linear RGB, gray, CIE XYZ and PYCC
* -ICC_ProfileRGB works through TRC curves and a matrix
* -ICC_ProfileGray works through a single TRC
* -Everything else is done through Color lookup tables.
*
* The different conversion methods are implemented through
* an interface. The built-in colorspaces are implemented directly
* with the relevant conversion equations.
*
* In this way, we hopefully will always use the fastest and most
* accurate method available.
*
* @author Sven de Marothy
*/
public interface ColorSpaceConverter
{
float[] toCIEXYZ(float[] in);
float[] fromCIEXYZ(float[] in);
float[] toRGB(float[] in);
float[] fromRGB(float[] in);
}

View File

@ -0,0 +1,138 @@
/* GrayProfileConverter.java -- Gray profile conversion class
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
import java.awt.color.ProfileDataException;
import java.awt.color.ICC_Profile;
import java.awt.color.ICC_ProfileGray;
/**
* GrayProfileConverter - converts Grayscale profiles (ICC_ProfileGray)
*
* This type of profile contains a single tone reproduction curve (TRC).
* Conversion consists of simple TRC lookup.
*
* This implementation is very lazy and does everything applying the TRC and
* utilizing the built-in linear grayscale color space.
*
* @author Sven de Marothy
*/
public class GrayProfileConverter implements ColorSpaceConverter
{
private GrayScaleConverter gc;
private ToneReproductionCurve trc;
private ColorLookUpTable toPCS;
private ColorLookUpTable fromPCS;
/**
* Constructs the converter described by an ICC_ProfileGray object
*/
public GrayProfileConverter(ICC_ProfileGray profile)
{
try
{
trc = new ToneReproductionCurve(profile.getGamma());
}
catch (ProfileDataException e)
{
trc = new ToneReproductionCurve(profile.getTRC());
}
// linear grayscale converter
gc = new GrayScaleConverter();
// If a CLUT is available, it should be used, and the TRCs ignored.
// Note: A valid profile may only have CLUTs in one direction, and
// TRC:s without useful info, making reverse-transforms impossible.
// In this case the TRC will be used for the reverse-transform with
// unpredictable results. This is in line with the Java specification,
try
{
toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB0Tag);
}
catch (Exception e)
{
toPCS = null;
}
try
{
fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA0Tag);
}
catch (Exception e)
{
fromPCS = null;
}
}
public float[] toCIEXYZ(float[] in)
{
if (toPCS != null)
return toPCS.lookup(in);
float[] gray = new float[1];
gray[0] = trc.lookup(in[0]);
return gc.toCIEXYZ(gray);
}
public float[] toRGB(float[] in)
{
float[] gray = new float[1];
gray[0] = trc.lookup(in[0]);
return gc.toRGB(gray);
}
public float[] fromRGB(float[] in)
{
// get linear grayscale value
float[] gray = gc.fromRGB(in);
gray[0] = trc.reverseLookup(gray[0]);
return gray;
}
public float[] fromCIEXYZ(float[] in)
{
if (fromPCS != null)
return fromPCS.lookup(in);
float[] gray = gc.fromCIEXYZ(in);
gray[0] = trc.reverseLookup(gray[0]);
return gray;
}
}

View File

@ -0,0 +1,111 @@
/* GrayScaleConverter.java -- Linear grayscale conversion class
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
/**
* Linear Grayscale converter
*
* @author Sven de Marothy
*/
public class GrayScaleConverter implements ColorSpaceConverter
{
// intensity factors (ITU Rec. BT.709)
double[] coeff = { 0.2125f, 0.7154f, 0.0721f };
/**
* CIE 1931 D50 white point (in Lab coordinates)
*/
private static float[] D50 = { 0.96422f, 1.00f, 0.82521f };
public float[] toCIEXYZ(float[] in)
{
float g = in[0];
if (g < 0)
g = 1 + g;
float[] out = { g * D50[0], g * D50[1], g * D50[2] }; // White spot
return out;
}
public float[] toRGB(float[] in)
{
float[] out = new float[3];
if (in[0] <= 0.00304f)
out[0] = in[0] * 12.92f;
else
out[0] = 1.055f * ((float) Math.exp((1 / 2.4) * Math.log(in[0])))
- 0.055f;
out[1] = out[2] = out[0];
return out;
}
public float[] fromCIEXYZ(float[] in)
{
float[] temp = new float[3];
temp[0] = 3.1338f * in[0] - 1.6171f * in[1] - 0.4907f * in[2];
temp[1] = -0.9785f * in[0] + 1.9160f * in[1] + 0.0334f * in[2];
temp[2] = 0.0720f * in[0] - 0.2290f * in[1] + 1.4056f * in[2];
float[] out = new float[1];
for (int i = 0; i < 3; i++)
out[0] = (float) (temp[i] * coeff[i]);
return out;
}
public float[] fromRGB(float[] in)
{
float[] out = new float[1];
// Convert non-linear RGB coordinates to linear ones,
// numbers from the w3 spec.
out[0] = 0;
for (int i = 0; i < 3; i++)
{
float n = in[i];
if (n < 0)
n = 0f;
if (n > 1)
n = 1f;
if (n <= 0.03928f)
out[0] += (float) (coeff[i] * n / 12.92);
else
out[0] += (float) (coeff[i] * Math.exp(2.4 * Math.log((n + 0.055) / 1.055)));
}
return out;
}
}

View File

@ -0,0 +1,152 @@
/* LinearRGBConverter.java -- conversion to a linear RGB color space
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
/**
* LinearRGBConverter - conversion routines for a linear sRGB colorspace
* sRGB is a standard for RGB colorspaces, adopted by the w3c.
*
* The specification is available at:
* http://www.w3.org/Graphics/Color/sRGB.html
*
* @author Sven de Marothy
*/
public class LinearRGBConverter implements ColorSpaceConverter
{
/**
* linear RGB --> sRGB
* Use the inverse gamma curve
*/
public float[] toRGB(float[] in)
{
float[] out = new float[3];
for (int i = 0; i < 3; i++)
{
float n = in[i];
if (n < 0)
n = 0f;
if (n > 1)
n = 1f;
if (n <= 0.00304f)
out[i] = in[0] * 12.92f;
else
out[i] = 1.055f * ((float) Math.exp((1 / 2.4) * Math.log(n)))
- 0.055f;
}
return out;
}
/**
* sRGB --> linear RGB
* Use the gamma curve (gamma=2.4 in sRGB)
*/
public float[] fromRGB(float[] in)
{
float[] out = new float[3];
// Convert non-linear RGB coordinates to linear ones,
// numbers from the w3 spec.
for (int i = 0; i < 3; i++)
{
float n = in[i];
if (n < 0)
n = 0f;
if (n > 1)
n = 1f;
if (n <= 0.03928f)
out[i] = (float) (n / 12.92);
else
out[i] = (float) (Math.exp(2.4 * Math.log((n + 0.055) / 1.055)));
}
return out;
}
/**
* Linear RGB --> CIE XYZ (D50 relative)
* This is a simple matrix transform, the matrix (relative D65)
* is given in the sRGB spec. This has been combined with a
* linear Bradford transform for the D65-->D50 mapping, resulting
* in a single matrix which does the whole thing.
*
*/
public float[] fromCIEXYZ(float[] in)
{
/*
* Note: The numbers which were used to calculate this only had four
* digits of accuracy. So don't be fooled by the number of digits here.
* If someone has more accurate source, feel free to update this.
*/
float[] out = new float[3];
out[0] = (float) (3.13383065124221 * in[0] - 1.61711949411313 * in[1]
- 0.49071914111101 * in[2]);
out[1] = (float) (-0.97847026691142 * in[0] + 1.91597856031996 * in[1]
+ 0.03340430640699 * in[2]);
out[2] = (float) (0.07203679486279 * in[0] - 0.22903073553113 * in[1]
+ 1.40557835776234 * in[2]);
if (out[0] < 0)
out[0] = 0f;
if (out[1] < 0)
out[1] = 0f;
if (out[2] < 0)
out[2] = 0f;
if (out[0] > 1.0f)
out[0] = 1.0f;
if (out[1] > 1.0f)
out[1] = 1.0f;
if (out[2] > 1.0f)
out[2] = 1.0f;
return out;
}
/**
* Linear RGB --> CIE XYZ (D50 relative)
* Uses the inverse of the above matrix.
*/
public float[] toCIEXYZ(float[] in)
{
float[] out = new float[3];
out[0] = (float) (0.43606375022190 * in[0] + 0.38514960146481 * in[1]
+ 0.14308641888799 * in[2]);
out[1] = (float) (0.22245089403542 * in[0] + 0.71692584775182 * in[1]
+ 0.06062451125578 * in[2]);
out[2] = (float) (0.01389851860679 * in[0] + 0.09707969011198 * in[1]
+ 0.71399604572506 * in[2]);
return out;
}
}

View File

@ -0,0 +1,399 @@
/* ProfileHeader.java -- Encapsules ICC Profile header data
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
import java.awt.color.ColorSpace;
import java.awt.color.ICC_Profile;
import java.nio.ByteBuffer;
/**
* Header, abstracts and validates the header data.
*
* @author Sven de Marothy
*/
public class ProfileHeader
{
/**
* Magic identifier (ASCII 'acsp')
*/
private static final int icMagicNumber = 0x61637370;
/**
* Mapping from ICC Profile signatures to ColorSpace types
*/
private static final int[] csTypeMap =
{
ICC_Profile.icSigXYZData,
ColorSpace.TYPE_XYZ,
ICC_Profile.icSigLabData,
ColorSpace.TYPE_Lab,
ICC_Profile.icSigLuvData,
ColorSpace.TYPE_Luv,
ICC_Profile.icSigYCbCrData,
ColorSpace.TYPE_YCbCr,
ICC_Profile.icSigYxyData,
ColorSpace.TYPE_Yxy,
ICC_Profile.icSigRgbData,
ColorSpace.TYPE_RGB,
ICC_Profile.icSigGrayData,
ColorSpace.TYPE_GRAY,
ICC_Profile.icSigHsvData,
ColorSpace.TYPE_HSV,
ICC_Profile.icSigHlsData,
ColorSpace.TYPE_HLS,
ICC_Profile.icSigCmykData,
ColorSpace.TYPE_CMYK,
ICC_Profile.icSigCmyData,
ColorSpace.TYPE_CMY,
ICC_Profile.icSigSpace2CLR,
ColorSpace.TYPE_2CLR,
ICC_Profile.icSigSpace3CLR,
ColorSpace.TYPE_3CLR,
ICC_Profile.icSigSpace4CLR,
ColorSpace.TYPE_4CLR,
ICC_Profile.icSigSpace5CLR,
ColorSpace.TYPE_5CLR,
ICC_Profile.icSigSpace6CLR,
ColorSpace.TYPE_6CLR,
ICC_Profile.icSigSpace7CLR,
ColorSpace.TYPE_7CLR,
ICC_Profile.icSigSpace8CLR,
ColorSpace.TYPE_8CLR,
ICC_Profile.icSigSpace9CLR,
ColorSpace.TYPE_9CLR,
ICC_Profile.icSigSpaceACLR,
ColorSpace.TYPE_ACLR,
ICC_Profile.icSigSpaceBCLR,
ColorSpace.TYPE_BCLR,
ICC_Profile.icSigSpaceCCLR,
ColorSpace.TYPE_CCLR,
ICC_Profile.icSigSpaceDCLR,
ColorSpace.TYPE_DCLR,
ICC_Profile.icSigSpaceECLR,
ColorSpace.TYPE_ECLR,
ICC_Profile.icSigSpaceFCLR,
ColorSpace.TYPE_FCLR
};
/**
* Size of an ICC header (128 bytes)
*/
public static final int HEADERSIZE = 128;
/**
* Mapping of ICC class signatures to profile class constants
*/
private static final int[] classMap =
{
ICC_Profile.icSigInputClass,
ICC_Profile.CLASS_INPUT,
ICC_Profile.icSigDisplayClass,
ICC_Profile.CLASS_DISPLAY,
ICC_Profile.icSigOutputClass,
ICC_Profile.CLASS_OUTPUT,
ICC_Profile.icSigLinkClass,
ICC_Profile.CLASS_DEVICELINK,
ICC_Profile.icSigColorSpaceClass,
ICC_Profile.CLASS_COLORSPACECONVERSION,
ICC_Profile.icSigAbstractClass,
ICC_Profile.CLASS_ABSTRACT,
ICC_Profile.icSigNamedColorClass,
ICC_Profile.CLASS_NAMEDCOLOR
};
private int size;
private int cmmId;
// Major/Minor version, The ICC-1998 spec is major v2
private int majorVersion;
// Major/Minor version, The ICC-1998 spec is major v2
private int minorVersion;
private int profileClass; // profile device class
private int colorSpace; // data color space type
private int profileColorSpace; // profile connection space (PCS) type
private byte[] timestamp; // original creation timestamp
private int platform; // platform signature
private int flags; // flags
private int magic; // magic number.
private int manufacturerSig; // manufacturer sig
private int modelSig; // model sig
private byte[] attributes; // Attributes
private int intent; // rendering intent
private byte[] illuminant; // illuminant info (Coordinates of D50 in the PCS)
private int creatorSig; // Creator sig (same type as manufacturer)
/**
* Creates a 'default' header for use with our predefined profiles.
* Note the device and profile color spaces are not set.
*/
public ProfileHeader()
{
creatorSig = 0;
intent = 0;
modelSig = manufacturerSig = (int) 0x6E6f6E65; // 'none'
magic = icMagicNumber;
cmmId = 0;
platform = 0; // no preferred platform
timestamp = new byte[8];
majorVersion = 2;
minorVersion = 0x10;
flags = 0;
// D50 in XYZ format (encoded)
illuminant = new byte[]
{
(byte) 0x00, (byte) 0x00, (byte) 0xf6, (byte) 0xd6,
(byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0xd3, (byte) 0x2d
};
attributes = new byte[8];
profileClass = ICC_Profile.CLASS_DISPLAY;
}
/**
* Creates a header from profile data. Only the header portion (128 bytes)
* is read, so the array passed need not be the full profile.
*/
public ProfileHeader(byte[] data)
{
ByteBuffer buf = ByteBuffer.wrap(data);
// Get size (the sign bit shouldn't matter.
// A valid profile can never be +2Gb)
size = buf.getInt(ICC_Profile.icHdrSize);
// CMM ID
cmmId = buf.getInt(ICC_Profile.icHdrCmmId);
// Version number
majorVersion = (int) (data[ICC_Profile.icHdrVersion]);
minorVersion = (int) (data[ICC_Profile.icHdrVersion + 1]);
// Profile/Device class
int classSig = buf.getInt(ICC_Profile.icHdrDeviceClass);
profileClass = -1;
for (int i = 0; i < classMap.length; i += 2)
if (classMap[i] == classSig)
{
profileClass = classMap[i + 1];
break;
}
// get the data color space
int csSig = buf.getInt(ICC_Profile.icHdrColorSpace);
colorSpace = -1;
for (int i = 0; i < csTypeMap.length; i += 2)
if (csTypeMap[i] == csSig)
{
colorSpace = csTypeMap[i + 1];
break;
}
// get the profile color space (PCS), must be xyz or lab except
// for device-link-class profiles
int pcsSig = buf.getInt(ICC_Profile.icHdrPcs);
profileColorSpace = -1;
if (profileClass != ICC_Profile.CLASS_DEVICELINK)
{
if (pcsSig == ICC_Profile.icSigXYZData)
profileColorSpace = ColorSpace.TYPE_XYZ;
if (pcsSig == ICC_Profile.icSigLabData)
profileColorSpace = ColorSpace.TYPE_Lab;
}
else
{
for (int i = 0; i < csTypeMap.length; i += 2)
if (csTypeMap[i] == pcsSig)
{
profileColorSpace = csTypeMap[i + 1];
break;
}
}
// creation timestamp
timestamp = new byte[8];
System.arraycopy(data, ICC_Profile.icHdrDate, timestamp, 0, 8);
// magic number
magic = buf.getInt(ICC_Profile.icHdrMagic);
// platform info
platform = buf.getInt(ICC_Profile.icHdrPlatform);
// get flags
flags = buf.getInt(ICC_Profile.icHdrFlags);
// get manufacturer sign
manufacturerSig = buf.getInt(ICC_Profile.icHdrManufacturer);
// get header model
modelSig = buf.getInt(ICC_Profile.icHdrModel);
// attributes
attributes = new byte[8];
System.arraycopy(data, ICC_Profile.icHdrAttributes, attributes, 0, 8);
// rendering intent
intent = buf.getInt(ICC_Profile.icHdrRenderingIntent);
// illuminant info
illuminant = new byte[12];
System.arraycopy(data, ICC_Profile.icHdrIlluminant, illuminant, 0, 12);
// Creator signature
creatorSig = buf.getInt(ICC_Profile.icHdrCreator);
// The rest of the header (Total size: 128 bytes) is unused..
}
/**
* Verify that the header is valid
* @param size equals the file size if it is to be verified, -1 otherwise
* @throws IllegalArgumentException if the header is found to be invalid.
*/
public void verifyHeader(int size) throws IllegalArgumentException
{
// verify size
if (size != -1 && this.size != size)
throw new IllegalArgumentException("Invalid profile length:" + size);
// Check version number
if (majorVersion != 2)
throw new IllegalArgumentException("Wrong major version number:"
+ majorVersion);
// Profile/Device class
if (profileClass == -1)
throw new IllegalArgumentException("Invalid profile/device class");
// get the data color space
if (colorSpace == -1)
throw new IllegalArgumentException("Invalid colorspace");
// profile color space
if (profileColorSpace == -1)
throw new IllegalArgumentException("Invalid PCS.");
// check magic number
if (magic != icMagicNumber)
throw new IllegalArgumentException("Invalid magic number!");
}
/**
* Creates a header, setting the header file size at the same time.
* @param size the profile file size.
*/
public byte[] getData(int size)
{
byte[] data = new byte[HEADERSIZE];
ByteBuffer buf = ByteBuffer.wrap(data);
buf.putInt(ICC_Profile.icHdrSize, size);
buf.putInt(ICC_Profile.icHdrCmmId, cmmId);
buf.putShort(ICC_Profile.icHdrVersion,
(short) (majorVersion << 8 | minorVersion));
for (int i = 1; i < classMap.length; i += 2)
if (profileClass == classMap[i])
buf.putInt(ICC_Profile.icHdrDeviceClass, classMap[i - 1]);
for (int i = 1; i < csTypeMap.length; i += 2)
if (csTypeMap[i] == colorSpace)
buf.putInt(ICC_Profile.icHdrColorSpace, csTypeMap[i - 1]);
for (int i = 1; i < csTypeMap.length; i += 2)
if (csTypeMap[i] == profileColorSpace)
buf.putInt(ICC_Profile.icHdrPcs, csTypeMap[i - 1]);
System.arraycopy(timestamp, 0, data, ICC_Profile.icHdrDate,
timestamp.length);
buf.putInt(ICC_Profile.icHdrMagic, icMagicNumber);
buf.putInt(ICC_Profile.icHdrPlatform, platform);
buf.putInt(ICC_Profile.icHdrFlags, flags);
buf.putInt(ICC_Profile.icHdrManufacturer, manufacturerSig);
buf.putInt(ICC_Profile.icHdrModel, modelSig);
System.arraycopy(attributes, 0, data, ICC_Profile.icHdrAttributes,
attributes.length);
buf.putInt(ICC_Profile.icHdrRenderingIntent, intent);
System.arraycopy(illuminant, 0, data, ICC_Profile.icHdrIlluminant,
illuminant.length);
buf.putInt(ICC_Profile.icHdrCreator, creatorSig);
return buf.array();
}
public int getSize()
{
return size;
}
public void setSize(int s)
{
size = s;
}
public int getMajorVersion()
{
return majorVersion;
}
public int getMinorVersion()
{
return minorVersion;
}
public int getProfileClass()
{
return profileClass;
}
public void setProfileClass(int pc)
{
profileClass = pc;
}
public int getColorSpace()
{
return colorSpace;
}
public int getProfileColorSpace()
{
return profileColorSpace;
}
public void setColorSpace(int cs)
{
colorSpace = cs;
}
public void setProfileColorSpace(int pcs)
{
profileColorSpace = pcs;
}
}

View File

@ -0,0 +1,73 @@
/* PyccConverter.java -- PhotoYCC conversion class
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
/**
* PyccConverter - conversion routines for the PhotoYCC colorspace
*
* Also known as PhotoCD YCC, it is an expansion of the conventional
* YCC color space to also include colors with over 100% white.
*
* XXX FIXME: Not yet implemented, implementation pending.
*
* @author Sven de Marothy
*/
public class PyccConverter implements ColorSpaceConverter
{
public float[] toRGB(float[] in)
{
return null;
}
public float[] fromRGB(float[] in)
{
return null;
}
public float[] toCIEXYZ(float[] in)
{
return null;
}
public float[] fromCIEXYZ(float[] in)
{
return null;
}
}

View File

@ -0,0 +1,245 @@
/* RgbProfileConverter.java -- RGB Profile conversion class
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
import java.awt.color.ProfileDataException;
import java.awt.color.ICC_Profile;
import java.awt.color.ICC_ProfileRGB;
/**
* RgbProfileConverter - converts RGB profiles (ICC_ProfileRGB)
*
* This type of profile contains a matrix and three
* tone reproduction curves (TRCs).
*
* Device RGB --> CIE XYZ is done through first multiplying with
* a matrix, then each component is looked-up against it's TRC.
*
* The opposite transform is done using the inverse of the matrix,
* and TRC:s.
*
* @author Sven de Marothy
*/
public class RgbProfileConverter implements ColorSpaceConverter
{
private float[][] matrix;
private float[][] inv_matrix;
private ToneReproductionCurve rTRC;
private ToneReproductionCurve gTRC;
private ToneReproductionCurve bTRC;
private ColorLookUpTable toPCS;
private ColorLookUpTable fromPCS;
/**
* CIE 1931 D50 white point (in Lab coordinates)
*/
private static float[] D50 = { 0.96422f, 1.00f, 0.82521f };
/**
* Constructs an RgbProfileConverter from a given ICC_ProfileRGB
*/
public RgbProfileConverter(ICC_ProfileRGB profile)
{
toPCS = fromPCS = null;
matrix = profile.getMatrix();
// get TRCs
try
{
rTRC = new ToneReproductionCurve(profile.getGamma(ICC_ProfileRGB.REDCOMPONENT));
}
catch (ProfileDataException e)
{
rTRC = new ToneReproductionCurve(profile.getTRC(ICC_ProfileRGB.REDCOMPONENT));
}
try
{
gTRC = new ToneReproductionCurve(profile.getGamma(ICC_ProfileRGB.GREENCOMPONENT));
}
catch (ProfileDataException e)
{
gTRC = new ToneReproductionCurve(profile.getTRC(ICC_ProfileRGB.GREENCOMPONENT));
}
try
{
bTRC = new ToneReproductionCurve(profile.getGamma(ICC_ProfileRGB.BLUECOMPONENT));
}
catch (ProfileDataException e)
{
bTRC = new ToneReproductionCurve(profile.getTRC(ICC_ProfileRGB.BLUECOMPONENT));
}
// If a CLUT is available, it should be used, and the TRCs ignored.
// Note: A valid profile may only have CLUTs in one direction, and
// TRC:s without useful info, making reverse-transforms impossible.
// In this case the TRC will be used for the reverse-transform with
// unpredictable results. This is in line with the Java specification,
try
{
toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB0Tag);
}
catch (Exception e)
{
toPCS = null;
}
try
{
fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA0Tag);
}
catch (Exception e)
{
fromPCS = null;
}
// Calculate the inverse matrix if no reverse CLUT is available
if(fromPCS == null)
inv_matrix = invertMatrix(matrix);
else
{
// otherwise just set it to an identity matrix
inv_matrix = new float[3][3];
inv_matrix[0][0] = inv_matrix[1][1] = inv_matrix[2][2] = 1.0f;
}
}
public float[] toCIEXYZ(float[] in)
{
// CLUT takes precedence
if (toPCS != null)
return toPCS.lookup(in);
float[] temp = new float[3];
float[] out = new float[3];
// device space --> linear gamma
temp[0] = rTRC.lookup(in[0]);
temp[1] = gTRC.lookup(in[1]);
temp[2] = bTRC.lookup(in[2]);
// matrix multiplication
out[0] = matrix[0][0] * temp[0] + matrix[0][1] * temp[1]
+ matrix[0][2] * temp[2];
out[1] = matrix[1][0] * temp[0] + matrix[1][1] * temp[1]
+ matrix[1][2] * temp[2];
out[2] = matrix[2][0] * temp[0] + matrix[2][1] * temp[1]
+ matrix[2][2] * temp[2];
return out;
}
public float[] toRGB(float[] in)
{
return SrgbConverter.XYZtoRGB(toCIEXYZ(in));
}
public float[] fromCIEXYZ(float[] in)
{
if (fromPCS != null)
return fromPCS.lookup(in);
float[] temp = new float[3];
float[] out = new float[3];
// matrix multiplication
temp[0] = inv_matrix[0][0] * in[0] + inv_matrix[0][1] * in[1]
+ inv_matrix[0][2] * in[2];
temp[1] = inv_matrix[1][0] * in[0] + inv_matrix[1][1] * in[1]
+ inv_matrix[1][2] * in[2];
temp[2] = inv_matrix[2][0] * in[0] + inv_matrix[2][1] * in[1]
+ inv_matrix[2][2] * in[2];
// device space --> linear gamma
out[0] = rTRC.reverseLookup(temp[0]);
out[1] = gTRC.reverseLookup(temp[1]);
out[2] = bTRC.reverseLookup(temp[2]);
// FIXME: Sun appears to clip the return values to [0,1]
// I don't believe that is a Good Thing,
// (some colorspaces may allow values outside that range.)
// So we return the actual values here.
return out;
}
public float[] fromRGB(float[] in)
{
return fromCIEXYZ(SrgbConverter.RGBtoXYZ(in));
}
/**
* Inverts a 3x3 matrix, returns the inverse,
* throws an IllegalArgumentException if the matrix is not
* invertible (this shouldn't happen for a valid profile)
*/
private float[][] invertMatrix(float[][] matrix)
{
float[][] out = new float[3][3];
double determinant = matrix[0][0] * (matrix[1][1] * matrix[2][2]
- matrix[2][1] * matrix[1][2])
- matrix[0][1] * (matrix[1][0] * matrix[2][2]
- matrix[2][0] * matrix[1][2])
+ matrix[0][2] * (matrix[1][0] * matrix[2][1]
- matrix[2][0] * matrix[1][1]);
if (determinant == 0.0)
throw new IllegalArgumentException("Can't invert conversion matrix.");
float invdet = (float) (1.0 / determinant);
out[0][0] = invdet * (matrix[1][1] * matrix[2][2]
- matrix[1][2] * matrix[2][1]);
out[0][1] = invdet * (matrix[0][2] * matrix[2][1]
- matrix[0][1] * matrix[2][2]);
out[0][2] = invdet * (matrix[0][1] * matrix[1][2]
- matrix[0][2] * matrix[1][1]);
out[1][0] = invdet * (matrix[1][2] * matrix[2][0]
- matrix[1][0] * matrix[2][2]);
out[1][1] = invdet * (matrix[0][0] * matrix[2][2]
- matrix[0][2] * matrix[2][0]);
out[1][2] = invdet * (matrix[0][2] * matrix[1][0]
- matrix[0][0] * matrix[1][2]);
out[2][0] = invdet * (matrix[1][0] * matrix[2][1]
- matrix[1][1] * matrix[2][0]);
out[2][1] = invdet * (matrix[0][1] * matrix[2][0]
- matrix[0][0] * matrix[2][1]);
out[2][2] = invdet * (matrix[0][0] * matrix[1][1]
- matrix[0][1] * matrix[1][0]);
return out;
}
}

View File

@ -0,0 +1,153 @@
/* SrgbConverter.java -- sRGB conversion class
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
/**
* SrgbConverter - conversion routines for the sRGB colorspace
* sRGB is a standard for RGB colorspaces, adopted by the w3c.
*
* The specification is available at:
* http://www.w3.org/Graphics/Color/sRGB.html
*
* @author Sven de Marothy
*/
/**
*
* Note the matrix numbers used here are NOT identical to those in the
* w3 spec, as those numbers are CIE XYZ relative a D65 white point.
* The CIE XYZ we use is relative a D50 white point, so therefore a
* linear Bradford transform matrix for D65->D50 mapping has been applied.
* (The ICC documents describe this transform)
*
* Linearized Bradford transform:
* 0.8951 0.2664 -0.1614
* -0.7502 1.7135 0.0367
* 0.0389 -0.0685 1.0296
*
* Inverse:
* 0.9870 -0.1471 0.1600
* 0.4323 0.5184 0.0493
* -0.00853 0.0400 0.9685
*/
public class SrgbConverter implements ColorSpaceConverter
{
public float[] fromCIEXYZ(float[] in)
{
return XYZtoRGB(in);
}
public float[] toCIEXYZ(float[] in)
{
return RGBtoXYZ(in);
}
public float[] toRGB(float[] in)
{
float[] out = new float[3];
System.arraycopy(in, 0, out, 0, 3);
return out;
}
public float[] fromRGB(float[] in)
{
float[] out = new float[3];
System.arraycopy(in, 0, out, 0, 3);
return out;
}
/**
* CIE XYZ (D50 relative) --> sRGB
*
* Static as it's used by other ColorSpaceConverters to
* convert to sRGB if the color space is defined in XYZ.
*/
public static float[] XYZtoRGB(float[] in)
{
float[] temp = new float[3];
temp[0] = 3.1338f * in[0] - 1.6171f * in[1] - 0.4907f * in[2];
temp[1] = -0.9785f * in[0] + 1.9160f * in[1] + 0.0334f * in[2];
temp[2] = 0.0720f * in[0] - 0.2290f * in[1] + 1.4056f * in[2];
float[] out = new float[3];
for (int i = 0; i < 3; i++)
{
if (temp[i] < 0)
temp[i] = 0.0f;
if (temp[i] > 1)
temp[i] = 1.0f;
if (temp[i] <= 0.00304f)
out[i] = temp[i] * 12.92f;
else
out[i] = 1.055f * ((float) Math.exp((1 / 2.4) * Math.log(temp[i])))
- 0.055f;
}
return out;
}
/**
* sRGB --> CIE XYZ (D50 relative)
*
* Static as it's used by other ColorSpaceConverters to
* convert to XYZ if the color space is defined in RGB.
*/
public static float[] RGBtoXYZ(float[] in)
{
float[] temp = new float[3];
float[] out = new float[3];
for (int i = 0; i < 3; i++)
if (in[i] <= 0.03928f)
temp[i] = in[i] / 12.92f;
else
temp[i] = (float) Math.exp(2.4 * Math.log((in[i] + 0.055) / 1.055));
/*
* Note: The numbers which were used to calculate this only had four
* digits of accuracy. So don't be fooled by the number of digits here.
* If someone has more accurate source, feel free to update this.
*/
out[0] = (float) (0.436063750222 * temp[0] + 0.385149601465 * temp[1]
+ 0.143086418888 * temp[2]);
out[1] = (float) (0.222450894035 * temp[0] + 0.71692584775 * temp[1]
+ 0.060624511256 * temp[2]);
out[2] = (float) (0.0138985186 * temp[0] + 0.097079690112 * temp[1]
+ 0.713996045725 * temp[2]);
return out;
}
}

View File

@ -1,5 +1,5 @@
/* GdkClasspathFontPeerMetrics.java
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
/* TagEntry.java -- A utility class used for storing the tags in ICC_Profile
Copyright (C) 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -33,84 +33,90 @@
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. */
exception statement from your version.
*/
package gnu.java.awt.color;
package gnu.java.awt.peer.gtk;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
public class GdkClasspathFontPeerMetrics extends FontMetrics
/**
* TagEntry - stores a profile tag.
* These are conveniently stored in a hashtable with the tag signature
* as a key. A legal profile can only have one tag with a given sig,
* so we can conveniently ignore collisions.
*
* @author Sven de Marothy
*/
public class TagEntry
{
private final int native_state = GtkGenericPeer.getUniqueInteger();
// tag table entry size
public static final int entrySize = 12;
private int signature;
private int size;
private int offset;
private byte[] data;
private static final int ASCENT = 0, MAX_ASCENT = 1,
DESCENT = 2, MAX_DESCENT = 3,
MAX_ADVANCE = 4;
private int[] metrics;
private native int[] initState (Object font);
public GdkClasspathFontPeerMetrics (Font font)
public TagEntry(int sig, int offset, int size, byte[] data)
{
super (font);
metrics = initState (font.getPeer());
this.signature = sig;
this.offset = offset;
this.size = size;
this.data = new byte[size];
System.arraycopy(data, offset, this.data, 0, size);
}
public int stringWidth (String str)
public TagEntry(int sig, byte[] data)
{
GlyphVector gv = font.createGlyphVector
(new FontRenderContext
(new AffineTransform (), false, false), str);
Rectangle2D r = gv.getVisualBounds ();
return (int) r.getWidth ();
this.signature = sig;
this.size = data.length;
this.data = new byte[size];
System.arraycopy(data, offset, this.data, 0, size);
}
public int charWidth (char ch)
public byte[] getData()
{
return stringWidth (new String (new char[] { ch }));
byte[] d = new byte[size];
System.arraycopy(this.data, 0, d, 0, size);
return d;
}
public int charsWidth (char data[], int off, int len)
public String hashKey()
{
return stringWidth (new String (data, off, len));
return tagHashKey(signature);
}
/*
Sun's Motif implementation always returns 0 or 1 here (???), but
going by the X11 man pages, it seems as though we should return
font.ascent + font.descent.
*/
public int getLeading ()
public String toString()
{
return 1;
// return metrics[ASCENT] + metrics[DESCENT];
String s = "";
s = s + (char) ((byte) ((signature >> 24) & 0xFF));
s = s + (char) ((byte) ((signature >> 16) & 0xFF));
s = s + (char) ((byte) ((signature >> 8) & 0xFF));
s = s + (char) ((byte) (signature & 0xFF));
return s;
}
public int getAscent ()
public int getSignature()
{
return metrics[ASCENT];
return signature;
}
public int getMaxAscent ()
public int getSize()
{
return metrics[MAX_ASCENT];
return size;
}
public int getDescent ()
public int getOffset()
{
return metrics[DESCENT];
return offset;
}
public int getMaxDescent ()
public void setOffset(int offset)
{
return metrics[MAX_DESCENT];
this.offset = offset;
}
public int getMaxAdvance ()
public static String tagHashKey(int sig)
{
return metrics[MAX_ADVANCE];
return "" + sig;
}
}

View File

@ -0,0 +1,178 @@
/* ToneReproductionCurve.java -- Representation of an ICC 'curv' type TRC
Copyright (C) 2004 Free Software Foundation
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.color;
/**
* ToneReproductionCurve - TRCs are used to describe RGB
* and Grayscale profiles. The TRC is essentially the gamma
* function of the color space.
*
* For example, Apple RGB has a gamma of 1.8, most monitors are ~2.2,
* sRGB is 2.4 with a small linear part near 0.
* Linear spaces are of course 1.0.
* (The exact function is implemented in SrgbConverter)
*
* The ICC specification allows the TRC to be described as a single
* Gamma value, where the function is thus out = in**gamma.
* Alternatively, the gamma function may be represented by a lookup table
* of values, in which case linear interpolation is used.
*
* @author Sven de Marothy
*/
public class ToneReproductionCurve
{
private float[] trc;
private float gamma;
private float[] reverseTrc;
/**
* Constructs a TRC from a gamma values
*/
public ToneReproductionCurve(float gamma)
{
trc = null;
reverseTrc = null;
this.gamma = gamma;
}
/**
* Constructs a TRC from a set of float values
*/
public ToneReproductionCurve(float[] trcValues)
{
trc = new float[trcValues.length];
System.arraycopy(trcValues, 0, trc, 0, trcValues.length);
setupReverseTrc();
}
/**
* Constructs a TRC from a set of short values normalized to
* the 0-65535 range (as in the ICC profile file).
* (Note the values are treated as unsigned)
*/
public ToneReproductionCurve(short[] trcValues)
{
trc = new float[trcValues.length];
for (int i = 0; i < trcValues.length; i++)
trc[i] = (float) ((int) trcValues[i] & (0xFFFF)) / 65535.0f;
setupReverseTrc();
}
/**
* Performs a TRC lookup
*/
public float lookup(float in)
{
float out;
if (trc == null)
{
if (in == 0f)
return 0.0f;
return (float) Math.exp(gamma * Math.log(in));
}
else
{
double alpha = in * (trc.length - 1);
int index = (int) Math.floor(alpha);
alpha = alpha - (double) index;
if (index >= trc.length - 1)
return trc[trc.length - 1];
if (index <= 0)
return trc[0];
out = (float) (trc[index] * (1.0 - alpha) + trc[index + 1] * alpha);
}
return out;
}
/**
* Performs an reverse lookup
*/
public float reverseLookup(float in)
{
float out;
if (trc == null)
{
if (in == 0f)
return 0.0f;
return (float) Math.exp((1.0 / gamma) * Math.log(in));
}
else
{
double alpha = in * (reverseTrc.length - 1);
int index = (int) Math.floor(alpha);
alpha = alpha - (double) index;
if (index >= reverseTrc.length - 1)
return reverseTrc[reverseTrc.length - 1];
if (index <= 0)
return reverseTrc[0];
out = (float) (reverseTrc[index] * (1.0 - alpha)
+ reverseTrc[index + 1] * alpha);
}
return out;
}
/**
* Calculates a reverse-lookup table.
* We use a whopping 10,000 entries.. This is should be more than any
* real-life TRC table (typically around 256-1024) so we won't be losing
* any precision.
*
* This will of course generate completely invalid results if the curve
* is not monotonic and invertable. But what's the alternative?
*/
public void setupReverseTrc()
{
reverseTrc = new float[10000];
int j = 0;
for (int i = 0; i < 10000; i++)
{
float n = ((float) i) / 10000f;
while (trc[j + 1] < n && j < trc.length - 2)
j++;
if (j == trc.length - 2)
reverseTrc[i] = trc[trc.length - 1];
else
reverseTrc[i] = (j + (n - trc[j]) / (trc[j + 1] - trc[j])) / ((float) trc.length);
}
}
}

View File

@ -1,5 +1,5 @@
/* XBMDecoder -- Decodes X-bitmaps
Copyright (C) 1999 Free Software Foundation, Inc.
Copyright (C) 1999, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -35,13 +35,19 @@ 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.image;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import java.io.*;
import java.awt.image.ColorModel;
import java.awt.image.ImageConsumer;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.Reader;
import java.net.URL;
import java.util.StringTokenizer;
import java.util.Vector;
public class XBMDecoder extends ImageDecoder
{

View File

@ -160,7 +160,7 @@ public abstract class ClasspathFontPeer
return name;
}
protected static void copyStyleToAttrs (int style, Map attrs)
public static void copyStyleToAttrs (int style, Map attrs)
{
if ((style & Font.BOLD) == Font.BOLD)
attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
@ -179,7 +179,7 @@ public abstract class ClasspathFontPeer
attrs.put (TextAttribute.FAMILY, fam);
}
protected static void copySizeToAttrs (float size, Map attrs)
public static void copySizeToAttrs (float size, Map attrs)
{
attrs.put (TextAttribute.SIZE, new Float (size));
}
@ -218,7 +218,7 @@ public abstract class ClasspathFontPeer
AffineTransform trans = this.transform;
float size = this.size;
int style = this.style;
if (attribs.containsKey (TextAttribute.FAMILY))
family = (String) attribs.get (TextAttribute.FAMILY);
@ -243,7 +243,13 @@ public abstract class ClasspathFontPeer
{
Float sz = (Float) attribs.get (TextAttribute.SIZE);
size = sz.floatValue ();
// Pango doesn't accept 0 as a font size.
if (size < 1)
size = 1;
}
else
size = 12;
if (attribs.containsKey (TextAttribute.TRANSFORM))
{

View File

@ -0,0 +1,111 @@
/* ClasspathTextLayoutPeer.java
Copyright (C) 2003 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.Font;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.font.TextHitInfo;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
import java.util.Map;
import java.awt.font.TextAttribute;
/**
* @author Graydon Hoare
*/
public interface ClasspathTextLayoutPeer
{
TextHitInfo getStrongCaret (TextHitInfo hit1,
TextHitInfo hit2);
void draw (Graphics2D g2, float x, float y);
byte getBaseline ();
boolean isLeftToRight ();
boolean isVertical ();
float getAdvance ();
float getAscent ();
float getDescent ();
float getLeading ();
int getCharacterCount ();
byte getCharacterLevel (int index);
float[] getBaselineOffsets ();
Shape getBlackBoxBounds (int firstEndpoint, int secondEndpoint);
Rectangle2D getBounds ();
float[] getCaretInfo (TextHitInfo hit, Rectangle2D bounds);
Shape getCaretShape (TextHitInfo hit, Rectangle2D bounds);
Shape[] getCaretShapes (int offset, Rectangle2D bounds,
TextLayout.CaretPolicy policy);
Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint,
Rectangle2D bounds);
int[] getLogicalRangesForVisualSelection (TextHitInfo firstEndpoint,
TextHitInfo secondEndpoint);
TextHitInfo getNextLeftHit (int offset, TextLayout.CaretPolicy policy);
TextHitInfo getNextRightHit (int offset, TextLayout.CaretPolicy policy);
TextHitInfo hitTestChar (float x, float y, Rectangle2D bounds);
TextHitInfo getVisualOtherHit (TextHitInfo hit);
float getVisibleAdvance ();
Shape getOutline (AffineTransform tx);
Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
TextHitInfo secondEndpoint,
Rectangle2D bounds);
TextLayout getJustifiedLayout (float justificationWidth);
void handleJustify (float justificationWidth);
Object clone ();
int hashCode ();
boolean equals (ClasspathTextLayoutPeer tl);
String toString ();
}

View File

@ -35,6 +35,7 @@ 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.AWTEvent;

View File

@ -1,5 +1,5 @@
/* GdkFontMetrics.java
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,33 +38,63 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import gnu.java.awt.ClasspathToolkit;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Toolkit;
public class GdkFontMetrics extends FontMetrics
{
private final int native_state = GtkGenericPeer.getUniqueInteger();
private int[] font_metrics;
GdkFontPeer peer;
private static final int ASCENT = 0, MAX_ASCENT = 1,
DESCENT = 2, MAX_DESCENT = 3,
MAX_ADVANCE = 4;
static final int FONT_METRICS_ASCENT = 0;
static final int FONT_METRICS_MAX_ASCENT = 1;
static final int FONT_METRICS_DESCENT = 2;
static final int FONT_METRICS_MAX_DESCENT = 3;
static final int FONT_METRICS_MAX_ADVANCE = 4;
private int[] metrics;
private native int[] initState (String fname, int style, int size);
static final int TEXT_METRICS_X_BEARING = 0;
static final int TEXT_METRICS_Y_BEARING = 1;
static final int TEXT_METRICS_WIDTH = 2;
static final int TEXT_METRICS_HEIGHT = 3;
static final int TEXT_METRICS_X_ADVANCE = 4;
static final int TEXT_METRICS_Y_ADVANCE = 5;
static native void getPeerFontMetrics(GdkFontPeer peer, double [] metrics);
static native void getPeerTextMetrics(GdkFontPeer peer, String str, double [] metrics);
public GdkFontMetrics (Font font)
{
super (font);
metrics = initState (font.getName (), font.getStyle (), font.getSize ());
{
super (font.getPeer() instanceof GdkFontPeer
? font
: ((ClasspathToolkit)(Toolkit.getDefaultToolkit ()))
.getFont (font.getName(), font.getAttributes ()));
peer = (GdkFontPeer) this.font.getPeer();
font_metrics = new int[5];
double [] hires = new double[5];
if (GtkToolkit.useGraphics2D ())
GdkGraphics2D.getPeerFontMetrics(peer, hires);
else
getPeerFontMetrics (peer, hires);
for (int i = 0; i < 5; ++i)
font_metrics[i] = (int) hires[i];
}
native public int stringWidth (String fname, int style, int size,
String str);
public int stringWidth (String str)
{
return stringWidth (font.getName (), font.getStyle (), font.getSize (),
str);
double [] hires = new double[6];
if (GtkToolkit.useGraphics2D())
GdkGraphics2D.getPeerTextMetrics(peer, str, hires);
else
getPeerTextMetrics(peer, str, hires);
return (int) hires [TEXT_METRICS_WIDTH];
}
public int charWidth (char ch)
@ -77,34 +107,39 @@ public class GdkFontMetrics extends FontMetrics
return stringWidth (new String (data, off, len));
}
// Sun's Motif implementation always returns 0 or 1 here (???).
/*
Sun's Motif implementation always returns 0 or 1 here (???), but
going by the X11 man pages, it seems as though we should return
font.ascent + font.descent.
*/
public int getLeading ()
{
return 0;
return 1;
// return metrics[ASCENT] + metrics[DESCENT];
}
public int getAscent ()
{
return metrics[ASCENT];
return font_metrics[FONT_METRICS_ASCENT];
}
public int getMaxAscent ()
{
return metrics[MAX_ASCENT];
return font_metrics[FONT_METRICS_MAX_ASCENT];
}
public int getDescent ()
{
return metrics[DESCENT];
return font_metrics[FONT_METRICS_DESCENT];
}
public int getMaxDescent ()
{
return metrics[MAX_DESCENT];
return font_metrics[FONT_METRICS_MAX_DESCENT];
}
public int getMaxAdvance ()
{
return metrics[MAX_ADVANCE];
return font_metrics[FONT_METRICS_MAX_ADVANCE];
}
}

View File

@ -1,68 +1,62 @@
/* GdkClasspathFontPeer.java -- backend implementation for Font object
Copyright (C) 2003 Free Software Foundation, Inc.
/* GdkFontPeer.java -- Implements FontPeer with GTK+
Copyright (C) 1999, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
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 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.
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.
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. */
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.gtk;
import java.awt.peer.FontPeer;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.io.InputStream;
import java.io.IOException;
import java.io.Serializable;
import java.awt.font.*;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.ResourceBundle;
import java.util.MissingResourceException;
import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
import java.text.StringCharacterIterator;
import java.awt.font.TextAttribute;
import gnu.classpath.Configuration;
import gnu.java.awt.peer.ClasspathFontPeer;
/**
* This class represents a windowing system font using the Pango
* unicode/glyph/font library and the Cairo rendering library.
*
* @author Graydon Hoare (graydon@redhat.com)
*/
public class GdkClasspathFontPeer extends ClasspathFontPeer
public class GdkFontPeer extends ClasspathFontPeer
{
native static void initStaticState ();
private final int native_state = GtkGenericPeer.getUniqueInteger ();
private static ResourceBundle bundle;
static
{
@ -71,26 +65,26 @@ public class GdkClasspathFontPeer extends ClasspathFontPeer
System.loadLibrary("gtkpeer");
}
if (GtkToolkit.useGraphics2D ())
initStaticState ();
initStaticState ();
try
{
bundle = ResourceBundle.getBundle ("gnu.java.awt.peer.gtk.font");
}
catch (Throwable ignored)
{
bundle = null;
}
}
native static void initStaticState ();
private final int native_state = GtkGenericPeer.getUniqueInteger ();
/* Instance Variables */
private native void initState ();
private native void dispose ();
private native void setFont (String family, int style, int size);
protected void sync ()
{
this.setFont (this.familyName, this.style, (int)this.size);
}
private native void setFont (String family, int style, int size, boolean useGraphics2D);
protected void finalize ()
{
if (GtkToolkit.useGraphics2D ())
GdkGraphics2D.releasePeerGraphicsResource(this);
dispose ();
}
@ -101,49 +95,57 @@ public class GdkClasspathFontPeer extends ClasspathFontPeer
* triplicate.
*/
private String buildString(CharacterIterator i) {
String s = new String ();
for(char c = i.first(); c != CharacterIterator.DONE; c = i.next())
s += c;
return s;
private String buildString(CharacterIterator iter)
{
StringBuffer sb = new StringBuffer();
for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next())
sb.append(c);
return sb.toString();
}
private String buildString(CharacterIterator iter, int begin, int limit) {
String s = new String ();
private String buildString(CharacterIterator iter, int begin, int limit)
{
StringBuffer sb = new StringBuffer();
int i = 0;
for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next(), i++)
{
if (begin <= i)
s += c;
sb.append(c);
if (limit <= i)
break;
}
return s;
return sb.toString();
}
private String buildString(char[] chars, int begin, int limit) {
String s = new String ();
for(int i = begin; i <= limit; i++)
s += chars[i];
return s;
private String buildString(char[] chars, int begin, int limit)
{
return new String(chars, begin, limit - begin);
}
/* Public API */
public GdkClasspathFontPeer (String name, int style, int size)
public GdkFontPeer (String name, int style)
{
// All fonts get a default size of 12 if size is not specified.
this(name, style, 12);
}
public GdkFontPeer (String name, int style, int size)
{
super(name, style, size);
initState ();
setFont (this.familyName, this.style, (int)this.size);
setFont (this.familyName, this.style, (int)this.size,
GtkToolkit.useGraphics2D());
}
public GdkClasspathFontPeer (String name, Map attributes)
public GdkFontPeer (String name, Map attributes)
{
super(name, attributes);
initState ();
setFont (this.familyName, this.style, (int)this.size);
setFont (this.familyName, this.style, (int)this.size,
GtkToolkit.useGraphics2D());
}
public String getSubFamilyName(Font font, Locale locale)
{
return null;
@ -228,7 +230,6 @@ public class GdkClasspathFontPeer extends ClasspathFontPeer
}
public LineMetrics getLineMetrics (Font font, CharacterIterator ci,
int begin, int limit, FontRenderContext rc)
{
@ -288,8 +289,7 @@ public class GdkClasspathFontPeer extends ClasspathFontPeer
public FontMetrics getFontMetrics (Font font)
{
return new GdkClasspathFontPeerMetrics (font);
return new GdkFontMetrics (font);
}
}

View File

@ -1,57 +1,57 @@
/* GdkGlyphVector.java -- Glyph vector object
Copyright (C) 2003 Free Software Foundation, Inc.
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
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 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.
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.
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. */
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.gtk;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.io.InputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;
import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
import gnu.classpath.Configuration;
public class GdkGlyphVector extends GlyphVector
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphMetrics;
import java.awt.font.GlyphVector;
import java.awt.font.GlyphJustificationInfo;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
public class GdkGlyphVector extends GlyphVector
{
static
@ -70,7 +70,7 @@ public class GdkGlyphVector extends GlyphVector
private Font font;
private FontRenderContext ctx;
private native void initState (GdkClasspathFontPeer peer, FontRenderContext ctx);
private native void initState (GdkFontPeer peer, FontRenderContext ctx);
private native void setChars (String s);
private native void setGlyphCodes (int codes[]);
private native void dispose ();
@ -109,7 +109,7 @@ public class GdkGlyphVector extends GlyphVector
*/
public GdkGlyphVector (Font f, GdkClasspathFontPeer peer, FontRenderContext c, String s)
public GdkGlyphVector (Font f, GdkFontPeer peer, FontRenderContext c, String s)
{
font = f;
ctx = c;
@ -117,7 +117,7 @@ public class GdkGlyphVector extends GlyphVector
setChars (s);
}
public GdkGlyphVector (Font f, GdkClasspathFontPeer peer, FontRenderContext c, int codes[])
public GdkGlyphVector (Font f, GdkFontPeer peer, FontRenderContext c, int codes[])
{
font = f;
ctx = c;

View File

@ -90,17 +90,31 @@ public class GdkGraphics extends Graphics
GdkGraphics (GtkComponentPeer component)
{
this.component = component;
font = component.awtComponent.getFont ();
if (component.isRealized ())
initComponentGraphics ();
else
connectSignals (component);
}
void initComponentGraphics ()
{
initState (component);
color = component.awtComponent.getForeground ();
font = component.awtComponent.getFont ();
Dimension d = component.awtComponent.getSize ();
clip = new Rectangle (0, 0, d.width, d.height);
}
native void connectSignals (GtkComponentPeer component);
public native void clearRect (int x, int y, int width, int height);
public void clipRect (int x, int y, int width, int height)
{
if (component != null && ! component.isRealized ())
return;
clip = clip.intersection (new Rectangle (x, y, width, height));
setClipRectangle (clip.x, clip.y, clip.width, clip.height);
}
@ -113,16 +127,6 @@ public class GdkGraphics extends Graphics
return new GdkGraphics (this);
}
// public Graphics create (int x, int y, int width, int height)
// {
// GdkGraphics g = new GdkGraphics (this);
// System.out.println ("translating by: " + x +" " + y);
// g.translate (x, y);
// g.clipRect (0, 0, width, height);
// return g;
// }
native public void dispose ();
native void copyPixmap (Graphics g, int x, int y, int width, int height);
@ -134,24 +138,45 @@ public class GdkGraphics extends Graphics
public boolean drawImage (Image img, int x, int y,
Color bgcolor, ImageObserver observer)
{
if (component != null && ! component.isRealized ())
return false;
if (img instanceof GtkOffScreenImage)
{
int width = img.getWidth (null);
int height = img.getHeight (null);
copyPixmap (img.getGraphics (),
x, y, img.getWidth (null), img.getHeight (null));
x, y, width, height);
// FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
if (observer != null)
observer.imageUpdate (img,
ImageObserver.FRAMEBITS,
x, y, width, height);
return true;
}
GtkImage image = (GtkImage) img;
new GtkImagePainter (image, this, x, y, -1, -1, bgcolor);
new GtkImagePainter (image, this, x, y, -1, -1, bgcolor, observer);
return image.isLoaded ();
}
public boolean drawImage (Image img, int x, int y, ImageObserver observer)
{
if (component != null && ! component.isRealized ())
return false;
if (img instanceof GtkOffScreenImage)
{
int width = img.getWidth (null);
int height = img.getHeight (null);
copyPixmap (img.getGraphics (),
x, y, img.getWidth (null), img.getHeight (null));
x, y, width, height);
// FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
if (observer != null)
observer.imageUpdate (img,
ImageObserver.FRAMEBITS,
x, y, width, height);
return true;
}
@ -164,22 +189,33 @@ public class GdkGraphics extends Graphics
public boolean drawImage (Image img, int x, int y, int width, int height,
Color bgcolor, ImageObserver observer)
{
if (component != null && ! component.isRealized ())
return false;
if (img instanceof GtkOffScreenImage)
{
copyAndScalePixmap (img.getGraphics (), false, false,
0, 0, img.getWidth (null), img.getHeight (null),
x, y, width, height);
// FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
if (observer != null)
observer.imageUpdate (img,
ImageObserver.FRAMEBITS,
x, y, width, height);
return true;
}
GtkImage image = (GtkImage) img;
new GtkImagePainter (image, this, x, y, width, height, bgcolor);
new GtkImagePainter (image, this, x, y, width, height, bgcolor, observer);
return image.isLoaded ();
}
public boolean drawImage (Image img, int x, int y, int width, int height,
ImageObserver observer)
{
if (component != null && ! component.isRealized ())
return false;
if (component != null)
return drawImage (img, x, y, width, height, component.getBackground (),
observer);
@ -192,6 +228,9 @@ public class GdkGraphics extends Graphics
int sx1, int sy1, int sx2, int sy2,
Color bgcolor, ImageObserver observer)
{
if (component != null && ! component.isRealized ())
return false;
if (img instanceof GtkOffScreenImage)
{
int dx_start, dy_start, d_width, d_height;
@ -247,12 +286,18 @@ public class GdkGraphics extends Graphics
copyAndScalePixmap (img.getGraphics (), x_flip, y_flip,
sx_start, sy_start, s_width, s_height,
dx_start, dy_start, d_width, d_height);
// FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
if (observer != null)
observer.imageUpdate (img,
ImageObserver.FRAMEBITS,
dx_start, dy_start, d_width, d_height);
return true;
}
GtkImage image = (GtkImage) img;
new GtkImagePainter (image, this, dx1, dy1, dx2, dy2,
sx1, sy1, sx2, sy2, bgcolor);
sx1, sy1, sx2, sy2, bgcolor, observer);
return image.isLoaded ();
}
@ -260,6 +305,9 @@ public class GdkGraphics extends Graphics
int sx1, int sy1, int sx2, int sy2,
ImageObserver observer)
{
if (component != null && ! component.isRealized ())
return false;
if (component != null)
return drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
component.getBackground (), observer);
@ -285,11 +333,17 @@ public class GdkGraphics extends Graphics
native public void drawRect(int x, int y, int width, int height);
native public void fillRect (int x, int y, int width, int height);
native void drawString (String str, int x, int y, String fname, int style, int size);
GdkFontPeer getFontPeer()
{
return (GdkFontPeer) getFont().getPeer();
}
native void drawString (GdkFontPeer f, String str, int x, int y);
public void drawString (String str, int x, int y)
{
drawString (str, x, y, font.getName(), font.getStyle(), font.getSize());
drawString(getFontPeer(), str, x, y);
}
public void drawString (AttributedCharacterIterator ci, int x, int y)
{
@ -350,7 +404,6 @@ public class GdkGraphics extends Graphics
public Rectangle getClipBounds ()
{
// System.out.println ("returning CLIP: " + clip);
return new Rectangle (clip.x, clip.y, clip.width, clip.height);
}
@ -373,6 +426,9 @@ public class GdkGraphics extends Graphics
public void setClip (int x, int y, int width, int height)
{
if (component != null && ! component.isRealized ())
return;
clip.x = x;
clip.y = y;
clip.width = width;
@ -396,7 +452,7 @@ public class GdkGraphics extends Graphics
public void setColor (Color c)
{
if (c == null)
color = new Color (0, 0, 0);
color = Color.BLACK;
else
color = c;
@ -407,7 +463,7 @@ public class GdkGraphics extends Graphics
color.getGreen () ^ xorColor.getGreen (),
color.getBlue () ^ xorColor.getBlue ());
}
public void setFont (Font font)
{
this.font = font;
@ -437,6 +493,9 @@ public class GdkGraphics extends Graphics
public void translate (int x, int y)
{
if (component != null && ! component.isRealized ())
return;
clip.x -= x;
clip.y -= y;

View File

@ -1,5 +1,5 @@
/* GdkGraphics2D.java
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,21 +38,60 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.awt.color.*;
import java.awt.image.*;
import java.awt.image.renderable.*;
import java.util.HashMap;
import java.util.Map;
import java.text.AttributedCharacterIterator;
import java.util.Stack;
import java.lang.Integer;
import gnu.classpath.Configuration;
import gnu.java.awt.ClasspathToolkit;
import gnu.java.awt.peer.ClasspathFontPeer;
import gnu.classpath.Configuration;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.TexturePaint;
import java.awt.Toolkit;
import java.awt.color.ColorSpace;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.font.GlyphJustificationInfo;
import java.awt.geom.Arc2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ColorModel;
import java.awt.image.CropImageFilter;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferInt;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageConsumer;
import java.awt.image.ImageObserver;
import java.awt.image.ImagingOpException;
import java.awt.image.SampleModel;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
import java.awt.image.WritableRaster;
import java.awt.image.renderable.RenderableImage;
import java.awt.image.renderable.RenderContext;
import java.text.AttributedCharacterIterator;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class GdkGraphics2D extends Graphics2D
{
@ -85,6 +124,8 @@ public class GdkGraphics2D extends Graphics2D
private RenderingHints hints;
private BufferedImage bimage;
private Composite comp;
private Stack stateStack;
native private void initState (GtkComponentPeer component);
@ -93,6 +134,7 @@ public class GdkGraphics2D extends Graphics2D
native public void dispose ();
native private int[] getImagePixels();
native private void cairoSurfaceSetFilter(int filter);
native void connectSignals (GtkComponentPeer component);
public void finalize ()
{
@ -113,7 +155,7 @@ public class GdkGraphics2D extends Graphics2D
{
paint = g.paint;
stroke = g.stroke;
hints = g.hints;
setRenderingHints (g.hints);
if (g.fg.getAlpha() != -1)
fg = new Color (g.fg.getRed (), g.fg.getGreen (),
@ -145,8 +187,8 @@ public class GdkGraphics2D extends Graphics2D
setBackground (bg);
setPaint (paint);
setStroke (stroke);
setClip (clip);
setTransform (transform);
setClip (clip);
stateStack = new Stack();
}
@ -168,12 +210,22 @@ public class GdkGraphics2D extends Graphics2D
GdkGraphics2D (GtkComponentPeer component)
{
this.component = component;
setFont (new Font("SansSerif", Font.PLAIN, 12));
if (component.isRealized ())
initComponentGraphics2D ();
else
connectSignals (component);
}
void initComponentGraphics2D ()
{
initState (component);
setColor (component.awtComponent.getForeground ());
setBackground (component.awtComponent.getBackground ());
setPaint (getColor());
setFont (new Font("SansSerif", Font.PLAIN, 12));
setTransform (new AffineTransform ());
setStroke (new BasicStroke ());
setRenderingHints (getDefaultHints());
@ -224,9 +276,6 @@ public class GdkGraphics2D extends Graphics2D
private native void cairoSave ();
private native void cairoRestore ();
private native void cairoSetMatrix (double m[]);
private native void cairoSetFont (GdkClasspathFontPeer peer);
private native void cairoShowGlyphs (int codes[],
float positions[]);
private native void cairoSetOperator (int cairoOperator);
private native void cairoSetRGBColor (double red, double green, double blue);
private native void cairoSetAlpha (double alpha);
@ -268,6 +317,7 @@ public class GdkGraphics2D extends Graphics2D
private Shape clip;
private AffineTransform transform;
private Font font;
private Composite comp;
DrawState (GdkGraphics2D g)
{
this.paint = g.paint;
@ -278,6 +328,7 @@ public class GdkGraphics2D extends Graphics2D
if (g.transform != null)
this.transform = (AffineTransform) g.transform.clone();
this.font = g.font;
this.comp = g.comp;
}
public void restore(GdkGraphics2D g)
{
@ -288,6 +339,7 @@ public class GdkGraphics2D extends Graphics2D
g.clip = this.clip;
g.transform = this.transform;
g.font = this.font;
g.comp = this.comp;
}
}
@ -303,17 +355,23 @@ public class GdkGraphics2D extends Graphics2D
cairoRestore ();
}
// Some operations (drawing rather than filling) require that their
// coords be shifted to land on 0.5-pixel boundaries, in order to land on
// "middle of pixel" coordinates and light up complete pixels.
double x;
double y;
private void setPos (double nx, double ny)
private boolean shiftDrawCalls = false;
private final double shifted(double coord, boolean doShift)
{
x = nx;
y = ny;
if (doShift)
return Math.floor(coord) + 0.5;
else
return coord;
}
private void walkPath(PathIterator p)
private final void walkPath(PathIterator p, boolean doShift)
{
double x = 0;
double y = 0;
double coords[] = new double[6];
cairoSetFillRule (p.getWindingRule ());
@ -324,13 +382,15 @@ public class GdkGraphics2D extends Graphics2D
{
case PathIterator.SEG_MOVETO:
setPos(coords[0], coords[1]);
cairoMoveTo (coords[0], coords[1]);
x = shifted(coords[0], doShift);
y = shifted(coords[1], doShift);
cairoMoveTo (x, y);
break;
case PathIterator.SEG_LINETO:
setPos(coords[0], coords[1]);
cairoLineTo (coords[0], coords[1]);
x = shifted(coords[0], doShift);
y = shifted(coords[1], doShift);
cairoLineTo (x, y);
break;
case PathIterator.SEG_QUADTO:
@ -338,23 +398,25 @@ public class GdkGraphics2D extends Graphics2D
// splitting a quadratic bezier into a cubic:
// see: http://pfaedit.sourceforge.net/bezier.html
double x1 = x + (2.0/3.0) * (coords[0] - x);
double y1 = y + (2.0/3.0) * (coords[1] - y);
double x1 = x + (2.0/3.0) * (shifted(coords[0], doShift) - x);
double y1 = y + (2.0/3.0) * (shifted(coords[1], doShift) - y);
double x2 = x1 + (1.0/3.0) * (coords[2] - x);
double y2 = y1 + (1.0/3.0) * (coords[3] - y);
double x2 = x1 + (1.0/3.0) * (shifted(coords[2], doShift) - x);
double y2 = y1 + (1.0/3.0) * (shifted(coords[3], doShift) - y);
setPos(coords[2], coords[3]);
x = shifted(coords[2], doShift);
y = shifted(coords[3], doShift);
cairoCurveTo (x1, y1,
x2, y2,
coords[2], coords[3]);
x, y);
break;
case PathIterator.SEG_CUBICTO:
setPos(coords[4], coords[5]);
cairoCurveTo (coords[0], coords[1],
coords[2], coords[3],
coords[4], coords[5]);
x = shifted(coords[4], doShift);
y = shifted(coords[5], doShift);
cairoCurveTo (shifted(coords[0], doShift), shifted(coords[1], doShift),
shifted(coords[2], doShift), shifted(coords[3], doShift),
x, y);
break;
case PathIterator.SEG_CLOSE:
@ -365,7 +427,7 @@ public class GdkGraphics2D extends Graphics2D
}
private Map getDefaultHints()
private final Map getDefaultHints()
{
HashMap defaultHints = new HashMap ();
@ -388,23 +450,19 @@ public class GdkGraphics2D extends Graphics2D
}
private void updateBufferedImage()
private final void updateBufferedImage()
{
int[] pixels = getImagePixels();
updateImagePixels(pixels);
}
private boolean isBufferedImageGraphics ()
private final boolean isBufferedImageGraphics ()
{
if (bimage != null)
return true;
else
return false;
return bimage != null;
}
private void updateImagePixels (int[] pixels)
private final void updateImagePixels (int[] pixels)
{
// This function can only be used if
@ -439,11 +497,15 @@ public class GdkGraphics2D extends Graphics2D
}
private boolean drawImage(Image img,
AffineTransform xform,
Color bgcolor,
ImageObserver obs)
private final boolean drawImage(Image img,
AffineTransform xform,
Color bgcolor,
ImageObserver obs)
{
if (img == null)
return false;
if (img instanceof GtkOffScreenImage &&
img.getGraphics () instanceof GdkGraphics2D &&
(xform == null
@ -461,8 +523,8 @@ public class GdkGraphics2D extends Graphics2D
return true;
}
else
{
{
// In this case, xform is an AffineTransform that transforms bounding
// box of the specified image from image space to user space. However
// when we pass this transform to cairo, cairo will use this transform
@ -475,23 +537,22 @@ public class GdkGraphics2D extends Graphics2D
try
{
invertedXform = xform.createInverse();
invertedXform = xform.createInverse();
if (img instanceof BufferedImage)
{
// draw an image which has actually been loaded
// into memory fully
BufferedImage b = (BufferedImage) img;
return drawRaster (b.getColorModel (),
b.getData (),
invertedXform,
bgcolor);
BufferedImage b = (BufferedImage) img;
return drawRaster (b.getColorModel (),
b.getData (),
invertedXform,
bgcolor);
}
else
{
// begin progressive loading in a separate thread
new PainterThread (this, img, invertedXform, bgcolor);
return false;
return this.drawImage(GdkPixbufDecoder.createBufferedImage(img.getSource()),
xform, bgcolor,obs);
}
}
catch (NoninvertibleTransformException e)
@ -517,38 +578,25 @@ public class GdkGraphics2D extends Graphics2D
return;
}
stateSave ();
cairoNewPath ();
boolean normalize;
normalize = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
|| hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
if (normalize)
translate (0.5,0.5);
if (s instanceof Rectangle2D)
{
Rectangle2D r = (Rectangle2D)s;
cairoRectangle (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
cairoRectangle (shifted(r.getX (), shiftDrawCalls),
shifted(r.getY (), shiftDrawCalls),
r.getWidth (), r.getHeight ());
}
else
walkPath (s.getPathIterator (null));
walkPath (s.getPathIterator (null), shiftDrawCalls);
cairoStroke ();
if (normalize)
translate (-0.5,-0.5);
stateRestore ();
if (isBufferedImageGraphics ())
updateBufferedImage();
}
public void fill (Shape s)
{
stateSave();
cairoNewPath ();
if (s instanceof Rectangle2D)
{
@ -556,9 +604,8 @@ public class GdkGraphics2D extends Graphics2D
cairoRectangle (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
}
else
walkPath (s.getPathIterator (null));
walkPath (s.getPathIterator (null), false);
cairoFill ();
stateRestore ();
if (isBufferedImageGraphics ())
updateBufferedImage();
@ -592,8 +639,8 @@ public class GdkGraphics2D extends Graphics2D
r.getWidth (), r.getHeight ());
}
else
walkPath (clip.getPathIterator (null));
cairoClosePath ();
walkPath (clip.getPathIterator (null), false);
// cairoClosePath ();
cairoClip ();
}
}
@ -739,7 +786,7 @@ public class GdkGraphics2D extends Graphics2D
{
BasicStroke bs = (BasicStroke) stroke;
cairoSetLineCap (bs.getEndCap());
cairoSetLineWidth (bs.getLineWidth() / 2.0);
cairoSetLineWidth (bs.getLineWidth());
cairoSetLineJoin (bs.getLineJoin());
cairoSetMiterLimit (bs.getMiterLimit());
float dashes[] = bs.getDashArray();
@ -771,6 +818,9 @@ public class GdkGraphics2D extends Graphics2D
public void setColor (Color c)
{
if (c == null)
c = Color.BLACK;
fg = c;
paint = c;
cairoSetRGBColor (fg.getRed() / 255.0,
@ -802,23 +852,23 @@ public class GdkGraphics2D extends Graphics2D
return clip.getBounds ();
}
protected Rectangle2D getClipInDevSpace ()
{
Rectangle2D uclip = clip.getBounds2D ();
if (transform == null)
return uclip;
else
{
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 ());
}
}
protected Rectangle2D getClipInDevSpace ()
{
Rectangle2D uclip = clip.getBounds2D ();
if (transform == null)
return uclip;
else
{
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)
{
@ -839,96 +889,34 @@ public class GdkGraphics2D extends Graphics2D
r.getWidth (), r.getHeight ());
}
else
walkPath (s.getPathIterator (null));
cairoClosePath ();
walkPath (s.getPathIterator (null), false);
// cairoClosePath ();
cairoClip ();
}
}
private static BasicStroke draw3DRectStroke = new BasicStroke();
public void draw3DRect(int x, int y, int width,
int height, boolean raised)
{
Color std = fg;
Color light = std.brighter();
Color dark = std.darker();
if (!raised)
{
Color t = light;
light = dark;
dark = t;
}
double x1 = (double) x;
double x2 = (double) x + width;
double y1 = (double) y;
double y2 = (double) y + height;
stateSave ();
cairoNewPath ();
boolean normalize;
normalize = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
|| hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
if (normalize)
{
x1 += 0.5;
y1 += 0.5;
x2 += 0.5;
y2 += 0.5;
}
setColor (light);
cairoMoveTo (x1, y1);
cairoLineTo (x2, y1);
cairoLineTo (x2, y2);
cairoStroke ();
cairoNewPath ();
setColor (dark);
cairoMoveTo (x1, y1);
cairoLineTo (x1, y2);
cairoLineTo (x2, y2);
cairoStroke ();
stateRestore ();
Stroke tmp = stroke;
setStroke(draw3DRectStroke);
super.draw3DRect(x, y, width, height, raised);
setStroke(tmp);
if (isBufferedImageGraphics ())
updateBufferedImage();
}
public void fill3DRect(int x, int y, int width,
int height, boolean raised)
{
double step = 1.0;
if (stroke != null && stroke instanceof BasicStroke)
{
BasicStroke bs = (BasicStroke) stroke;
step = bs.getLineWidth();
}
Color bright = fg.brighter ();
Color dark = fg.darker ();
draw3DRect (x, y, width, height, raised);
stateSave ();
translate (step/2.0, step/2.0);
cairoNewPath ();
cairoRectangle ((double) x, (double) y,
((double) width) - step,
((double) height) - step );
cairoClosePath ();
cairoFill ();
stateRestore ();
Stroke tmp = stroke;
setStroke(draw3DRectStroke);
super.fill3DRect(x, y, width, height, raised);
setStroke(tmp);
if (isBufferedImageGraphics ())
updateBufferedImage();
}
@ -939,21 +927,21 @@ public class GdkGraphics2D extends Graphics2D
public void fillRect (int x, int y, int width, int height)
{
fill(new Rectangle (x, y, width, height));
cairoNewPath ();
cairoRectangle (x, y, width, height);
cairoFill ();
}
public void clearRect (int x, int y, int width, int height)
{
stateSave ();
cairoSetRGBColor (bg.getRed() / 255.0,
bg.getGreen() / 255.0,
bg.getBlue() / 255.0);
cairoSetAlpha (1.0);
cairoNewPath ();
cairoRectangle (x, y, width, height);
cairoClosePath ();
cairoFill ();
stateRestore ();
setColor (fg);
if (isBufferedImageGraphics ())
updateBufferedImage();
@ -970,8 +958,8 @@ public class GdkGraphics2D extends Graphics2D
return bg;
}
private void doPolygon(int[] xPoints, int[] yPoints, int nPoints,
boolean close, boolean fill)
private final void doPolygon(int[] xPoints, int[] yPoints, int nPoints,
boolean close, boolean fill)
{
if (nPoints < 1)
return;
@ -1026,9 +1014,9 @@ public class GdkGraphics2D extends Graphics2D
doPolygon (xPoints, yPoints, nPoints, false, false);
}
private boolean drawRaster (ColorModel cm, Raster r,
AffineTransform imageToUser,
Color bgcolor)
private final boolean drawRaster (ColorModel cm, Raster r,
AffineTransform imageToUser,
Color bgcolor)
{
if (r == null)
return false;
@ -1087,10 +1075,7 @@ public class GdkGraphics2D extends Graphics2D
}
}
stateSave ();
translate (x, y);
drawPixels (pixels, r.getWidth (), r.getHeight (), r.getWidth (), i2u);
stateRestore ();
if (isBufferedImageGraphics ())
updateBufferedImage();
@ -1133,113 +1118,6 @@ public class GdkGraphics2D extends Graphics2D
}
////////////////////////////////////////
////// Supporting Private Classes //////
////////////////////////////////////////
private class PainterThread implements Runnable, ImageConsumer
{
// this is a helper which is spun off when someone tries to do
// Graphics2D.drawImage on an image we cannot determine to be either
// one of our own offscreen images or a BufferedImage; that is, when
// someone wants to draw an image which is possibly still loading over
// a network or something. you run it in a separate thread and it
// writes through to the underlying Graphics2D as pixels becomg
// available.
GdkGraphics2D gr;
Image image;
ColorModel defaultModel;
AffineTransform xform;
Color bgcolor;
public PainterThread (GdkGraphics2D g, Image im,
AffineTransform xf, Color bg)
{
image = im;
xform = xf;
bgcolor = bg;
this.gr = (GdkGraphics2D) g.create ();
new Thread (this).start ();
}
public void imageComplete (int status)
{
}
public void setColorModel (ColorModel model)
{
defaultModel = model;
}
public void setDimensions (int width, int height)
{
}
public void setHints (int hintflags)
{
}
public void setPixels (int x, int y, int w, int h, ColorModel model,
byte[] pixels, int off, int scansize)
{
}
public void setPixels (int x, int y, int w, int h, ColorModel model,
int[] pixels, int off, int scansize)
{
gr.stateSave ();
gr.translate (x, y);
if (model == null)
model = defaultModel;
int pixels2[];
if (model != null)
{
pixels2 = new int[pixels.length];
for (int yy = 0; yy < h; yy++)
for (int xx = 0; xx < w; xx++)
{
int i = yy * scansize + xx;
pixels2[i] = model.getRGB (pixels[i]);
}
}
else
pixels2 = pixels;
// change all transparent pixels in the image to the
// specified bgcolor
if (bgcolor != null)
{
for (int i = 0; i < pixels2.length; i++)
{
if (model.getAlpha (pixels2[i]) == 0)
pixels2[i] = bgcolor.getRGB ();
}
}
double[] xf = new double[6];
xform.getMatrix(xf);
gr.drawPixels (pixels2, w, h, scansize, xf);
gr.stateRestore ();
}
public void setProperties (java.util.Hashtable props)
{
}
public void run ()
{
image.getSource ().startProduction (this);
gr.dispose ();
}
}
///////////////////////////////////////////////
////// Unimplemented Stubs and Overloads //////
///////////////////////////////////////////////
@ -1259,6 +1137,8 @@ public class GdkGraphics2D extends Graphics2D
public void setComposite(Composite comp)
{
this.comp = comp;
if (comp instanceof AlphaComposite)
{
AlphaComposite a = (AlphaComposite) comp;
@ -1297,8 +1177,11 @@ public class GdkGraphics2D extends Graphics2D
else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
cairoSurfaceSetFilter(4);
}
}
shiftDrawCalls = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
|| hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
}
public Object getRenderingHint(RenderingHints.Key hintKey)
@ -1331,6 +1214,9 @@ public class GdkGraphics2D extends Graphics2D
else if(hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
cairoSurfaceSetFilter(4);
}
shiftDrawCalls = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
|| hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
}
public void addRenderingHints(Map hints)
@ -1345,7 +1231,10 @@ public class GdkGraphics2D extends Graphics2D
public Composite getComposite()
{
throw new java.lang.UnsupportedOperationException ();
if (comp == null)
return AlphaComposite.SrcOver;
else
return comp;
}
public FontRenderContext getFontRenderContext ()
@ -1353,23 +1242,6 @@ public class GdkGraphics2D extends Graphics2D
return new FontRenderContext (transform, true, true);
}
public void drawGlyphVector (GlyphVector g, float x, float y)
{
stateSave ();
setFont (g.getFont ());
translate ((double)x, (double)y);
cairoMoveTo (0, 0);
int nglyphs = g.getNumGlyphs ();
int codes[] = g.getGlyphCodes (0, nglyphs, (int []) null);
float posns[] = g.getGlyphPositions (0, nglyphs, (float []) null);
cairoShowGlyphs (codes, posns);
if (isBufferedImageGraphics ())
updateBufferedImage();
stateRestore ();
}
public void copyArea (int x, int y, int width, int height, int dx, int dy)
{
throw new java.lang.UnsupportedOperationException ();
@ -1418,6 +1290,9 @@ public class GdkGraphics2D extends Graphics2D
Color bgcolor, ImageObserver observer)
{
if (img == null)
return false;
Image subImage;
int sourceWidth = sx2 - sx1;
@ -1501,22 +1376,55 @@ public class GdkGraphics2D extends Graphics2D
drawLine (x1, y + height, x2, y + height);
}
// these are the most accelerated painting paths
native void cairoDrawGdkGlyphVector (GdkFontPeer f, GdkGlyphVector gv, float x, float y);
native void cairoDrawGdkTextLayout (GdkFontPeer f, GdkTextLayout gl, float x, float y);
native void cairoDrawString (GdkFontPeer f, String str, float x, float y);
GdkFontPeer getFontPeer()
{
return (GdkFontPeer) getFont().getPeer();
}
public void drawGdkGlyphVector(GdkGlyphVector gv, float x, float y)
{
cairoDrawGdkGlyphVector(getFontPeer(), gv, x, y);
if (isBufferedImageGraphics ())
updateBufferedImage();
}
public void drawGdkTextLayout(GdkTextLayout gl, float x, float y)
{
cairoDrawGdkTextLayout(getFontPeer(), gl, x, y);
if (isBufferedImageGraphics ())
updateBufferedImage();
}
public void drawString (String str, float x, float y)
{
cairoDrawString(getFontPeer(), str, x, y);
if (isBufferedImageGraphics ())
updateBufferedImage();
}
public void drawString (String str, int x, int y)
{
drawString (str, (float)x, (float)y);
}
public void drawString (String str, float x, float y)
{
GlyphVector gv = font.createGlyphVector (getFontRenderContext(), str);
drawGlyphVector (gv, x, y);
}
public void drawString (AttributedCharacterIterator ci, int x, int y)
{
drawString (ci, (float)x, (float)y);
}
public void drawGlyphVector (GlyphVector gv, float x, float y)
{
if (gv instanceof GdkGlyphVector)
drawGdkGlyphVector((GdkGlyphVector)gv, x, y);
else
throw new java.lang.UnsupportedOperationException ();
}
public void drawString (AttributedCharacterIterator ci, float x, float y)
{
GlyphVector gv = font.createGlyphVector (getFontRenderContext(), ci);
@ -1562,30 +1470,38 @@ public class GdkGraphics2D extends Graphics2D
return font;
}
// Until such time as pango is happy to talk directly to cairo, we
// actually need to redirect some calls from the GtkFontPeer and
// GtkFontMetrics into the drawing kit and ask cairo ourselves.
static native void releasePeerGraphicsResource(GdkFontPeer f);
static native void getPeerTextMetrics (GdkFontPeer f, String str, double [] metrics);
static native void getPeerFontMetrics (GdkFontPeer f, double [] metrics);
public FontMetrics getFontMetrics ()
{
// the reason we go via the toolkit here is to try to get
// a cached object. the toolkit keeps such a cache.
return Toolkit.getDefaultToolkit ().getFontMetrics (font);
}
public FontMetrics getFontMetrics (Font f)
{
// the reason we go via the toolkit here is to try to get
// a cached object. the toolkit keeps such a cache.
return Toolkit.getDefaultToolkit ().getFontMetrics (f);
}
public void setFont (Font f)
{
if (f.getPeer() instanceof GdkClasspathFontPeer)
if (f.getPeer() instanceof GdkFontPeer)
font = f;
else
font =
((ClasspathToolkit)(Toolkit.getDefaultToolkit ()))
.getFont (f.getName(), f.getAttributes ());
if (f != null &&
f.getPeer() instanceof GdkClasspathFontPeer)
cairoSetFont ((GdkClasspathFontPeer) f.getPeer());
.getFont (f.getName(), f.getAttributes ());
}
public String toString()
{
return getClass ().getName () +

View File

@ -38,18 +38,20 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.*;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.image.BufferedImage;
import java.util.Locale;
public class GdkGraphicsEnvironment extends GraphicsEnvironment
{
public GdkGraphicsEnvironment ()
{
super();
super();
}
public GraphicsDevice[] getScreenDevices ()
@ -66,22 +68,28 @@ public class GdkGraphicsEnvironment extends GraphicsEnvironment
{
return new GdkGraphics2D (image);
}
native private int nativeGetNumFontFamilies ();
native private void nativeGetFontFamilies (String[] family_names);
public Font[] getAllFonts ()
{
throw new java.lang.UnsupportedOperationException ();
}
public String[] getAvailableFontFamilyNames ()
{
throw new java.lang.UnsupportedOperationException ();
}
public String[] getAvailableFontFamilyNames ()
{
String[] family_names;
int array_size;
array_size = nativeGetNumFontFamilies();
family_names = new String[array_size];
nativeGetFontFamilies(family_names);
return family_names;
}
public String[] getAvailableFontFamilyNames (Locale l)
{
throw new java.lang.UnsupportedOperationException ();
}
} // class GdkGraphicsEnvironment
}

View File

@ -1,52 +1,57 @@
/* GdkPixbufDecoder.java -- Image data decoding object
Copyright (C) 2003 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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. */
Copyright (C) 2003, 2004 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.gtk;
import java.awt.image.*;
import gnu.classpath.Configuration;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.DirectColorModel;
import java.awt.image.ImageConsumer;
import java.awt.image.ImageProducer;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Vector;
import java.util.Hashtable;
import gnu.classpath.Configuration;
import java.util.Vector;
public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
{

View File

@ -0,0 +1,435 @@
/* GdkTextLayout.java
Copyright (C) 2003 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.gtk;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphMetrics;
import java.awt.font.GlyphVector;
import java.awt.font.TextHitInfo;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
import java.util.Map;
import java.awt.font.TextAttribute;
import gnu.classpath.Configuration;
import gnu.java.awt.peer.ClasspathTextLayoutPeer;
/**
* This is an implementation of the text layout peer interface which
* delegates all the hard work to pango.
*
* @author Graydon Hoare
*/
public class GdkTextLayout
implements ClasspathTextLayoutPeer
{
// native side, plumbing, etc.
static
{
if (Configuration.INIT_LOAD_LIBRARY)
{
System.loadLibrary("gtkpeer");
}
initStaticState ();
}
private native void setText(String str);
private native void getExtents(double[] inkExtents,
double[] logExtents);
private native void indexToPos(int idx, double[] pos);
private native void initState ();
private native void dispose ();
native static void initStaticState ();
private final int native_state = GtkGenericPeer.getUniqueInteger ();
protected void finalize ()
{
dispose ();
}
// we hold on to these to make sure we can render when presented
// with non-GdkGraphics2D paint targets
private AttributedString attributedString;
private FontRenderContext fontRenderContext;
public GdkTextLayout(AttributedString str, FontRenderContext frc)
{
initState();
attributedString = str;
fontRenderContext = frc;
}
protected class CharacterIteratorProxy
implements CharacterIterator
{
public CharacterIterator target;
public int begin;
public int limit;
public int index;
public CharacterIteratorProxy (CharacterIterator ci)
{
target = ci;
}
public int getBeginIndex ()
{
return begin;
}
public int getEndIndex ()
{
return limit;
}
public int getIndex ()
{
return index;
}
public char setIndex (int idx)
throws IllegalArgumentException
{
if (idx < begin || idx >= limit)
throw new IllegalArgumentException ();
char ch = target.setIndex (idx);
index = idx;
return ch;
}
public char first ()
{
int save = target.getIndex ();
char ch = target.setIndex (begin);
target.setIndex (save);
return ch;
}
public char last ()
{
if (begin == limit)
return this.first ();
int save = target.getIndex ();
char ch = target.setIndex (limit - 1);
target.setIndex (save);
return ch;
}
public char current ()
{
return target.current();
}
public char next ()
{
if (index >= limit - 1)
return CharacterIterator.DONE;
else
{
index++;
return target.next();
}
}
public char previous ()
{
if (index <= begin)
return CharacterIterator.DONE;
else
{
index--;
return target.previous ();
}
}
public Object clone ()
{
CharacterIteratorProxy cip = new CharacterIteratorProxy (this.target);
cip.begin = this.begin;
cip.limit = this.limit;
cip.index = this.index;
return cip;
}
}
// public side
public void draw (Graphics2D g2, float x, float y)
{
if (g2 instanceof GdkGraphics2D)
{
// we share pango structures directly with GdkGraphics2D
// when legal
GdkGraphics2D gg2 = (GdkGraphics2D) g2;
gg2.drawGdkTextLayout(this, x, y);
}
else
{
// falling back to a rather tedious layout algorithm when
// not legal
AttributedCharacterIterator ci = attributedString.getIterator ();
CharacterIteratorProxy proxy = new CharacterIteratorProxy (ci);
Font defFont = g2.getFont ();
/* Note: this implementation currently only interprets FONT text
* attributes. There is a reasonable argument to be made for some
* attributes being interpreted out here, where we have control of the
* Graphics2D and can construct or derive new fonts, and some
* attributes being interpreted by the GlyphVector itself. So far, for
* all attributes except FONT we do neither.
*/
for (char c = ci.first ();
c != CharacterIterator.DONE;
c = ci.next ())
{
proxy.begin = ci.getIndex ();
proxy.limit = ci.getRunLimit(TextAttribute.FONT);
if (proxy.limit <= proxy.begin)
continue;
proxy.index = proxy.begin;
Object fnt = ci.getAttribute(TextAttribute.FONT);
GlyphVector gv;
if (fnt instanceof Font)
gv = ((Font)fnt).createGlyphVector (fontRenderContext, proxy);
else
gv = defFont.createGlyphVector (fontRenderContext, proxy);
g2.drawGlyphVector (gv, x, y);
int n = gv.getNumGlyphs ();
for (int i = 0; i < n; ++i)
{
GlyphMetrics gm = gv.getGlyphMetrics (i);
if (gm.getAdvanceX() == gm.getAdvance ())
x += gm.getAdvanceX ();
else
y += gm.getAdvanceY ();
}
}
}
}
public TextHitInfo getStrongCaret (TextHitInfo hit1,
TextHitInfo hit2)
{
throw new Error("not implemented");
}
public byte getBaseline ()
{
throw new Error("not implemented");
}
public boolean isLeftToRight ()
{
throw new Error("not implemented");
}
public boolean isVertical ()
{
throw new Error("not implemented");
}
public float getAdvance ()
{
throw new Error("not implemented");
}
public float getAscent ()
{
throw new Error("not implemented");
}
public float getDescent ()
{
throw new Error("not implemented");
}
public float getLeading ()
{
throw new Error("not implemented");
}
public int getCharacterCount ()
{
throw new Error("not implemented");
}
public byte getCharacterLevel (int index)
{
throw new Error("not implemented");
}
public float[] getBaselineOffsets ()
{
throw new Error("not implemented");
}
public Shape getBlackBoxBounds (int firstEndpoint, int secondEndpoint)
{
throw new Error("not implemented");
}
public Rectangle2D getBounds ()
{
double[] inkExtents = new double[4];
double[] logExtents = new double[4];
getExtents(inkExtents, logExtents);
return new Rectangle2D.Double(logExtents[0], logExtents[1],
logExtents[2], logExtents[3]);
}
public float[] getCaretInfo (TextHitInfo hit, Rectangle2D bounds)
{
throw new Error("not implemented");
}
public Shape getCaretShape (TextHitInfo hit, Rectangle2D bounds)
{
throw new Error("not implemented");
}
public Shape[] getCaretShapes (int offset, Rectangle2D bounds,
TextLayout.CaretPolicy policy)
{
throw new Error("not implemented");
}
public Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint,
Rectangle2D bounds)
{
AffineTransform at = new AffineTransform();
GeneralPath gp = new GeneralPath();
double [] rect = new double[4];
Rectangle2D tmp = new Rectangle2D.Double();
for (int i = firstEndpoint; i <= secondEndpoint; ++i)
{
indexToPos(i, rect);
tmp.setRect(rect[0], rect[1], rect[2], rect[3]);
Rectangle2D.intersect(tmp, bounds, tmp);
gp.append(tmp.getPathIterator(at), false);
}
return gp;
}
public int[] getLogicalRangesForVisualSelection (TextHitInfo firstEndpoint,
TextHitInfo secondEndpoint)
{
throw new Error("not implemented");
}
public TextHitInfo getNextLeftHit (int offset, TextLayout.CaretPolicy policy)
{
throw new Error("not implemented");
}
public TextHitInfo getNextRightHit (int offset, TextLayout.CaretPolicy policy)
{
throw new Error("not implemented");
}
public TextHitInfo hitTestChar (float x, float y, Rectangle2D bounds)
{
throw new Error("not implemented");
}
public TextHitInfo getVisualOtherHit (TextHitInfo hit)
{
throw new Error("not implemented");
}
public float getVisibleAdvance ()
{
throw new Error("not implemented");
}
public Shape getOutline (AffineTransform tx)
{
throw new Error("not implemented");
}
public Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
TextHitInfo secondEndpoint,
Rectangle2D bounds)
{
throw new Error("not implemented");
}
public TextLayout getJustifiedLayout (float justificationWidth)
{
throw new Error("not implemented");
}
public void handleJustify (float justificationWidth)
{
throw new Error("not implemented");
}
public Object clone ()
{
throw new Error("not implemented");
}
public int hashCode ()
{
throw new Error("not implemented");
}
public boolean equals (ClasspathTextLayoutPeer tl)
{
throw new Error("not implemented");
}
public String toString ()
{
throw new Error("not implemented");
}
}

View File

@ -1,5 +1,5 @@
/* GtkButtonPeer.java -- Implements ButtonPeer with GTK
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -43,8 +43,8 @@ import java.awt.Button;
import java.awt.Component;
import java.awt.Font;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.peer.ButtonPeer;
public class GtkButtonPeer extends GtkComponentPeer
@ -52,13 +52,15 @@ public class GtkButtonPeer extends GtkComponentPeer
{
native void create (String label);
public native void connectJObject ();
public native void connectSignals ();
native void gtkSetFont (String name, int style, int size);
native void gtkWidgetModifyFont (String name, int style, int size);
native void gtkSetLabel (String label);
native void gtkWidgetSetForeground (int red, int green, int blue);
native void gtkWidgetSetBackground (int red, int green, int blue);
native void gtkActivate ();
native void gtkWidgetRequestFocus ();
native void setNativeBounds (int x, int y, int width, int height);
public GtkButtonPeer (Button b)
{
@ -86,8 +88,8 @@ public class GtkButtonPeer extends GtkComponentPeer
if (!me.isConsumed ()
&& (me.getModifiersEx () & MouseEvent.BUTTON1_DOWN_MASK) != 0
&& awtComponent.getBounds().contains(p))
postActionEvent (((Button)awtComponent).getActionCommand (),
me.getModifiersEx ());
postActionEvent (((Button) awtComponent).getActionCommand (),
me.getModifiersEx ());
}
if (e.getID () == KeyEvent.KEY_PRESSED)

View File

@ -55,7 +55,7 @@ public class GtkCheckboxPeer extends GtkComponentPeer
public native void create (GtkCheckboxGroupPeer group);
public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group);
public native void connectSignals ();
native void gtkSetFont (String name, int style, int size);
native void gtkWidgetModifyFont (String name, int style, int size);
native void gtkButtonSetLabel (String label);
native void gtkToggleButtonSetActive (boolean is_active);

View File

@ -59,6 +59,10 @@ public class GtkChoicePeer extends GtkComponentPeer
append (items);
}
int selected = c.getSelectedIndex();
if (selected >= 0)
select(selected);
}
native void create ();

View File

@ -43,9 +43,9 @@ import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
public class GtkClipboard extends Clipboard
{
@ -60,15 +60,13 @@ public class GtkClipboard extends Clipboard
static boolean hasSelection = false;
protected
GtkClipboard ()
protected GtkClipboard()
{
super ("System Clipboard");
initNativeState ();
super("System Clipboard");
initNativeState();
}
public Transferable
getContents (Object requestor)
public Transferable getContents(Object requestor)
{
synchronized (this)
{
@ -77,72 +75,76 @@ public class GtkClipboard extends Clipboard
}
/* Java doesn't own the selection, so we need to ask X11 */
// XXX: Does this hold with Swing too ?
synchronized (selectionLock)
{
requestStringConversion ();
requestStringConversion();
try
{
selectionLock.wait (SELECTION_RECEIVED_TIMEOUT);
selectionLock.wait(SELECTION_RECEIVED_TIMEOUT);
}
catch (InterruptedException e)
{
return null;
}
return (selection == null) ? null : new StringSelection (selection);
return selection == null ? null : new StringSelection(selection);
}
}
void
stringSelectionReceived (String newSelection)
void stringSelectionReceived(String newSelection)
{
synchronized (selectionLock)
{
selection = newSelection;
selectionLock.notify ();
selectionLock.notify();
}
}
/* convert Java clipboard data into a String suitable for sending
to another application */
synchronized String
stringSelectionHandler () throws IOException
synchronized String stringSelectionHandler() throws IOException
{
String selection = null;
try {
if (contents.isDataFlavorSupported (DataFlavor.stringFlavor))
selection = (String)contents.getTransferData (DataFlavor.stringFlavor);
else if (contents.isDataFlavorSupported (DataFlavor.plainTextFlavor))
{
StringBuffer sbuf = new StringBuffer ();
InputStreamReader reader;
char readBuf[] = new char[512];
int numChars;
try
{
if (contents.isDataFlavorSupported(DataFlavor.stringFlavor))
selection = (String)contents.getTransferData(DataFlavor.stringFlavor);
else if (contents.isDataFlavorSupported(DataFlavor.plainTextFlavor))
{
StringBuffer sbuf = new StringBuffer();
InputStreamReader reader;
char readBuf[] = new char[512];
int numChars;
reader = new InputStreamReader
((InputStream)
contents.getTransferData (DataFlavor.plainTextFlavor), "UNICODE");
reader = new InputStreamReader
((InputStream)
contents.getTransferData(DataFlavor.plainTextFlavor), "UNICODE");
while (true)
{
numChars = reader.read (readBuf);
if (numChars == -1)
break;
sbuf.append (readBuf, 0, numChars);
}
while (true)
{
numChars = reader.read(readBuf);
if (numChars == -1)
break;
sbuf.append(readBuf, 0, numChars);
}
selection = new String (sbuf);
}
} catch (Exception e) { }
selection = new String(sbuf);
}
}
catch (Exception e)
{
}
return selection;
}
public synchronized void
setContents (Transferable contents, ClipboardOwner owner)
public synchronized void setContents(Transferable contents,
ClipboardOwner owner)
{
selectionGet ();
selectionGet();
this.contents = contents;
this.owner = owner;
@ -150,20 +152,19 @@ public class GtkClipboard extends Clipboard
hasSelection = true;
}
synchronized
void selectionClear ()
synchronized void selectionClear()
{
hasSelection = false;
if (owner != null)
{
owner.lostOwnership (this, contents);
owner.lostOwnership(this, contents);
owner = null;
contents = null;
}
}
native void initNativeState ();
native static void requestStringConversion ();
native static void selectionGet ();
native void initNativeState();
native static void requestStringConversion();
native static void selectionGet();
}

View File

@ -77,6 +77,8 @@ public class GtkComponentPeer extends GtkGenericPeer
Insets insets;
boolean isInRepaint;
/* this isEnabled differs from Component.isEnabled, in that it
knows if a parent is disabled. In that case Component.isEnabled
may return true, but our isEnabled will always return false */
@ -85,7 +87,6 @@ public class GtkComponentPeer extends GtkGenericPeer
native int[] gtkWidgetGetForeground ();
native int[] gtkWidgetGetBackground ();
native void gtkWidgetSetVisible (boolean b);
native void gtkWidgetGetDimensions (int[] dim);
native void gtkWidgetGetPreferredDimensions (int[] dim);
native void gtkWidgetGetLocationOnScreen (int[] point);
@ -97,17 +98,14 @@ public class GtkComponentPeer extends GtkGenericPeer
native void gtkWidgetRequestFocus ();
native void gtkWidgetDispatchKeyEvent (int id, long when, int mods,
int keyCode, int keyLocation);
native void gtkSetFont (String name, int style, int size);
native void gtkWidgetQueueDrawArea(int x, int y, int width, int height);
native void addExposeFilter();
native void removeExposeFilter();
native boolean isRealized ();
void create ()
{
throw new RuntimeException ();
}
native void connectJObject ();
native void connectSignals ();
protected GtkComponentPeer (Component awtComponent)
@ -118,9 +116,6 @@ public class GtkComponentPeer extends GtkGenericPeer
create ();
setParent ();
connectJObject ();
connectSignals ();
if (awtComponent.getForeground () != null)
@ -130,12 +125,22 @@ public class GtkComponentPeer extends GtkGenericPeer
if (awtComponent.getFont() != null)
setFont(awtComponent.getFont());
setCursor (awtComponent.getCursor ());
Component parent = awtComponent.getParent ();
// Only set our parent on the GTK side if our parent on the AWT
// side is not showing. Otherwise the gtk peer will be shown
// before we've had a chance to position and size it properly.
if (awtComponent instanceof Window
|| (parent != null && ! parent.isShowing ()))
setParentAndBounds ();
}
void setParentAndBounds ()
{
setParent ();
setComponentBounds ();
Rectangle bounds = awtComponent.getBounds ();
setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
setVisibleAndEnabled ();
}
@ -154,15 +159,32 @@ public class GtkComponentPeer extends GtkGenericPeer
gtkWidgetSetParent (p);
}
void beginNativeRepaint ()
{
isInRepaint = true;
}
void endNativeRepaint ()
{
isInRepaint = false;
}
/*
* Set the bounds of this peer's AWT Component based on dimensions
* returned by the native windowing system. Most Components impose
* their dimensions on the peers so the default implementation does
* nothing. However some peers, like GtkFileDialogPeer, need to
* pass their size back to the AWT Component.
* their dimensions on the peers which is what the default
* implementation does. However some peers, like GtkFileDialogPeer,
* need to pass their size back to the AWT Component.
*/
void setComponentBounds ()
{
Rectangle bounds = awtComponent.getBounds ();
if (bounds.x == 0 && bounds.y == 0
&& bounds.width == 0 && bounds.height == 0)
return;
setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
}
void setVisibleAndEnabled ()
@ -180,7 +202,9 @@ public class GtkComponentPeer extends GtkGenericPeer
public Image createImage (ImageProducer producer)
{
return new GtkImage (producer, null);
GtkImage image = new GtkImage (producer, null);
producer.startProduction (image);
return image;
}
public Image createImage (int width, int height)
@ -195,6 +219,9 @@ public class GtkComponentPeer extends GtkGenericPeer
else
g = new GdkGraphics (width, height);
g.setColor(getBackground());
g.fillRect(0, 0, width, height);
return new GtkOffScreenImage (null, g, width, height);
}
@ -215,7 +242,7 @@ public class GtkComponentPeer extends GtkGenericPeer
public FontMetrics getFontMetrics (Font font)
{
return new GdkFontMetrics (font);
return getToolkit().getFontMetrics(font);
}
public Graphics getGraphics ()
@ -265,8 +292,8 @@ public class GtkComponentPeer extends GtkGenericPeer
// Some peers like GtkFileDialogPeer are repainted by Gtk itself
if (g == null)
break;
g.setClip (((PaintEvent)event).getUpdateRect());
g.setClip (((PaintEvent) event).getUpdateRect());
if (id == PaintEvent.PAINT)
awtComponent.paint (g);
@ -310,21 +337,6 @@ public class GtkComponentPeer extends GtkGenericPeer
public void paint (Graphics g)
{
Component parent = awtComponent.getParent();
GtkComponentPeer parentPeer = null;
if ((parent instanceof Container) && !parent.isLightweight())
parentPeer = (GtkComponentPeer) parent.getPeer();
addExposeFilter();
if (parentPeer != null)
parentPeer.addExposeFilter();
Rectangle clip = g.getClipBounds();
gtkWidgetQueueDrawArea(clip.x, clip.y, clip.width, clip.height);
removeExposeFilter();
if (parentPeer != null)
parentPeer.removeExposeFilter();
}
public Dimension preferredSize ()
@ -371,8 +383,11 @@ public class GtkComponentPeer extends GtkGenericPeer
public void repaint (long tm, int x, int y, int width, int height)
{
if (x == 0 && y == 0 && width == 0 && height == 0)
return;
q.postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
new Rectangle (x, y, width, height)));
new Rectangle (x, y, width, height)));
}
public void requestFocus ()
@ -391,7 +406,7 @@ public class GtkComponentPeer extends GtkGenericPeer
gtkWidgetSetBackground (c.getRed(), c.getGreen(), c.getBlue());
}
native public void setNativeBounds (int x, int y, int width, int height);
native void setNativeBounds (int x, int y, int width, int height);
public void setBounds (int x, int y, int width, int height)
{
@ -426,13 +441,24 @@ public class GtkComponentPeer extends GtkGenericPeer
if (parent instanceof Window && !lightweightChild)
{
Insets insets = ((Window) parent).getInsets ();
// Convert from Java coordinates to GTK coordinates.
setNativeBounds (x - insets.left, y - insets.top, width, height);
GtkWindowPeer peer = (GtkWindowPeer) parent.getPeer ();
int menuBarHeight = 0;
if (peer instanceof GtkFramePeer)
menuBarHeight = ((GtkFramePeer) peer).getMenuBarHeight ();
// Convert from Java coordinates to GTK coordinates.
setNativeBounds (x - insets.left, y - insets.top + menuBarHeight,
width, height);
}
else
setNativeBounds (x, y, width, height);
}
void setCursor ()
{
setCursor (awtComponent.getCursor ());
}
public void setCursor (Cursor cursor)
{
gtkWidgetSetCursor (cursor.getType ());
@ -448,7 +474,7 @@ public class GtkComponentPeer extends GtkGenericPeer
// FIXME: This should really affect the widget tree below me.
// Currently this is only handled if the call is made directly on
// a text widget, which implements setFont() itself.
gtkSetFont(f.getName(), f.getStyle(), f.getSize());
gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
}
public void setForeground (Color c)
@ -488,8 +514,9 @@ public class GtkComponentPeer extends GtkGenericPeer
protected void postExposeEvent (int x, int y, int width, int height)
{
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x, y, width, height)));
if (!isInRepaint)
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x, y, width, height)));
}
protected void postKeyEvent (int id, long when, int mods,

View File

@ -45,13 +45,16 @@ import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Window;
import java.awt.event.PaintEvent;
import java.awt.peer.ComponentPeer;
import java.awt.peer.ContainerPeer;
public class GtkContainerPeer extends GtkComponentPeer
implements ContainerPeer
{
Container c;
boolean isValidating;
public GtkContainerPeer(Container c)
{
@ -59,22 +62,38 @@ public class GtkContainerPeer extends GtkComponentPeer
this.c = c;
}
public void beginValidate()
public void beginValidate ()
{
isValidating = true;
}
public void endValidate()
public void endValidate ()
{
// q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
// new Rectangle (x, y, width, height)));
// Graphics gc = getGraphics ();
// if (gc != null)
// {
// awtComponent.update (gc);
// gc.dispose ();
// }
// System.out.println ("got here");
// awtComponent.repaint ();
Component parent = awtComponent.getParent ();
// Only set our parent on the GTK side if our parent on the AWT
// side is not showing. Otherwise the gtk peer will be shown
// before we've had a chance to position and size it properly.
if (parent != null && parent.isShowing ())
{
Component[] components = ((Container) awtComponent).getComponents ();
int ncomponents = components.length;
for (int i = 0; i < ncomponents; i++)
{
ComponentPeer peer = components[i].getPeer ();
// Skip lightweight peers.
if (peer instanceof GtkComponentPeer)
((GtkComponentPeer) peer).setParentAndBounds ();
}
// GTK windows don't have parents.
if (!(awtComponent instanceof Window))
setParentAndBounds ();
}
isValidating = false;
}
public Insets getInsets()

View File

@ -42,9 +42,9 @@ import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Graphics;
import java.awt.peer.DialogPeer;
import java.awt.Rectangle;
import java.awt.event.PaintEvent;
import java.awt.peer.DialogPeer;
public class GtkDialogPeer extends GtkWindowPeer
implements DialogPeer
@ -75,11 +75,12 @@ public class GtkDialogPeer extends GtkWindowPeer
protected void postExposeEvent (int x, int y, int width, int height)
{
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x + insets.left,
y + insets.top,
width, height)));
}
if (!isInRepaint)
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x + insets.left,
y + insets.top,
width, height)));
}
void create ()
{

View File

@ -45,8 +45,8 @@ import java.awt.Graphics;
import java.awt.Window;
import java.awt.event.WindowEvent;
import java.awt.peer.FileDialogPeer;
import java.io.FilenameFilter;
import java.io.File;
import java.io.FilenameFilter;
public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
{
@ -57,7 +57,6 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
private FilenameFilter filter;
native void create (GtkContainerPeer parent);
native void connectJObject ();
native void connectSignals ();
native void nativeSetFile (String file);
native public String nativeGetDirectory();
@ -94,6 +93,7 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
awtComponent.getY (),
dims[0], dims[1]);
}
super.setComponentBounds ();
}
public void setFile (String fileName)

View File

@ -1,5 +1,5 @@
/* GtkFontPeer.java -- Implements FontPeer with GTK+
Copyright (C) 1999 Free Software Foundation, Inc.
Copyright (C) 1999, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -37,20 +37,25 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.peer.FontPeer;
import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.MissingResourceException;
import java.text.*;
import gnu.java.awt.peer.ClasspathFontPeer;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.font.LineMetrics;
import java.awt.geom.Rectangle2D;
import java.awt.peer.FontPeer;
import java.text.CharacterIterator;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class GtkFontPeer extends ClasspathFontPeer
{
private static ResourceBundle bundle;
static
{
try

View File

@ -39,6 +39,7 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.Component;
import java.awt.Container;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
@ -57,51 +58,72 @@ public class GtkFramePeer extends GtkWindowPeer
private int menuBarHeight;
private MenuBarPeer menuBar;
native int getMenuBarHeight (MenuBarPeer bar);
native void setMenuBarWidth (MenuBarPeer bar, int width);
native void setMenuBarPeer (MenuBarPeer bar);
native void removeMenuBarPeer ();
native void moveLayout (int offset);
native void gtkLayoutSetVisible (boolean vis);
native void gtkFixedSetVisible (boolean visible);
int getMenuBarHeight ()
{
return menuBar == null ? 0 : getMenuBarHeight (menuBar);
}
public void setMenuBar (MenuBar bar)
{
if (bar == null)
{
if (menuBar != null)
if (bar == null && menuBar != null)
{
gtkLayoutSetVisible(false);
removeMenuBarPeer();
// We're removing the menubar.
gtkFixedSetVisible (false);
menuBar = null;
moveLayout(menuBarHeight);
removeMenuBarPeer ();
insets.top -= menuBarHeight;
menuBarHeight = 0;
awtComponent.doLayout();
gtkLayoutSetVisible(true);
menuBarHeight = 0;
awtComponent.validate ();
gtkFixedSetVisible (true);
}
}
else
{
gtkLayoutSetVisible(false);
int oldHeight = 0;
if (menuBar != null)
else if (bar != null && menuBar == null)
{
removeMenuBarPeer();
oldHeight = menuBarHeight;
insets.top -= menuBarHeight;
// We're adding a menubar where there was no menubar before.
gtkFixedSetVisible (false);
menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
setMenuBarPeer (menuBar);
int menuBarWidth =
awtComponent.getWidth () - insets.left - insets.right;
if (menuBarWidth > 0)
setMenuBarWidth (menuBar, menuBarWidth);
menuBarHeight = getMenuBarHeight ();
insets.top += menuBarHeight;
awtComponent.validate ();
gtkFixedSetVisible (true);
}
else if (bar != null && menuBar != null)
{
// We're swapping the menubar.
gtkFixedSetVisible (false);
removeMenuBarPeer();
int oldHeight = menuBarHeight;
int menuBarWidth =
awtComponent.getWidth () - insets.left - insets.right;
menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer ();
setMenuBarPeer (menuBar);
if (menuBarWidth > 0)
setMenuBarWidth (menuBar, menuBarWidth);
menuBarHeight = getMenuBarHeight ();
if (oldHeight != menuBarHeight)
{
insets.top += (menuBarHeight - oldHeight);
awtComponent.validate ();
}
gtkFixedSetVisible (true);
}
menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
setMenuBarPeer(menuBar);
menuBarHeight = getMenuBarHeight (menuBar);
if (oldHeight != menuBarHeight)
moveLayout(oldHeight - menuBarHeight);
insets.top += menuBarHeight;
awtComponent.doLayout();
gtkLayoutSetVisible(true);
}
}
public void setBounds (int x, int y, int width, int height)
{
int menuBarWidth = width - insets.left - insets.right;
if (menuBar != null && menuBarWidth > 0)
setMenuBarWidth (menuBar, menuBarWidth);
nativeSetBounds (x, y,
width - insets.left - insets.right,
height - insets.top - insets.bottom
@ -151,7 +173,7 @@ public class GtkFramePeer extends GtkWindowPeer
native void nativeSetIconImageFromData (int[] pixels, int width, int height);
public void setIconImage (Image image)
{
if (image != null)
if (image != null && image instanceof GtkImage)
{
GtkImage img = (GtkImage) image;
// FIXME: Image should be loaded, but if not, do image loading here.
@ -206,15 +228,20 @@ public class GtkFramePeer extends GtkWindowPeer
|| frame_width != awtComponent.getWidth()
|| frame_height != awtComponent.getHeight())
{
if (frame_width != awtComponent.getWidth() && menuBar != null
&& width > 0)
setMenuBarWidth (menuBar, width);
setBoundsCallback ((Window) awtComponent,
frame_x,
frame_y,
frame_width,
frame_height);
}
awtComponent.validate();
}
protected void postMouseEvent(int id, long when, int mods, int x, int y,
int clickCount, boolean popupTrigger)
{
@ -225,10 +252,11 @@ public class GtkFramePeer extends GtkWindowPeer
protected void postExposeEvent (int x, int y, int width, int height)
{
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x + insets.left,
y + insets.top,
width, height)));
if (!isInRepaint)
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x + insets.left,
y + insets.top,
width, height)));
}
public int getState ()

View File

@ -82,4 +82,6 @@ public class GtkGenericPeer
// Let's assume this will never wrap.
return next_native_state++;
}
native void gtkWidgetModifyFont (String name, int style, int size);
}

View File

@ -230,7 +230,7 @@ public class GtkImage extends Image implements ImageConsumer
int offset, int scansize)
{
setPixels (x, y, width, height, cm, convertPixels (pixels), offset,
scansize);
scansize);
if (observer != null)
observer.imageUpdate (this,
@ -255,7 +255,8 @@ public class GtkImage extends Image implements ImageConsumer
if (scansize == width && height == 1)
{
System.arraycopy (pixels, offset,
// Copy contents of pixels array into pixel cache.
System.arraycopy (pixels, offset,
pixelCache, y * this.width + x,
pixels.length - offset);
}
@ -274,7 +275,7 @@ public class GtkImage extends Image implements ImageConsumer
if (status == ImageConsumer.STATICIMAGEDONE && isCacheable)
isLoaded = true;
if (status == ImageConsumer.SINGLEFRAMEDONE)
if (status == ImageConsumer.SINGLEFRAME)
isCacheable = false;
if (observer != null)
@ -289,7 +290,7 @@ public class GtkImage extends Image implements ImageConsumer
-1, -1, -1, -1);
}
if (source != null)
if (source != null && status != ImageConsumer.SINGLEFRAME)
source.removeConsumer (this);
}

View File

@ -42,6 +42,7 @@ import java.awt.Color;
import java.awt.Rectangle;
import java.awt.image.ColorModel;
import java.awt.image.ImageConsumer;
import java.awt.image.ImageObserver;
import java.util.Hashtable;
public class GtkImagePainter implements Runnable, ImageConsumer
@ -57,10 +58,11 @@ public class GtkImagePainter implements Runnable, ImageConsumer
boolean flipX, flipY;
Rectangle clip;
int s_width, s_height;
ImageObserver observer;
public
GtkImagePainter (GtkImage image, GdkGraphics gc, int x, int y,
int width, int height, Color bgcolor)
int width, int height, Color bgcolor, ImageObserver o)
{
this.image = image;
this.gc = (GdkGraphics) gc.create ();
@ -74,15 +76,16 @@ public class GtkImagePainter implements Runnable, ImageConsumer
flipX = flipY = false;
s_width = s_height = 0;
clip = null;
observer = o;
new Thread (this).start ();
run ();
}
public
GtkImagePainter (GtkImage image, GdkGraphics gc,
int dx1, int dy1, int dx2, int dy2,
int sx1, int sy1, int sx2, int sy2,
Color bgcolor)
Color bgcolor, ImageObserver o)
{
this.image = image;
this.gc = (GdkGraphics) gc.create ();
@ -91,6 +94,7 @@ public class GtkImagePainter implements Runnable, ImageConsumer
redBG = bgcolor.getRed ();
greenBG = bgcolor.getGreen ();
blueBG = bgcolor.getBlue ();
observer = o;
this.width = Math.abs (dx2 - dx1);
this.height = Math.abs (dy2 - dy1);
@ -105,7 +109,7 @@ public class GtkImagePainter implements Runnable, ImageConsumer
s_height = Math.abs (sy2 - sy1);
clip = new Rectangle (sx1, sy1, s_width, s_height);
new Thread (this).start ();
run ();
}
public void
@ -126,7 +130,7 @@ public class GtkImagePainter implements Runnable, ImageConsumer
if (model.equals (ColorModel.getRGBdefault ()))
return pixels;
int ret[] = new int[pixels.length];
for (int i = 0; i < pixels.length; i++)
@ -180,6 +184,11 @@ public class GtkImagePainter implements Runnable, ImageConsumer
startX + x, startY + y,
width, height, convertPixels (pixels, model), offset,
scansize, affine);
if (observer != null)
observer.imageUpdate (image,
ImageObserver.SOMEBITS,
x, y, width, height);
}
public void
@ -247,5 +256,17 @@ public class GtkImagePainter implements Runnable, ImageConsumer
imageComplete (int status)
{
image.imageComplete(status);
if (observer != null)
{
if (status == ImageConsumer.IMAGEERROR)
observer.imageUpdate (null,
ImageObserver.ERROR,
-1, -1, -1, -1);
else
observer.imageUpdate (null,
ImageObserver.ALLBITS,
-1, -1, -1, -1);
}
}
}

View File

@ -47,10 +47,11 @@ public class GtkLabelPeer extends GtkComponentPeer
implements LabelPeer
{
native void create (String text, float alignment);
native void gtkSetFont (String name, int style, int size);
native void gtkWidgetModifyFont (String name, int style, int size);
native void nativeSetAlignment (float alignment);
native public void setText (String text);
native void setNativeBounds (int x, int y, int width, int height);
void create ()
{

View File

@ -41,8 +41,8 @@ package gnu.java.awt.peer.gtk;
import java.awt.AWTEvent;
import java.awt.Dimension;
import java.awt.List;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.peer.ListPeer;
public class GtkListPeer extends GtkComponentPeer
@ -58,9 +58,8 @@ public class GtkListPeer extends GtkComponentPeer
}
native void create (int rows);
native void connectJObject ();
native void connectSignals ();
native void gtkSetFont (String name, int style, int size);
native void gtkWidgetModifyFont (String name, int style, int size);
native void gtkWidgetRequestFocus ();
native void getSize (int rows, int visibleRows, int dims[]);

View File

@ -38,8 +38,10 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.Font;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuComponent;
import java.awt.peer.MenuBarPeer;
import java.awt.peer.MenuPeer;
@ -53,15 +55,25 @@ public class GtkMenuBarPeer extends GtkMenuComponentPeer
public GtkMenuBarPeer (MenuBar target)
{
super (target);
create ();
}
void setFont ()
{
MenuComponent mc = (MenuComponent) awtWidget;
Font f = mc.getFont ();
if (f == null)
mc.setFont (new Font ("Dialog", Font.PLAIN, 12));
}
// FIXME: remove this method or replace it with one that does
// something useful.
/* In Gnome, help menus are no longer right flushed. */
native void nativeSetHelpMenu(MenuPeer menuPeer);
/* In Gnome, help menus are no longer right flushed. */
public void addHelpMenu (Menu menu)
{
nativeSetHelpMenu((MenuPeer) menu.getPeer());
// nativeSetHelpMenu((MenuPeer) menu.getPeer());
}
native public void delMenu (int index);

View File

@ -38,15 +38,28 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.Font;
import java.awt.MenuComponent;
import java.awt.peer.MenuComponentPeer;
public class GtkMenuComponentPeer extends GtkGenericPeer
implements MenuComponentPeer
{
void create ()
{
throw new RuntimeException ();
}
void setFont ()
{
}
public GtkMenuComponentPeer (Object awtWidget)
{
super (awtWidget);
create ();
setFont ();
}
public native void dispose();
}

View File

@ -38,24 +38,31 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.Font;
import java.awt.Menu;
import java.awt.MenuComponent;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.peer.MenuItemPeer;
import java.awt.peer.MenuComponentPeer;
import java.awt.peer.MenuBarPeer;
import java.awt.peer.MenuComponentPeer;
import java.awt.peer.MenuItemPeer;
import java.awt.peer.MenuPeer;
public class GtkMenuItemPeer extends GtkMenuComponentPeer
implements MenuItemPeer
{
native void create (String label);
public native void connectSignals ();
native void connectSignals ();
native void gtkWidgetModifyFont (String name, int style, int size);
void create ()
{
create (((MenuItem) awtWidget).getLabel());
}
public GtkMenuItemPeer (MenuItem item)
{
super (item);
create (item.getLabel ());
setEnabled (item.isEnabled ());
setParent (item);
@ -63,6 +70,21 @@ public class GtkMenuItemPeer extends GtkMenuComponentPeer
connectSignals();
}
void setFont ()
{
MenuComponent mc = ((MenuComponent) awtWidget);
Font f = mc.getFont ();
if (f == null)
{
MenuComponent parent = (MenuComponent) mc.getParent ();
Font pf = parent.getFont ();
gtkWidgetModifyFont (pf.getName (), pf.getStyle (), pf.getSize ());
}
else
gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
}
void setParent (MenuItem item)
{
// add ourself differently, based on what type of parent we have

View File

@ -47,7 +47,6 @@ public class GtkPanelPeer extends GtkContainerPeer
implements PanelPeer
{
native void create ();
native void connectJObject ();
public GtkPanelPeer (Panel p)
{

View File

@ -54,7 +54,7 @@ public class GtkScrollPanePeer extends GtkContainerPeer
create (awtComponent.getWidth (), awtComponent.getHeight ());
}
native void gtkScrolledWindowSetScrollPosition(int x, int y);
// native void gtkScrolledWindowSetScrollPosition(int x, int y);
native void gtkScrolledWindowSetHScrollIncrement (int u);
native void gtkScrolledWindowSetVScrollIncrement (int u);

View File

@ -60,7 +60,6 @@ public class GtkScrollbarPeer extends GtkComponentPeer
int min, int max, int stepIncr, int pageIncr,
int visibleAmount);
native void connectJObject ();
native void connectSignals ();
public GtkScrollbarPeer (Scrollbar s)

View File

@ -52,7 +52,7 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
native void create (int width, int height, int scrollbarVisibility);
native void gtkSetFont (String name, int style, int size);
native void gtkWidgetModifyFont (String name, int style, int size);
native void gtkWidgetRequestFocus ();
void create ()
@ -68,11 +68,7 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
awtComponent.setFont (f);
}
FontMetrics fm;
if (GtkToolkit.useGraphics2D ())
fm = new GdkClasspathFontPeerMetrics (f);
else
fm = new GdkFontMetrics (f);
FontMetrics fm = getFontMetrics (f);
TextArea ta = ((TextArea) awtComponent);
int sizeRows = ta.getRows ();
@ -130,11 +126,7 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
if (f == null)
return new Dimension (width, height);
FontMetrics fm;
if (GtkToolkit.useGraphics2D ())
fm = new GdkClasspathFontPeerMetrics (f);
else
fm = new GdkFontMetrics (f);
FontMetrics fm = getFontMetrics (f);
int sizeRows = rows == 0 ? DEFAULT_ROWS : rows;
int sizeCols = cols == 0 ? DEFAULT_COLS : cols;
@ -163,11 +155,7 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
if (f == null)
return new Dimension (width, height);
FontMetrics fm;
if (GtkToolkit.useGraphics2D ())
fm = new GdkClasspathFontPeerMetrics (f);
else
fm = new GdkFontMetrics (f);
FontMetrics fm = getFontMetrics (f);
int sizeRows = rows == 0 ? DEFAULT_ROWS : rows;
int sizeCols = cols == 0 ? DEFAULT_COLS : cols;

View File

@ -66,11 +66,7 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer
awtComponent.setFont (f);
}
FontMetrics fm;
if (GtkToolkit.useGraphics2D ())
fm = new GdkClasspathFontPeerMetrics (f);
else
fm = new GdkFontMetrics (f);
FontMetrics fm = getFontMetrics (f);
TextField tf = ((TextField) awtComponent);
int cols = tf.getColumns ();
@ -84,7 +80,7 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer
native int gtkEntryGetBorderWidth ();
native void gtkSetFont (String name, int style, int size);
native void gtkWidgetModifyFont (String name, int style, int size);
public GtkTextFieldPeer (TextField tf)
{
@ -117,11 +113,7 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer
if (f == null)
return new Dimension (2 * gtkEntryGetBorderWidth (), dim[1]);
FontMetrics fm;
if (GtkToolkit.useGraphics2D ())
fm = new GdkClasspathFontPeerMetrics (f);
else
fm = new GdkFontMetrics (f);
FontMetrics fm = getFontMetrics (f);
int text_width = cols * fm.getMaxAdvance ();
@ -140,11 +132,7 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer
if (f == null)
return new Dimension (2 * gtkEntryGetBorderWidth (), dim[1]);
FontMetrics fm;
if (GtkToolkit.useGraphics2D ())
fm = new GdkClasspathFontPeerMetrics (f);
else
fm = new GdkFontMetrics (f);
FontMetrics fm = getFontMetrics (f);
int text_width = cols * fm.getMaxAdvance ();

View File

@ -1,5 +1,5 @@
/* GtkToolkit.java -- Implements an AWT Toolkit using GTK for peers
Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,36 +38,40 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import gnu.classpath.Configuration;
import gnu.java.awt.EmbeddedWindow;
import gnu.java.awt.EmbeddedWindowSupport;
import gnu.java.awt.peer.ClasspathFontPeer;
import gnu.java.awt.peer.ClasspathTextLayoutPeer;
import gnu.java.awt.peer.EmbeddedWindowPeer;
import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.font.FontRenderContext;
import java.awt.font.TextAttribute;
import java.awt.im.InputMethodHighlight;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
import java.awt.image.ImageConsumer;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.GraphicsEnvironment;
import java.awt.peer.*;
import java.net.URL;
import java.text.AttributedString;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.Properties;
import gnu.java.awt.EmbeddedWindow;
import gnu.java.awt.EmbeddedWindowSupport;
import gnu.java.awt.peer.EmbeddedWindowPeer;
import gnu.java.awt.peer.ClasspathFontPeer;
import gnu.classpath.Configuration;
import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
/* This class uses a deprecated method java.awt.peer.ComponentPeer.getPeer().
This merits comment. We are basically calling Sun's bluff on this one.
We think Sun has deprecated it simply to discourage its use as it is
We think Sun has deprecated it simply to discourage its use as it is
bad programming style. However, we need to get at a component's peer in
this class. If getPeer() ever goes away, we can implement a hash table
that will keep up with every window's peer, but for now this is faster. */
@ -79,7 +83,6 @@ import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
* drawing contexts. Any other value will cause the older GdkGraphics
* object to be used.
*/
public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
implements EmbeddedWindowSupport
{
@ -87,7 +90,6 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
Hashtable containers = new Hashtable();
static EventQueue q = new EventQueue();
static Clipboard systemClipboard;
static boolean useGraphics2dSet;
static boolean useGraphics2d;
@ -120,14 +122,21 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
public int checkImage (Image image, int width, int height,
ImageObserver observer)
{
int status = ((GtkImage) image).checkImage ();
int status = ImageObserver.ALLBITS
| ImageObserver.WIDTH
| ImageObserver.HEIGHT;
if (image instanceof GtkImage)
{
status = ((GtkImage) image).checkImage ();
}
if (observer != null)
observer.imageUpdate (image, status,
-1, -1,
image.getWidth (observer),
image.getHeight (observer));
return status;
}
@ -304,22 +313,59 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
"SansSerif" });
}
private class LRUCache extends java.util.LinkedHashMap
{
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 LRUCache fontCache = new LRUCache(50);
private LRUCache metricsCache = new LRUCache(50);
private LRUCache imageCache = new LRUCache(50);
public FontMetrics getFontMetrics (Font font)
{
if (useGraphics2D())
return new GdkClasspathFontPeerMetrics (font);
if (metricsCache.containsKey(font))
return (FontMetrics) metricsCache.get(font);
else
return new GdkFontMetrics (font);
{
FontMetrics m;
m = new GdkFontMetrics (font);
metricsCache.put(font, m);
return m;
}
}
public Image getImage (String filename)
{
return createImage (filename);
if (imageCache.containsKey(filename))
return (Image) imageCache.get(filename);
else
{
Image im = createImage(filename);
imageCache.put(filename, im);
return im;
}
}
public Image getImage (URL url)
{
return createImage (url);
if (imageCache.containsKey(url))
return (Image) imageCache.get(url);
else
{
Image im = createImage(url);
imageCache.put(url, im);
return im;
}
}
public PrintJob getPrintJob (Frame frame, String jobtitle, Properties props)
@ -510,8 +556,10 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
*/
private FontPeer getFontPeer (String name, int style, int size)
{
GtkFontPeer fp = new GtkFontPeer (name, style, size);
return fp;
Map attrs = new HashMap ();
ClasspathFontPeer.copyStyleToAttrs (style, attrs);
ClasspathFontPeer.copySizeToAttrs (size, attrs);
return getClasspathFontPeer (name, attrs);
}
/**
@ -522,40 +570,28 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
public ClasspathFontPeer getClasspathFontPeer (String name, Map attrs)
{
if (useGraphics2D())
return new GdkClasspathFontPeer (name, attrs);
Map keyMap = new HashMap (attrs);
// We don't know what kind of "name" the user requested (logical, face,
// family), and we don't actually *need* to know here. The worst case
// involves failure to consolidate fonts with the same backend in our
// cache. This is harmless.
keyMap.put ("GtkToolkit.RequestedFontName", name);
if (fontCache.containsKey (keyMap))
return (ClasspathFontPeer) fontCache.get (keyMap);
else
{
// Default values
int size = 12;
int style = Font.PLAIN;
if (name == null)
name = "Default";
if (attrs.containsKey (TextAttribute.WEIGHT))
{
Float weight = (Float) attrs.get (TextAttribute.WEIGHT);
if (weight.floatValue () >= TextAttribute.WEIGHT_BOLD.floatValue ())
style += Font.BOLD;
}
if (attrs.containsKey (TextAttribute.POSTURE))
{
Float posture = (Float) attrs.get (TextAttribute.POSTURE);
if (posture.floatValue () >= TextAttribute.POSTURE_OBLIQUE.floatValue ())
style += Font.ITALIC;
}
if (attrs.containsKey (TextAttribute.SIZE))
{
Float fsize = (Float) attrs.get (TextAttribute.SIZE);
size = fsize.intValue();
}
return (ClasspathFontPeer) this.getFontPeer (name, style, size);
ClasspathFontPeer newPeer = new GdkFontPeer (name, attrs);
fontCache.put (keyMap, newPeer);
return newPeer;
}
}
public ClasspathTextLayoutPeer getClasspathTextLayoutPeer (AttributedString str,
FontRenderContext frc)
{
return new GdkTextLayout(str, frc);
}
protected EventQueue getSystemEventQueueImpl()
{
return q;

View File

@ -40,8 +40,8 @@ package gnu.java.awt.peer.gtk;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.Frame;
import java.awt.Window;
import java.awt.event.WindowEvent;
import java.awt.peer.WindowPeer;
@ -106,7 +106,6 @@ public class GtkWindowPeer extends GtkContainerPeer
{
}
native void connectJObject ();
native void connectSignals ();
public GtkWindowPeer (Window window)

View File

@ -99,7 +99,8 @@ public class IntrospectionIncubator {
* @param method The method instance to examine.
*/
public void addMethod(Method method) {
if(Modifier.isPublic(method.getModifiers())) {
if(Modifier.isPublic(method.getModifiers()) &&
!Modifier.isStatic(method.getModifiers())) {
String name = ClassHelper.getTruncatedName(method.getName());
Class retType = method.getReturnType();
Class[] params = method.getParameterTypes();

View File

@ -429,6 +429,18 @@
STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown */
#undef STACK_DIRECTION
/* whether byteorder is bigendian */
#undef WORDS_BIGENDIAN
/* Define if the host machine stores words of multi-word integers in
big-endian order. */
#undef HOST_WORDS_BIG_ENDIAN
/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
#undef BYTEORDER
/* Short GCJ version ID */
#undef GCJVERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS

View File

@ -78,6 +78,12 @@ public class Applet extends Panel
/** The applet stub for this applet. */
private transient AppletStub stub;
/** Some applets call setSize in their constructors. In that case,
these fields are used to store width and height values until a
stub is set. */
private transient int width;
private transient int height;
/**
* The accessibility context for this applet.
*
@ -107,6 +113,9 @@ public class Applet extends Panel
public final void setStub(AppletStub stub)
{
this.stub = stub;
if (width != 0 && height != 0)
stub.appletResize (width, height);
}
/**
@ -174,7 +183,13 @@ public class Applet extends Panel
*/
public void resize(int width, int height)
{
stub.appletResize(width, height);
if (stub == null)
{
this.width = width;
this.height = height;
}
else
stub.appletResize(width, height);
}
/**

View File

@ -181,7 +181,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void componentResized(ComponentEvent e)
{
@ -193,7 +193,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void componentMoved(ComponentEvent e)
{
@ -205,7 +205,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void componentShown(ComponentEvent e)
{
@ -217,7 +217,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void componentHidden(ComponentEvent e)
{
@ -229,7 +229,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void componentAdded(ContainerEvent e)
{
@ -241,7 +241,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void componentRemoved(ContainerEvent e)
{
@ -253,7 +253,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void focusGained(FocusEvent e)
{
@ -265,7 +265,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void focusLost(FocusEvent e)
{
@ -277,7 +277,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void keyTyped(KeyEvent e)
{
@ -289,7 +289,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void keyPressed(KeyEvent e)
{
@ -301,7 +301,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void keyReleased(KeyEvent e)
{
@ -313,7 +313,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void mouseClicked(MouseEvent e)
{
@ -325,7 +325,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void mousePressed(MouseEvent e)
{
@ -337,7 +337,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void mouseReleased(MouseEvent e)
{
@ -349,7 +349,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void mouseEntered(MouseEvent e)
{
@ -361,7 +361,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void mouseExited(MouseEvent e)
{
@ -373,7 +373,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void mouseDragged(MouseEvent e)
{
@ -385,7 +385,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void mouseMoved(MouseEvent e)
{
@ -397,7 +397,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void windowOpened(WindowEvent e)
{
@ -409,7 +409,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void windowClosing(WindowEvent e)
{
@ -421,7 +421,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void windowClosed(WindowEvent e)
{
@ -433,7 +433,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void windowIconified(WindowEvent e)
{
@ -445,7 +445,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void windowDeiconified(WindowEvent e)
{
@ -457,7 +457,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void windowActivated(WindowEvent e)
{
@ -469,7 +469,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void windowDeactivated(WindowEvent e)
{
@ -481,7 +481,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
* @since 1.4
*/
public void windowStateChanged(WindowEvent e)
@ -494,7 +494,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
* @since 1.4
*/
public void windowGainedFocus(WindowEvent e)
@ -507,7 +507,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
* @since 1.4
*/
public void windowLostFocus(WindowEvent e)
@ -520,7 +520,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void actionPerformed(ActionEvent e)
{
@ -532,7 +532,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void itemStateChanged(ItemEvent e)
{
@ -544,7 +544,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void adjustmentValueChanged(AdjustmentEvent e)
{
@ -556,7 +556,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
*/
public void textValueChanged(TextEvent e)
{
@ -568,7 +568,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
* @since 1.2
*/
public void inputMethodTextChanged(InputMethodEvent e)
@ -581,7 +581,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
* @since 1.2
*/
public void caretPositionChanged(InputMethodEvent e)
@ -594,7 +594,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
* @since 1.3
*/
public void hierarchyChanged(HierarchyEvent e)
@ -607,7 +607,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
* @since 1.3
*/
public void ancestorMoved(HierarchyEvent e)
@ -620,7 +620,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
* @since 1.3
*/
public void ancestorResized(HierarchyEvent e)
@ -633,7 +633,7 @@ public class AWTEventMulticaster
* Handles this event by dispatching it to the "a" and "b" listener
* instances.
*
* @param event the event to handle
* @param e the event to handle
* @since 1.4
*/
public void mouseWheelMoved(MouseWheelEvent e)

View File

@ -1,5 +1,5 @@
/* AWTKeyStroke.java -- an immutable key stroke
Copyright (C) 2002 Free Software Foundation
Copyright (C) 2002, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -48,9 +48,9 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.Map;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.StringTokenizer;
/**

View File

@ -157,7 +157,7 @@ public interface Adjustable
* Adds a listener that will receive adjustment events for this object.
*
* @param listener the adjustment listener to add
* @see AdjustmentEvent
* @see java.awt.event.AdjustmentEvent
*/
void addAdjustmentListener(AdjustmentListener listener);
@ -165,7 +165,7 @@ public interface Adjustable
* Removes an adjustment listener from this object.
*
* @param listener the adjustment listener to remove
* @see AdjustmentEvent
* @see java.awt.event.AdjustmentEvent
*/
void removeAdjustmentListener(AdjustmentListener listener);
} // interface Adjustable

View File

@ -1,5 +1,5 @@
/* BasicStroke.java --
Copyright (C) 2002, 2003 Free Software Foundation, Inc.
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -69,7 +69,7 @@ public class BasicStroke implements Stroke
* greater than or equal to 1.0f.
* @param dash The array representing the dashing pattern. There must be at
* least one non-zero entry.
* @param dash_phase is negative and dash is not null.
* @param dashPhase is negative and dash is not null.
*
* @exception IllegalArgumentException If one input parameter doesn't meet
* its needs.

View File

@ -1,5 +1,5 @@
/* Button.java -- AWT button widget
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -44,13 +44,21 @@ import java.awt.peer.ButtonPeer;
import java.lang.reflect.Array;
import java.util.EventListener;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleAction;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRelation;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleValue;
/**
* This class provides a button widget for the AWT.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Tom Tromey <tromey@cygnus.com>
*/
public class Button extends Component implements java.io.Serializable
public class Button extends Component
implements java.io.Serializable, Accessible
{
/*
@ -84,7 +92,102 @@ private transient ActionListener action_listeners;
/*
* The number used to generate the name returned by getName.
*/
private static transient long next_button_number = 0;
private static transient long next_button_number;
protected class AccessibleAWTButton extends AccessibleAWTComponent
implements AccessibleAction, AccessibleValue
{
protected AccessibleAWTButton() { }
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
*/
public int getAccessibleActionCount()
{
// Only 1 action possible
return 1;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
*/
public String getAccessibleActionDescription(int i)
{
// JDK 1.4.2 returns the string "click" for action 0. However, the API
// docs don't say what the string to be returned is, beyond being a
// description of the action. So we return the same thing for
// compatibility with 1.4.2.
if (i == 0)
return "click";
return null;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
*/
public boolean doAccessibleAction(int i)
{
if (i != 0)
return false;
processActionEvent(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand));
return true;
}
public String getAccessibleName()
{
return label;
}
public AccessibleAction getAccessibleAction()
{
return this;
}
public AccessibleValue getAccessibleValue()
{
return this;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
*/
public Number getCurrentAccessibleValue()
{
// Docs say return 1 if selected, but buttons can't be selected, right?
return new Integer(0);
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
*/
public boolean setCurrentAccessibleValue(Number number)
{
// Since there's no selection with buttons, we're ignoring this.
// TODO someone who knows shoulw check this.
return false;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
*/
public Number getMinimumAccessibleValue()
{
return new Integer(0);
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
*/
public Number getMaximumAccessibleValue()
{
return new Integer(0);
}
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.PUSH_BUTTON;
}
}
/*************************************************************************/
@ -215,6 +318,13 @@ removeActionListener(ActionListener listener)
action_listeners = AWTEventMulticaster.remove(action_listeners, listener);
}
/**
* Returns all added <code>ActionListener</code> objects.
*
* @return an array of listeners
*
* @since 1.4
*/
public synchronized ActionListener[] getActionListeners()
{
return (ActionListener[])
@ -222,10 +332,15 @@ removeActionListener(ActionListener listener)
ActionListener.class);
}
/** Returns all registered EventListers of the given listenerType.
/**
* Returns all registered EventListers of the given listenerType.
* listenerType must be a subclass of EventListener, or a
* ClassClassException is thrown.
*
* @param listenerType the listener type to return
*
* @return an array of listeners
*
* @exception ClassCastException If listenerType doesn't specify a class or
* interface that implements @see java.util.EventListener.
*
@ -314,6 +429,11 @@ paramString()
+ getWidth () + "x" + getHeight () + ",label=" + getLabel ();
}
public AccessibleContext getAccessibleContext()
{
return new AccessibleAWTButton();
}
/**
* Generate a unique name for this button.
*

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1999, 2000, 2002 Free Software Foundation
/* Canvas.java --
Copyright (C) 1999, 2000, 2002, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -37,17 +38,61 @@ exception statement from your version. */
package java.awt;
import java.awt.image.BufferStrategy;
import java.awt.peer.ComponentPeer;
import java.io.Serializable;
public class Canvas extends Component implements java.io.Serializable
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
/**
* The <code>Canvas</code> component provides a blank rectangular
* area, which the client application can use for drawing and for
* capturing events. By overriding the <code>paint()</code> method,
* the canvas can be used for anything from simple line drawings to
* full-scale custom components.
*
* @author Original author unknown
* @author Tom Tromey <tromey@redhat.com>
* @author Andrew John Hughes <gnu_andrew@member.fsf.org>
* @since 1.0
*/
public class Canvas
extends Component
implements Serializable, Accessible
{
/**
* Compatible with Sun's JDK.
*/
private static final long serialVersionUID = -2284879212465893870L;
/**
* The graphics configuration associated with the canvas.
*/
transient GraphicsConfiguration graphicsConfiguration;
/**
* The buffer strategy associated with this canvas.
*/
transient BufferStrategy bufferStrategy;
/**
* Initializes a new instance of <code>Canvas</code>.
*/
public Canvas() { }
public Canvas()
{
}
/**
* Initializes a new instance of <code>Canvas</code>
* with the supplied graphics configuration.
*
* @param graphicsConfiguration the graphics configuration to use
* for this particular canvas.
*/
public Canvas(GraphicsConfiguration graphicsConfiguration)
{
this.graphicsConfiguration = graphicsConfiguration;
@ -71,9 +116,11 @@ public class Canvas extends Component implements java.io.Serializable
}
/**
* Repaints the canvas window. This method should be overriden by
* Repaints the canvas window. This method should be overridden by
* a subclass to do something useful, as this method simply paints
* the window with the background color.
*
* @param gfx the <code>Graphics</code> to use for painting
*/
public void paint(Graphics gfx)
{
@ -86,6 +133,86 @@ public class Canvas extends Component implements java.io.Serializable
gfx.fillRect(0, 0, size.width, size.height);
}
// Serialization constant
private static final long serialVersionUID = -2284879212465893870L;
/**
* This class provides accessibility support for the canvas.
*/
protected class AccessibleAWTCanvas
extends AccessibleAWTComponent
{
/**
* For compatability with Sun's JDK
*/
private static final long serialVersionUID = -6325592262103146699L;
/**
* Constructor for the accessible canvas.
*/
protected AccessibleAWTCanvas()
{
}
/**
* Returns the accessible role for the canvas.
*
* @return an instance of <code>AccessibleRole</code>, describing
* the role of the canvas.
*/
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.CANVAS;
}
}
/**
* Gets the AccessibleContext associated with this <code>Canvas</code>.
* The context is created, if necessary.
*
* @return the associated context
*/
public AccessibleContext getAccessibleContext()
{
/* Create the context if this is the first request */
if (accessibleContext == null)
{
/* Create the context */
accessibleContext = new AccessibleAWTCanvas();
}
return accessibleContext;
}
/**
* Returns the buffer strategy used by the canvas.
*
* @return the buffer strategy.
* @since 1.4
*/
public BufferStrategy getBufferStrategy()
{
return bufferStrategy;
}
/**
* Updates the canvas in response to a request to
* <code>repaint()</code> it. The canvas is cleared
* with the current background colour, before <code>paint()</code>
* is called to add the new contents. Subclasses
* which override this method should either call this
* method via <code>super.update(graphics)</code> or re-implement
* this behaviour, so as to ensure that the canvas is
* clear before painting takes place.
*
* @param graphics the graphics context.
*/
public void update(Graphics graphics)
{
Dimension size;
/* Clear the canvas */
size = getSize();
graphics.clearRect(0, 0, size.width, size.height);
/* Call the paint method */
paint(graphics);
}
}

View File

@ -1,6 +1,5 @@
// CardLayout.java - Card-based layout engine
/* Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
/* CardLayout.java -- Card-based layout engine
Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -39,21 +38,22 @@ exception statement from your version. */
package java.awt;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.Hashtable;
import java.io.Serializable;
/** This class implements a card-based layout scheme. Each included
/**
* This class implements a card-based layout scheme. Each included
* component is treated as a card. Only one card can be shown at a
* time. This class includes methods for changing which card is
* shown.
*
* @author Tom Tromey <tromey@redhat.com>
* @author Tom Tromey (tromey@redhat.com)
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class CardLayout implements LayoutManager2, Serializable
{
static final long serialVersionUID = -4328196481005934313L;
private static final long serialVersionUID = -4328196481005934313L;
/**
* Initializes a new instance of <code>CardLayout</code> with horizontal
@ -67,6 +67,7 @@ public class CardLayout implements LayoutManager2, Serializable
/**
* Create a new <code>CardLayout</code> object with the specified
* horizontal and vertical gaps.
*
* @param hgap The horizontal gap
* @param vgap The vertical gap
*/
@ -77,11 +78,14 @@ public class CardLayout implements LayoutManager2, Serializable
this.tab = new Hashtable ();
}
/** Add a new component to the layout. The constraint must be a
/**
* Add a new component to the layout. The constraint must be a
* string which is used to name the component. This string can
* later be used to refer to the particular component.
*
* @param comp The component to add
* @param constraints The name by which the component can later be called
*
* @exception IllegalArgumentException If `constraints' is not a
* <code>String</code>
*/
@ -93,10 +97,13 @@ public class CardLayout implements LayoutManager2, Serializable
addLayoutComponent ((String) constraints, comp);
}
/** Add a new component to the layout. The name can be used later
/**
* Add a new component to the layout. The name can be used later
* to refer to the component.
*
* @param name The name by which the component can later be called
* @param comp The component to add
*
* @deprecated This method is deprecated in favor of
* <code>addLayoutComponent(Component, Object)</code>.
*/
@ -104,13 +111,12 @@ public class CardLayout implements LayoutManager2, Serializable
{
tab.put (name, comp);
// First component added is the default component.
if (tab.size() == 1)
comp.setVisible(true);
else
comp.setVisible(false);
comp.setVisible(tab.size() == 1);
}
/** Cause the first component in the container to be displayed.
/**
* Cause the first component in the container to be displayed.
*
* @param parent The parent container
*/
public void first (Container parent)
@ -118,43 +124,63 @@ public class CardLayout implements LayoutManager2, Serializable
gotoComponent (parent, FIRST);
}
/** Return this layout manager's horizontal gap. */
/**
* Return this layout manager's horizontal gap.
*
* @return the horizontal gap
*/
public int getHgap ()
{
return hgap;
}
/** Return this layout manager's x alignment. This method always
/**
* Return this layout manager's x alignment. This method always
* returns Component.CENTER_ALIGNMENT.
*
* @param parent Container using this layout manager instance
*
* @return the x-axis alignment
*/
public float getLayoutAlignmentX (Container parent)
{
return Component.CENTER_ALIGNMENT;
}
/** Returns this layout manager's y alignment. This method always
/**
* Returns this layout manager's y alignment. This method always
* returns Component.CENTER_ALIGNMENT.
*
* @param parent Container using this layout manager instance
*
* @return the y-axis alignment
*/
public float getLayoutAlignmentY (Container parent)
{
return Component.CENTER_ALIGNMENT;
}
/** Return this layout manager's vertical gap. */
/**
* Return this layout manager's vertical gap.
*
* @return the vertical gap
*/
public int getVgap ()
{
return vgap;
}
/** Invalidate this layout manager's state. */
/**
* Invalidate this layout manager's state.
*/
public void invalidateLayout (Container target)
{
// Do nothing.
}
/** Cause the last component in the container to be displayed.
/**
* Cause the last component in the container to be displayed.
*
* @param parent The parent container
*/
public void last (Container parent)
@ -190,8 +216,12 @@ public class CardLayout implements LayoutManager2, Serializable
}
}
/** Get the maximum layout size of the container.
/**
* Get the maximum layout size of the container.
*
* @param target The parent container
*
* @return the maximum layout size
*/
public Dimension maximumLayoutSize (Container target)
{
@ -200,17 +230,23 @@ public class CardLayout implements LayoutManager2, Serializable
return getSize (target, MAX);
}
/** Get the minimum layout size of the container.
/**
* Get the minimum layout size of the container.
*
* @param target The parent container
*
* @return the minimum layout size
*/
public Dimension minimumLayoutSize (Container target)
{
return getSize (target, MIN);
}
/** Cause the next component in the container to be displayed. If
/**
* Cause the next component in the container to be displayed. If
* this current card is the last one in the deck, the first
* component is displayed.
*
* @param parent The parent container
*/
public void next (Container parent)
@ -218,17 +254,23 @@ public class CardLayout implements LayoutManager2, Serializable
gotoComponent (parent, NEXT);
}
/** Get the preferred layout size of the container.
* @param target The parent container
/**
* Get the preferred layout size of the container.
*
* @param parent The parent container
*
* @return the preferred layout size
*/
public Dimension preferredLayoutSize (Container parent)
{
return getSize (parent, PREF);
}
/** Cause the previous component in the container to be displayed.
/**
* Cause the previous component in the container to be displayed.
* If this current card is the first one in the deck, the last
* component is displayed.
*
* @param parent The parent container
*/
public void previous (Container parent)
@ -236,7 +278,9 @@ public class CardLayout implements LayoutManager2, Serializable
gotoComponent (parent, PREV);
}
/** Remove the indicated component from this layout manager.
/**
* Remove the indicated component from this layout manager.
*
* @param comp The component to remove
*/
public void removeLayoutComponent (Component comp)
@ -255,7 +299,9 @@ public class CardLayout implements LayoutManager2, Serializable
}
}
/** Set this layout manager's horizontal gap.
/**
* Set this layout manager's horizontal gap.
*
* @param hgap The new gap
*/
public void setHgap (int hgap)
@ -263,7 +309,9 @@ public class CardLayout implements LayoutManager2, Serializable
this.hgap = hgap;
}
/** Set this layout manager's vertical gap.
/**
* Set this layout manager's vertical gap.
*
* @param vgap The new gap
*/
public void setVgap (int vgap)
@ -271,8 +319,10 @@ public class CardLayout implements LayoutManager2, Serializable
this.vgap = vgap;
}
/** Cause the named component to be shown. If the component name is
/**
* Cause the named component to be shown. If the component name is
* unknown, this method does nothing.
*
* @param parent The parent container
* @param name The name of the component to show
*/
@ -307,7 +357,9 @@ public class CardLayout implements LayoutManager2, Serializable
return getClass ().getName () + "[" + hgap + "," + vgap + "]";
}
/** This implements first(), last(), next(), and previous().
/**
* This implements first(), last(), next(), and previous().
*
* @param parent The parent container
* @param what The type of goto: FIRST, LAST, NEXT or PREV
*/
@ -419,13 +471,13 @@ public class CardLayout implements LayoutManager2, Serializable
private Hashtable tab;
// These constants are used by the private gotoComponent method.
private int FIRST = 0;
private int LAST = 1;
private int NEXT = 2;
private int PREV = 3;
private static final int FIRST = 0;
private static final int LAST = 1;
private static final int NEXT = 2;
private static final int PREV = 3;
// These constants are used by the private getSize method.
private int MIN = 0;
private int MAX = 1;
private int PREF = 2;
private static final int MIN = 0;
private static final int MAX = 1;
private static final int PREF = 2;
}

View File

@ -43,6 +43,13 @@ import java.awt.event.ItemListener;
import java.awt.peer.CheckboxPeer;
import java.io.Serializable;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleAction;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleValue;
/**
* This class implements a component which has an on/off state. Two
* or more Checkboxes can be grouped by a CheckboxGroup.
@ -50,7 +57,8 @@ import java.io.Serializable;
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Tom Tromey <tromey@redhat.com>
*/
public class Checkbox extends Component implements ItemSelectable, Serializable
public class Checkbox extends Component
implements ItemSelectable, Accessible, Serializable
{
// FIXME: Need readObject/writeObject for this.
@ -86,6 +94,96 @@ private boolean state;
// The list of listeners for this object.
private transient ItemListener item_listeners;
protected class AccessibleAWTCheckBox
extends AccessibleAWTComponent
implements ItemListener, AccessibleAction, AccessibleValue
{
/* (non-Javadoc)
* @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
*/
public void itemStateChanged(ItemEvent event)
{
firePropertyChange(ACCESSIBLE_STATE_PROPERTY,
state ? null : AccessibleState.CHECKED,
state ? AccessibleState.CHECKED : null);
}
public AccessibleAction getAccessibleAction()
{
return this;
}
public AccessibleValue getAccessibleValue()
{
return this;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
*/
public int getAccessibleActionCount()
{
// 1.4.1 does this
return 0;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
*/
public String getAccessibleActionDescription(int i)
{
return null;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
*/
public boolean doAccessibleAction(int i)
{
return false;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
*/
public Number getCurrentAccessibleValue()
{
return null;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
*/
public boolean setCurrentAccessibleValue(Number number)
{
return false;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
*/
public Number getMinimumAccessibleValue()
{
return null;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
*/
public Number getMaximumAccessibleValue()
{
return null;
}
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.CHECK_BOX;
}
}
/*************************************************************************/
/*
@ -392,4 +490,11 @@ paramString()
+ "," + super.paramString());
}
public AccessibleContext getAccessibleContext()
{
AccessibleAWTCheckBox ac = new AccessibleAWTCheckBox();
addItemListener(ac);
return ac;
}
} // class Checkbox

View File

@ -1,5 +1,5 @@
/* CheckboxMenuItem.java -- A menu option with a checkbox on it.
Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -41,7 +41,6 @@ package java.awt;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.peer.CheckboxMenuItemPeer;
import java.awt.peer.MenuItemPeer;
import java.util.EventListener;
/**
@ -175,7 +174,7 @@ setState(boolean state)
* Returns an array of length 1 with the menu item label for this object
* if the state is on. Otherwise <code>null</code> is returned.
*
* @param An array with this menu item's label if it has a state of on,
* @return An array with this menu item's label if it has a state of on,
* or <code>null</code> otherwise.
*/
public Object[]
@ -198,12 +197,9 @@ getSelectedObjects()
public synchronized void
addNotify()
{
if (peer != null)
{
// This choice of toolkit seems unsatisfying, but I'm not sure
// what else to do.
peer = getToolkit().createCheckboxMenuItem(this);
}
if (peer == null)
peer = getToolkit().createCheckboxMenuItem(this);
super.addNotify ();
}

View File

@ -1,5 +1,5 @@
/* Choice.java -- Java choice button widget.
Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -45,6 +45,10 @@ import java.io.Serializable;
import java.util.EventListener;
import java.util.Vector;
import javax.accessibility.AccessibleAction;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
/**
* This class implements a drop down choice list.
*
@ -79,6 +83,53 @@ private int selectedIndex = -1;
// Listener chain
private ItemListener item_listeners;
protected class AccessibleAWTChoice
extends Component.AccessibleAWTComponent
implements AccessibleAction
{
public AccessibleAction getAccessibleAction()
{
return this;
}
// FIXME: I think this is right, but should be checked by someone who
// knows better.
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.POPUP_MENU;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
*/
public int getAccessibleActionCount()
{
return pItems.size();
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
*/
public String getAccessibleActionDescription(int i)
{
return (String) pItems.get(i);
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
*/
public boolean doAccessibleAction(int i)
{
if (i < 0 || i >= pItems.size())
return false;
Choice.this.processItemEvent(new ItemEvent(Choice.this,
ItemEvent.ITEM_STATE_CHANGED,
this, ItemEvent.SELECTED));
return true;
}
}
/*************************************************************************/
/*
@ -169,6 +220,8 @@ add(String item)
ChoicePeer cp = (ChoicePeer) peer;
cp.add (item, i);
}
else if (selectedIndex == -1)
select(0);
}
/*************************************************************************/
@ -218,6 +271,8 @@ insert(String item, int index)
ChoicePeer cp = (ChoicePeer) peer;
cp.add (item, index);
}
else if (selectedIndex == -1 || selectedIndex >= index)
select(0);
}
/*************************************************************************/
@ -261,6 +316,13 @@ remove(int index)
ChoicePeer cp = (ChoicePeer) peer;
cp.remove (index);
}
else
{
if (getItemCount() == 0)
selectedIndex = -1;
else if (index == selectedIndex)
select(0);
}
if (selectedIndex > index)
--selectedIndex;
@ -501,4 +563,9 @@ paramString()
{
return (ItemListener[]) getListeners (ItemListener.class);
}
public AccessibleContext getAccessibleContext()
{
return new AccessibleAWTChoice();
}
} // class Choice

View File

@ -1,5 +1,5 @@
/* Component.java -- a graphics component
Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -47,16 +47,16 @@ import java.awt.event.FocusListener;
import java.awt.event.HierarchyBoundsListener;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.InputEvent;
import java.awt.event.InputMethodEvent;
import java.awt.event.InputMethodListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.event.PaintEvent;
import java.awt.event.WindowEvent;
import java.awt.im.InputContext;
@ -70,8 +70,8 @@ import java.awt.peer.ComponentPeer;
import java.awt.peer.LightweightPeer;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
@ -84,6 +84,7 @@ import java.util.Iterator;
import java.util.Locale;
import java.util.Set;
import java.util.Vector;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleComponent;
import javax.accessibility.AccessibleContext;
@ -293,7 +294,7 @@ public abstract class Component
* @see #getLocale()
* @see #setLocale(Locale)
*/
Locale locale;
Locale locale = Locale.getDefault ();
/**
* True if the object should ignore repaint events (usually because it is
@ -575,8 +576,6 @@ public abstract class Component
{
incrementalDraw = Boolean.getBoolean ("awt.image.incrementalDraw");
redrawRate = Long.getLong ("awt.image.redrawrate");
// Set the default KeyboardFocusManager.
KeyboardFocusManager.setCurrentKeyboardFocusManager (null);
}
// Public and protected API.
@ -785,13 +784,15 @@ public abstract class Component
* events).
*
* @param enabled true to enable this component
*
* @see #isEnabled()
* @see #isLightweight()
*
* @since 1.1
*/
public void setEnabled(boolean b)
public void setEnabled(boolean enabled)
{
enable (b);
enable(enabled);
}
/**
@ -810,14 +811,15 @@ public abstract class Component
* Enables or disables this component.
*
* @param enabled true to enable this component
*
* @deprecated use {@link #setEnabled(boolean)} instead
*/
public void enable(boolean b)
public void enable(boolean enabled)
{
if (b)
enable ();
if (enabled)
enable();
else
disable ();
disable();
}
/**
@ -865,15 +867,17 @@ public abstract class Component
* not show the component, if a parent is invisible.
*
* @param visible true to make this component visible
*
* @see #isVisible()
*
* @since 1.1
*/
public void setVisible(boolean b)
public void setVisible(boolean visible)
{
// Inspection by subclassing shows that Sun's implementation calls
// show(boolean) which then calls show() or hide(). It is the show()
// method that is overriden in subclasses like Window.
show (b);
show(visible);
}
/**
@ -904,14 +908,15 @@ public abstract class Component
* Makes this component visible or invisible.
*
* @param visible true to make this component visible
*
* @deprecated use {@link #setVisible(boolean)} instead
*/
public void show(boolean b)
public void show(boolean visible)
{
if (b)
show ();
if (visible)
show();
else
hide ();
hide();
}
/**
@ -1041,16 +1046,21 @@ public abstract class Component
* Sets the font for this component to the specified font. This is a bound
* property.
*
* @param font the new font for this component
* @param newFont the new font for this component
*
* @see #getFont()
*/
public void setFont(Font f)
public void setFont(Font newFont)
{
firePropertyChange("font", font, f);
if (font == newFont)
return;
Font oldFont = font;
font = newFont;
if (peer != null)
peer.setFont(f);
peer.setFont(font);
firePropertyChange("font", oldFont, newFont);
invalidate();
font = f;
}
/**
@ -1087,12 +1097,16 @@ public abstract class Component
* Sets the locale for this component to the specified locale. This is a
* bound property.
*
* @param locale the new locale for this component
* @param newLocale the new locale for this component
*/
public void setLocale(Locale l)
public void setLocale(Locale newLocale)
{
firePropertyChange("locale", locale, l);
locale = l;
if (locale == newLocale)
return;
Locale oldLocale = locale;
locale = newLocale;
firePropertyChange("locale", oldLocale, newLocale);
// New writing/layout direction or more/less room for localized labels.
invalidate();
}
@ -1366,7 +1380,7 @@ public abstract class Component
shouldRepaintSelf = parentBounds.intersects(newBounds);
}
if (shouldRepaintParent)
if (shouldRepaintParent && parent != null)
parent.repaint(oldx, oldy, oldwidth, oldheight);
if (shouldRepaintSelf)
repaint();
@ -1787,7 +1801,8 @@ public abstract class Component
* relative to this component. Subclasses should call either
* <code>super.update(g)</code> or <code>paint(g)</code>.
*
* @param graphics the graphics context for this update
* @param g the graphics context for this update
*
* @see #paint(Graphics)
* @see #repaint()
*/
@ -1808,7 +1823,8 @@ public abstract class Component
/**
* Paints this entire component, including any sub-components.
*
* @param graphics the graphics context for this paint job
* @param g the graphics context for this paint job
*
* @see #paint(Graphics)
*/
public void paintAll(Graphics g)
@ -1870,8 +1886,8 @@ public abstract class Component
* @param tm milliseconds before this component should be repainted
* @param x the X coordinate of the upper left of the region to repaint
* @param y the Y coordinate of the upper left of the region to repaint
* @param w the width of the region to repaint
* @param h the height of the region to repaint
* @param width the width of the region to repaint
* @param height the height of the region to repaint
* @see #update(Graphics)
*/
public void repaint(long tm, int x, int y, int width, int height)
@ -1891,7 +1907,8 @@ public abstract class Component
* done in a different manner from painting. However, the implementation
* in this class simply calls the <code>paint()</code> method.
*
* @param graphics the graphics context of the print device
* @param g the graphics context of the print device
*
* @see #paint(Graphics)
*/
public void print(Graphics g)
@ -1905,7 +1922,8 @@ public abstract class Component
* painting. However, the implementation in this class simply calls the
* <code>paintAll()</code> method.
*
* @param graphics the graphics context of the print device
* @param g the graphics context of the print device
*
* @see #paintAll(Graphics)
*/
public void printAll(Graphics g)
@ -1923,7 +1941,7 @@ public abstract class Component
*
* <p>The coordinate system used depends on the particular flags.
*
* @param image the image that has been updated
* @param img the image that has been updated
* @param flags tlags as specified in <code>ImageObserver</code>
* @param x the X coordinate
* @param y the Y coordinate
@ -2270,7 +2288,7 @@ public abstract class Component
{
boolean handled = handleEvent (e);
if (!handled)
if (!handled && getParent() != null)
// FIXME: need to translate event coordinates to parent's
// coordinate space.
handled = getParent ().postEvent (e);
@ -2289,9 +2307,9 @@ public abstract class Component
* @see #getComponentListeners()
* @since 1.1
*/
public synchronized void addComponentListener(ComponentListener l)
public synchronized void addComponentListener(ComponentListener listener)
{
componentListener = AWTEventMulticaster.add(componentListener, l);
componentListener = AWTEventMulticaster.add(componentListener, listener);
if (componentListener != null)
enableEvents(AWTEvent.COMPONENT_EVENT_MASK);
}
@ -2306,9 +2324,9 @@ public abstract class Component
* @see #getComponentListeners()
* @since 1.1
*/
public synchronized void removeComponentListener(ComponentListener l)
public synchronized void removeComponentListener(ComponentListener listener)
{
componentListener = AWTEventMulticaster.remove(componentListener, l);
componentListener = AWTEventMulticaster.remove(componentListener, listener);
}
/**
@ -2337,9 +2355,9 @@ public abstract class Component
* @see #getFocusListeners()
* @since 1.1
*/
public synchronized void addFocusListener(FocusListener l)
public synchronized void addFocusListener(FocusListener listener)
{
focusListener = AWTEventMulticaster.add(focusListener, l);
focusListener = AWTEventMulticaster.add(focusListener, listener);
if (focusListener != null)
enableEvents(AWTEvent.FOCUS_EVENT_MASK);
}
@ -2354,9 +2372,9 @@ public abstract class Component
* @see #getFocusListeners()
* @since 1.1
*/
public synchronized void removeFocusListener(FocusListener l)
public synchronized void removeFocusListener(FocusListener listener)
{
focusListener = AWTEventMulticaster.remove(focusListener, l);
focusListener = AWTEventMulticaster.remove(focusListener, listener);
}
/**
@ -2384,9 +2402,9 @@ public abstract class Component
* @see #getHierarchyListeners()
* @since 1.3
*/
public synchronized void addHierarchyListener(HierarchyListener l)
public synchronized void addHierarchyListener(HierarchyListener listener)
{
hierarchyListener = AWTEventMulticaster.add(hierarchyListener, l);
hierarchyListener = AWTEventMulticaster.add(hierarchyListener, listener);
if (hierarchyListener != null)
enableEvents(AWTEvent.HIERARCHY_EVENT_MASK);
}
@ -2401,9 +2419,9 @@ public abstract class Component
* @see #getHierarchyListeners()
* @since 1.3
*/
public synchronized void removeHierarchyListener(HierarchyListener l)
public synchronized void removeHierarchyListener(HierarchyListener listener)
{
hierarchyListener = AWTEventMulticaster.remove(hierarchyListener, l);
hierarchyListener = AWTEventMulticaster.remove(hierarchyListener, listener);
}
/**
@ -2433,10 +2451,10 @@ public abstract class Component
* @since 1.3
*/
public synchronized void
addHierarchyBoundsListener(HierarchyBoundsListener l)
addHierarchyBoundsListener(HierarchyBoundsListener listener)
{
hierarchyBoundsListener =
AWTEventMulticaster.add(hierarchyBoundsListener, l);
AWTEventMulticaster.add(hierarchyBoundsListener, listener);
if (hierarchyBoundsListener != null)
enableEvents(AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK);
}
@ -2452,10 +2470,10 @@ public abstract class Component
* @since 1.3
*/
public synchronized void
removeHierarchyBoundsListener(HierarchyBoundsListener l)
removeHierarchyBoundsListener(HierarchyBoundsListener listener)
{
hierarchyBoundsListener =
AWTEventMulticaster.remove(hierarchyBoundsListener, l);
AWTEventMulticaster.remove(hierarchyBoundsListener, listener);
}
/**
@ -2484,9 +2502,9 @@ public abstract class Component
* @see #getKeyListeners()
* @since 1.1
*/
public synchronized void addKeyListener(KeyListener l)
public synchronized void addKeyListener(KeyListener listener)
{
keyListener = AWTEventMulticaster.add(keyListener, l);
keyListener = AWTEventMulticaster.add(keyListener, listener);
if (keyListener != null)
enableEvents(AWTEvent.KEY_EVENT_MASK);
}
@ -2501,9 +2519,9 @@ public abstract class Component
* @see #getKeyListeners()
* @since 1.1
*/
public synchronized void removeKeyListener(KeyListener l)
public synchronized void removeKeyListener(KeyListener listener)
{
keyListener = AWTEventMulticaster.remove(keyListener, l);
keyListener = AWTEventMulticaster.remove(keyListener, listener);
}
/**
@ -2531,9 +2549,9 @@ public abstract class Component
* @see #getMouseListeners()
* @since 1.1
*/
public synchronized void addMouseListener(MouseListener l)
public synchronized void addMouseListener(MouseListener listener)
{
mouseListener = AWTEventMulticaster.add(mouseListener, l);
mouseListener = AWTEventMulticaster.add(mouseListener, listener);
if (mouseListener != null)
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
@ -2548,9 +2566,9 @@ public abstract class Component
* @see #getMouseListeners()
* @since 1.1
*/
public synchronized void removeMouseListener(MouseListener l)
public synchronized void removeMouseListener(MouseListener listener)
{
mouseListener = AWTEventMulticaster.remove(mouseListener, l);
mouseListener = AWTEventMulticaster.remove(mouseListener, listener);
}
/**
@ -2578,9 +2596,9 @@ public abstract class Component
* @see #getMouseMotionListeners()
* @since 1.1
*/
public synchronized void addMouseMotionListener(MouseMotionListener l)
public synchronized void addMouseMotionListener(MouseMotionListener listener)
{
mouseMotionListener = AWTEventMulticaster.add(mouseMotionListener, l);
mouseMotionListener = AWTEventMulticaster.add(mouseMotionListener, listener);
if (mouseMotionListener != null)
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
@ -2595,9 +2613,9 @@ public abstract class Component
* @see #getMouseMotionListeners()
* @since 1.1
*/
public synchronized void removeMouseMotionListener(MouseMotionListener l)
public synchronized void removeMouseMotionListener(MouseMotionListener listener)
{
mouseMotionListener = AWTEventMulticaster.remove(mouseMotionListener, l);
mouseMotionListener = AWTEventMulticaster.remove(mouseMotionListener, listener);
}
/**
@ -2627,9 +2645,9 @@ public abstract class Component
* @see #getMouseWheelListeners()
* @since 1.4
*/
public synchronized void addMouseWheelListener(MouseWheelListener l)
public synchronized void addMouseWheelListener(MouseWheelListener listener)
{
mouseWheelListener = AWTEventMulticaster.add(mouseWheelListener, l);
mouseWheelListener = AWTEventMulticaster.add(mouseWheelListener, listener);
if (mouseWheelListener != null)
enableEvents(AWTEvent.MOUSE_WHEEL_EVENT_MASK);
}
@ -2645,9 +2663,9 @@ public abstract class Component
* @see #getMouseWheelListeners()
* @since 1.4
*/
public synchronized void removeMouseWheelListener(MouseWheelListener l)
public synchronized void removeMouseWheelListener(MouseWheelListener listener)
{
mouseWheelListener = AWTEventMulticaster.remove(mouseWheelListener, l);
mouseWheelListener = AWTEventMulticaster.remove(mouseWheelListener, listener);
}
/**
@ -2677,9 +2695,9 @@ public abstract class Component
* @see #getInputMethodRequests()
* @since 1.2
*/
public synchronized void addInputMethodListener(InputMethodListener l)
public synchronized void addInputMethodListener(InputMethodListener listener)
{
inputMethodListener = AWTEventMulticaster.add(inputMethodListener, l);
inputMethodListener = AWTEventMulticaster.add(inputMethodListener, listener);
if (inputMethodListener != null)
enableEvents(AWTEvent.INPUT_METHOD_EVENT_MASK);
}
@ -2694,9 +2712,9 @@ public abstract class Component
* @see #getInputMethodRequests()
* @since 1.2
*/
public synchronized void removeInputMethodListener(InputMethodListener l)
public synchronized void removeInputMethodListener(InputMethodListener listener)
{
inputMethodListener = AWTEventMulticaster.remove(inputMethodListener, l);
inputMethodListener = AWTEventMulticaster.remove(inputMethodListener, listener);
}
/**
@ -2858,7 +2876,7 @@ public abstract class Component
* Processes the specified event. In this class, this method simply
* calls one of the more specific event handlers.
*
* @param event the event to process
* @param e the event to process
* @throws NullPointerException if e is null
* @see #processComponentEvent(ComponentEvent)
* @see #processFocusEvent(FocusEvent)
@ -2909,7 +2927,7 @@ public abstract class Component
* enabled. This method passes the event along to any listeners
* that are attached.
*
* @param event the <code>ComponentEvent</code> to process
* @param e the <code>ComponentEvent</code> to process
* @throws NullPointerException if e is null
* @see ComponentListener
* @see #addComponentListener(ComponentListener)
@ -2942,7 +2960,7 @@ public abstract class Component
* enabled. This method passes the event along to any listeners
* that are attached.
*
* @param event the <code>FocusEvent</code> to process
* @param e the <code>FocusEvent</code> to process
* @throws NullPointerException if e is null
* @see FocusListener
* @see #addFocusListener(FocusListener)
@ -2970,7 +2988,7 @@ public abstract class Component
* enabled. This method passes the event along to any listeners
* that are attached.
*
* @param event the <code>KeyEvent</code> to process
* @param e the <code>KeyEvent</code> to process
* @throws NullPointerException if e is null
* @see KeyListener
* @see #addKeyListener(KeyListener)
@ -3000,7 +3018,7 @@ public abstract class Component
* enabled. This method passes the event along to any listeners
* that are attached.
*
* @param event the <code>MouseEvent</code> to process
* @param e the <code>MouseEvent</code> to process
* @throws NullPointerException if e is null
* @see MouseListener
* @see #addMouseListener(MouseListener)
@ -3037,7 +3055,7 @@ public abstract class Component
* enabled. This method passes the event along to any listeners
* that are attached.
*
* @param event the <code>MouseMotionEvent</code> to process
* @param e the <code>MouseMotionEvent</code> to process
* @throws NullPointerException if e is null
* @see MouseMotionListener
* @see #addMouseMotionListener(MouseMotionListener)
@ -3065,7 +3083,7 @@ public abstract class Component
* enabled. This method passes the event along to any listeners that are
* attached.
*
* @param event the <code>MouseWheelEvent</code> to process
* @param e the <code>MouseWheelEvent</code> to process
* @throws NullPointerException if e is null
* @see MouseWheelListener
* @see #addMouseWheelListener(MouseWheelListener)
@ -3087,7 +3105,7 @@ public abstract class Component
* enabled. This method passes the event along to any listeners that are
* attached.
*
* @param event the <code>InputMethodEvent</code> to process
* @param e the <code>InputMethodEvent</code> to process
* @throws NullPointerException if e is null
* @see InputMethodListener
* @see #addInputMethodListener(InputMethodListener)
@ -3114,7 +3132,7 @@ public abstract class Component
* are enabled. This method passes the event along to any listeners that are
* attached.
*
* @param event the <code>HierarchyEvent</code> to process
* @param e the <code>HierarchyEvent</code> to process
* @throws NullPointerException if e is null
* @see HierarchyListener
* @see #addHierarchyListener(HierarchyListener)
@ -3134,7 +3152,7 @@ public abstract class Component
* are enabled. This method passes the event along to any listeners that are
* attached.
*
* @param event the <code>HierarchyEvent</code> to process
* @param e the <code>HierarchyEvent</code> to process
* @throws NullPointerException if e is null
* @see HierarchyBoundsListener
* @see #addHierarchyBoundsListener(HierarchyBoundsListener)
@ -3587,11 +3605,16 @@ public abstract class Component
*
* @param id one of FORWARD_TRAVERSAL_KEYS, BACKWARD_TRAVERSAL_KEYS,
* or UP_CYCLE_TRAVERSAL_KEYS
*
* @return set of traversal keys
*
* @throws IllegalArgumentException if id is invalid
*
* @see #setFocusTraversalKeys (int, Set)
* @see KeyboardFocusManager#FORWARD_TRAVERSAL_KEYS
* @see KeyboardFocusManager#BACKWARD_TRAVERSAL_KEYS
* @see KeyboardFocusManager#UP_CYCLE_TRAVERSAL_KEYS
*
* @since 1.4
*/
public Set getFocusTraversalKeys (int id)
@ -4087,8 +4110,10 @@ public abstract class Component
/**
* Adds the specified popup menu to this component.
*
* @param menu the popup menu to be added
* @param popup the popup menu to be added
*
* @see #remove(MenuComponent)
*
* @since 1.1
*/
public synchronized void add(PopupMenu popup)
@ -4107,7 +4132,7 @@ public abstract class Component
/**
* Removes the specified popup menu from this component.
*
* @param menu the popup menu to remove
* @param popup the popup menu to remove
* @see #add(PopupMenu)
* @since 1.1
*/
@ -4168,7 +4193,7 @@ public abstract class Component
/**
* Prints a listing of this component to the specified print stream.
*
* @param stream the <code>PrintStream</code> to print to
* @param out the <code>PrintStream</code> to print to
*/
public void list(PrintStream out)
{
@ -4179,7 +4204,7 @@ public abstract class Component
* Prints a listing of this component to the specified print stream,
* starting at the specified indentation point.
*
* @param stream the <code>PrintStream</code> to print to
* @param out the <code>PrintStream</code> to print to
* @param indent the indentation point
*/
public void list(PrintStream out, int indent)
@ -4192,7 +4217,7 @@ public abstract class Component
/**
* Prints a listing of this component to the specified print writer.
*
* @param writer the <code>PrintWrinter</code> to print to
* @param out the <code>PrintWrinter</code> to print to
* @since 1.1
*/
public void list(PrintWriter out)
@ -4204,7 +4229,7 @@ public abstract class Component
* Prints a listing of this component to the specified print writer,
* starting at the specified indentation point.
*
* @param writer the <code>PrintWriter</code> to print to
* @param out the <code>PrintWriter</code> to print to
* @param indent the indentation point
* @since 1.1
*/
@ -4505,7 +4530,7 @@ p * <li>the set of backward traversal keys
*
* @return an AWT 1.0 event representing e
*/
private Event translateEvent (AWTEvent e)
static Event translateEvent (AWTEvent e)
{
Component target = (Component) e.getSource ();
Event translated = null;

View File

@ -35,28 +35,29 @@ 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 java.awt;
import java.awt.event.AWTEventListener;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.peer.ContainerPeer;
import java.awt.peer.LightweightPeer;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.Collections;
import java.util.EventListener;
import java.util.Iterator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.accessibility.Accessible;
import javax.swing.SwingUtilities;
@ -146,7 +147,7 @@ public class Container extends Component
/**
* Returns the component at the specified index.
*
* @param index The index of the component to retrieve.
* @param n The index of the component to retrieve.
*
* @return The requested component.
*
@ -230,7 +231,7 @@ public class Container extends Component
* Adds the specified component to this container at the end of the
* component list.
*
* @param component The component to add to the container.
* @param comp The component to add to the container.
*
* @return The same component that was added.
*/
@ -246,7 +247,7 @@ public class Container extends Component
* <code>add(Component, Object)</code>.
*
* @param name The name of the component to be added.
* @param component The component to be added.
* @param comp The component to be added.
*
* @return The same component that was added.
*
@ -262,7 +263,7 @@ public class Container extends Component
* Adds the specified component to this container at the specified index
* in the component list.
*
* @param component The component to be added.
* @param comp The component to be added.
* @param index The index in the component list to insert this child
* at, or -1 to add at the end of the list.
*
@ -281,7 +282,7 @@ public class Container extends Component
* component list. The layout manager will use the specified constraints
* when laying out this component.
*
* @param component The component to be added to this container.
* @param comp The component to be added to this container.
* @param constraints The layout constraints for this component.
*/
public void add(Component comp, Object constraints)
@ -294,7 +295,7 @@ public class Container extends Component
* in the component list. The layout manager will use the specified
* constraints when layout out this component.
*
* @param component The component to be added.
* @param comp The component to be added.
* @param constraints The layout constraints for this component.
* @param index The index in the component list to insert this child
* at, or -1 to add at the end of the list.
@ -313,7 +314,7 @@ public class Container extends Component
* method. Any subclass doing this must call the superclass version of
* this method in order to ensure proper functioning of the container.
*
* @param component The component to be added.
* @param comp The component to be added.
* @param constraints The layout constraints for this component, or
* <code>null</code> if there are no constraints.
* @param index The index in the component list to insert this child
@ -339,8 +340,6 @@ public class Container extends Component
comp.parent = this;
if (peer != null)
{
comp.addNotify();
if (comp.isLightweight ())
{
enableEvents (comp.eventMask);
@ -527,7 +526,7 @@ public class Container extends Component
/**
* Recursively invalidates the container tree.
*/
private void invalidateTree()
void invalidateTree()
{
for (int i = 0; i < ncomponents; i++)
{
@ -554,10 +553,19 @@ public class Container extends Component
cPeer.beginValidate();
}
doLayout();
for (int i = 0; i < ncomponents; ++i)
{
Component comp = component[i];
if (comp.getPeer () == null)
comp.addNotify();
}
doLayout ();
for (int i = 0; i < ncomponents; ++i)
{
Component comp = component[i];
if (! comp.isValid())
{
if (comp instanceof Container)
@ -572,8 +580,8 @@ public class Container extends Component
}
/* children will call invalidate() when they are layed out. It
is therefore imporant that valid is not set to true
before after the children has been layed out. */
is therefore important that valid is not set to true
until after the children have been layed out. */
valid = true;
if (cPeer != null)
@ -698,12 +706,14 @@ public class Container extends Component
* a superclass method so that lightweight components are properly
* drawn.
*
* @param graphics The graphics context for this paint job.
* @param g The graphics context for this paint job.
*/
public void paint(Graphics g)
{
if (!isShowing())
return;
// Paint self first.
super.paint(g);
// Visit heavyweights as well, in case they were
// erased when we cleared the background for this container.
visitChildren(g, GfxPaintVisitor.INSTANCE, false);
@ -716,7 +726,7 @@ public class Container extends Component
* a superclass method so that lightweight components are properly
* drawn.
*
* @param graphics The graphics context for this update.
* @param g The graphics context for this update.
*/
public void update(Graphics g)
{
@ -730,7 +740,7 @@ public class Container extends Component
* a superclass method so that lightweight components are properly
* drawn.
*
* @param graphics The graphics context for this print job.
* @param g The graphics context for this print job.
*/
public void print(Graphics g)
{
@ -741,7 +751,7 @@ public class Container extends Component
/**
* Paints all of the components in this container.
*
* @param graphics The graphics context for this paint job.
* @param g The graphics context for this paint job.
*/
public void paintComponents(Graphics g)
{
@ -752,7 +762,7 @@ public class Container extends Component
/**
* Prints all of the components in this container.
*
* @param graphics The graphics context for this print job.
* @param g The graphics context for this print job.
*/
public void printComponents(Graphics g)
{
@ -766,9 +776,9 @@ public class Container extends Component
*
* @param listener The listener to add.
*/
public synchronized void addContainerListener(ContainerListener l)
public synchronized void addContainerListener(ContainerListener listener)
{
containerListener = AWTEventMulticaster.add(containerListener, l);
containerListener = AWTEventMulticaster.add(containerListener, listener);
}
/**
@ -777,9 +787,9 @@ public class Container extends Component
*
* @param listener The listener to remove.
*/
public synchronized void removeContainerListener(ContainerListener l)
public synchronized void removeContainerListener(ContainerListener listener)
{
containerListener = AWTEventMulticaster.remove(containerListener, l);
containerListener = AWTEventMulticaster.remove(containerListener, listener);
}
/**
@ -815,7 +825,7 @@ public class Container extends Component
* <code>ContainerEvent</code>, otherwise it calls the superclass
* method.
*
* @param event The event to be processed.
* @param e The event to be processed.
*/
protected void processEvent(AWTEvent e)
{
@ -829,7 +839,7 @@ public class Container extends Component
* Called when a container event occurs if container events are enabled.
* This method calls any registered listeners.
*
* @param event The event that occurred.
* @param e The event that occurred.
*/
protected void processContainerEvent(ContainerEvent e)
{
@ -850,7 +860,7 @@ public class Container extends Component
/**
* AWT 1.0 event processor.
*
* @param event The event that occurred.
* @param e The event that occurred.
*
* @deprecated use {@link #dispatchEvent(AWTEvent)} instead
*/
@ -895,7 +905,8 @@ public class Container extends Component
* unless the point does not exist within this container, in which
* case <code>null</code> is returned.
*
* @param point The point to return the component at.
* @param x The x position of the point to return the component at.
* @param y The y position of the point to return the component at.
*
* @return The component containing the specified point, or <code>null</code>
* if there is no such point.
@ -931,7 +942,7 @@ public class Container extends Component
* unless the point does not exist within this container, in which
* case <code>null</code> is returned.
*
* @param point The point to return the component at.
* @param p The point to return the component at.
* @return The component containing the specified point, or <code>null</code>
* if there is no such point.
*/
@ -1007,7 +1018,7 @@ public class Container extends Component
* Tests whether or not the specified component is contained within
* this components subtree.
*
* @param component The component to test.
* @param comp The component to test.
*
* @return <code>true</code> if this container is an ancestor of the
* specified component, <code>false</code> otherwise.
@ -1046,7 +1057,7 @@ public class Container extends Component
* Writes a listing of this container to the specified stream starting
* at the specified indentation point.
*
* @param stream The <code>PrintStream</code> to write to.
* @param out The <code>PrintStream</code> to write to.
* @param indent The indentation point.
*/
public void list(PrintStream out, int indent)
@ -1063,7 +1074,7 @@ public class Container extends Component
* Writes a listing of this container to the specified stream starting
* at the specified indentation point.
*
* @param stream The <code>PrintWriter</code> to write to.
* @param out The <code>PrintWriter</code> to write to.
* @param indent The indentation point.
*/
public void list(PrintWriter out, int indent)

View File

@ -1,5 +1,5 @@
/* DefaultKeyboardFocusManager.java --
Copyright (C) 2002 Free Software Foundation, Inc.
Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,8 +38,15 @@ exception statement from your version. */
package java.awt;
import java.util.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
// FIXME: finish documentation
public class DefaultKeyboardFocusManager extends KeyboardFocusManager
@ -164,18 +171,15 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
if (e.id == FocusEvent.FOCUS_GAINED)
{
if (((FocusEvent) e).isTemporary ())
setGlobalFocusOwner (target);
else
setGlobalPermanentFocusOwner (target);
}
else if (e.id == FocusEvent.FOCUS_LOST)
{
// We need to set the window's focus owner here; we can't
// set it when the window loses focus because by that time
// the previous focus owner has already lost focus
// (FOCUS_LOST events are delivered before
// WINDOW_LOST_FOCUS events).
if (! (target instanceof Window))
{
if (((FocusEvent) e).isTemporary ())
setGlobalFocusOwner (target);
else
setGlobalPermanentFocusOwner (target);
}
// Keep track of this window's focus owner.
// Find the target Component's top-level ancestor.
Container parent = target.getParent ();
@ -188,9 +192,12 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
(Window) target : (Window) parent;
Component focusOwner = getFocusOwner ();
if (focusOwner != null)
if (focusOwner != null
&& ! (focusOwner instanceof Window))
toplevel.setFocusOwner (focusOwner);
}
else if (e.id == FocusEvent.FOCUS_LOST)
{
if (((FocusEvent) e).isTemporary ())
setGlobalFocusOwner (null);
else

View File

@ -1,4 +1,5 @@
/* Copyright (C) 2000, 2002 Free Software Foundation
/* EventDispatchThread.java -
Copyright (C) 2000, 2002, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -34,22 +35,22 @@ 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. */
/** @author Bryce McKinlay */
/* Status: believed complete, but untested. */
package java.awt;
/**
* @author Bryce McKinlay
* @status believed complete, but untested.
*/
class EventDispatchThread extends Thread
{
private static int dispatchThreadNum = 1;
private static int dispatchThreadNum;
private EventQueue queue;
EventDispatchThread(EventQueue queue)
{
super();
setName("AWT-EventQueue-" + dispatchThreadNum++);
setName("AWT-EventQueue-" + ++dispatchThreadNum);
this.queue = queue;
setPriority(NORM_PRIORITY + 1);
start();

View File

@ -155,7 +155,7 @@ public class EventQueue
/**
* Posts a new event to the queue.
*
* @param event The event to post to the queue.
* @param evt The event to post to the queue.
*
* @exception NullPointerException If event is null.
*/

View File

@ -1,5 +1,5 @@
/* FileDialog.java -- A filename selection dialog box
Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -39,7 +39,6 @@ exception statement from your version. */
package java.awt;
import java.awt.peer.FileDialogPeer;
import java.awt.peer.DialogPeer;
import java.io.FilenameFilter;
import java.io.Serializable;
@ -262,7 +261,7 @@ setFile(String file)
/**
* Returns the filename filter being used by this dialog.
*
* @param The filename filter being used by this dialog.
* @return The filename filter being used by this dialog.
*/
public FilenameFilter
getFilenameFilter()

View File

@ -1,6 +1,5 @@
// FlowLayout.java - Grid-based layout engine
/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation
/* FlowLayout.java -- Grid-based layout engine
Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -47,7 +46,7 @@ import java.io.Serializable;
* supports horizontal and vertical gaps. These are used for spacing
* between components.
*
* @author Tom Tromey <tromey@redhat.com>
* @author Tom Tromey (tromey@redhat.com)
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class FlowLayout implements LayoutManager, Serializable
@ -69,8 +68,12 @@ public class FlowLayout implements LayoutManager, Serializable
// Serialization constant
private static final long serialVersionUID = -7262534875583282631L;
/** Add a new component to the layout. This particular implementation
/**
* Add a new component to the layout. This particular implementation
* does nothing.
*
* @param name the name
* @param comp the component
*/
public void addLayoutComponent (String name, Component comp)
{

View File

@ -38,35 +38,33 @@ exception statement from your version. */
package java.awt;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.font.LineMetrics;
import java.awt.font.TextAttribute;
import java.awt.font.TransformAttribute;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.peer.FontPeer;
import java.io.InputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.Locale;
import java.util.Map;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
import java.text.StringCharacterIterator;
import gnu.java.awt.ClasspathToolkit;
import gnu.java.awt.peer.ClasspathFontPeer;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.font.LineMetrics;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.peer.FontPeer;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.text.AttributedCharacterIterator;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;
/**
* This class represents a windowing system font.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Warren Levy <warrenl@cygnus.com>
* @author Graydon Hoare <graydon@redhat.com>
*/
* This class represents a windowing system font.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Warren Levy (warrenl@cygnus.com)
* @author Graydon Hoare (graydon@redhat.com)
*/
public class Font implements Serializable
{
@ -163,6 +161,26 @@ public static final int HANGING_BASELINE = 2;
*/
public static final int LAYOUT_NO_LIMIT_CONTEXT = 4;
/**
* The logical name of this font.
*
* @since 1.0
*/
protected String name;
/**
* The size of this font in pixels.
*
* @since 1.0
*/
protected int size;
/**
* The style of this font -- PLAIN, BOLD, ITALIC or BOLD+ITALIC.
*
* @since 1.0
*/
protected int style;
// Serialization constant
private static final long serialVersionUID = -4206021311591459213L;
@ -235,7 +253,11 @@ private static final long serialVersionUID = -4206021311591459213L;
size = tokenval;
}
return getFontFromToolkit (name, attrsToMap (style, size));
HashMap attrs = new HashMap();
ClasspathFontPeer.copyStyleToAttrs (style, attrs);
ClasspathFontPeer.copySizeToAttrs (size, attrs);
return getFontFromToolkit (name, attrs);
}
/* These methods delegate to the toolkit. */
@ -245,23 +267,6 @@ private static final long serialVersionUID = -4206021311591459213L;
return (ClasspathToolkit)(Toolkit.getDefaultToolkit ());
}
protected static Map attrsToMap(int style, int size)
{
Map attrs = new HashMap();
attrs.put (TextAttribute.SIZE, new Float ((float)size));
if ((style & BOLD) == BOLD)
attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
else
attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR);
if ((style & ITALIC) == ITALIC)
attrs.put (TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
else
attrs.put (TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR);
return attrs;
}
/* Every factory method in Font should eventually call this. */
protected static Font getFontFromToolkit (String name, Map attribs)
{
@ -281,7 +286,7 @@ private static final long serialVersionUID = -4206021311591459213L;
* Returns a <code>Font</code> object from the passed property name.
*
* @param propname The name of the system property.
* @param default Value to use if the property is not found.
* @param defval Value to use if the property is not found.
*
* @return The requested font, or <code>default</code> if the property
* not exist or is malformed.
@ -326,7 +331,10 @@ private static final long serialVersionUID = -4206021311591459213L;
public Font (String name, int style, int size)
{
this.peer = getPeerFromToolkit (name, attrsToMap (style, size));
HashMap attrs = new HashMap();
ClasspathFontPeer.copyStyleToAttrs (style, attrs);
ClasspathFontPeer.copySizeToAttrs (size, attrs);
this.peer = getPeerFromToolkit (name, attrs);
}
public Font (Map attrs)
@ -629,7 +637,7 @@ private static final long serialVersionUID = -4206021311591459213L;
* GlyphVector} with a mapped glyph for each input glyph code.
*
* @param ctx The rendering context used for precise glyph placement.
* @param chars Array of characters to convert to glyphs.
* @param glyphCodes Array of characters to convert to glyphs.
*
* @return A new {@link GlyphVector} containing glyphs mapped from str,
* through the font's cmap table.

View File

@ -38,6 +38,10 @@ exception statement from your version. */
package java.awt;
import java.awt.font.FontRenderContext;
import java.awt.font.LineMetrics;
import java.text.CharacterIterator;
// FIXME: I leave many methods basically unimplemented. This
// should be reviewed.
@ -349,6 +353,111 @@ toString()
+ ",descent=" + getDescent() + ",height=" + getHeight() + "]");
}
} // class FontMetrics
// Generic FontRenderContext used when getLineMetrics is called with a
// plain Graphics object.
private static final FontRenderContext gRC = new FontRenderContext(null,
false,
false);
/**
* Returns a {@link LineMetrics} object constructed with the
* specified text and the {@link FontRenderContext} of the Graphics
* object when it is an instance of Graphics2D or a generic
* FontRenderContext with a null transform, not anti-aliased and not
* using fractional metrics.
*
* @param text The string to calculate metrics from.
* @param g The Graphics object that will be used.
*
* @return A new {@link LineMetrics} object.
*/
public LineMetrics getLineMetrics(String text, Graphics g)
{
return getLineMetrics(text, 0, text.length(), g);
}
/**
* Returns a {@link LineMetrics} object constructed with the
* specified text and the {@link FontRenderContext} of the Graphics
* object when it is an instance of Graphics2D or a generic
* FontRenderContext with a null transform, not anti-aliased and not
* using fractional metrics.
*
* @param text The string to calculate metrics from.
* @param begin Index of first character in <code>text</code> to measure.
* @param limit Index of last character in <code>text</code> to measure.
* @param g The Graphics object that will be used.
*
* @return A new {@link LineMetrics} object.
*
* @throws IndexOutOfBoundsException if the range [begin, limit] is
* invalid in <code>text</code>.
*/
public LineMetrics getLineMetrics(String text, int begin,
int limit, Graphics g)
{
FontRenderContext rc;
if (g instanceof Graphics2D)
rc = ((Graphics2D) g).getFontRenderContext();
else
rc = gRC;
return font.getLineMetrics(text, begin, limit, rc);
}
/**
* Returns a {@link LineMetrics} object constructed with the
* specified text and the {@link FontRenderContext} of the Graphics
* object when it is an instance of Graphics2D or a generic
* FontRenderContext with a null transform, not anti-aliased and not
* using fractional metrics.
*
* @param chars The string to calculate metrics from.
* @param begin Index of first character in <code>text</code> to measure.
* @param limit Index of last character in <code>text</code> to measure.
* @param g The Graphics object that will be used.
*
* @return A new {@link LineMetrics} object.
*
* @throws IndexOutOfBoundsException if the range [begin, limit] is
* invalid in <code>text</code>.
*/
public LineMetrics getLineMetrics(char[] chars, int begin,
int limit, Graphics g)
{
FontRenderContext rc;
if (g instanceof Graphics2D)
rc = ((Graphics2D) g).getFontRenderContext();
else
rc = gRC;
return font.getLineMetrics(chars, begin, limit, rc);
}
/**
* Returns a {@link LineMetrics} object constructed with the
* specified text and the {@link FontRenderContext} of the Graphics
* object when it is an instance of Graphics2D or a generic
* FontRenderContext with a null transform, not anti-aliased and not
* using fractional metrics.
*
* @param ci An iterator over the string to calculate metrics from.
* @param begin Index of first character in <code>text</code> to measure.
* @param limit Index of last character in <code>text</code> to measure.
* @param g The Graphics object that will be used.
*
* @return A new {@link LineMetrics} object.
*
* @throws IndexOutOfBoundsException if the range [begin, limit] is
* invalid in <code>text</code>.
*/
public LineMetrics getLineMetrics(CharacterIterator ci, int begin,
int limit, Graphics g)
{
FontRenderContext rc;
if (g instanceof Graphics2D)
rc = ((Graphics2D) g).getFontRenderContext();
else
rc = gRC;
return font.getLineMetrics(ci, begin, limit, rc);
}
}

View File

@ -39,7 +39,6 @@ exception statement from your version. */
package java.awt;
import java.awt.peer.FramePeer;
import java.util.Enumeration;
import java.util.Vector;
/**
@ -199,8 +198,8 @@ private String title = "";
/*
* The number used to generate the name returned by getName.
*/
private static transient long next_frame_number = 0;
*/
private static transient long next_frame_number;
/**
* Initializes a new instance of <code>Frame</code> that is not visible
@ -317,6 +316,7 @@ setMenuBar(MenuBar menuBar)
this.menuBar.removeNotify();
if (menuBar != null)
menuBar.addNotify();
invalidateTree ();
((FramePeer) peer).setMenuBar(menuBar);
}
this.menuBar = menuBar;

View File

@ -243,7 +243,7 @@ getClipRect()
* region and the rectangle determined by the specified parameters.
*
* @param x The X coordinate of the upper left corner of the intersect rect.
* @param Y The Y coordinate of the upper left corner of the intersect rect.
* @param y The Y coordinate of the upper left corner of the intersect rect.
* @param width The width of the intersect rect.
* @param height The height of the intersect rect.
*/
@ -279,7 +279,7 @@ getClip();
/**
* Sets the clipping region to the specified <code>Shape</code>.
*
* @param shape The new clipping region.
* @param clip The new clipping region.
*/
public abstract void
setClip(Shape clip);
@ -371,7 +371,7 @@ clearRect(int x, int y, int width, int height);
* @param width The width of the draw rect.
* @param height The height of the draw rect.
* @param arcWidth The width of the corner arcs.
* @param arcHeigth The height of the corner arcs.
* @param arcHeight The height of the corner arcs.
*/
public abstract void
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight);
@ -386,7 +386,7 @@ drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight);
* @param width The width of the fill rect.
* @param height The height of the fill rect.
* @param arcWidth The width of the corner arcs.
* @param arcHeigth The height of the corner arcs.
* @param arcHeight The height of the corner arcs.
*/
public abstract void
fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight);
@ -480,7 +480,7 @@ fillOval(int x, int y, int width, int height);
* @param arcAngle The extent of the arc.
*/
public abstract void
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle);
drawArc(int x, int y, int width, int height, int arcStart, int arcAngle);
/*************************************************************************/
@ -498,7 +498,7 @@ drawArc(int x, int y, int width, int height, int startAngle, int arcAngle);
* @param arcAngle The extent of the arc.
*/
public abstract void
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle);
fillArc(int x, int y, int width, int height, int arcStart, int arcAngle);
/*************************************************************************/
@ -734,7 +734,7 @@ finalize()
/**
* Returns a string representation of this object.
*
* @param A string representation of this object.
* @return A string representation of this object.
*/
public String
toString()

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2002 Free Software Foundation
/* Copyright (C) 2000, 2002, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -34,6 +34,7 @@ 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 java.awt;
import java.awt.font.FontRenderContext;
@ -41,12 +42,10 @@ import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.RenderedImage;
import java.awt.image.ImageObserver;
import java.awt.image.RenderedImage;
import java.awt.image.renderable.RenderableImage;
import java.text.AttributedCharacterIterator;
import java.util.Map;
/**

View File

@ -1,5 +1,5 @@
/* GraphicsEnvironment.java -- information about the graphics environment
Copyright (C) 2002 Free Software Foundation, Inc.
Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,16 +38,17 @@ exception statement from your version. */
package java.awt;
import gnu.java.awt.ClasspathToolkit;
import java.awt.image.BufferedImage;
import java.util.Locale;
import gnu.java.awt.ClasspathToolkit;
/**
* This descibes the collection of GraphicsDevice and Font objects available
* on a given platform. The resources might be local or remote, and specify
* the valid configurations for displaying graphics.
*
* @author Eric Blake <ebb9@email.byu.edu>
* @author Eric Blake (ebb9@email.byu.edu)
* @see GraphicsDevice
* @see GraphicsConfiguration
* @since 1.4

View File

@ -1,6 +1,5 @@
// GridBagConstraints.java - Constraints for GridBag layout manager
/* Copyright (C) 2000, 2001, 2002 Free Software Foundation
/* GridBagConstraints.java -- Constraints for GridBag layout manager
Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -41,8 +40,10 @@ package java.awt;
import java.io.Serializable;
/** This specifies the constraints for a component managed by the
* GridBagLayout layout manager. */
/**
* This specifies the constraints for a component managed by the
* GridBagLayout layout manager.
*/
public class GridBagConstraints implements Cloneable, Serializable
{
static final long serialVersionUID = -1000070633030801713L;

View File

@ -1,5 +1,5 @@
/* GridBagLayout - Layout manager for components according to GridBagConstraints
Copyright (C) 2002, 2003 Free Software Foundation, Inc.
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -40,8 +40,8 @@ package java.awt;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.HashMap;
import java.util.Hashtable;
/**
* @author Michael Koch <konqueror@gmx.de>

View File

@ -1,6 +1,5 @@
// GridLayout.java - Grid-based layout engine
/* Copyright (C) 1999, 2000, 2002 Free Software Foundation
/* GridLayout.java -- Grid-based layout engine
Copyright (C) 1999, 2000, 2002, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -63,7 +62,7 @@ public class GridLayout implements LayoutManager, Serializable
/** Add a new component to the layout. This particular implementation
* does nothing.
* @param name The name of the component to add.
* @param component The component to add.
* @param comp The component to add.
*/
public void addLayoutComponent (String name, Component comp)
{

View File

@ -1,5 +1,5 @@
/* Image.java -- superclass for images
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,7 +38,6 @@ exception statement from your version. */
package java.awt;
import java.awt.image.AreaAveragingScaleFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;

View File

@ -1,5 +1,5 @@
/* KeyboardFocusManager.java -- manage component focusing via the keyboard
Copyright (C) 2002 Free Software Foundation
Copyright (C) 2002, 2004 Free Software Foundation
This file is part of GNU Classpath.
@ -38,8 +38,8 @@ exception statement from your version. */
package java.awt;
import java.awt.event.KeyEvent;
import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyVetoException;
@ -55,20 +55,64 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
// FIXME: finish documentation
/**
*
* FIXME: discuss applet contexts and thread groups and codebases
* being insulated.
*
* FIXME: discuss where default focus traversal key sets apply
* (inherited by child Components etc.)
* The <code>KeyboardFocusManager</code> handles the focusing of
* windows for receiving keyboard events. The manager handles
* the dispatch of all <code>FocusEvent</code>s and
* <code>KeyEvent</code>s, along with <code>WindowEvent</code>s
* relating to the focused window. Users can use the manager
* to ascertain the current focus owner and fire events.
* <br />
* <br />
* The focus owner is the <code>Component</code> that receives
* key events. The focus owner is either the currently focused
* window or a component within this window.
* <br />
* <br />
* The underlying native windowing system may denote the active
* window or its children with special decorations (e.g. a highlighted
* title bar). The active window is always either a <code>Frame</code>
* or <code>Dialog</code>, and is either the currently focused
* window or its owner.
* <br />
* <br />
* Applets may be partitioned into different applet contexts, according
* to their code base. In this case, each context has its own
* <code>KeyboardFocusManager</code>, as opposed to the global
* manager maintained by applets which share the same context.
* Each context is insulated from the others, and they don't interact.
* The resulting behaviour, as with context division, depends on the browser
* supporting the applets. Regardless, there can only ever be
* one focused window, one active window and one focus owner
* per <code>ClassLoader</code>.
* <br />
* <br />
* To support this separation of focus managers, the manager instances
* and the internal state information is grouped by the
* <code>ThreadGroup</code> to which it pertains. With respect to
* applets, each code base has its own <code>ThreadGroup</code>, so the
* isolation of each context is enforced within the manager.
* <br />
* <br />
* By default, the manager defines TAB and Ctrl+TAB as the
* forward focus traversal keys and Shift+TAB and Ctrl+Shift+TAB
* as the backward focus traversal keys. No up or down cycle
* traversal keys are defined by default. Traversal takes effect
* on the firing of a relevant <code>KEY_PRESSED</code> event.
* However, all other key events related to the use of the
* defined focus traversal key sequence are consumed and not
* dispatched.
* <br />
* <br />
* These default traversal keys come into effect on all windows
* for which no alternative set of keys is defined. This also
* applies recursively to any child components of such a window,
* which define no traversal keys of their own.
*
* @author Eric Blake <ebb9@email.byu.edu>
* @author Thomas Fitzsimmons <fitzsim@redhat.com>
* @author Andrew John Hughes <gnu_andrew@member.fsf.org>
* @since 1.4
* @status partially updated to 1.4, needs documentation.
*/
public abstract class KeyboardFocusManager
implements KeyEventDispatcher, KeyEventPostProcessor
@ -182,7 +226,14 @@ public abstract class KeyboardFocusManager
Collections.EMPTY_SET, Collections.EMPTY_SET
};
/**
* A utility class to support the handling of events relating to property changes.
*/
private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport (this);
/**
* A utility class to support the handling of events relating to vetoable changes.
*/
private final VetoableChangeSupport vetoableChangeSupport = new VetoableChangeSupport (this);
/** A list of {@link KeyEventDispatcher}s that process {@link
@ -211,6 +262,10 @@ public abstract class KeyboardFocusManager
public static KeyboardFocusManager getCurrentKeyboardFocusManager ()
{
ThreadGroup currentGroup = Thread.currentThread ().getThreadGroup ();
if (currentKeyboardFocusManagers.get (currentGroup) == null)
setCurrentKeyboardFocusManager (null);
return (KeyboardFocusManager) currentKeyboardFocusManagers.get (currentGroup);
}
@ -623,29 +678,99 @@ public abstract class KeyboardFocusManager
setGlobalObject (currentFocusCycleRoots, cycleRoot, "currentFocusCycleRoot");
}
/**
* Registers the supplied property change listener for receiving
* events caused by the following property changes:
*
* <ul>
* <li>the current focus owner ("focusOwner")</li>
* <li>the permanent focus owner ("permanentFocusOwner")</li>
* <li>the focused window ("focusedWindow")</li>
* <li>the active window ("activeWindow")</li>
* <li>the default focus traversal policy ("defaultFocusTraversalPolicy")</li>
* <li>the default set of forward traversal keys ("forwardDefaultFocusTraversalKeys")</li>
* <li>the default set of backward traversal keys ("backwardDefaultFocusTraversalKeys")</li>
* <li>the default set of up cycle traversal keys ("upCycleDefaultFocusTraversalKeys")</li>
* <li>the default set of down cycle traversal keys ("downCycleDefaultFocusTraversalKeys")</li>
* <li>the current focus cycle root ("currentFocusCycleRoot")</li>
* </ul>
*
* If the supplied listener is null, nothing occurs.
*
* @param l the new listener to register.
* @see KeyboardFocusManager#addPropertyChangeListener(String, java.beans.PropertyChangeListener)
*/
public void addPropertyChangeListener(PropertyChangeListener l)
{
if (l != null)
propertyChangeSupport.addPropertyChangeListener(l);
}
/**
* Removes the supplied property change listener from the list
* of registered listeners. If the supplied listener is null,
* nothing occurs.
*
* @param l the listener to remove.
*/
public void removePropertyChangeListener(PropertyChangeListener l)
{
if (l != null)
propertyChangeSupport.removePropertyChangeListener(l);
}
/**
* Returns the currently registered property change listeners
* in array form. The returned array is empty if no listeners are
* currently registered.
*
* @return an array of registered property change listeners.
*/
public PropertyChangeListener[] getPropertyChangeListeners()
{
return propertyChangeSupport.getPropertyChangeListeners();
}
/**
* Registers a property change listener for receiving events relating
* to a change to a specified property. The supplied property name can be
* either user-defined or one from the following list of properties
* relevant to this class:
*
* <ul>
* <li>the current focus owner ("focusOwner")</li>
* <li>the permanent focus owner ("permanentFocusOwner")</li>
* <li>the focused window ("focusedWindow")</li>
* <li>the active window ("activeWindow")</li>
* <li>the default focus traversal policy ("defaultFocusTraversalPolicy")</li>
* <li>the default set of forward traversal keys ("forwardDefaultFocusTraversalKeys")</li>
* <li>the default set of backward traversal keys ("backwardDefaultFocusTraversalKeys")</li>
* <li>the default set of up cycle traversal keys ("upCycleDefaultFocusTraversalKeys")</li>
* <li>the default set of down cycle traversal keys ("downCycleDefaultFocusTraversalKeys")</li>
* <li>the current focus cycle root ("currentFocusCycleRoot")</li>
* </ul>
*
* Nothing occurs if a null listener is supplied. null is regarded as a valid property name.
*
* @param name the name of the property to handle change events for.
* @param l the listener to register for changes to the specified property.
* @see KeyboardFocusManager#addPropertyChangeListener(java.beans.PropertyChangeListener)
*/
public void addPropertyChangeListener(String name, PropertyChangeListener l)
{
if (l != null)
propertyChangeSupport.addPropertyChangeListener(name, l);
}
/**
* Removes the supplied property change listener registered for the
* specified property from the list of registered listeners. If the
* supplied listener is null, nothing occurs.
*
* @param name the name of the property the listener is
* monitoring changes to.
* @param l the listener to remove.
*/
public void removePropertyChangeListener(String name,
PropertyChangeListener l)
{
@ -653,39 +778,117 @@ public abstract class KeyboardFocusManager
propertyChangeSupport.removePropertyChangeListener(name, l);
}
/**
* Returns the currently registered property change listeners
* in array form, which listen for changes to the supplied property.
* The returned array is empty, if no listeners are currently registered
* for events pertaining to the supplied property.
*
* @param name The property the returned listeners monitor for changes.
* @return an array of registered property change listeners which
* listen for changes to the supplied property.
*/
public PropertyChangeListener[] getPropertyChangeListeners(String name)
{
return propertyChangeSupport.getPropertyChangeListeners(name);
}
/**
* Fires a property change event as a response to a change to
* to the specified property. The event is only fired if a
* change has actually occurred (i.e. o and n are different).
*
* @param name The name of the property to which a change occurred.
* @param o The old value of the property.
* @param n The new value of the property.
*/
protected void firePropertyChange(String name, Object o, Object n)
{
propertyChangeSupport.firePropertyChange(name, o, n);
}
/**
* Registers a vetoable property change listener for receiving events
* relating to the following properties:
*
* <ul>
* <li>the current focus owner ("focusOwner")</li>
* <li>the permanent focus owner ("permanentFocusOwner")</li>
* <li>the focused window ("focusedWindow")</li>
* <li>the active window ("activeWindow")</li>
* </ul>
*
* Nothing occurs if a null listener is supplied.
*
* @param l the listener to register.
* @see KeyboardFocusManager#addVetoableChangeListener(String, java.beans.VetoableChangeListener)
*/
public void addVetoableChangeListener(VetoableChangeListener l)
{
if (l != null)
vetoableChangeSupport.addVetoableChangeListener(l);
}
/**
* Removes the supplied vetoable property change listener from
* the list of registered listeners. If the supplied listener
* is null, nothing occurs.
*
* @param l the listener to remove.
*/
public void removeVetoableChangeListener(VetoableChangeListener l)
{
if (l != null)
vetoableChangeSupport.removeVetoableChangeListener(l);
}
/**
* Returns the currently registered vetoable property change listeners
* in array form. The returned array is empty if no listeners are
* currently registered.
*
* @return an array of registered vetoable property change listeners.
* @since 1.4
*/
public VetoableChangeListener[] getVetoableChangeListeners()
{
return vetoableChangeSupport.getVetoableChangeListeners();
}
/**
* Registers a vetoable property change listener for receiving events relating
* to a vetoable change to a specified property. The supplied property name can be
* either user-defined or one from the following list of properties
* relevant to this class:
*
* <ul>
* <li>the current focus owner ("focusOwner")</li>
* <li>the permanent focus owner ("permanentFocusOwner")</li>
* <li>the focused window ("focusedWindow")</li>
* <li>the active window ("activeWindow")</li>
* </ul>
*
* Nothing occurs if a null listener is supplied. null is regarded as a valid property name.
*
* @param name the name of the property to handle change events for.
* @param l the listener to register for changes to the specified property.
* @see KeyboardFocusManager#addVetoableChangeListener(java.beans.VetoableChangeListener)
*/
public void addVetoableChangeListener(String name, VetoableChangeListener l)
{
if (l != null)
vetoableChangeSupport.addVetoableChangeListener(name, l);
}
/**
* Removes the supplied vetoable property change listener registered
* for the specified property from the list of registered listeners.
* If the supplied listener is null, nothing occurs.
*
* @param name the name of the vetoable property the listener is
* monitoring changes to.
* @param l the listener to remove.
*/
public void removeVetoableChangeListener(String name,
VetoableChangeListener l)
{
@ -693,51 +896,210 @@ public abstract class KeyboardFocusManager
vetoableChangeSupport.removeVetoableChangeListener(name, l);
}
/**
* Returns the currently registered vetoable property change listeners
* in array form, which listen for changes to the supplied property.
* The returned array is empty, if no listeners are currently registered
* for events pertaining to the supplied property.
*
* @param name The property the returned listeners monitor for changes.
* @return an array of registered property change listeners which
* listen for changes to the supplied property.
* @since 1.4
*/
public VetoableChangeListener[] getVetoableChangeListeners(String name)
{
return vetoableChangeSupport.getVetoableChangeListeners(name);
}
/**
* Fires a property change event as a response to a vetoable change to
* to the specified property. The event is only fired if a
* change has actually occurred (i.e. o and n are different).
* In the event that the property change is vetoed, the following
* occurs:
*
* <ol>
* <li>
* This method throws a <code>PropertyVetoException</code> to
* the proposed change.
* </li>
* <li>
* A new event is fired to reverse the previous change.
* </li>
* <li>
* This method again throws a <code>PropertyVetoException</code>
* in response to the reversion.
* </li>
* </ol>
*
* @param name The name of the property to which a change occurred.
* @param o The old value of the property.
* @param n The new value of the property.
* @throws PropertyVetoException if one of the listeners vetos
* the change by throwing this exception.
*/
protected void fireVetoableChange(String name, Object o, Object n)
throws PropertyVetoException
{
vetoableChangeSupport.fireVetoableChange(name, o, n);
}
/**
* Adds a key event dispatcher to the list of registered dispatchers.
* When a key event is fired, each dispatcher's <code>dispatchKeyEvent</code>
* method is called in the order that they were added, prior to the manager
* dispatching the event itself. Notifications halt when one of the
* dispatchers returns true.
* <br />
* <br />
* The same dispatcher can exist multiple times within the list
* of registered dispatchers, and there is no limit on the length
* of this list. A null dispatcher is simply ignored.
*
* @param dispatcher The dispatcher to register.
*/
public void addKeyEventDispatcher(KeyEventDispatcher dispatcher)
{
if (dispatcher != null)
keyEventDispatchers.add(dispatcher);
}
/**
* Removes the specified key event dispatcher from the list of
* registered dispatchers. The manager always dispatches events,
* regardless of its existence within the list. The manager
* can be added and removed from the list, as with any other
* dispatcher, but this does not affect its ability to dispatch
* key events. Non-existent and null dispatchers are simply ignored
* by this method.
*
* @param dispatcher The dispatcher to remove.
*/
public void removeKeyEventDispatcher(KeyEventDispatcher dispatcher)
{
keyEventDispatchers.remove(dispatcher);
}
/**
* Returns the currently registered key event dispatchers in <code>List</code>
* form. At present, this only includes dispatchers explicitly registered
* via the <code>addKeyEventDispatcher()</code> method, but this behaviour
* is subject to change and should not be depended on. The manager itself
* may be a member of the list, but only if explicitly registered. If no
* dispatchers have been registered, the list will be empty.
*
* @return A list of explicitly registered key event dispatchers.
* @see KeyboardFocusManager#addKeyEventDispatcher(java.awt.KeyEventDispatcher)
*/
protected List getKeyEventDispatchers ()
{
return (List) keyEventDispatchers.clone ();
}
/**
* Adds a key event post processor to the list of registered post processors.
* Post processors work in the same way as key event dispatchers, except
* that they are invoked after the manager has dispatched the key event,
* and not prior to this. Each post processor's <code>postProcessKeyEvent</code>
* method is called to see if any post processing needs to be performed. THe
* processors are called in the order in which they were added to the list,
* and notifications continue until one returns true. As with key event
* dispatchers, the manager is implicitly called following this process,
* regardless of whether or not it is present within the list.
* <br />
* <br />
* The same post processor can exist multiple times within the list
* of registered post processors, and there is no limit on the length
* of this list. A null post processor is simply ignored.
*
* @param postProcessor the post processor to register.
* @see KeyboardFocusManager#addKeyEventDispatcher(java.awt.KeyEventDispatcher)
*/
public void addKeyEventPostProcessor (KeyEventPostProcessor postProcessor)
{
if (postProcessor != null)
keyEventPostProcessors.add (postProcessor);
}
/**
* Removes the specified key event post processor from the list of
* registered post processors. The manager always post processes events,
* regardless of its existence within the list. The manager
* can be added and removed from the list, as with any other
* post processor, but this does not affect its ability to post process
* key events. Non-existent and null post processors are simply ignored
* by this method.
*
* @param postProcessor the post processor to remove.
*/
public void removeKeyEventPostProcessor (KeyEventPostProcessor postProcessor)
{
keyEventPostProcessors.remove (postProcessor);
}
/**
* Returns the currently registered key event post processors in <code>List</code>
* form. At present, this only includes post processors explicitly registered
* via the <code>addKeyEventPostProcessor()</code> method, but this behaviour
* is subject to change and should not be depended on. The manager itself
* may be a member of the list, but only if explicitly registered. If no
* post processors have been registered, the list will be empty.
*
* @return A list of explicitly registered key event post processors.
* @see KeyboardFocusManager#addKeyEventPostProcessor(java.awt.KeyEventPostProcessor)
*/
protected List getKeyEventPostProcessors ()
{
return (List) keyEventPostProcessors.clone ();
}
/**
* The AWT event dispatcher uses this method to request that the manager
* handle a particular event. If the manager fails or refuses to
* dispatch the supplied event (this method returns false), the
* AWT event dispatcher will try to dispatch the event itself.
* <br />
* <br />
* The manager is expected to handle all <code>FocusEvent</code>s
* and <code>KeyEvent</code>s, and <code>WindowEvent</code>s
* relating to the focus. Dispatch is done with regard to the
* the focus owner and the currently focused and active windows.
* In handling the event, the source of the event may be overridden.
* <br />
* <br />
* The actual dispatching is performed by calling
* <code>redispatchEvent()</code>. This avoids the infinite recursion
* of dispatch requests which may occur if this method is called on
* the target component.
*
* @param e the event to dispatch.
* @return true if the event was dispatched.
* @see KeyboardFocusManager#redispatchEvent(java.awt.Component, java.awt.AWTEvent)
* @see KeyEvent
* @see FocusEvent
* @see WindowEvent
*/
public abstract boolean dispatchEvent (AWTEvent e);
/**
* Handles redispatching of an event so that recursion of
* dispatch requests does not occur. Event dispatch methods
* within this manager (<code>dispatchEvent()</code>) and
* the key event dispatchers should use this method to handle
* dispatching rather than the dispatch method of the target
* component.
* <br />
* <br />
* <strong>
* This method is not intended for general consumption, and is
* only for the use of the aforementioned classes.
* </strong>
*
* @param target the target component to which the event is
* dispatched.
* @param e the event to dispatch.
*/
public final void redispatchEvent (Component target, AWTEvent e)
{
synchronized (e)
@ -747,42 +1109,203 @@ public abstract class KeyboardFocusManager
}
}
/**
* Attempts to dispatch key events for which no key event dispatcher
* has so far succeeded. This method is usually called by
* <code>dispatchEvent()</code> following the sending of the key
* event to any registered key event dispatchers. If the key
* event reaches this stage, none of the dispatchers returned
* true. This is, of course, always the case if there are no
* registered dispatchers.
* <br />
* <br />
* If this method also fails to handle the key event, then
* false is returned to the caller. In the case of
* <code>dispatchEvent()</code>, the calling method may try
* to handle the event itself or simply forward on the
* false result to its caller. When the event is dispatched
* by this method, a true result is propogated through the
* calling methods.
*
* @param e the key event to dispatch.
* @return true if the event was dispatched successfully.
*/
public abstract boolean dispatchKeyEvent (KeyEvent e);
/**
* Handles the post processing of key events. By default,
* this method will map unhandled key events to appropriate
* <code>MenuShortcut</code>s. The event is consumed
* in the process and the shortcut is activated. This
* method is usually called by <code>dispatchKeyEvent</code>.
*
* @param e the key event to post process.
* @return true by default, as the event was handled.
*/
public abstract boolean postProcessKeyEvent (KeyEvent e);
/**
* Handles focus traversal operations for key events which
* represent focus traversal keys in relation to the supplied
* component. The supplied component is assumed to have the
* focus, whether it does so or not, and the operation is
* carried out as appropriate, with this in mind.
*
* @param focused the component on which to perform focus traversal,
* on the assumption that this component has the focus.
* @param e the possible focus traversal key event.
*/
public abstract void processKeyEvent (Component focused, KeyEvent e);
/**
* Delays all key events following the specified timestamp until the
* supplied component has focus. The AWT calls this method when it is
* determined that a focus change may occur within the native windowing
* system. Any key events which occur following the time specified by
* after are delayed until a <code>FOCUS_GAINED</code> event is received
* for the untilFocused component. The manager is responsible for ensuring
* this takes place.
*
* @param after the timestamp beyond which all key events are delayed until
* the supplied component gains focus.
* @param untilFocused the component to wait on gaining focus.
*/
protected abstract void enqueueKeyEvents (long after, Component untilFocused);
/**
* Removes the key event block specified by the supplied timestamp and component.
* All delayed key events are released for normal dispatching following its
* removal and subsequent key events that would have been blocked are now
* immediately dispatched. If the specified timestamp is below 0, then
* the request with the oldest timestamp is removed.
*
* @param after the timestamp of the key event block to be removed, or a
* value smaller than 0 if the oldest is to be removed.
* @param untilFocused the component of the key event block to be removed.
*/
protected abstract void dequeueKeyEvents (long after, Component untilFocused);
/**
* Discards all key event blocks relating to focus requirements for
* the supplied component, regardless of timestamp.
*
* @param comp the component of the key event block(s) to be removed.
*/
protected abstract void discardKeyEvents (Component comp);
public abstract void focusNextComponent (Component comp);
/**
* Moves the current focus to the next component following
* comp, based on the current focus traversal policy. By
* default, only visible, displayable, accepted components
* can receive focus. <code>Canvas</code>es, <code>Panel</code>s,
* <code>Label</code>s, <code>ScrollPane</code>s, <code>Scrollbar</code>s,
* <code>Window</code>s and lightweight components are judged
* to be unacceptable by default. See the
* <code>DefaultFocusTraversalPolicy</code> for more details.
*
* @param comp the component prior to the one which will
* become the focus, following execution of this method.
* @see DefaultFocusTraversalPolicy
*/
public abstract void focusNextComponent(Component comp);
public abstract void focusPreviousComponent (Component comp);
/**
* Moves the current focus to the previous component, prior to
* comp, based on the current focus traversal policy. By
* default, only visible, displayable, accepted components
* can receive focus. <code>Canvas</code>es, <code>Panel</code>s,
* <code>Label</code>s, <code>ScrollPane</code>s, <code>Scrollbar</code>s,
* <code>Window</code>s and lightweight components are judged
* to be unacceptable by default. See the
* <code>DefaultFocusTraversalPolicy</code> for more details.
*
* @param comp the component following the one which will
* become the focus, following execution of this method.
* @see DefaultFocusTraversalPolicy
*/
public abstract void focusPreviousComponent(Component comp);
public abstract void upFocusCycle (Component comp);
/**
* Moves the current focus upwards by one focus cycle.
* Both the current focus owner and current focus cycle root
* become the focus cycle root of the supplied component.
* However, in the case of a <code>Window</code>, the default
* focus component becomes the focus owner and the focus cycle
* root is not changed.
*
* @param comp the component used as part of the focus traversal.
*/
public abstract void upFocusCycle(Component comp);
public abstract void downFocusCycle (Container cont);
/**
* Moves the current focus downwards by one focus cycle.
* If the supplied container is a focus cycle root, then this
* becomes the current focus cycle root and the focus goes
* to the default component of the specified container.
* Nothing happens for non-focus cycle root containers.
*
* @param cont the container used as part of the focus traversal.
*/
public abstract void downFocusCycle(Container cont);
public final void focusNextComponent ()
/**
* Moves the current focus to the next component, based on the
* current focus traversal policy. By default, only visible,
* displayable, accepted component can receive focus.
* <code>Canvas</code>es, <code>Panel</code>s,
* <code>Label</code>s, <code>ScrollPane</code>s, <code>Scrollbar</code>s,
* <code>Window</code>s and lightweight components are judged
* to be unacceptable by default. See the
* <code>DefaultFocusTraversalPolicy</code> for more details.
*
* @see DefaultFocusTraversalPolicy
*/
public final void focusNextComponent()
{
focusNextComponent (null);
}
public final void focusPreviousComponent ()
/**
* Moves the current focus to the previous component, based on the
* current focus traversal policy. By default, only visible,
* displayable, accepted component can receive focus.
* <code>Canvas</code>es, <code>Panel</code>s,
* <code>Label</code>s, <code>ScrollPane</code>s, <code>Scrollbar</code>s,
* <code>Window</code>s and lightweight components are judged
* to be unacceptable by default. See the
* <code>DefaultFocusTraversalPolicy</code> for more details.
*
* @see DefaultFocusTraversalPolicy
*/
public final void focusPreviousComponent()
{
focusPreviousComponent (null);
}
public final void upFocusCycle ()
/**
* Moves the current focus upwards by one focus cycle,
* so that the new focus owner is the focus cycle root
* of the current owner. The current focus cycle root then
* becomes the focus cycle root of the new focus owner.
* However, in the case of the focus cycle root of the
* current focus owner being a <code>Window</code>, the default
* component of this window becomes the focus owner and the
* focus cycle root is not changed.
*/
public final void upFocusCycle()
{
upFocusCycle (null);
}
public final void downFocusCycle ()
/**
* Moves the current focus downwards by one focus cycle,
* iff the current focus cycle root is a <code>Container</code>.
* Usually, the new focus owner is set to the default component
* of the container and the current focus cycle root is set
* to the current focus owner. Nothing occurs if the current
* focus cycle root is not a container.
*/
public final void downFocusCycle()
{
Component focusOwner = getGlobalFocusOwner ();
if (focusOwner instanceof Container

View File

@ -1,5 +1,5 @@
/* Label.java -- Java label widget
Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -39,14 +39,18 @@ exception statement from your version. */
package java.awt;
import java.awt.peer.LabelPeer;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
/**
* This component is used for displaying simple text strings that cannot
* be edited.
* be edited by the user.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Tom Tromey <tromey@cygnus.com>
* @author Andrew John Hughes <gnu_andrew@member.fsf.org>
*/
public class Label extends Component implements Accessible
{
@ -240,7 +244,7 @@ addNotify()
/**
* Returns a parameter string useful for debugging.
*
* @param A debugging string.
* @return A debugging string.
*/
protected String
paramString()
@ -249,5 +253,65 @@ paramString()
getAlignment() + "," + super.paramString());
}
/**
* This class provides accessibility support for the label.
*/
protected class AccessibleAWTLabel
extends AccessibleAWTComponent
{
/**
* For compatability with Sun's JDK 1.4.2 rev. 5
*/
private static final long serialVersionUID = -3568967560160480438L;
/**
* Constructor for the accessible label.
*/
public AccessibleAWTLabel()
{
}
/**
* Returns the accessible name for the label. This is
* the text used in the label.
*
* @return a <code>String</code> containing the accessible
* name for this label.
*/
public String getAccessibleName()
{
return getText();
}
/**
* Returns the accessible role for the label.
*
* @return an instance of <code>AccessibleRole</code>, describing
* the role of the label.
*/
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.LABEL;
}
}
/**
* Gets the AccessibleContext associated with this <code>Label</code>.
* The context is created, if necessary.
*
* @return the associated context
*/
public AccessibleContext getAccessibleContext()
{
/* Create the context if this is the first request */
if (accessibleContext == null)
{
/* Create the context */
accessibleContext = new AccessibleAWTLabel();
}
return accessibleContext;
}
} // class Label

View File

@ -42,7 +42,7 @@ package java.awt;
* Layout manager for laying out containers based on contraints. The
* constraints control how the layout will proceed.
*
* @author Aaron M. Renn <arenn@urbanophile.com>
* @author Aaron M. Renn (arenn@urbanophile.com)
* @see LayoutManager
* @see Container
* @since 1.0
@ -57,7 +57,7 @@ public interface LayoutManager2 extends LayoutManager
* @param component the component to add
* @param constraints the constraints to satisfy
*/
void addLayoutComponent(Component component, Object contraints);
void addLayoutComponent(Component component, Object constraints);
/**
* Determines the maximum size of the specified target container.

View File

@ -1,5 +1,5 @@
/* List.java -- A listbox widget
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -45,6 +45,7 @@ import java.awt.event.ItemListener;
import java.awt.peer.ListPeer;
import java.util.EventListener;
import java.util.Vector;
import javax.accessibility.Accessible;
/**
@ -129,7 +130,7 @@ List()
* Initializes a new instance of <code>List</code> with the specified
* number of visible lines and multi-select disabled.
*
* @param lines The number of visible lines in the list.
* @param rows The number of visible rows in the list.
*
* @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
*/
@ -145,7 +146,7 @@ List(int rows)
* Initializes a new instance of <code>List</code> with the specified
* number of lines and the specified multi-select setting.
*
* @param lines The number of visible lines in the list.
* @param rows The number of visible rows in the list.
* @param multipleMode <code>true</code> if multiple lines can be selected
* simultaneously, <code>false</code> otherwise.
*

View File

@ -1,5 +1,5 @@
/* MediaTracker.java -- Class used for keeping track of images
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2002i, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,8 +38,8 @@ exception statement from your version. */
package java.awt;
import java.util.ArrayList;
import java.awt.image.ImageObserver;
import java.util.ArrayList;
/**
* This class is used for keeping track of the status of various media

View File

@ -40,8 +40,11 @@ package java.awt;
import java.awt.peer.MenuPeer;
import java.io.Serializable;
import java.util.Vector;
import java.util.Enumeration;
import java.util.Vector;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
/**
* This class represents a pull down or tear off menu in Java's AWT.
@ -72,17 +75,20 @@ private Vector items = new Vector();
/**
* @serial Flag indicating whether or not this menu is a tear off
*/
private boolean isTearOff;
private boolean tearOff;
/**
* @serial Indicates whether or not this is a help menu.
*/
private boolean isHelpMenu;
// From the serialization spec. FIXME: what should it be?
private int menuSerializedDataVersion;
/*
* @serial Unused in this implementation, but present in Sun's
* serialization spec. Value obtained via reflection.
*/
private int menuSerializedDataVersion = 1;
static final String separatorLabel = "-";
static final transient String separatorLabel = "-";
/*************************************************************************/
@ -134,7 +140,7 @@ Menu(String label, boolean isTearOff)
{
super(label);
this.isTearOff = isTearOff;
tearOff = isTearOff;
if (label.equals("Help"))
isHelpMenu = true;
@ -158,7 +164,7 @@ Menu(String label, boolean isTearOff)
public boolean
isTearOff()
{
return(isTearOff);
return(tearOff);
}
/*************************************************************************/
@ -251,8 +257,6 @@ add(String label)
* @param item The menu item to add.
* @param index The index of the menu item.
*
* XXX: FIXME
*
* @exception IllegalArgumentException If the index is less than zero.
* @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
*/
@ -262,12 +266,26 @@ insert(MenuItem item, int index)
if (index < 0)
throw new IllegalArgumentException("Index is less than zero");
items.insertElementAt(item, index);
MenuPeer peer = (MenuPeer) getPeer();
if (peer == null)
return;
MenuPeer mp = (MenuPeer)getPeer();
// FIXME: Need to add a peer method here.
// if (mp != null)
// mp.insertItem(item, index);
int count = getItemCount ();
if (index >= count)
peer.addItem (item);
else
{
for (int i = count - 1; i >= index; i--)
peer.delItem (i);
peer.addItem (item);
for (int i = index; i < count; i++)
peer.addItem ((MenuItem) items.elementAt (i));
}
items.insertElementAt(item, index);
}
/*************************************************************************/
@ -305,8 +323,6 @@ addSeparator()
*
* @param index The index at which to insert a separator bar.
*
* XXX: FIXME
*
* @exception IllegalArgumentException If the index is less than zero.
* @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
*/
@ -339,7 +355,7 @@ remove(int index)
/**
* Removes the specifed item from the menu. If the specified component
* does not exist, this method does nothing. // FIXME: Right?
* does not exist, this method does nothing.
*
* @param item The component to remove.
*/
@ -415,11 +431,32 @@ removeNotify()
public String
paramString()
{
return (",isTearOff=" + isTearOff + ",isHelpMenu=" + isHelpMenu
return (",tearOff=" + tearOff + ",isHelpMenu=" + isHelpMenu
+ super.paramString());
}
// Accessibility API not yet implemented.
// public AccessibleContext getAccessibleContext()
/**
* Basic Accessibility class for Menu. Details get provided in derived
* classes.
*/
protected class AccessibleAWTMenu extends AccessibleAWTMenuItem
{
protected AccessibleAWTMenu()
{
}
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.MENU;
}
}
/* (non-Javadoc)
* @see java.awt.MenuComponent#getAccessibleContext()
*/
public AccessibleContext getAccessibleContext()
{
return new AccessibleAWTMenu();
}
} // class Menu

View File

@ -45,14 +45,19 @@ import java.io.Serializable;
import java.util.Enumeration;
import java.util.Vector;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
/**
* This class implements a menu bar in the AWT system.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Tom Tromey <tromey@redhat.com>
* @author Andrew John Hughes <gnu_andrew@member.fsf.org>
*/
public class MenuBar extends MenuComponent
implements MenuContainer, Serializable
implements MenuContainer, Serializable, Accessible
{
/*
@ -78,6 +83,14 @@ private Menu helpMenu;
*/
private Vector menus = new Vector();
/**
* The accessible context for this component.
*
* @see #getAccessibleContext()
* @serial ignored.
*/
private transient AccessibleContext accessibleContext;
/*************************************************************************/
/*
@ -118,7 +131,7 @@ getHelpMenu()
/**
* Sets the help menu for this menu bar.
*
* @param helpMenu The new help menu for this menu bar.
* @param menu The new help menu for this menu bar.
*/
public synchronized void
setHelpMenu(Menu menu)
@ -134,11 +147,11 @@ setHelpMenu(Menu menu)
menu.parent.remove (menu);
menu.parent = this;
MenuBarPeer peer = (MenuBarPeer) getPeer ();
if (peer != null)
{
menu.addNotify();
MenuBarPeer mp = (MenuBarPeer) peer;
mp.addHelpMenu (menu);
peer.addHelpMenu (menu);
}
}
@ -233,8 +246,7 @@ getMenuCount()
public int
countMenus()
{
// FIXME: How does the help menu fit in here?
return menus.size ();
return menus.size () + (getHelpMenu () == null ? 0 : 1);
}
/*************************************************************************/
@ -242,6 +254,8 @@ countMenus()
/**
* Returns the menu at the specified index.
*
* @param index the index of the menu
*
* @return The requested menu.
*
* @exception ArrayIndexOutOfBoundsException If the index is not valid.
@ -357,4 +371,56 @@ deleteShortcut(MenuShortcut shortcut)
it.deleteShortcut ();
}
/**
* Gets the AccessibleContext associated with this <code>MenuBar</code>.
* The context is created, if necessary.
*
* @return the associated context
*/
public AccessibleContext getAccessibleContext()
{
/* Create the context if this is the first request */
if (accessibleContext == null)
{
/* Create the context */
accessibleContext = new AccessibleAWTMenuBar();
}
return accessibleContext;
}
/**
* This class provides accessibility support for AWT menu bars.
*
* @author Andrew John Hughes <gnu_andrew@member.fsf.org>
*/
protected class AccessibleAWTMenuBar
extends AccessibleAWTMenuComponent
{
/**
* Compatible with JDK 1.4.2 revision 5
*/
private static final long serialVersionUID = -8577604491830083815L;
/**
* This is the default constructor, which simply calls the default
* constructor of the superclass.
*/
protected AccessibleAWTMenuBar()
{
super();
}
/**
* Returns the accessible role relating to the menu bar.
*
* @return <code>AccessibleRole.MENU_BAR</code>.
*/
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.MENU_BAR;
}
} // class AccessibleAWTMenuBar
} // class MenuBar

File diff suppressed because it is too large Load Diff

View File

@ -45,17 +45,20 @@ import java.io.Serializable;
import java.lang.reflect.Array;
import java.util.EventListener;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleAction;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleValue;
/**
* This class represents an item in a menu.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class MenuItem extends MenuComponent
implements Serializable
implements Serializable, Accessible
{
// FIXME: The enabled event mask is not used at this time.
/*
* Static Variables
*/
@ -97,6 +100,110 @@ private MenuShortcut shortcut;
// The list of action listeners for this menu item.
private transient ActionListener action_listeners;
protected class AccessibleAWTMenuItem
extends MenuComponent.AccessibleAWTMenuComponent
implements AccessibleAction, AccessibleValue
{
/** Constructor */
public AccessibleAWTMenuItem()
{
super();
}
public String getAccessibleName()
{
return label;
}
public AccessibleAction getAccessibleAction()
{
return this;
}
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.MENU_ITEM;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
*/
public int getAccessibleActionCount()
{
return 1;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
*/
public String getAccessibleActionDescription(int i)
{
if (i == 0)
return label;
else
return null;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
*/
public boolean doAccessibleAction(int i)
{
if (i != 0)
return false;
processActionEvent(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand));
return true;
}
public AccessibleValue getAccessibleValue()
{
return this;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
*/
public Number getCurrentAccessibleValue()
{
return (enabled) ? new Integer(1) : new Integer(0);
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
*/
public boolean setCurrentAccessibleValue(Number number)
{
if (number.intValue() == 0)
{
setEnabled(false);
return false;
}
setEnabled(true);
return true;
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
*/
public Number getMinimumAccessibleValue()
{
return new Integer(0);
}
/* (non-Javadoc)
* @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
*/
public Number getMaximumAccessibleValue()
{
return new Integer(0);
}
}
/*************************************************************************/
/*

View File

@ -1,5 +1,5 @@
/* Panel.java -- Simple container object
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,7 +38,6 @@ exception statement from your version. */
package java.awt;
import java.awt.event.PaintEvent;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
@ -47,8 +46,8 @@ import javax.accessibility.AccessibleRole;
* A panel is a simple container class. It's default layout is the
* <code>FlowLayout</code> manager.
*
* @author Aaron M. Renn <arenn@urbanophile.com>
* @author Eric Blake <ebb9@email.byu.edu>
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Eric Blake (ebb9@email.byu.edu)
* @see FlowLayout
* @since 1.0
* @status updated to 1.4
@ -74,7 +73,7 @@ public class Panel extends Container implements Accessible
/*
* The number used to generate the name returned by getName.
*/
private static transient long next_panel_number = 0;
private static transient long next_panel_number;
/**
* Initializes a new instance of <code>Panel</code> that has a default
@ -97,36 +96,6 @@ public class Panel extends Container implements Accessible
setLayout(layoutManager);
}
/**
* Consume initial application-requested paint event if it has not
* already been consumed, and if the initial system-requested paint
* event has not already been handled. Otherwise, call
* super.dispatchEventImpl. These extra steps are required to
* prevent a Panel from being painted twice when it is initially
* shown.
*
* @param e the event to dispatch
*/
void dispatchEventImpl (AWTEvent e)
{
if (e instanceof PaintEvent)
{
if (e.id == PaintEvent.UPDATE)
{
if (!initialUpdateConsumed
&& !initialSystemUpdateDone)
{
e.consume ();
initialUpdateConsumed = true;
}
}
else if (e.id == PaintEvent.PAINT)
initialSystemUpdateDone = true;
}
else
super.dispatchEventImpl (e);
}
/**
* Notifies this object to create its native peer.
*

View File

@ -95,7 +95,7 @@ public class Point extends Point2D implements Serializable
* Initializes a new instance of <code>Point</code> with coordinates
* identical to the coordinates of the specified points.
*
* @param point the point to copy the coordinates from
* @param p the point to copy the coordinates from
* @throws NullPointerException if p is null
*/
public Point(Point p)

View File

@ -1,5 +1,5 @@
/* Polygon.java -- class representing a polygon
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -39,6 +39,7 @@ exception statement from your version. */
package java.awt;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
@ -100,17 +101,8 @@ public class Polygon implements Shape, Serializable
*/
protected Rectangle bounds;
/**
* Cached flattened version - condense points and parallel lines, so the
* result has area if there are >= 3 condensed vertices. flat[0] is the
* number of condensed points, and (flat[odd], flat[odd+1]) form the
* condensed points.
*
* @see #condense()
* @see #contains(double, double)
* @see #contains(double, double, double, double)
*/
private transient int[] condensed;
/** A big number, but not so big it can't survive a few float operations */
private static final double BIG_VALUE = java.lang.Double.MAX_VALUE / 10.0;
/**
* Initializes an empty polygon.
@ -168,7 +160,6 @@ public class Polygon implements Shape, Serializable
public void invalidate()
{
bounds = null;
condensed = null;
}
/**
@ -184,15 +175,14 @@ public class Polygon implements Shape, Serializable
int i = npoints;
while (--i >= 0)
{
xpoints[i] += dx;
ypoints[i] += dy;
xpoints[i] += dx;
ypoints[i] += dy;
}
if (bounds != null)
{
bounds.x += dx;
bounds.y += dy;
bounds.x += dx;
bounds.y += dy;
}
condensed = null;
}
/**
@ -206,45 +196,44 @@ public class Polygon implements Shape, Serializable
{
if (npoints + 1 > xpoints.length)
{
int[] newx = new int[npoints + 1];
System.arraycopy(xpoints, 0, newx, 0, npoints);
xpoints = newx;
int[] newx = new int[npoints + 1];
System.arraycopy(xpoints, 0, newx, 0, npoints);
xpoints = newx;
}
if (npoints + 1 > ypoints.length)
{
int[] newy = new int[npoints + 1];
System.arraycopy(ypoints, 0, newy, 0, npoints);
ypoints = newy;
int[] newy = new int[npoints + 1];
System.arraycopy(ypoints, 0, newy, 0, npoints);
ypoints = newy;
}
xpoints[npoints] = x;
ypoints[npoints] = y;
npoints++;
if (bounds != null)
{
if (npoints == 1)
{
bounds.x = x;
bounds.y = y;
}
else
{
if (x < bounds.x)
{
bounds.width += bounds.x - x;
bounds.x = x;
}
else if (x > bounds.x + bounds.width)
bounds.width = x - bounds.x;
if (y < bounds.y)
{
bounds.height += bounds.y - y;
bounds.y = y;
}
else if (y > bounds.y + bounds.height)
bounds.height = y - bounds.y;
}
if (npoints == 1)
{
bounds.x = x;
bounds.y = y;
}
else
{
if (x < bounds.x)
{
bounds.width += bounds.x - x;
bounds.x = x;
}
else if (x > bounds.x + bounds.width)
bounds.width = x - bounds.x;
if (y < bounds.y)
{
bounds.height += bounds.y - y;
bounds.y = y;
}
else if (y > bounds.y + bounds.height)
bounds.height = y - bounds.y;
}
}
condensed = null;
}
/**
@ -258,7 +247,7 @@ public class Polygon implements Shape, Serializable
*/
public Rectangle getBounds()
{
return getBoundingBox ();
return getBoundingBox();
}
/**
@ -274,27 +263,27 @@ public class Polygon implements Shape, Serializable
{
if (bounds == null)
{
if (npoints == 0)
return bounds = new Rectangle ();
int i = npoints - 1;
int minx = xpoints[i];
int maxx = minx;
int miny = ypoints[i];
int maxy = miny;
while (--i >= 0)
{
int x = xpoints[i];
int y = ypoints[i];
if (x < minx)
minx = x;
else if (x > maxx)
maxx = x;
if (y < miny)
miny = y;
else if (y > maxy)
maxy = y;
}
bounds = new Rectangle (minx, miny, maxx - minx, maxy - miny);
if (npoints == 0)
return bounds = new Rectangle();
int i = npoints - 1;
int minx = xpoints[i];
int maxx = minx;
int miny = ypoints[i];
int maxy = miny;
while (--i >= 0)
{
int x = xpoints[i];
int y = ypoints[i];
if (x < minx)
minx = x;
else if (x > maxx)
maxx = x;
if (y < miny)
miny = y;
else if (y > maxy)
maxy = y;
}
bounds = new Rectangle(minx, miny, maxx - minx, maxy - miny);
}
return bounds;
}
@ -365,64 +354,7 @@ public class Polygon implements Shape, Serializable
*/
public boolean contains(double x, double y)
{
// First, the obvious bounds checks.
if (! condense() || ! getBounds().contains(x, y))
return false;
// A point is contained if a ray to (-inf, y) crosses an odd number
// of segments. This must obey the semantics of Shape when the point is
// exactly on a segment or vertex: a point is inside only if the adjacent
// point in the increasing x or y direction is also inside. Note that we
// are guaranteed that the condensed polygon has area, and no consecutive
// segments with identical slope.
boolean inside = false;
int limit = condensed[0];
int curx = condensed[(limit << 1) - 1];
int cury = condensed[limit << 1];
for (int i = 1; i <= limit; i++)
{
int priorx = curx;
int priory = cury;
curx = condensed[(i << 1) - 1];
cury = condensed[i << 1];
if ((priorx > x && curx > x) // Left of segment, or NaN.
|| (priory > y && cury > y) // Below segment, or NaN.
|| (priory < y && cury < y)) // Above segment.
continue;
if (priory == cury) // Horizontal segment, y == cury == priory
{
if (priorx < x && curx < x) // Right of segment.
{
inside = ! inside;
continue;
}
// Did we approach this segment from above or below?
// This mess is necessary to obey rules of Shape.
priory = condensed[((limit + i - 2) % limit) << 1];
boolean above = priory > cury;
if ((curx == x && (curx > priorx || above))
|| (priorx == x && (curx < priorx || ! above))
|| (curx > priorx && ! above) || above)
inside = ! inside;
continue;
}
if (priorx == x && priory == y) // On prior vertex.
continue;
if (priorx == curx // Vertical segment.
|| (priorx < x && curx < x)) // Right of segment.
{
inside = ! inside;
continue;
}
// The point is inside the segment's bounding box, compare slopes.
double leftx = curx > priorx ? priorx : curx;
double lefty = curx > priorx ? priory : cury;
double slopeseg = (double) (cury - priory) / (curx - priorx);
double slopepoint = (double) (y - lefty) / (x - leftx);
if ((slopeseg > 0 && slopeseg > slopepoint)
|| slopeseg < slopepoint)
inside = ! inside;
}
return inside;
return ((evaluateCrossings(x, y, false, BIG_VALUE) & 1) != 0);
}
/**
@ -453,67 +385,17 @@ public class Polygon implements Shape, Serializable
*/
public boolean intersects(double x, double y, double w, double h)
{
// First, the obvious bounds checks.
if (w <= 0 || h <= 0 || npoints == 0 ||
! getBounds().intersects(x, y, w, h))
return false; // Disjoint bounds.
if ((x <= bounds.x && x + w >= bounds.x + bounds.width
&& y <= bounds.y && y + h >= bounds.y + bounds.height)
|| contains(x, y))
return true; // Rectangle contains the polygon, or one point matches.
// If any vertex is in the rectangle, the two might intersect.
int curx = 0;
int cury = 0;
for (int i = 0; i < npoints; i++)
{
curx = xpoints[i];
cury = ypoints[i];
if (curx >= x && curx < x + w && cury >= y && cury < y + h
&& contains(curx, cury)) // Boundary check necessary.
return true;
}
// Finally, if at least one of the four bounding lines intersect any
// segment of the polygon, return true. Be careful of the semantics of
// Shape; coinciding lines do not necessarily return true.
for (int i = 0; i < npoints; i++)
{
int priorx = curx;
int priory = cury;
curx = xpoints[i];
cury = ypoints[i];
if (priorx == curx) // Vertical segment.
{
if (curx < x || curx >= x + w) // Outside rectangle.
continue;
if ((cury >= y + h && priory <= y)
|| (cury <= y && priory >= y + h))
return true; // Bisects rectangle.
continue;
}
if (priory == cury) // Horizontal segment.
{
if (cury < y || cury >= y + h) // Outside rectangle.
continue;
if ((curx >= x + w && priorx <= x)
|| (curx <= x && priorx >= x + w))
return true; // Bisects rectangle.
continue;
}
// Slanted segment.
double slope = (double) (cury - priory) / (curx - priorx);
double intersect = slope * (x - curx) + cury;
if (intersect > y && intersect < y + h) // Intersects left edge.
return true;
intersect = slope * (x + w - curx) + cury;
if (intersect > y && intersect < y + h) // Intersects right edge.
return true;
intersect = (y - cury) / slope + curx;
if (intersect > x && intersect < x + w) // Intersects bottom edge.
return true;
intersect = (y + h - cury) / slope + cury;
if (intersect > x && intersect < x + w) // Intersects top edge.
return true;
}
/* Does any edge intersect? */
if (evaluateCrossings(x, y, false, w) != 0 /* top */
|| evaluateCrossings(x, y + h, false, w) != 0 /* bottom */
|| evaluateCrossings(x + w, y, true, h) != 0 /* right */
|| evaluateCrossings(x, y, true, h) != 0) /* left */
return true;
/* No intersections, is any point inside? */
if ((evaluateCrossings(x, y, false, BIG_VALUE) & 1) != 0)
return true;
return false;
}
@ -547,59 +429,21 @@ public class Polygon implements Shape, Serializable
*/
public boolean contains(double x, double y, double w, double h)
{
// First, the obvious bounds checks.
if (w <= 0 || h <= 0 || ! contains(x, y)
|| ! bounds.contains(x, y, w, h))
if (! getBounds2D().intersects(x, y, w, h))
return false;
// Now, if any of the four bounding lines intersects a polygon segment,
// return false. The previous check had the side effect of setting
// the condensed array, which we use. Be careful of the semantics of
// Shape; coinciding lines do not necessarily return false.
int limit = condensed[0];
int curx = condensed[(limit << 1) - 1];
int cury = condensed[limit << 1];
for (int i = 1; i <= limit; i++)
{
int priorx = curx;
int priory = cury;
curx = condensed[(i << 1) - 1];
cury = condensed[i << 1];
if (curx > x && curx < x + w && cury > y && cury < y + h)
return false; // Vertex is in rectangle.
if (priorx == curx) // Vertical segment.
{
if (curx < x || curx > x + w) // Outside rectangle.
continue;
if ((cury >= y + h && priory <= y)
|| (cury <= y && priory >= y + h))
return false; // Bisects rectangle.
continue;
}
if (priory == cury) // Horizontal segment.
{
if (cury < y || cury > y + h) // Outside rectangle.
continue;
if ((curx >= x + w && priorx <= x)
|| (curx <= x && priorx >= x + w))
return false; // Bisects rectangle.
continue;
}
// Slanted segment.
double slope = (double) (cury - priory) / (curx - priorx);
double intersect = slope * (x - curx) + cury;
if (intersect > y && intersect < y + h) // Intersects left edge.
return false;
intersect = slope * (x + w - curx) + cury;
if (intersect > y && intersect < y + h) // Intersects right edge.
return false;
intersect = (y - cury) / slope + curx;
if (intersect > x && intersect < x + w) // Intersects bottom edge.
return false;
intersect = (y + h - cury) / slope + cury;
if (intersect > x && intersect < x + w) // Intersects top edge.
return false;
}
return true;
/* Does any edge intersect? */
if (evaluateCrossings(x, y, false, w) != 0 /* top */
|| evaluateCrossings(x, y + h, false, w) != 0 /* bottom */
|| evaluateCrossings(x + w, y, true, h) != 0 /* right */
|| evaluateCrossings(x, y, true, h) != 0) /* left */
return false;
/* No intersections, is any point inside? */
if ((evaluateCrossings(x, y, false, BIG_VALUE) & 1) != 0)
return true;
return false;
}
/**
@ -631,47 +475,47 @@ public class Polygon implements Shape, Serializable
public PathIterator getPathIterator(final AffineTransform transform)
{
return new PathIterator()
{
/** The current vertex of iteration. */
private int vertex;
public int getWindingRule()
{
return WIND_EVEN_ODD;
}
/** The current vertex of iteration. */
private int vertex;
public boolean isDone()
{
return vertex > npoints;
}
public int getWindingRule()
{
return WIND_EVEN_ODD;
}
public void next()
{
vertex++;
}
public boolean isDone()
{
return vertex > npoints;
}
public int currentSegment(float[] coords)
{
if (vertex >= npoints)
return SEG_CLOSE;
coords[0] = xpoints[vertex];
coords[1] = ypoints[vertex];
if (transform != null)
transform.transform(coords, 0, coords, 0, 1);
return vertex == 0 ? SEG_MOVETO : SEG_LINETO;
}
public void next()
{
vertex++;
}
public int currentSegment(double[] coords)
{
if (vertex >= npoints)
return SEG_CLOSE;
coords[0] = xpoints[vertex];
coords[1] = ypoints[vertex];
if (transform != null)
transform.transform(coords, 0, coords, 0, 1);
return vertex == 0 ? SEG_MOVETO : SEG_LINETO;
}
};
public int currentSegment(float[] coords)
{
if (vertex >= npoints)
return SEG_CLOSE;
coords[0] = xpoints[vertex];
coords[1] = ypoints[vertex];
if (transform != null)
transform.transform(coords, 0, coords, 0, 1);
return vertex == 0 ? SEG_MOVETO : SEG_LINETO;
}
public int currentSegment(double[] coords)
{
if (vertex >= npoints)
return SEG_CLOSE;
coords[0] = xpoints[vertex];
coords[1] = ypoints[vertex];
if (transform != null)
transform.transform(coords, 0, coords, 0, 1);
return vertex == 0 ? SEG_MOVETO : SEG_LINETO;
}
};
}
/**
@ -684,7 +528,7 @@ public class Polygon implements Shape, Serializable
* path iterator is not either.
*
* @param transform an optional transform to apply to the iterator
* @param double the maximum distance for deviation from the real boundary
* @param flatness the maximum distance for deviation from the real boundary
* @return a new iterator over the boundary
* @since 1.2
*/
@ -695,57 +539,75 @@ public class Polygon implements Shape, Serializable
}
/**
* Helper for contains, which caches a condensed version of the polygon.
* This condenses all colinear points, so that consecutive segments in
* the condensed version always have different slope.
* Helper for contains, intersects, calculates the number of intersections
* between the polygon and a line extending from the point (x, y) along
* the positive X, or Y axis, within a given interval.
*
* @return true if the condensed polygon has area
* @return the winding number.
* @see #condensed
* @see #contains(double, double)
*/
private boolean condense()
private int evaluateCrossings(double x, double y, boolean useYaxis,
double distance)
{
if (npoints <= 2)
return false;
if (condensed != null)
return condensed[0] > 2;
condensed = new int[npoints * 2 + 1];
int curx = xpoints[npoints - 1];
int cury = ypoints[npoints - 1];
double curslope = Double.NaN;
int count = 0;
outer:
for (int i = 0; i < npoints; i++)
double x0;
double x1;
double y0;
double y1;
double epsilon = 0.0;
int crossings = 0;
int[] xp;
int[] yp;
if (useYaxis)
{
int priorx = curx;
int priory = cury;
double priorslope = curslope;
curx = xpoints[i];
cury = ypoints[i];
while (curx == priorx && cury == priory)
{
if (++i == npoints)
break outer;
curx = xpoints[i];
cury = ypoints[i];
}
curslope = (curx == priorx ? Double.POSITIVE_INFINITY
: (double) (cury - priory) / (curx - priorx));
if (priorslope == curslope)
{
if (count > 1 && condensed[(count << 1) - 3] == curx
&& condensed[(count << 1) - 2] == cury)
{
count--;
continue;
}
}
else
count++;
condensed[(count << 1) - 1] = curx;
condensed[count << 1] = cury;
xp = ypoints;
yp = xpoints;
double swap;
swap = y;
y = x;
x = swap;
}
condensed[0] = count;
return count > 2;
else
{
xp = xpoints;
yp = ypoints;
}
/* Get a value which is small but not insignificant relative the path. */
epsilon = 1E-7;
x0 = xp[0] - x;
y0 = yp[0] - y;
for (int i = 1; i < npoints; i++)
{
x1 = xp[i] - x;
y1 = yp[i] - y;
if (y0 == 0.0)
y0 -= epsilon;
if (y1 == 0.0)
y1 -= epsilon;
if (y0 * y1 < 0)
if (Line2D.linesIntersect(x0, y0, x1, y1, epsilon, 0.0, distance, 0.0))
++crossings;
x0 = xp[i] - x;
y0 = yp[i] - y;
}
// end segment
x1 = xp[0] - x;
y1 = yp[0] - y;
if (y0 == 0.0)
y0 -= epsilon;
if (y1 == 0.0)
y1 -= epsilon;
if (y0 * y1 < 0)
if (Line2D.linesIntersect(x0, y0, x1, y1, epsilon, 0.0, distance, 0.0))
++crossings;
return crossings;
}
} // class Polygon

View File

@ -1,5 +1,5 @@
/* PopupMenu.java -- An AWT popup menu
Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -38,9 +38,11 @@ exception statement from your version. */
package java.awt;
import java.awt.peer.MenuPeer;
import java.awt.peer.PopupMenuPeer;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
/**
* This class implement an AWT popup menu widget
*
@ -136,5 +138,23 @@ show(Component component, int x, int y)
}
}
protected class AccessibleAWTPopupMenu extends AccessibleAWTMenu
{
protected AccessibleAWTPopupMenu()
{
}
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.POPUP_MENU;
}
}
public AccessibleContext getAccessibleContext()
{
return new AccessibleAWTPopupMenu();
}
} // class PopupMenu

View File

@ -338,7 +338,7 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable
* its upper left corner.
*
* @return the point where this rectangle is located
* @see setLocation(Point)
* @see #setLocation(Point)
* @since 1.1
*/
public Point getLocation()

Some files were not shown because too many files have changed in this diff Show More