From d933abbe01b2c3d85293ede4da34cdd7df47f378 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Wed, 16 Feb 2005 20:03:29 +0000 Subject: [multiple changes] 2005-02-15 Mark Wielaard * java/awt/BasicStroke.java (hashCode): Check for null dash. 2005-02-15 Michael Koch * gnu/java/awt/peer/gtk/GtkArg.java, gnu/java/awt/peer/gtk/GtkArgList.java: Removed. 2005-02-15 Craig Black * gnu/java/awt/peer/gtk/GtkCheckboxMenuItem.java (postMenuActionEvent): Implement to notify ItemListeners. * java/awt/CheckboxMenuItem.java (dispatchEventImpl): Update state on ItemEvent. * java/awt/MenuItem.java (processActionEvent): Retarget event source. 2005-02-15 Andrew John Hughes * gnu/java/awt/color/ClutProfileConverter.java, gnu/java/awt/peer/ClasspathTextLayoutPeer.java, gnu/java/awt/peer/gtk/GdkFontPeer.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/GdkRobotPeer.java, gnu/java/awt/peer/gtk/GdkTextLayout.java, gnu/java/awt/peer/gtk/GtkButtonPeer.java, gnu/java/awt/peer/gtk/GtkCheckboxPeer.java, gnu/java/awt/peer/gtk/GtkChoicePeer.java, gnu/java/awt/peer/gtk/GtkComponentPeer.java, gnu/java/awt/peer/gtk/GtkContainerPeer.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/GtkFramePeer.java, gnu/java/awt/peer/gtk/GtkLabelPeer.java, gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java, gnu/java/awt/peer/gtk/GtkMenuItemPeer.java, gnu/java/awt/peer/gtk/GtkScrollPanePeer.java, gnu/java/awt/peer/gtk/GtkTextComponentPeer.java, gnu/java/awt/peer/gtk/GtkToolkit.java, gnu/java/awt/peer/gtk/GtkWindowPeer.java, javax/swing/JPopupMenu.java, javax/swing/JSpinner.java, javax/swing/SortingFocusTraversalPolicy.java, javax/swing/SwingUtilities.java, javax/swing/plaf/basic/BasicComboBoxEditor.java, javax/swing/plaf/basic/BasicComboBoxRenderer.java, javax/swing/tree/DefaultMutableTreeNode.java: Removed unused imports and expanded starred imports. 2005-02-15 Mark Wielaard * java/awt/AWTKeyStroke.java (getAWTKeyStroke(String)): Throw IllegalArgumentException when the given String is null. * javax/swing/KeyStroke.java (getKeyStroke(String)): Return null when given keystoke sequence cannot be parsed. * javax/swing/JRootPane.java (setJMenuBar): Remove current menubar if one is installed. Only install the given menubar is not null. * javax/swing/JViewport.java (getViewSize): Return an empty Dimension when the view isn't set or preferred component size when no viewSize is set. * javax/swing/ViewportLayout.java (preferredLayoutSize): Return an empty Dimension when there is no view set. (minimumLayoutSize): Likewise. (layoutContainer): Don't try to layout when there is no view. 2005-02-15 Anthony Green * jni/gtk-peer/gtk_jawt.c (classpath_jawt_get_drawable, classpath_jawt_lock, classpath_jawt_unlock): New functions. * jawt.c (_Jv_JAWT_Lock, _Jv_JAWT_Unlock): New functions. (_Jv_GetDrawingSurface): Set visualID. (_Jv_FreeDrawingSurfaceInfo): Clear visualID. (JAWT_GetAWT): Set Lock and Unlock. * include/jawt_md.h (struct _JAWT_X11DrawingSurfaceInfo): Add visualID. * include/jawt.h (JAWT_VERSION_1_4, JAWT_LOCK_ERROR, JAWT_LOCK_CLIP_CHANGED, JAWT_LOCK_BOUNDS_CHANGED, JAWT_LOCK_SURFACE_CHANGED): New macros. (struct _JAWT): Add Lock and Unlock. 2005-02-15 Thomas Fitzsimmons * jawt.c: New file. * include/jawt.h: Likewise. * include/jawt_md.h: Likewise. * include/Makefile.am (tool_include__HEADERS): Add jawt.h and jawt_md.h files. * jni/classpath/classpath_jawt.h: Likewise. * jni/gtk-peer/gtk_jawt.c: Likewise. * Makefile.am: Build libjawt.so. 2005-02-15 Michael Koch * gnu/java/awt/peer/gtk/GdkGraphics2D.java: Merged file header with classpath CVS head. * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: Merged code formatting with classpath CVS head. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Removed debug code. (Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector): Handle special JNI strings with 2 '\0' at the end. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Merged file header with classpath CVS head. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c: Merged code formatting with classpath CVS head. 2005-02-15 Thomas Fitzsimmons * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (create): Use GTK's built-in file system backend. Use GTK_RESPONSE_ACCEPT. (handle_response): Use GTK_RESPONSE_ACCEPT. 2005-02-15 Graydon Hoare * Makefile.am: Fix library build breakage. * Makefile.in: Regenerate. 2005-02-15 Michael Koch * javax/swing/JTabbedPane.java (Page.setDisplayedMnemonicIndex): Handle empty menmonic. 2005-02-15 Michael Koch * javax/swing/tree/DefaultMutableTreeNode.java: Reworked Javadocs all over. (getPathToRoot): Fixed direction of result array initialization. 2005-02-15 Michael Koch * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Fix includes for cairo 0.3.0 snappshot. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Merged file header from classpath CVS HEAD. 2005-02-15 Craig Black * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (copyState): Pass a JNI global reference to signal handler. (realize_cb): Use and free JNI global reference. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c (create): Pass a JNI global reference to signal handler. (selection_changed): Match declaration. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c (dispose): Do not remove entries from state tables until after widget is destroyed. 2005-02-15 Michael Koch * java/awt/Container.javai (paramString): If layoutMgr is null just return result of super.paramString(). * java/awt/Scrollbar.java: Reformatted. * java/awt/im/InputContext.java (static): Removed redundant initializations. 2005-02-15 Michael Koch * javax/swing/ImageIcon.java, javax/swing/UIManager.java, javax/swing/text/EditorKit.java, javax/swing/text/Segment.java: More whitespace cleanups. 2005-02-15 Michael Koch * gnu/java/awt/EmbeddedWindow.java, gnu/java/awt/image/ImageDecoder.java, gnu/java/awt/peer/gtk/GtkFileDialogPeer.java, java/awt/DefaultKeyboardFocusManager.java, java/awt/Frame.java, java/awt/image/RGBImageFilter.java, javax/swing/AbstractButton.java, javax/swing/ActionMap.java, javax/swing/ComponentInputMap.java, javax/swing/DefaultDesktopManager.java, javax/swing/ImageIcon.java, javax/swing/InputMap.java, javax/swing/JButton.java, javax/swing/JCheckBox.java, javax/swing/JCheckBoxMenuItem.java, javax/swing/JEditorPane.java, javax/swing/JMenu.java, javax/swing/JMenuItem.java, javax/swing/JOptionPane.java, javax/swing/JRootPane.java, javax/swing/JTable.java, javax/swing/MenuSelectionManager.java, javax/swing/RepaintManager.java, javax/swing/ScrollPaneLayout.java, javax/swing/SortingFocusTraversalPolicy.java, javax/swing/UIManager.java, javax/swing/ViewportLayout.java, javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java, javax/swing/plaf/basic/BasicInternalFrameUI.java, javax/swing/plaf/basic/BasicLabelUI.java, javax/swing/plaf/basic/BasicListUI.java, javax/swing/plaf/basic/BasicMenuItemUI.java, javax/swing/plaf/basic/BasicMenuUI.java, javax/swing/plaf/basic/BasicOptionPaneUI.java, javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java, javax/swing/plaf/basic/BasicRootPaneUI.java, javax/swing/plaf/basic/BasicScrollPaneUI.java, javax/swing/plaf/basic/BasicSplitPaneDivider.java, javax/swing/plaf/basic/BasicTextUI.java, javax/swing/table/TableColumnModel.java, javax/swing/text/AbstractDocument.java, javax/swing/text/EditorKit.java, javax/swing/text/Position.java, javax/swing/text/Segment.java, javax/swing/text/StyledEditorKit.java, javax/swing/text/ViewFactory.java: Cleanup whitespace differences to classpath CVS HEAD. 2005-02-15 Graydon Hoare * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: (finalize): Call finish from here. (produce): Not from here. * Makefile.am (gtk_c_source_files): Remove jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c. * Makefile.in: Regenerate. * gnu/java/awt/peer/gtk/GdkGraphics2D.java (cairoSetFont): (cairoDrawGdkTextLayout): (cairoDrawString): (getPeerTextMetrics): (getPeerFontMetrics): Remove. (setFont): Don't call cairoSetFont. (cairoDrawGlyphVector): Accept font peer argument. (drawGlyphVector): Pass font peer to cairoDrawGlyphVector. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c (ensure_metrics_cairo): (gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont): (gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawString): (gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerFontMetrics): (gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerTextMetrics): (metrics_cairo): (metrics_surface): Remove. (gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector): Pass and install font peer. 2005-02-15 Graydon Hoare * Makefile.am: Create "split library" structure. * Makefile.in: Regenerate. 2005-02-15 Graydon Hoare * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Release GDK lock during upcalls. 2005-02-15 Graydon Hoare * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Remove. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector): (Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics): (Java_gnu_java_awt_peer_gtk_GdkFontPeer_getTextMetrics): New methods. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: Remove. * gnu/java/awt/peer/gtk/GdkFontPeer.java (getGlyphVector): (getFontMetrics): (getTextMetrics): New native methods. * gnu/java/awt/peer/gtk/GdkFontMetrics.java: Remove native parts. * gnu/java/awt/peer/gtk/GdkGlyphVector.java: Likewise. * Makefile.am: Remove native entries for GdkFontMetrics, GdkGlyphVector. * Makefile.in: Regenerate. 2005-02-15 Andrew John Hughes * javax/swing/SwingUtilities.java: (getAccessibleAt(java.awt.Component, java.awt.Point)): Implemented and documented. (getAccessibleChild(java.awt.Component, int)): Likewise. (getAccessibleChildrenCount(java.awt.Component)): Likewise. (getAccessibleIndexInParent(java.awt.Component)): Likewise. (getAccessibleStateSet(java.awt.Component)): Likewise. 2005-02-15 Michael Koch * javax/swing/SwingUtilities.java (getFontMetrics): Removed. 2005-02-15 Michael Koch * java/awt/Container.java (paramString): Implemented. * javax/swing/AbstractButton.java (paramString): Implemented. * javax/swing/JComponent.java (paramString): Implemented. * javax/swing/JMenu.java (paramString): Implemented. * javax/swing/JMenuBar.java (paramString): Implemented. * javax/swing/JMenuItem.java (paramString): Implemented. * javax/swing/JPopupMenu.java (paramString): Implemented. 2005-02-15 Michael Koch * javax/swing/JMenu.java (uiClassID): Removed. (JMenu): Set invoker on popup menu. (getUIClassID): Return id directly. (getItemCount): Simply return getMenuComponentCount(). Fixed javadoc. (isTopLevelMenu): Simplified. * javax/swing/JMenuItem.java (uiClassID): Removed. (getUIClassID): Return id directly. * javax/swing/JPopupMenu.java (uiClassID): Removed. (JPopupMenu): Always initialize correctly. (getSubElements): Only return components implementing MenuElement interface. (HeavyWeightPopup.hide): Removed. 2005-02-15 Michael Koch * java/awt/image/ReplicateScaleFilter.java (replicatePixels): Made private. * javax/swing/colorchooser/DefaultRGBChooserPanel.java (DefaultRGBChooserPanel): Made package private. * javax/swing/colorchooser/DefaultSwatchChooserPanel.java (RecentSwatchPanel): Likewise. * javax/swing/event/MouseInputAdapter.java: Reformatted. (MouseInputAdapter): Made abstract. * javax/swing/tree/DefaultMutableTreeNode.java (random): Removed. (growTree): Likewise. 2005-02-15 Michael Koch * java/awt/dnd/DropTarget.java (addDropTargetListener): Clarified comments. 2005-02-15 Michael Koch * javax/swing/JComponent.java (getComponentGraphics): Removed accidently commited code. 2005-02-15 Graydon Hoare * java/awt/dnd/DropTarget.java (addDropTargetListener): Despite documentation, do not throw. * javax/swing/JComponent.java: Set a default DropTarget. 2005-02-15 Michael Koch * javax/swing/AbstractAction.java (ENABLED_PROPERTY): Removed. (setEnabled): Replaced constant with real string. * javax/swing/AbstractButton.java (createActionPropertyChangeListener.propertyChange): Likewise. * javax/swing/JComboBox.java (DEFAULT_MAXIMUM_ROW_COUNT): Made private. (EDITABLE_CHANGED_PROPERTY): Removed. (MAXIMUM_ROW_COUNT_CHANGED_PROPERTY):Likewise. (ENABLED_CHANGED_PROPERTY):Likewise. (RENDERER_CHANGED_PROPERTY):Likewise. (EDITOR_CHANGED_PROPERTY):Likewise. (MODEL_CHANGED_PROPERTY):Likewise. (uiClassID):Likewise. (getUIClassID): Replaced constant with real string. (setModel):Likewise. (setEditable):Likewise. (setMaximumRowCount):Likewise. (setRenderer):Likewise. (setEditor):Likewise. (setEnabled):Likewise. * javax/swing/JLabel.java (DISABLED_ICON_CHANGED_PROPERTY): Removed. (DISPLAYED_MNEMONIC_CHANGED_PROPERTY): Likewise. (DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY): Likewise. (HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY): Likewise. (HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY): Likewise. (ICON_CHANGED_PROPERTY): Likewise. (ICON_TEXT_GAP_CHANGED_PROPERTY): Likewise. (LABEL_FOR_CHANGED_PROPERTY): Likewise. (TEXT_CHANGED_PROPERTY): Likewise. (VERTICAL_ALIGNMENT_CHANGED_PROPERTY): Likewise. (VERTICAL_TEXT_POSITION_CHANGED_PROPERTY): Likewise. (setText): Replaced constant with real string. (setIcon): Likewise. (setDisabledIcon): Likewise. (setDisplayedMnemonic): Likewise. (setIconTextGap): Likewise. (setVerticalAlignment): Likewise. (setHorizontalAlignment): Likewise. (setVerticalTextPosition): Likewise. (setHorizontalTextPosition): Likewise. (setLabelFor): Replaced constant with real string. Fire property change event after property got changed. * javax/swing/JList.java (CELL_RENDERER_PROPERTY_CHANGED): Likewise. (FIXED_CELL_HEIGHT_PROPERTY_CHANGED): Likewise. (FIXED_CELL_WIDTH_PROPERTY_CHANGED): Likewise. (LAYOUT_ORIENTATION_PROPERTY_CHANGED): Likewise. (MODEL_PROPERTY_CHANGED): Likewise. (PROTOTYPE_CELL_VALUE_PROPERTY_CHANGED): Likewise. (SELECTION_BACKGROUND_PROPERTY_CHANGED): Likewise. (SELECTION_FOREGROUND_PROPERTY_CHANGED): Likewise. (SELECTION_MODEL_PROPERTY_CHANGED): Likewise. (setFixedCellWidth): Reimplemented. (setFixedCellHeight): Exit if new value is identical. Replaced constant with real string. (setSelectionBackground): Likewise. (setSelectionForeground): Likewise. (setPrototypeCellValue): Likewise. (setCellRenderer): Replaced constant with real string. (setModel): Likewise. (setSelectionModel): Likewise. * javax/swing/JMenuBar.java (BORDER_PAINTED_CHANGED_PROPERTY): Removed. (MODEL_CHANGED_PROPERTY): Likewise. (MARGIN_CHANGED_PROPERTY): Likewise. (setBorderPainted): Reimplemented. (setMargin): Likewise. (setSelectionModel): Replaced constant with real string. * javax/swing/JPopupMenu.java (LABEL_CHANGED_PROPERTY): Removed. (VISIBLE_CHANGED_PROPERTY): Likewise. (borderPainted): Likewise. (setLabel): Replaced constant with real string. (setVisible): Exit if new value is identical. Replaced constant with real string. * javax/swing/JProgressBar.java (BORDER_PAINTED_CHANGED_PROPERTY): Removed. (ORIENTATION_CHANGED_PROPERTY): Likewise. (STRING_CHANGED_PROPERTY): Likewise. (STRING_PAINTED_CHANGED_PROPERTY): Likewise. (INDETERMINATE_CHANGED_PROPERTY): Likewise. (setOrientation): Replaced constant with real string. (setStringPainted): Likewise. (setString): Likewise. (setBorderPainted): Likewise. (setIndeterminate): Likewise. * javax/swing/JScrollBar.java (BLOCK_INCREMENT_CHANGED_PROPERTY): Removed. (MODEL_CHANGED_PROPERTY): Likewise. (ORIENTATION_CHANGED_PROPERTY): Likewise. (setOrientation): Replaced constant with real string. (setModel): Likewise. (setUnitIncrement): Likewise. (setBlockIncrement): Likewise. * javax/swing/JScrollPane.java (COLUMN_HEADER_CHANGED_PROPERTY): Removed. (COMPONENT_ORIENTATION_CHANGED_PROPERTY): Likewise. (HORIZONTAL_SCROLLBAR_CHANGED_PROPERTY): Likewise. (HORIZONTAL_SCROLLBAR_POLICY_CHANGED_PROPERTY): Likewise. (LAYOUT_CHANGED_PROPERTY): Likewise. (ROW_HEADER_CHANGED_PROPERTY): Likewise. (VERTICAL_SCROLLBAR_CHANGED_PROPERTY): Likewise. (VERTICAL_SCROLLBAR_POLICY_CHANGED_PROPERTY): Likewise. (VIEWPORT_CHANGED_PROPERTY): Likewise. (VIEWPORT_BORDER_CHANGED_PROPERTY): Likewise. (WHEEL_SCROLLING_ENABLED_CHANGED_PROPERTY): Likewise. (setComponentOrientation): Replaced constant with real string. (setColumnHeader): Likewise. (setHorizontalScrollBar): Likewise. (setHorizontalScrollBarPolicy): Likewise. (setRowHeader): Likewise. (setVerticalScrollBar): Likewise. (setVerticalScrollBarPolicy): Likewise. (setWheelScrollingEnabled): Likewise. (setViewport): Likewise. (setViewportBorder): Likewise. * javax/swing/JSlider.java (INVERTED_CHANGED_PROPERTY): Removed. (LABEL_TABLE_CHANGED_PROPERTY): Likewise. (MAJOR_TICK_SPACING_CHANGED_PROPERTY): Likewise. (MINOR_TICK_SPACING_CHANGED_PROPERTY): Likewise. (MODEL_CHANGED_PROPERTY): Likewise. (ORIENTATION_CHANGED_PROPERTY): Likewise. (PAINT_LABELS_CHANGED_PROPERTY): Likewise. (PAINT_TICKS_CHANGED_PROPERTY): Likewise. (setModel): Replaced constant with real string. (setOrientation): Likewise. (setLabelTable): Likewise. (setInverted): Likewise. (setMajorTickSpacing): Likewise. (setMinorTickSpacing): Likewise. (setPaintTicks): Likewise. (setPaintLabels): Likewise. * javax/swing/JTabbedPane.java (MODEL_CHANGED_PROPERTY): Removed. (TAB_PLACEMENT_CHANGED_PROPERTY): Likewise. (TAB_LAYOUT_POLICY_CHANGED_PROPERTY): Likewise. (setModel): Replaced constant with real string. (setTabPlacement): Likewise. (setTabLayoutPolicy): Likewise. * javax/swing/JToolBar.java (ORIENTATION_CHANGED_PROPERTY): Removed. (FLOATABLE_CHANGED_PROPERTY): Likewise. (BORDER_PAINTED_CHANGED_PROPERTY): Likewise. (MARGIN_CHANGED_PROPERTY): Likewise. (ROLLOVER_CHANGED_PROPERTY): Likewise. (setRollover): Replaced constant with real string. (setMargin): Likewise. (setBorderPainted): Likewise. (setFloatable): Likewise. (setOrientation): Likewise. * javax/swing/plaf/basic/BasicComboBoxUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicComboPopup.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicMenuBarUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicProgressBarUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicScrollBarUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicSliderUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicTabbedPaneUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicToolBarUI.java (PropertyChangeHandler.propertyChange): Likewise. 2005-02-15 Michael Koch * javax/swing/DefaultButtonModel.java (changeState): Made private. * javax/swing/DefaultDesktopManager.java (setWasIcon): Fixed second argument to be java.lang.Boolean. * javax/swing/JLayeredPane.java (layerToRange): Made private. (incrLayer): Likewise. (decrLayer): Likewise. * javax/swing/JTable.java (dragEnabled): Likewise. (preferredViewportSize): Renamed from preferredScrollableViewportSize. * javax/swing/KeyStroke.java (Keystroke): Made private. * javax/swing/TransferHandler.java (COMMAND_COPY): Likewise. (COMMAND_CUT): Likewise. (COMMAND_PASTE): Likewise. 2005-02-15 Michael Koch * javax/swing/JTextField.java (postActionEvent): Use text in field when actionCommand is null. (getActionCommand): Removed. 2005-02-15 Michael Koch * javax/swing/AbstractSet.java: Removed. * Makefile.am: Removed javax/swing/AbstractSet.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch * java/awt/Window.java (AccessibleWindow.getAccessibleStateSet): Fixed method name. * java/awt/dnd/DnDConstants.java (DnDConstants): New private constructor. 2005-02-15 Michael Koch * javax/swing/DefaultCellRenderer.java: Removed. * Makefile.am: Removed javax/swing/DefaultCellRenderer.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch * javax/swing/AbstractButton.java (fireItemStateChanged): Made protected. (fireActionPerformed): Likewise. (fireStateChanged): Likewise. * javax/swing/DefaultButtonModel.java (fireItemStateChanged): Likewise. (fireActionPerformed): Likewise. (fireStateChanged): Likewise. * javax/swing/JApplet.java (JApplet): Removed. (frameInit): Likewise. (setRootPane): Made protected. (createRootPane): Likewise. * javax/swing/JComponent.java (getClientProperty): Likewise. (putClientProperty): Likewise. * javax/swing/JEditorPane.java (getContentType): Likewise. (setContentType): Likewise. * javax/swing/JFrame.java (setRootPane): Likewise. (createRootPane): Likewise. * javax/swing/JInternalFrame.java (getFocusCycleRootAncestor): Made final. Added @since tag. (isFocusCycleRoot): Likewise. (getWarningString): Made final. * javax/swing/JScrollBar.java (changeListener): Removed. (changeEvent): Likewise. (createChangeListener): Likewise. (fireStateChanged): Likewise. (addChangeListener): Likewise. (removeChangeListener): Likewise. (getChangeListeners): Likewise. * javax/swing/JScrollPane.java (createViewport): Made protected. * javax/swing/JViewport.java (addImpl): Likewise. (setBorder): New method. * javax/swing/JWindow.java (setRootPane): Made protected. (createRootPane): Likewise. * javax/swing/plaf/basic/BasicButtonUI.java (installListeners): Likewise. (uninstallListeners): Likewise. * javax/swing/plaf/basic/BasicProgressBarUI.java (incrementAnimationIndex): Likewise. * javax/swing/plaf/basic/BasicTabbedPaneUI.java (createLayoutManager): Likewise. * javax/swing/table/DefaultTableCellRenderer.java (firePropertyChange): Likewise. * javax/swing/table/JTableHeader.java (AccessibleJTableHeaderEntry.AccessibleJTableHeaderEntry): New constructor. * javax/swing/text/PlainDocument.java (reindex): Made private. * javax/swing/text/PlainView.java (drawLine): Made protected. (getTabSize): Likewise. * javax/swing/text/View.java (setSize): Removed. (preferenceChanged): New method. (getBreakWeight): Likewise. (breakView): Likewise. (getViewIndex): Likewise. 2005-02-15 Michael Koch * javax/swing/JScrollPane.java (ScrollBar): Made class protected. * javax/swing/JSpinner.java (JSpinner): Added @since tag. (listenerList): Removed. * javax/swing/JTable.java (setValueAt): New method. (getColumn): Likewise. * javax/swing/JWindow.java (rootPaneCheckingEnabled): Renamed from checking. 2005-02-15 Michael Koch * javax/swing/plaf/basic/BasicTextUI.java (RootView.modelToView): Made it public and return a java.awt.Shape. Handle null subview. (uninstall): Set textComponent to null when its not possible used anymore. * javax/swing/text/View.java (setParent): Use better argument name. (getContainer): Get parent via getParent(). (getViewFactory): Likewise. (getAttributes): Get element via getElement(). (getStartOffset): Likewise. (getEndOffset): Likewise. (getResizeWeight): New method. (getMaximumSpan): Likewise. (getMinimumSpan): Likewise. (setSize): Likewise. (getGraphics): Likewise. 2005-02-15 Andrew John Hughes * java/awt/Checkbox.java: (AccessibleAWTCheckbox()): Added public constructor to call superclass. * java/awt/Choice.java: (AccessibleAWTChoice): Added class documentation. (AccessibleAWTChoice()): Added public constructor to call superclass. (AccessibleAWTChoice.getAccessibleAction()): Documented. (AccessibleAWTChoice.getAccessibleRole()): Documented, and changed role to COMBO_BOX. (AccessibleAWTChoice.getAccessibleActionCount()): Documented. (AccessibleAWTChoice.getAccessibleActionDescription(int)): Documented. (AccessibleAWTChoice.doAccessibleAction(int)): Documented. 2005-02-15 Graydon Hoare Michael Koch * javax/swing/LayoutFocusTraversalPolicy.java, javax/swing/SortingFocusTraversalPolicy.java: New classes. * Makefile.am: Added new classes. * Makefike.in: Regenerated. 2005-02-15 Michael Koch * javax/swing/DebugGraphics.java: Mostly implemented. 2005-02-15 Michael Koch * javax/swing/SwingUtilities.java (findFocusOwner): New method. 2005-02-15 Michael Koch * javax/swing/text/DefaultEditorKit.java (read): Added '\n' after each line. * javax/swing/text/PlainView.java (modelToView): Update metrics. (drawLine): Use offsets from element. (paint): Update metrics. Draw all lines. 2005-02-15 Andrew John Hughes * java/awt/Checkbox.java: (AccessibleAWTCheckbox): Added class documentation * java/awt/Scrollbar.java: (AccessibleAWTScrollBar): typo corrected and docs added (AccessibleAWTScrollBar.getAccessibleRole()): documented (AccessibleAWTScrollBar.getAccessibleStateSet()): likewise (AccessibleAWTScrollBar.getAccessibleValue()): likewise (AccessibleAWTScrollBar.getCurrentAccessibleValue()): likewise (AccessibleAWTScrollBar.setCurrentAccessibleValue(int)): likewise (AccessibleAWTScrollBar.getMinimumAccessibleValue()): likewise (AccessibleAWTScrollBar.getMaximumAccessibleValue()): likewise (getAccessibleContext()): name of accessible class corrected 2005-02-15 Mark Wielaard * java/awt/BasicStroke.java (hashCode): Implement. (equals): Document. 2005-02-15 Michael Koch * java/awt/print/PrinterJob.java (pageDialog): Throws java.awt.HeadlessException. (printDialog): Likewise. 2005-02-15 Mark Wielaard * jni/gtk-peer/gtkpeer.h (gdk_env): Fix prototype. 2005-02-15 Michael Koch * javax/swing/JTable.java (getValueAt): New method. * javax/swing/table/JTableHeader.java (columnAtPoint): New method. 2005-02-15 Michael Koch * javax/swing/JTextField.java (actions): New field. (static): Initalize actions field. (getActions): New method. 2005-02-15 Andrew John Hughes * java/awt/Checkbox.java: (AccessibleAWTCheckbox): name capitalization corrected and serialization UID added. (AccessibleAWTCheckbox.itemStateChanged(java.awt.event.ItemEvent)): documented. (AccessibleAWTCheckbox.getAccessibleAction()): likewise (AccessibleAWTCheckbox.getAccessibleValue()): likewise (AccessibleAWTCheckbox.getAccessibleActionCount()): likewise (AccessibleAWTCheckbox.getAccessibleActionDescription(int)): likewise (AccessibleAWTCheckbox.doAccessibleAction(int)): likewise (AccessibleAWTCheckbox.getCurrentAccessibleValue()): likewise (AccessibleAWTCheckbox.setCurrentAccessibleValue(int)): likewise (AccessibleAWTCheckbox.getMinimumAccessibleValue()): likewise (AccessibleAWTCheckbox.getMaximumAccessibleValue()): likewise (AccessibleAWTCheckbox.getAccessibleRole()): likewise (AccessibleAWTCheckbox.getAccessibleStateSet()): implemented and documented (getAccessibleContext()): name of accessible class corrected 2005-02-15 Sven de Marothy * java/awt/geom/doc-files/Area-1.png, java/awt/geom/doc-files/Ellipse-1.png, java/awt/geom/doc-files/GeneralPath-1.png: New files. 2005-02-15 Graydon Hoare * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (env_union): Use union to avoid type-punning warning. 2005-02-15 Michael Koch * javax/swing/DefaultListSelectionModel.java (clone): New method. 2005-02-15 Mark Wielaard Reported by Martin Platter * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile): Correct method signature of gtkSetFilename. 2005-02-15 Arnaud Vandyck * javax/swing/text/StringContent.java: New file. 2005-02-15 Michael Koch * Makefile.am: Added javax/swing/text/StringContent.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch * gnu/java/awt/ClasspathToolkit.java: Import statements reworked. (imageCache): Made it of type java.util.HashMap. 2005-02-15 Michael Koch * javax/imageio/stream/MemoryCacheImageInputStream.java: Reworked import statements. 2005-02-15 Graydon Hoare * jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.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_GtkButtonPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.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_GtkListPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Rewrite uses of extern variable to be function calls. * jni/gtk-peer/gtkpeer.h (gdk_env): Change declaration to function, from extern variable. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (gdk_env): Remove variable, add new function. (java_vm): Add new variable. (Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit): Initialize java_vm rather than old gdk_env variable. 2005-02-15 David Gilbert * javax/swing/DefaultListModel.java (add): fire correct event, (addElement): corrected interval indices in event, (clear): corrected upper bound for interval, only fire event if list is not empty, (setSize): fire appropriate event. 2005-02-15 Graydon Hoare * gnu/awt/xlib/XEventLoop.java: Add non-blocking event mode. * gnu/awt/xlib/XToolkit.java: Likewise. * gnu/gcj/xlib/XAnyEvent.java: Likewise. * gnu/gcj/xlib/natXAnyEvent.cc: Likewise. * gnu/java/awt/ClasspathToolkit.java: Likewise. * gnu/java/awt/peer/gtk/GtkToolkit.java: Likewise. * java/awt/EventQueue.java (getNextEvent): Adjust event loop to switch to native mode after 100ms. * javax/swing/Timer.java (drainEvents): Reuse Runnable. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c (Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose): Wake up event thread. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue): Adjust event loop to switch to java mode after 100ms. 2005-02-15 Graydon Hoare * jni.cc (_Jv_JNI_RegisterNatives): Re-add sync, which was accidentally removed in last change. 2005-02-15 Michael Koch * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c, gnu/java/awt/peer/gtk/GtkMainThread.java: Removed. 2005-02-15 Graydon Hoare * include/jni.h (_Jv_JNIEnv::bottom_locals): New field. * include/jvm.h (_Jv_FreeJNIEnv): Declare. * java/lang/natThread.cc (finalize_native): Call _Jv_FreeJNIEnv. * jni.cc: Reuse bottom frame between calls, avoid clearing frame when no local references are made. 2005-02-15 Michael Koch * javax/swing/UIDefaults.java (UIDefaults): Fixed typo in javadoc (Thanks to Thomas Zander for reporting) Fixed HTML entity and removed a redundant comma. 2005-02-15 Michael Koch * javax/swing/text/DefaultEditorKit.java (deinstall): Removed. (install): Likewise. 2005-02-15 Michael Koch * javax/swing/UIDefaults.java (put): Handle value of null. 2005-02-15 Michael Koch * java/awt/Robot.java, java/awt/Scrollbar.java, java/awt/print/PrinterJob.java, javax/swing/JTable.java, javax/swing/text/AbstractDocument.java: Reworked import statements. 2005-02-15 Michael Koch * javax/swing/JEditorPane.java (read): Implemented. (write): Likewise. * javax/swing/text/DefaultEditorKit.java (page): Renamed from page_url. Made private. (editorKit): Renamed from kit. Made private. (ctype): Removed. (JEditorPane): All constructors reimplemented. (getContentType): Use content type from editor kit. (getEditorKit): Return editorKit. (getEditorKitForContentType):Likewise. (getPage): Return page. (setContentType): Reimplemented. (setEditorKit): Likewise. (setEditorKitForContentType): Removed wrong implementation. (setPage): Implemented. 2005-02-15 Thomas Fitzsimmons * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c (nativeSetIconImageFromData): Re-add native implementation. 2005-02-15 David Gilbert * javax/swing/table/DefaultTableModel.java (DefaultTableModel()): Added Javadocs. (DefaultTableModel(int, int)): Fixed implementation. (DefaultTableModel(Vector, int)): Throw IllegalArgumentException for negative rowCount. (DefaultTableModel(Object[], int)): Added Javadocs. (DefaultTableModel(Vector, Vector)): Likewise. (DefaultTableModel(Object[][], Object[])): Likewise. (getDataVector): Likewise. (setDataVector(Vector, Vector)): Likewise. (setDataVector(Object[][], Object[])): Likewise. (newDataAvailable): Likewise. (newRowsAdded): Likewise. (rowsRemoved): Likewise. (setColumnIdentifiers(Vector)): Allow for null argument. (setColumnIdentifiers(Object[])): Added Javadocs. (setNumRows): Likewise. (setRowCount): Adds new rows if necessary, and sends more specific TableModelEvent. (setColumnCount): Allow for null columnIdentifiers. (addColumn(Object)): Added Javadocs. (addColumn(Object, Vector)): Handle null columnData. (addColumn(Object, Object[])): Handle columnData with more or less entries than rows in the table. (addRow(Vector)): Fire appropriate event. (addRow(Object[])): Added Javadocs. (insertRow(int, Vector)): Fire appropriate event. (insertRow(int, Object[])): Added Javadocs. (moveRow): Reimplemented. (removeRow(int)): Fire appropriate event. (getColumnCount): Allow for null columnIdentifiers. (getColumnName): Now returns empty string when column index is too large. (isCellEditable): Added Javadocs. (getValueAt): Likewise. (setValueAt): Fire more specific event. (convertToVector): Added Javadocs. * javax/swing/table/TableModel.java Added Javadocs. 2005-02-15 Thomas Fitzsimmons * libgcj.spec.in (lib): Add -l-javax-imageio. 2005-02-15 Thomas Fitzsimmons * gnu/java/awt/peer/gtk/GtkComponentPeer.java: Replace direct references to event queue q with method call q(). * gnu/java/awt/peer/gtk/GtkDialogPeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkFramePeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkTextComponentPeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkWindowPeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkGenericPeer.java: Likewise. (q): New method. 2005-02-15 Graydon Hoare * gnu/java/awt/ClasspathToolkit.java (registerImageIOSpis): New method. * gnu/java/awt/image/ImageDecoder.java (imageDecoder): New constructor using InputStream (startProduction): Handle existing InputStream. * gnu/java/awt/peer/gtk/GdkGraphics2D.java (findSimpleIntegerArray): Make public and static. (updateBufferedImage): Set each pixel, in a loop. * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: Implement ImageIO SPI classes. (createBufferedImage): Rewrite in terms of SPI classes. * gnu/java/awt/peer/gtk/GtkToolkit.java (registerImageIOSpis): New method. * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Borrow a patch from aph, applied to trunk, which lets JNI call interface methods properly. * javax/imageio/ImageIO.java (WriterFormatFilter.filter): Fix copy-and-paste typos. (WriterMIMETypeFilter.filter): Likewise. (ImageReaderIterator): Pass extension argument through to SPI. (getReadersByFilter): Likewise. (getWritersByFilter): Likewise. (getImageReadersByFormatName): Likewise. (getImageReadersByMIMEType): Likewise. (getImageReadersBySuffix): Likewise. (getImageWritersByFormatName): Likewise. (getImageWritersByMIMEType): Likewise. (getImageWritersBySuffix): Likewise. (read): Implement. (write): Implement. * javax/imageio/ImageReader.java (progressListeners): Initialize. (setInput): Implement. * javax/imageio/ImageWriter.java (progressListeners): Initialize. (warningListeners): Likewise. (warningLocales): Likewise. (setOutput): Test "isInstance" rather than class equality. * javax/imageio/spi/IIORegistry.java (static): Add reader and writer SPIs. (IIORegistry): Call ClasspathToolkit.registerImageIOSpis. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (query_formats): New function. (save_to_stream): Likewise. (Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage): Likewise. 2005-02-15 Thomas Fitzsimmons * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c (mouseWheel): Call XFlush. (keyPress): Likewise. (keyRelease): Likewise. 2005-02-15 Olga Rodimina * javax/swing/JTable.java (columnAtPoint): New Method. Implemented. (rowAtPoint): Likewise. (countSelections): Fixed few small count errors. (getSelections): Likewise. (setSelectionMode): Set selection mode for column selection model in addition to row selection model. * javax/swing/plaf/basic/BasicTableUI.java: (getRowForPoint): Removed. Replaced by JTable.rowAtPoint(). (getColForPoint): Removed. Replaced by JTable.columnAtPoint(). (updateSelection): Updated to call JTable.columnAtPoint and JTable.rowAtPoint. * javax/swing/table/DefaultTableColumnModel.java: (getSelectedColumns): Implemented. (getSelectedColumnCount): Implemented. 2005-02-15 Graydon Hoare * Makefile.am (jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c) (gnu/java/awt/peer/gtk/GtkMainThread.java) : Remove. * Makefile.in: Regenerate. * gnu/awt/xlib/XEventLoop.java: Fix to match thread model. * gnu/awt/xlib/XFramePeer.java: Likewise. * gnu/awt/xlib/XToolkit.java: Likewise. * gnu/gcj/xlib/XAnyEvent.java: Likewise. * gnu/gcj/xlib/natXAnyEvent.cc: Likewise. * gnu/java/awt/ClasspathToolkit.java (nativeQueueEmpty) (wakeNativeQueue) (iterateNativeQueue): New methods. * gnu/java/awt/peer/gtk/GtkMainThread.java: Remove. * gnu/java/awt/peer/gtk/GtkToolkit.java (gtkInit): Absorb from defunct GtkMainThread class. (static): Run gtkInit in static startup block. (GtkToolkit): Remove construction of GtkMainThread and queue. (getSystemEventQueueImpl): Construct queue when requested. (nativeQueueEmpty) (wakeNativeQueue) (iterateNativeQueue): New methods. * java/awt/Component.java (removeNotify): Remove race. * java/awt/EventDispatchThread.java (EventDispatchThread): Don't start on construction. (run): Remove isInterrupted check. * java/awt/EventQueue.java (shutdown): New flag. (isShutdown): New method checking J2SE shutdown condition. (setShutdown): New method. (getNextEvent): Restructure to use ClasspathToolkit. (postEvent): Activate new thread on posting, wake thread on post of possible shutdown condition event. * java/awt/Frame.java (Frame): Call noteFrame in all constructors. (fireDummyEvent): New helper method. (addNotify): Fire a dummy event to wake up queue. (removeNotify): Fire a dummy event to wake up queue. (noteFrame): New method. (weakFrames): New static field. (getFrames): Implement. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Remove. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c: Move everything from GtkMainThread into this file (Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue) (Java_gnu_java_awt_peer_gtk_GtkToolkit_wakeNativeQueue) (Java_gnu_java_awt_peer_gtk_GtkToolkit_nativeQueueEmpty): New functions to implement single-threaded queue semantics. 2005-02-15 Michael Koch * javax/swing/plaf/metal/MetalLookAndFeel.java (getControlTextFont): New method. (getMenuTextFont): Likewise. (getSubTextFont): Likewise. (getSystemTextFont): Likewise. (getUserTextFont): Likewise. (getWindowTitleFont): Likewise. 2005-02-15 Michael Koch * javax/swing/text/AbstractDocument.java (documentFilter): New field. (getDocumentFilter): New method. (setDocumentFilter): Likewise. (dump): Likewise. 2005-02-15 Michael Koch * javax/swing/JTree.java (DynamicUtilTreeNode.hasChildren): Clarify javadoc. 2005-02-15 Michael Koch * javax/swing/text/AbstractDocument.java (AbstractElement.getLength): Fixed off-by-one error. (AbstractElement.children): Made abstract. (AbstractElement.getAllowsChildren): Likewise. (AbstractElement.getElement): Likewise. (AbstractElement.dumpElement): New private method. (AbstractElement.dump): New method. (BranchElememt.getName): Fixed implementation. (BranchElememt.toString): Likewise. (BranchElememt.getElement): Fixed arguments. (LeafElement.getName): Fixed implementation. (LeafElement.toString): Likewise. * javax/swing/text/GapContent.java (GapContent): Put default content into buffer. * javax/swing/text/PlainDocument.java (reindex): Use empty attribute sets instead of null. (createDefaultRoot): Reimplemented. (insertUpdate): Call super method. (removeUpdate): Likewise. (getParagraphElement): Implemented. 2005-02-15 Michael Koch * gnu/java/awt/ClasspathToolkit.java (createRobot): Throws java.awt.AWTException. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: Added '__attribute__((unused))' to all unused method arguments. 2005-02-15 Michael Koch * javax/swing/DefaultBoundedRangeModel.java (fireValueChanged): Fixed off-by-one error. 2005-02-15 Thomas Fitzsimmons * Makefile.am (gtk_c_source_files): Add GdkRobotPeer.c. (gtk_awt_peer_sources): Add GdkScreenGraphicsDevice.java and GdkRobotPeer.java. (lib_gnu_java_awt_peer_gtk_la_CFLAGS): Add X flags. (lib_gnu_java_awt_peer_gtk_la_LDFLAGS): Add XTest flags. * gnu/awt/xlib/XToolkit.java (createRobot): New method. * gnu/java/awt/ClasspathToolkit.java (createRobot): New method. * gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java (getDefaultScreenDevice): Implement. * gnu/java/awt/peer/gtk/GdkRobotPeer.java: New file. * gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java: Likewise. * gnu/java/awt/peer/gtk/GtkToolkit.java (createRobot): New method. * java/awt/Robot.java: Implement. * java/awt/peer/RobotPeer.java: Rename parameters. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: New file. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c (awt_keycode_to_keysym): Make non-static. * jni/gtk-peer/gtkpeer.h (AWT_BUTTON1_MASK, AWT_BUTTON2_MASK, AWT_BUTTON3_MASK): Declare constants. (awt_keycode_to_keysym): Declare. * Makefile.am (AM_MAKEFLAGS): Set KEYS variable. * testsuite/libjava.mauve/mauve.exp (test_mauve): If KEYS exists and is non-empty pass its value to "make check". (test_mauve_sim): Likewise. 2005-02-15 Michael Koch * javax/imageio/IIOParam.java (setSourceBands): New method. (setSourceSubsampling): Likewise. * javax/imageio/ImageReadParam.java (setDestination): Likewise. (setDestinationBands): Likewise. (setSourceProgressivePasses): Likewise. * javax/imageio/metadata/IIOInvalidTreeException.java (serialVersionUID): New static field. * javax/imageio/metadata/IIOMetadataNode.java (IIOMetadataNode): Don't explicitely implement org.w3c.dom.Node. (parent): Dont initailize with default value explicitely. (Object): Likewise. (removeAttribute): Doesn't throws org.w3c.dom.DOMException. (removeAttributeNode): Likewise. (removeAttributeNS): Likewise. (setAttribute): Likewise. (setAttributeNode): Likewise. (setAttributeNodeNS): Likewise. (setAttributeNS): Likewise. (appendChild): Likewise. (getNodeValue): Likewise. (insertBefore): Likewise. (removeChild): Likewise. (replaceChild): Likewise. (setPrefix): Likewise. 2005-02-15 Michael Koch * javax/swing/LookAndFeel.java (getDesktopPropertyValue): New method. 2005-02-15 Michael Koch * javax/swing/JTree.java (hasChildren): New instance field. 2005-02-15 Michael Koch * javax/swing/JComponent.java (getToolTipText): New method. (getTitledBorderText): Likewise. (getAccessibleKeyBinding): Likewise. (getVerifyInputWhenFocusTarget): Likewise. (setVerifyInputWhenFocusTarget): Likewise. (verifyInputWhenFocusTarget): New instance field. 2005-02-15 Michael Koch * javax/swing/DefaultListSelectionModel.java (fireValueChanged): New method. 2005-02-15 Michael Koch * javax/swing/DefaultBoundedRangeModel.java: Fixed javadocs all over. (fireStateChanged): Simplified. * javax/swing/BoundedRangeModel.java: Reformatted. 2005-02-15 Michael Koch * javax/swing/JRootPane.java (setMenuBar): Added @deprecated tag. (getMenuBar): Likewise. * javax/swing/JTable.java (sizeColumnsToFit): Likewise. 2005-02-15 Paul Jenner * javax/swing/ImageIcon.java (setImage): Implemented. 2005-02-15 Michael Koch * javax/swing/JTable.java: Removed unused imports. 2005-02-15 Olga Rodimina (prepareRenderer): Get column's index in dataModel instead of column's view index. (getColumnCount): return count of the columns in ColumnModel, not in dataModel. (removeColumn): Implemented. (moveColumm): Likewise. (setRowHeight): throw IllegalArgumentException if height is less then 1. * javax/swing/table/DefaultTableColumnModel.java: Add javadocs. (DefaultTableColumnModel):Add call to createSelectionModel(). (addColumn): Fire columnAdded event to registered listeners. (removeColumn): Fire columnRemoved event to registered listeners. (moveColumn): Fire columnMoved event to registered listeners. (setColumnMargin): Fire ColumnMarginChanged event to registered listeners. (getColumnIndex): Changed parameter name. (setColumnSelectionAllowed): Likewise. (fireColumnAdded): Implemented. (fireColumnRemoved): Likewise. (fireColumnMoved): Likewise. (fireColumnMarginChanged): Likewise. (getListeners): Changed parameter name. (propertyChange): Implemented. (valueChanged): Changed parameter name. (createSelectionModel): Implemented. 2005-02-15 Michael Koch * gnu/java/awt/peer/gtk/GtkToolkit.java: Explicitely import used classes. (getLocalGraphicsEnvironment): Simplify. * java/awt/Window.java (Window): Enable code to get the default GraphicsConfiguration. 2005-02-15 Michael Koch * javax/swing/plaf/metal/DefaultMetalTheme.java (CONTROL_TEXT_FONT): New static field. (MENU_TEXT_FONT): Likewise. (SUB_TEXT_FONT): Likewise. (SYSTEM_TEXT_FONT): Likewise. (USER_TEXT_FONT): Likewise. (WINDOW_TITLE_FONT): Likewise. (getControlTextFont): New method. (getMenuTextFont): Likewise. (getSubTextFont): Likewise. (getSystemTextFont): Likewise. (getUserTextFont): Likewise. (getWindowTitleFont): Likewise. * javax/swing/plaf/metal/MetalTheme.java (BLACK): Initialize with Color.BLACK. (WHITE): Initialize with Color.WHITE. (getInactiveControlTextColor): Return getControlDisabled(). (getMenuDisabledForeground): Return getSecondary3(). (getControlTextFont): New abstract method. (getMenuTextFont): Likewise. (getSubTextFont): Likewise. (getSystemTextFont): Likewise. (getUserTextFont): Likewise. (getWindowTitleFont): Likewise. 2005-02-15 Michael Koch * javax/swing/JFormattedTextField.java (getFocusLostBehavior): Fixed typo in method name. (setFocusLostBehavior): Likewise. 2005-02-15 Michael Koch * javax/swing/TransferHandler.java: Reworked import statements. 2005-02-15 Jerry Quinn * java/awt/Button.java, java/awt/Canvas.java, java/awt/Checkbox.java, java/awt/CheckboxMenuItem.java, java/awt/Choice.java, java/awt/Dialog.java, java/awt/Frame.java, java/awt/Label.java, java/awt/List.java, java/awt/Menu.java, java/awt/MenuBar.java, java/awt/MenuItem.java, java/awt/PopupMenu.java, java/awt/ScrollPane.java, java/awt/Scrollbar.java, java/awt/TextArea.java, java/awt/Window.java (getAccessibleContext): Clean up comments. Reformat. * java/awt/Button.java, java/awt/Checkbox.java, java/awt/Choice.java, java/awt/Menu.java, java/awt/PopupMenu.java, java/awt/TextArea.java (getAccessibleContext): Only create new accessible once. * java/awt/TextComponent.java (getAccessibleContext): Implement. 2005-02-15 Michael Koch * java/awt/Button.java, javax/swing/JApplet.java, javax/swing/JFormattedTextField.java, javax/swing/JWindow.java, javax/swing/JTree.java, javax/swing/plaf/basic/BasicEditorPaneUI.java, javax/swing/plaf/basic/BasicTextPaneUI.java, javax/swing/plaf/basic/BasicTreeUI.java: Reworked import statements. 2005-02-15 Michael Koch * Makefile.am: Put javax.imageio into its own library and link it against lib-org-w3c-dom.la to fix bootstrapping. * Makefile.in: Regenerated. 2005-02-15 Michael Koch * javax/swing/text/TextAction.java (getTextComponent): Simplified. Added Javadoc. (augmentList): Implemented. Added Javadoc. (getFocusedComponent): Added javadoc. 2005-02-15 Jerry Quinn * java/awt/Scrollbar.java (AccessibleAWTScrollbar, getAccessibleContext): Implement. * java/awt/ScrollPane.java (AccessibleAWTScrollPane, getAccessibleContext): Implement. 2005-02-15 Jerry Quinn * java/awt/Dialog.java (AccessibleAWTFrame, getAccessibleContext): Implement. * java/awt/Frame.java (AccessibleAWTFrame, getAccessibleContext): Implement. * java/awt/Window.java (getAccessibleContext): Fix comment. Remove extra import. 2005-02-15 Jerry Quinn * java/awt/Window.java (AccessibleAWTWindow): Implement. (isActive, isFocused, getAccessibleContext): Implement. 2005-02-15 Jerry Quinn * java/awt/MenuItem.java (getAccessibleContext): Implement. * java/awt/MenuComponent.java (accessibleContext): Make package visible. * java/awt/CheckboxMenuItem.java (getAccessibleContext, AccessibleAWTCheckboxMenuItem): Implement. 2005-02-15 Jerry Quinn * java/awt/List.java: Implement AccessibleAWTList, AccessibleAWTListChild. 2005-02-15 Jerry Quinn * java/awt/Choice.java: Add implements declaration for Accessible. 2005-02-15 Jerry Quinn * javax/imageio/metadata/IIOInvalidTreeException.java: Use Node instead of Object. 2005-02-15 Jerry Quinn * javax/imageio/metadata/IIOMetadataNode.java: Add Node to implemented interface list. 2005-02-15 Jerry Quinn * javax/imageio/metadata/IIOMetadataNode.java: Implement. * javax/imageio/metadata/IIOAttr.java: New class. * javax/imageio/metadata/IIONamedNodeMap.java: New class. * javax/imageio/metadata/IIONodeList.java: New class. * Makefile.am: Added new files. * Makefile.in: Regenerated. 2005-02-15 Michael Koch * javax/swing/AbstractAction.java, javax/swing/AbstractCellEditor.java, javax/swing/AbstractListModel.java, javax/swing/DefaultBoundedRangeModel.java, javax/swing/DefaultButtonModel.java, javax/swing/DefaultCellEditor.java, javax/swing/DefaultComboBoxModel.java, javax/swing/DefaultDesktopManager.java, javax/swing/JMenu.java, javax/swing/JSlider.java, javax/swing/KeyStroke.java, javax/swing/OverlayLayout.java, javax/swing/ScrollPaneLayout.java, javax/swing/SizeRequirements.java, javax/swing/ViewportLayout.java: Made serialVersionUID private. 2005-02-15 Michael Koch * gnu/java/awt/peer/gtk/GtkComponentPeer.java: Reformatted. 2005-02-15 Michael Koch * gnu/java/awt/peer/gtk/GdkGraphics2D.java: More reformatting. 2005-02-15 Michael Koch * gnu/java/awt/peer/gtk/GdkGraphics2D.java: Reformatted. 2005-02-15 Jeroen Frijters * java/awt/EventDispatchThread.java, java/awt/Toolkit.java: Don't catch java.lang.ThreadDeath. 2005-02-15 Michael Koch * javax/swing/text/PasswordView.java (drawEchoCharacter): Added javadoc. (drawSelectedText): Likewise. (drawUnselectedText): Likewise. 2005-02-15 Michael Koch * javax/swing/JRootPane.java (windowDecorationStyle): New field. (setMenuBar): New method. (getMenuBar): Likewise. (getWindowDecorationStyle): Likewise. (setWindowDecorationStyle): Likewise. 2005-02-15 Michael Koch * javax/swing/DefaultListSelectionModel.java (leadAnchorNotificationEnabled): Made protected. 2005-02-15 Michael Koch * javax/swing/InternalFrameFocusTraversalPolicy.java: New file. * Makefile.am: Added InternalFrameFocusTraversalPolicy.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch * javax/swing/JFormattedTextField.java: Implemented. * javax/swing/JWindow.java (JWindow): New constructors. (initWindow): Renamed from initFrame. * javax/swing/UIDefaults.java (ActiveValue): Made interface static. (LazyValue): Likewise. * javax/swing/plaf/basic/BasicInternalFrameTitlePane.java (TitlePaneLayout.TitlePaneLayout): New constructor. * javax/swing/plaf/basic/BasicSliderUI.java (ChangeHandler): Made public. (FocusHandler): Likewise. (PropertyChangeHandler): Likewise. (ScrollListener): Likewise. * javax/swing/plaf/basic/BasicTabbedPaneUI.java (FocusHandler): Likewise. (MouseHandler): Likewise. * javax/swing/plaf/basic/BasicTextPaneUI.java (BasicTextPaneUI): Extend BasicEditorPaneUI. * javax/swing/plaf/basic/BasicToolBarUI.java (BasicToolBarUI): Simplified. Reworked javadoc. (canDock): Simplified. Make public. (DockingListener): Made public. * javax/swing/text/JTextComponent.java (navigationFilter): New field. (getNavigationFilter): New method. (setNavigationFilter): Likewise. 2005-02-15 Michael Koch * javax/swing/plaf/metal/MetalTheme.java (getControlTextColor): Return getControlInfo(). (getHighlightedTextColor): Return getControlTextColor(). 2005-02-15 Michael Koch * javax/swing/plaf/basic/BasicButtonListener.java (BasicButtonListener): New constructor. * javax/swing/plaf/basic/BasicButtonUI.java (createButtonListener): Usw new BasicButtonListener constructor. 2005-02-15 Michael Koch * javax/imageio/event/package.html, javax/imageio/metadata/package.html: New files. 2005-02-15 Michael Koch * java/awt/image/MemoryImageSource.java: Reformatted. 2005-02-15 Michael Koch * javax/swing/tree/TreeCellEditor.java: Refomatted. 2005-02-15 Jeroen Frijters * java/awt/color/ICC_Profile.java (finalize): Removed pointless field assignments. 2005-02-15 Michael Koch * javax/swing/plaf/basic/BasicEditorPaneUI.java: New file. * Makefile.am: Added javax/swing/plaf/basic/BasicEditorPaneUI.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch * javax/swing/text/DefaultStyledDocument.java: New file. * Makefile.am: Added javax/swing/text/DefaultStyledDocument.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch * javax/swing/JFileChooser.java (showDialog): Return CANCEL_OPTION for now. (showOpenDialog): Likewise. (showSaveDialog): Likewise. 2005-02-15 Michael Koch * javax/swing/JApplet.java (HIDE_ON_CLOSE): Removed. (EXIT_ON_CLOSE): Likewise. (DISPOSE_ON_CLOSE): Likewise. (DO_NOTHING_ON_CLOSE): Likewise. (close_action): Likewise. (getDefaultCloseOperation): Likewise. (setDefaultCloseOperation): Likewise. (processWindowEvent): Likewise. (getPreferredSize): Simplified. * javax/swing/JInternalFrame.java (setDefaultCloseOperation): Fixed throwing exception on wrong argument value. * javax/swing/JWindow.java (HIDE_ON_CLOSE): Removed. (EXIT_ON_CLOSE): Likewise. (DISPOSE_ON_CLOSE): Likewise. (DO_NOTHING_ON_CLOSE): Likewise. (close_action): Likewise. (processKeyEvent): Likewise. (setDefaultCloseOperation): Likewise. (getPreferredSize): Simplified. 2005-02-15 Michael Koch * javax/swing/JTextField.java (getPreferredSize): Re-implemented. 2005-02-15 Michael Koch * javax/swing/JLabel.java (setDisplayedMnemonic): Use only upper case characters. (setDisplayedMnemonicIndex): Handle index == -1 and fire PropertyChangeEvent after property got set to the new index. 2005-02-15 Robert Schuster * javax/swing/JComboBox.java: (JComboBox): Removed selection of the first item in the model. 2005-02-15 Robert Schuster * javax/swing/JComboBox.java added support for no item being selected (JComboBox): select first or nothing depending on element count (setModel): cleaned up unneeded "this." usage, added more docs, made exception behavior match that of the JDK (setLighWeightPopupEnabled): removed unneeded "this." usage (setEditable): dito (setMaximumRowCount): dito (setRenderer): dito (setPrototypeDisplayValue): dito (getSelectedItem): simplified, added more user doc (setSelectedIndex): corrected exception behavior, added more user doc (getSelectedIndex): fixed hardcoded dependency on DefaultComboBoxModel, added performance warning to user doc (addItem): fixed exception behavior, added user doc (insertItemAt): dito (removeItem): dito (removeItemAt): dito (removeAll): fixed exception behavior, added user doc, added support for model not being instance of DefaultComboBoxModel (getSelectedItemObjects): simplified (getItemCount): fixed dependency on DefaultComboBoxModel (getItemAt): fixed dependency on MutableComboBoxModel * javax/swing/DefaultComboBoxModel.java: (setSelectedItem): updates selected item only if new value is null or known (match JDK behavior) * javax/swing/plaf/basic/BasicComboBoxUI.java: (paintCurrentValue): renders "" if no item is selected 2005-02-15 Michael Koch * javax/swing/plaf/metal/MetalTheme.java, javax/swing/plaf/metal/DefaultMetalTheme.java: New files. * javax/swing/plaf/metal/MetalLookAndFeel.java * Makefile.am: Added the new files. * Makefile.in: Regenerated. 2005-02-15 Olga Rodimina * javax/swing/JTable.java (editorComp): New field. (JTable): Initialize local variables and call updateUI (selectionBackground): Make protected. (selectionForeground): Likewise. (initializeLocalVars): Create default editors and renderers, initialize editingColumn, editingRow variables. (createDefaultEditors): New Method. (createDefaultRenderers): Likewise. (createDefaultListSelectionModel): Removed (createDefaultSelectionModel): New Method. (createDefaultTableHeader): Likewise (removeColumn): Likewise. (getEditingColumn): Likewise. (setEditingColumn): Likewise. (getEditingRow): Likewise. (setEditingRow): Likewise. (getEditorComponent): Likewise. (isEditing): Likewise. (setDefaultEditor): Likewise. (addColumnSelectionInterval): Likewise. (addRowSelectionInterval): Likewise. (setColumnSelectionInterval): Likewise. (setRowSelectionInterval): Likewise. (removeColumnSelectionInterval): Likewise. (removeRowSelectionInterval): Likewise. (isColumnSelected): Likewise. (isRowSelected): Likewise. (isCellSelected): Likewise. (selectAll): Likewise. 2005-02-15 Michael Koch * javax/swing/JTable.java (addColumn): New method. (getColumnClass): Likewise. (getColumnName): Likewise. 2005-02-15 Paul Jenner * javax/swing/TransferHandler.java (createTransferable): Made protected. 2005-02-15 Michael Koch * javax/swing/JTable.java, javax/swing/plaf/basic/BasicTableHeaderUI.java, javax/swing/plaf/basic/BasicTableUI.java: Use fixed get/setIntercellSpacing() methods. 2005-02-15 Michael Koch * javax/swing/JTable.java (getIntercellSpacing): Fixed typo in method name. (setIntercellSpacing): Likewise. 2005-02-15 Michael Koch * javax/swing/text/JTextComponent.java (focusAccelerator): New variable. (getFocusAccelerator): New method. (setFocusAccelerator): Likewise. 2005-02-15 Michael Koch * javax/swing/JComponent.java (setTransferHandler): Made public. Fire property change event. * javax/swing/TransferHandler.java: Implemented. * javax/swing/text/JTextComponent.java (DefaultTransferHandler): New inner class. (defaultTransferHandler): New variable. (copy): New method. (cut): Likewise. (paste): Likewise. (doTransferAction): Likewise. 2005-02-15 Michael Koch * javax/swing/JTree.java (collapsePath): New method. (collapseRow): Likewise. (expandPath): Likewise. (expandRow): Likewise. (checkExpandParents): Likewise. (doExpandParents): Likewise. (setExpandedState): Likewise. (makeVisible): Likewise. 2005-02-15 Michael Koch * javax/swing/JPasswordField.java: Updated javadocs. 2005-02-15 Michael Koch * javax/swing/JLayeredPane.java (getLayer): Fixed return type, made public. (getPosition): Use new getLayer(). (SetPosition): Likewise. (getIndexOf): Likewise. (remove): Likewise. * javax/swing/JInternalFrame.java (getLayer): Use new JLayeredPane.getLayer(). 2005-02-15 Michael Koch * javax/swing/table/TableColumn.java: Added/fixed javadocs over all. (setHeaderValue): Simplified. Do nothing when old value == new value. 2005-02-15 Thomas Fitzsimmons * gnu/java/awt/peer/gtk/GdkGraphics.java (setClip): Protect against null clip region. * gnu/java/awt/peer/gtk/GtkFramePeer.java (create): Call gtkWindowSetResizable. (postConfigureEvent): Only revalidate if frame size has changed. * gnu/java/awt/peer/gtk/GtkWindowPeer.java (postConfigureEvent): Only revalidate if frame size has changed. * java/awt/Component.java (reshape): Only repaint and post component events if component is showing. * java/awt/Container.java (addImpl): Only post container event if container is showing. (remove): Likewise. * java/awt/Window.java (setLocationRelativeTo): Implement. (setBoundsCallback): Only post component events if component is showing. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (clearRect): Protect against null graphics structure. Flush gdk event queue. 2005-02-15 Michael Koch * javax/imageio/ImageReader.java, javax/imageio/ImageTranscoder.java, javax/imageio/ImageWriter.java, javax/imageio/spi/ImageInputStreamSpi.java, javax/imageio/spi/ImageOutputStreamSpi.java, javax/imageio/spi/ServiceRegistry.java, javax/imageio/stream/ImageInputStream.java, javax/imageio/stream/ImageOutputStream.java: Updated. * javax/imageio/IIOException.java, javax/imageio/IIOImage.java, javax/imageio/IIOParam.java, javax/imageio/IIOParamController.java, javax/imageio/ImageIO.java, javax/imageio/ImageReadParam.java, javax/imageio/ImageTypeSpecifier.java, javax/imageio/ImageWriteParam.java, javax/imageio/spi/IIORegistry.java, javax/imageio/spi/ImageReaderSpi.java, javax/imageio/spi/ImageWriterSpi.java, javax/imageio/stream/FileCacheImageInputStream.java, javax/imageio/stream/FileCacheImageOutputStream.java, javax/imageio/stream/FileImageInputStream.java, javax/imageio/stream/FileImageOutputStream.java, javax/imageio/stream/ImageInputStreamImpl.java, javax/imageio/stream/ImageOutputStreamImpl.java, javax/imageio/stream/MemoryCacheImageInputStream.java, javax/imageio/stream/MemoryCacheImageOutputStream.java, javax/imageio/event/IIOReadProgressListener.java, javax/imageio/event/IIOReadUpdateListener.java, javax/imageio/event/IIOReadWarningListener.java, javax/imageio/event/IIOWriteProgressListener.java, javax/imageio/event/IIOWriteWarningListener.java, javax/imageio/metadata/IIOMetadata.java, javax/imageio/metadata/IIOMetadataController.java, javax/imageio/metadata/IIOMetadataFormat.java, javax/imageio/metadata/IIOInvalidTreeException.java, javax/imageio/metadata/IIOMetadataFormatImpl.java, javax/imageio/metadata/IIOMetadataNode.java: New files. * Makefile.am (javax_source_files): Added new files * Makefile.in: Regenerated. 2005-02-15 Graydon Hoare * gnu/java/awt/peer/gtk/GdkGraphics2D.java: Rework painting into BufferedImages * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: Construct BufferedImage with alpha only when alpha is present in colormodel. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Rework painting into client-side jint arrays. * jni/gtk-peer/gtkcairopeer.h: Likewise. 2005-02-15 Michael Koch * javax/swing/DefaultListCellRenderer.java (serialVersionUID): Made private. (getListCellRendererComponent): Set horizontal alignment. * javax/swing/JLabel.java (setVerticalAlignment): Re-implemented. (setHorizontalAlignment): Do nothing if old value = new value. * javax/swing/JList.java (setCellRenderer): Likewise. (setModel): Re-implemented. (setSelectionModel): Likewise. 2005-02-15 David Gilbert * java/awt/Component.java, java/awt/geom/Rectangle2D.java: Javadoc fixes. 2005-02-15 Michael Koch * javax/swing/AbstractListModel.java (fireContentsChanged): Simplified. (fireIntervalAdded): Likewise. (fireIntervalRemoved): Likewise. * javax/swing/DefaultSingleSelectionModel.java: Reformatted. (fireStateChanged): Simplified. * javax/swing/JPopupMenu.java (setSelectionModel): Set property. 2005-02-15 Michael Koch * java/awt/print/Book.java: Reformatted. 2005-02-15 Michael Koch * java/awt/geom/Area.java (QuadSegment.curveArea): Remove unused variables. (CubicSegment.curveArea): Likewise. 2005-02-15 Michael Koch * javax/swing/JTree.java (ANCHOR_SELECTION_PATH_PROPERTY): Added @since tag. (LEAD_SELECTION_PATH_PROPERTY): Likewise. (EXPANDS_SELECTED_PATHS_PROPERTY): Likewise. (EXPANDED): New constant. (COLLAPSED): Likewise. (nodeStates): New field. (cellEditor): New method. (cellRenderer): Likewise. (selectionModel): Likewise. (treeModel): Likewise. (scrollPathToVisible): Likewise. (scrollRowToVisible): Likewise. (isCollapsed): Likewise. (isExpanded): Likewise. (clearToggledPaths): Likewise. (getDescendantToggledPaths): Likewise. (hasBeenExpanded): Likewise. (isVisible): Likewise. (isPathEditable): Likewise. 2005-02-15 Michael Koch * javax/swing/JLayeredPane.java: Reformatted. 2005-02-15 Michael Koch * javax/swing/tree/DefaultMutableTreeNode.java: Completely Revised. * javax/swing/tree/MutableTreeNode.java: Reformatted. 2005-02-15 Michael Koch * javax/swing/JFormattedTextField.java (setDocument): Call setDocument of super class. Don't fire property change event. 2005-02-15 Sven de Marothy * java/awt/image/IndexColorModel.java: Add FIXME with respect to alpha handling. (getAlpha): Default to returning opaque pixels. * java/awt/image/MultiPixelPackedSampleModel.java (MultiPixelPackedSampleModel): Corrected parameters, order of bit shifts and masks, stride length off by one. 2005-02-15 Michael Koch * javax/swing/JList.java, javax/swing/JTree.java: Added much new methods and fixed much methods setting bound properties. From-SVN: r95115 --- libjava/java/awt/AWTKeyStroke.java | 19 +- libjava/java/awt/BasicStroke.java | 28 +- libjava/java/awt/Button.java | 12 +- libjava/java/awt/Canvas.java | 5 +- libjava/java/awt/Checkbox.java | 160 ++- libjava/java/awt/CheckboxMenuItem.java | 38 +- libjava/java/awt/Choice.java | 86 +- libjava/java/awt/Component.java | 69 +- libjava/java/awt/Container.java | 39 +- libjava/java/awt/DefaultKeyboardFocusManager.java | 2 +- libjava/java/awt/Dialog.java | 38 + libjava/java/awt/EventDispatchThread.java | 11 +- libjava/java/awt/EventQueue.java | 97 +- libjava/java/awt/Frame.java | 117 +- libjava/java/awt/Label.java | 5 +- libjava/java/awt/List.java | 184 +++ libjava/java/awt/Menu.java | 12 +- libjava/java/awt/MenuBar.java | 5 +- libjava/java/awt/MenuComponent.java | 2 +- libjava/java/awt/MenuItem.java | 21 +- libjava/java/awt/PopupMenu.java | 11 +- libjava/java/awt/Robot.java | 366 +++++- libjava/java/awt/ScrollPane.java | 24 + libjava/java/awt/Scrollbar.java | 1296 ++++++++++---------- libjava/java/awt/TextArea.java | 11 +- libjava/java/awt/TextComponent.java | 16 + libjava/java/awt/Toolkit.java | 4 + libjava/java/awt/Window.java | 90 +- libjava/java/awt/color/ICC_Profile.java | 2 - libjava/java/awt/dnd/DnDConstants.java | 9 +- libjava/java/awt/dnd/DropTarget.java | 9 +- libjava/java/awt/geom/Area.java | 4 - libjava/java/awt/geom/Rectangle2D.java | 14 +- libjava/java/awt/im/InputContext.java | 4 +- libjava/java/awt/image/IndexColorModel.java | 12 +- libjava/java/awt/image/MemoryImageSource.java | 656 +++++----- .../awt/image/MultiPixelPackedSampleModel.java | 9 +- libjava/java/awt/image/RGBImageFilter.java | 2 +- libjava/java/awt/image/ReplicateScaleFilter.java | 16 +- libjava/java/awt/peer/RobotPeer.java | 12 +- libjava/java/awt/print/Book.java | 255 ++-- libjava/java/awt/print/PrinterJob.java | 18 +- 42 files changed, 2459 insertions(+), 1331 deletions(-) (limited to 'libjava/java') diff --git a/libjava/java/awt/AWTKeyStroke.java b/libjava/java/awt/AWTKeyStroke.java index 53e64b7..1519f1d 100644 --- a/libjava/java/awt/AWTKeyStroke.java +++ b/libjava/java/awt/AWTKeyStroke.java @@ -1,5 +1,5 @@ /* AWTKeyStroke.java -- an immutable key stroke - Copyright (C) 2002, 2004 Free Software Foundation + Copyright (C) 2002, 2004, 2005 Free Software Foundation This file is part of GNU Classpath. @@ -393,15 +393,16 @@ public class AWTKeyStroke implements Serializable * * * @param s the string to parse + * @throws IllegalArgumentException if s is null or cannot be parsed * @return the specified keystroke - * @throws NullPointerException if s is null - * @throws IllegalArgumentException if s cannot be parsed */ public static AWTKeyStroke getAWTKeyStroke(String s) { + if (s == null) + throw new IllegalArgumentException("null argument"); StringTokenizer t = new StringTokenizer(s, " "); if (! t.hasMoreTokens()) - throw new IllegalArgumentException(); + throw new IllegalArgumentException("no tokens '" + s + "'"); int modifiers = 0; boolean released = false; String token = null; @@ -432,7 +433,8 @@ public class AWTKeyStroke implements Serializable KeyEvent.VK_UNDEFINED, modifiers, false); } - throw new IllegalArgumentException(); + throw new IllegalArgumentException("Invalid 'typed' argument '" + + s + "'"); } else if ("pressed".equals(token)) { @@ -453,8 +455,11 @@ public class AWTKeyStroke implements Serializable while (t.hasMoreTokens()); // Now token contains the VK name we must parse. Integer code = (Integer) vktable.get(token); - if (code == null || t.hasMoreTokens()) - throw new IllegalArgumentException(); + if (code == null) + throw new IllegalArgumentException("Unknown token '" + token + + "' in '" + s + "'"); + if (t.hasMoreTokens()) + throw new IllegalArgumentException("Too many tokens: " + s); return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, code.intValue(), modifiers, released); } diff --git a/libjava/java/awt/BasicStroke.java b/libjava/java/awt/BasicStroke.java index e302a0eb..b177254 100644 --- a/libjava/java/awt/BasicStroke.java +++ b/libjava/java/awt/BasicStroke.java @@ -1,5 +1,5 @@ /* BasicStroke.java -- - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -48,6 +48,7 @@ public class BasicStroke implements Stroke public static final int JOIN_MITER = 0; public static final int JOIN_ROUND = 1; public static final int JOIN_BEVEL = 2; + public static final int CAP_BUTT = 0; public static final int CAP_ROUND = 1; public static final int CAP_SQUARE = 2; @@ -208,11 +209,34 @@ public class BasicStroke implements Stroke return phase; } + /** + * Returns the hash code for this object. The hash is calculated by + * xoring the hash, cap, join, limit, dash array and phase values + * (converted to int first with + * Float.floatToIntBits() if the value is a + * float). + */ public int hashCode() { - throw new Error("not implemented"); + int hash = Float.floatToIntBits(width); + hash ^= cap; + hash ^= join; + hash ^= Float.floatToIntBits(limit); + + if (dash != null) + for (int i = 0; i < dash.length; i++) + hash ^= Float.floatToIntBits(dash[i]); + + hash ^= Float.floatToIntBits(phase); + + return hash; } + /** + * Returns true if the given Object is an instance of BasicStroke + * and the width, cap, join, limit, dash array and phase are all + * equal. + */ public boolean equals(Object o) { if (! (o instanceof BasicStroke)) diff --git a/libjava/java/awt/Button.java b/libjava/java/awt/Button.java index 86cb37c..0458ebb 100644 --- a/libjava/java/awt/Button.java +++ b/libjava/java/awt/Button.java @@ -47,7 +47,6 @@ 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; @@ -429,9 +428,18 @@ paramString() + getWidth () + "x" + getHeight () + ",label=" + getLabel (); } +/** + * Gets the AccessibleContext associated with this Button. + * The context is created, if necessary. + * + * @return the associated context + */ public AccessibleContext getAccessibleContext() { - return new AccessibleAWTButton(); + /* Create the context if this is the first request */ + if (accessibleContext == null) + accessibleContext = new AccessibleAWTButton(); + return accessibleContext; } /** diff --git a/libjava/java/awt/Canvas.java b/libjava/java/awt/Canvas.java index d177c9b..05055f2 100644 --- a/libjava/java/awt/Canvas.java +++ b/libjava/java/awt/Canvas.java @@ -174,10 +174,7 @@ public class Canvas { /* Create the context if this is the first request */ if (accessibleContext == null) - { - /* Create the context */ - accessibleContext = new AccessibleAWTCanvas(); - } + accessibleContext = new AccessibleAWTCanvas(); return accessibleContext; } diff --git a/libjava/java/awt/Checkbox.java b/libjava/java/awt/Checkbox.java index 04ace46..b3fc4c2 100644 --- a/libjava/java/awt/Checkbox.java +++ b/libjava/java/awt/Checkbox.java @@ -48,6 +48,7 @@ import javax.accessibility.AccessibleAction; import javax.accessibility.AccessibleContext; import javax.accessibility.AccessibleRole; import javax.accessibility.AccessibleState; +import javax.accessibility.AccessibleStateSet; import javax.accessibility.AccessibleValue; /** @@ -55,7 +56,7 @@ import javax.accessibility.AccessibleValue; * or more Checkboxes can be grouped by a CheckboxGroup. * * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Tom Tromey + * @author Tom Tromey (tromey@redhat.com) */ public class Checkbox extends Component implements ItemSelectable, Accessible, Serializable @@ -94,13 +95,38 @@ private boolean state; // The list of listeners for this object. private transient ItemListener item_listeners; -protected class AccessibleAWTCheckBox +/** + * This class provides accessibility support for the + * checkbox. + * + * @author Jerry Quinn (jlquinn@optonline.net) + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) + */ +protected class AccessibleAWTCheckbox extends AccessibleAWTComponent implements ItemListener, AccessibleAction, AccessibleValue { - - /* (non-Javadoc) + /** + * Serialization constant to match JDK 1.5 + */ + private static final long serialVersionUID = 7881579233144754107L; + + /** + * Default constructor which simply calls the + * super class for generic component accessibility + * handling. + */ + public AccessibleAWTCheckbox() + { + super(); + } + + /** + * Captures changes to the state of the checkbox and + * fires appropriate accessible property change events. + * + * @param event the event fired. * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent) */ public void itemStateChanged(ItemEvent event) @@ -110,58 +136,121 @@ protected class AccessibleAWTCheckBox state ? AccessibleState.CHECKED : null); } + /** + * Returns an implementation of the AccessibleAction + * interface for this accessible object. In this case, the + * current instance is simply returned (with a more appropriate + * type), as it also implements the accessible action as well as + * the context. + * + * @return the accessible action associated with this context. + * @see javax.accessibility.AccessibleAction + */ public AccessibleAction getAccessibleAction() { return this; } + /** + * Returns an implementation of the AccessibleValue + * interface for this accessible object. In this case, the + * current instance is simply returned (with a more appropriate + * type), as it also implements the accessible value as well as + * the context. + * + * @return the accessible value associated with this context. + * @see javax.accessibility.AccessibleValue + */ public AccessibleValue getAccessibleValue() { return this; } - /* (non-Javadoc) + /* + * The following methods are implemented in the JDK (up to + * 1.5) as stubs. We do likewise here. + */ + + /** + * Returns the number of actions associated with this accessible + * object. This default implementation returns 0. + * + * @return the number of accessible actions available. * @see javax.accessibility.AccessibleAction#getAccessibleActionCount() */ public int getAccessibleActionCount() { - // 1.4.1 does this + // 1.4.1 and 1.5 do this return 0; } - /* (non-Javadoc) + /** + * Returns a description of the action with the supplied id. + * This default implementation always returns null. + * + * @param i the id of the action whose description should be + * retrieved. + * @return a String describing the action. * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int) */ public String getAccessibleActionDescription(int i) { + // 1.5 does this return null; } - /* (non-Javadoc) + /** + * Executes the action with the specified id. This + * default implementation simply returns false. + * + * @param i the id of the action to perform. + * @return true if the action was performed. * @see javax.accessibility.AccessibleAction#doAccessibleAction(int) */ public boolean doAccessibleAction(int i) { + // 1.5 does this return false; } - /* (non-Javadoc) + /** + * Returns the current value of this accessible object. + * If no value has been set, null is returned. This + * default implementation always returns null, regardless. + * + * @return the numeric value of this object, or null if + * no value has been set. * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue() */ public Number getCurrentAccessibleValue() { + // 1.5 does this return null; } - /* (non-Javadoc) + /** + * Sets the current value of this accessible object + * to that supplied. In this default implementation, + * the value is never set and the method always returns + * false. + * + * @param number the new accessible value. + * @return true if the value was set. * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number) */ public boolean setCurrentAccessibleValue(Number number) { + // 1.5 does this return false; } - /* (non-Javadoc) + /** + * Returns the minimum acceptable accessible value used + * by this object, or null if no minimum value exists. + * This default implementation always returns null. + * + * @return the minimum acceptable accessible value, or null + * if there is no minimum. * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue() */ public Number getMinimumAccessibleValue() @@ -169,7 +258,13 @@ protected class AccessibleAWTCheckBox return null; } - /* (non-Javadoc) + /** + * Returns the maximum acceptable accessible value used + * by this object, or null if no maximum value exists. + * This default implementation always returns null. + * + * @return the maximum acceptable accessible value, or null + * if there is no maximum. * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue() */ public Number getMaximumAccessibleValue() @@ -177,11 +272,35 @@ protected class AccessibleAWTCheckBox return null; } + /** + * Returns the role of this accessible object. + * + * @return the instance of AccessibleRole, + * which describes this object. + * @see javax.accessibility.AccessibleRole + */ public AccessibleRole getAccessibleRole() { return AccessibleRole.CHECK_BOX; } + /** + * Returns the state set of this accessible object. + * + * @return a set of AccessibleStates + * which represent the current state of the + * accessible object. + * @see javax.accessibility.AccessibleState + * @see javax.accessibility.AccessibleStateSet + */ + public AccessibleStateSet getAccessibleStateSet() + { + AccessibleStateSet set = super.getAccessibleStateSet(); + if (state) + set.add(AccessibleState.CHECKED); + return set; + } + } /*************************************************************************/ @@ -490,11 +609,22 @@ paramString() + "," + super.paramString()); } +/** + * Gets the AccessibleContext associated with this Checkbox. + * The context is created, if necessary. + * + * @return the associated context + */ public AccessibleContext getAccessibleContext() { - AccessibleAWTCheckBox ac = new AccessibleAWTCheckBox(); - addItemListener(ac); - return ac; + /* Create the context if this is the first request */ + if (accessibleContext == null) + { + AccessibleAWTCheckbox ac = new AccessibleAWTCheckbox(); + accessibleContext = ac; + addItemListener(ac); + } + return accessibleContext; } } // class Checkbox diff --git a/libjava/java/awt/CheckboxMenuItem.java b/libjava/java/awt/CheckboxMenuItem.java index ab4cb60..6b9002a 100644 --- a/libjava/java/awt/CheckboxMenuItem.java +++ b/libjava/java/awt/CheckboxMenuItem.java @@ -43,6 +43,11 @@ import java.awt.event.ItemListener; import java.awt.peer.CheckboxMenuItemPeer; import java.util.EventListener; +import javax.accessibility.Accessible; +import javax.accessibility.AccessibleAction; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleValue; + /** * This class implements a menu item that has a checkbox on it indicating * the selected state of some option. @@ -50,7 +55,8 @@ import java.util.EventListener; * @author Aaron M. Renn (arenn@urbanophile.com) * @author Tom Tromey */ -public class CheckboxMenuItem extends MenuItem implements ItemSelectable +public class CheckboxMenuItem extends MenuItem + implements ItemSelectable, Accessible { /* @@ -268,6 +274,14 @@ processItemEvent(ItemEvent event) void dispatchEventImpl(AWTEvent e) { + if (e instanceof ItemEvent) + { + synchronized (this) + { + state = (((ItemEvent) e).getStateChange() == ItemEvent.SELECTED); + } + } + if (e.id <= ItemEvent.ITEM_LAST && e.id >= ItemEvent.ITEM_FIRST && (item_listeners != null @@ -315,5 +329,27 @@ paramString() { return (ItemListener[]) getListeners (ItemListener.class); } + + + protected class AccessibleAWTCheckboxMenuItem extends AccessibleAWTMenuItem + implements AccessibleAction, AccessibleValue + { + // I think the base class provides the necessary implementation + } + + /** + * Gets the AccessibleContext associated with this CheckboxMenuItem. + * 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) + accessibleContext = new AccessibleAWTCheckboxMenuItem(); + return accessibleContext; + } + } // class CheckboxMenuItem diff --git a/libjava/java/awt/Choice.java b/libjava/java/awt/Choice.java index 89e91ca..c6a532a 100644 --- a/libjava/java/awt/Choice.java +++ b/libjava/java/awt/Choice.java @@ -45,6 +45,7 @@ import java.io.Serializable; import java.util.EventListener; import java.util.Vector; +import javax.accessibility.Accessible; import javax.accessibility.AccessibleAction; import javax.accessibility.AccessibleContext; import javax.accessibility.AccessibleRole; @@ -54,7 +55,8 @@ import javax.accessibility.AccessibleRole; * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class Choice extends Component implements ItemSelectable, Serializable +public class Choice extends Component + implements ItemSelectable, Serializable, Accessible { /* @@ -83,23 +85,65 @@ private int selectedIndex = -1; // Listener chain private ItemListener item_listeners; +/** + * This class provides accessibility support for the + * combo box. + * + * @author Jerry Quinn (jlquinn@optonline.net) + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) + */ protected class AccessibleAWTChoice - extends Component.AccessibleAWTComponent - implements AccessibleAction + extends AccessibleAWTComponent + implements AccessibleAction { + + /** + * Serialization constant to match JDK 1.5 + */ + private static final long serialVersionUID = 7175603582428509322L; + + /** + * Default constructor which simply calls the + * super class for generic component accessibility + * handling. + */ + public AccessibleAWTChoice() + { + super(); + } + + /** + * Returns an implementation of the AccessibleAction + * interface for this accessible object. In this case, the + * current instance is simply returned (with a more appropriate + * type), as it also implements the accessible action as well as + * the context. + * + * @return the accessible action associated with this context. + * @see javax.accessibility.AccessibleAction + */ public AccessibleAction getAccessibleAction() { return this; } - // FIXME: I think this is right, but should be checked by someone who - // knows better. + /** + * Returns the role of this accessible object. + * + * @return the instance of AccessibleRole, + * which describes this object. + * @see javax.accessibility.AccessibleRole + */ public AccessibleRole getAccessibleRole() { - return AccessibleRole.POPUP_MENU; + return AccessibleRole.COMBO_BOX; } - /* (non-Javadoc) + /** + * Returns the number of actions associated with this accessible + * object. In this case, it is the number of choices available. + * + * @return the number of choices available. * @see javax.accessibility.AccessibleAction#getAccessibleActionCount() */ public int getAccessibleActionCount() @@ -107,7 +151,14 @@ private ItemListener item_listeners; return pItems.size(); } - /* (non-Javadoc) + /** + * Returns a description of the action with the supplied id. + * In this case, it is the text used in displaying the particular + * choice on-screen. + * + * @param i the id of the choice whose description should be + * retrieved. + * @return the String used to describe the choice. * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int) */ public String getAccessibleActionDescription(int i) @@ -115,7 +166,13 @@ private ItemListener item_listeners; return (String) pItems.get(i); } - /* (non-Javadoc) + /** + * Executes the action with the specified id. In this case, + * calling this method provides the same behaviour as would + * choosing a choice from the list in a visual manner. + * + * @param i the id of the choice to select. + * @return true if a valid choice was specified. * @see javax.accessibility.AccessibleAction#doAccessibleAction(int) */ public boolean doAccessibleAction(int i) @@ -564,8 +621,17 @@ paramString() return (ItemListener[]) getListeners (ItemListener.class); } + /** + * Gets the AccessibleContext associated with this Choice. + * The context is created, if necessary. + * + * @return the associated context + */ public AccessibleContext getAccessibleContext() { - return new AccessibleAWTChoice(); + /* Create the context if this is the first request */ + if (accessibleContext == null) + accessibleContext = new AccessibleAWTChoice(); + return accessibleContext; } } // class Choice diff --git a/libjava/java/awt/Component.java b/libjava/java/awt/Component.java index cb47f77..3a7960c 100644 --- a/libjava/java/awt/Component.java +++ b/libjava/java/awt/Component.java @@ -1080,7 +1080,7 @@ public abstract class Component * * @return the locale for this component * @throws IllegalComponentStateException if it has no locale or parent - * @see setLocale(Locale) + * @see #setLocale(Locale) * @since 1.1 */ public Locale getLocale() @@ -1362,7 +1362,7 @@ public abstract class Component peer.setBounds (x, y, width, height); // Erase old bounds and repaint new bounds for lightweights. - if (isLightweight()) + if (isLightweight() && isShowing ()) { boolean shouldRepaintParent = false; boolean shouldRepaintSelf = false; @@ -1386,13 +1386,16 @@ public abstract class Component repaint(); } - if (oldx != x || oldy != y) + // Only post event if this component is visible and has changed size. + if (isShowing () + && (oldx != x || oldy != y)) { ComponentEvent ce = new ComponentEvent(this, ComponentEvent.COMPONENT_MOVED); getToolkit().getSystemEventQueue().postEvent(ce); } - if (oldwidth != width || oldheight != height) + if (isShowing () + && (oldwidth != width || oldheight != height)) { ComponentEvent ce = new ComponentEvent(this, ComponentEvent.COMPONENT_RESIZED); @@ -1955,7 +1958,7 @@ public abstract class Component * @see Graphics#drawImage(Image, int, int, ImageObserver) * @see Graphics#drawImage(Image, int, int, int, int, Color, ImageObserver) * @see Graphics#drawImage(Image, int, int, int, int, ImageObserver) - * @see ImageObserver#update(Image, int, int, int, int, int) + * @see ImageObserver#imageUpdate(Image, int, int, int, int, int) */ public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) { @@ -2097,7 +2100,7 @@ public abstract class Component * @param observer the observer to notify of image loading progress * @return the image observer flags indicating the status of the load * @see #prepareImage(Image, int, int, ImageObserver) - * @see #Toolkit#checkImage(Image, int, int, ImageObserver) + * @see Toolkit#checkImage(Image, int, int, ImageObserver) * @throws NullPointerException if image is null */ public int checkImage(Image image, ImageObserver observer) @@ -2115,7 +2118,7 @@ public abstract class Component * @param observer the observer to notify of image loading progress * @return the image observer flags indicating the status of the load * @see #prepareImage(Image, int, int, ImageObserver) - * @see #Toolkit#checkImage(Image, int, int, ImageObserver) + * @see Toolkit#checkImage(Image, int, int, ImageObserver) */ public int checkImage(Image image, int width, int height, ImageObserver observer) @@ -2134,7 +2137,7 @@ public abstract class Component * @param ignoreRepaint the new setting for ignoring repaint events * @see #getIgnoreRepaint() * @see BufferStrategy - * @see GraphicsDevice.setFullScreenWindow(Window) + * @see GraphicsDevice#setFullScreenWindow(Window) * @since 1.4 */ public void setIgnoreRepaint(boolean ignoreRepaint) @@ -2250,9 +2253,9 @@ public abstract class Component * calls {@link #postEvent}. * * @param e the event to deliver - * @deprecated use {@link #dispatchEvent(AWTEvent)} instead + * @deprecated use {@link #dispatchEvent (AWTEvent)} instead */ - public void deliverEvent(Event e) + public void deliverEvent (Event e) { postEvent (e); } @@ -2284,7 +2287,7 @@ public abstract class Component * @return true if the event was handled, false otherwise * @deprecated use {@link #dispatchEvent(AWTEvent)} instead */ - public boolean postEvent(Event e) + public boolean postEvent (Event e) { boolean handled = handleEvent (e); @@ -3178,8 +3181,8 @@ public abstract class Component * AWT 1.0 event handler. * * This method calls one of the event-specific handler methods. For - * example for key events, either {@link #keyDown (Event evt, int - * key)} or {@link keyUp (Event evt, int key)} is called. A derived + * example for key events, either {@link #keyDown(Event,int)} + * or {@link #keyUp(Event,int)} is called. A derived * component can override one of these event-specific methods if it * only needs to handle certain event types. Otherwise it can * override handleEvent itself and handle any event. @@ -3188,7 +3191,7 @@ public abstract class Component * @return true if the event was handled, false otherwise * @deprecated use {@link #processEvent(AWTEvent)} instead */ - public boolean handleEvent(Event evt) + public boolean handleEvent (Event evt) { switch (evt.id) { @@ -3405,9 +3408,15 @@ public abstract class Component */ public void removeNotify() { - if (peer != null) - peer.dispose(); + // We null our peer field before disposing of it, such that if we're + // not the event dispatch thread and the dispatch thread is awoken by + // the dispose call, there will be no race checking the peer's null + // status. + + ComponentPeer tmp = peer; peer = null; + if (tmp != null) + tmp.dispose(); } /** @@ -3469,8 +3478,8 @@ public abstract class Component * Specify whether this component can receive focus. This method also * sets the {@link #isFocusTraversableOverridden} field to 1, which * appears to be the undocumented way {@link - * DefaultFocusTraversalPolicy#accept()} determines whether to respect - * the {@link #isFocusable()} method of the component. + * DefaultFocusTraversalPolicy#accept(Component)} determines whether to + * respect the {@link #isFocusable()} method of the component. * * @param focusable the new focusable status * @since 1.4 @@ -3484,10 +3493,10 @@ public abstract class Component /** * Sets the focus traversal keys for one of the three focus - * traversal directions supported by Components: {@link - * #KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS}, {@link - * #KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS}, or {@link - * #KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS}. Normally, the + * traversal directions supported by Components: + * {@link #KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS}, + * {@link #KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS}, or + * {@link #KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS}. Normally, the * default values should match the operating system's native * choices. To disable a given traversal, use * Collections.EMPTY_SET. The event dispatcher will @@ -3716,7 +3725,7 @@ public abstract class Component * receives a FOCUS_GAINED event. * * The behaviour of this method is platform-dependent. - * {@link #requestFocusInWindow} should be used instead. + * {@link #requestFocusInWindow()} should be used instead. * * @see #requestFocusInWindow () * @see FocusEvent @@ -3791,7 +3800,7 @@ public abstract class Component * receives a FOCUS_GAINED event. * * The behaviour of this method is platform-dependent. - * {@link #requestFocusInWindow} should be used instead. + * {@link #requestFocusInWindow()} should be used instead. * * If the return value is false, the request is guaranteed to fail. * If the return value is true, the request will succeed unless it @@ -3855,10 +3864,10 @@ public abstract class Component currentFocusOwner)); } else - eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary)); + eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary)); + } } } - } else // FIXME: need to add a focus listener to our top-level // ancestor, so that we can post this event when it becomes @@ -3973,10 +3982,10 @@ public abstract class Component currentFocusOwner)); } else - eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary)); + eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary)); + } } } - } else return false; } @@ -4069,8 +4078,8 @@ public abstract class Component * However, if this is a Window, the default focus owner in the * window in the current focus cycle is focused instead. * - * @see #requestFocus () - * @see #isFocusCycleRoot () + * @see #requestFocus() + * @see #isFocusCycleRoot(Container) * @since 1.4 */ public void transferFocusUpCycle () diff --git a/libjava/java/awt/Container.java b/libjava/java/awt/Container.java index 6c835d2..6c5dec2 100644 --- a/libjava/java/awt/Container.java +++ b/libjava/java/awt/Container.java @@ -1,5 +1,5 @@ /* Container.java -- parent container class in AWT - Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation + Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005 Free Software Foundation This file is part of GNU Classpath. @@ -387,11 +387,14 @@ public class Container extends Component layoutMgr.addLayoutComponent(null, comp); } - // Post event to notify of adding the container. - ContainerEvent ce = new ContainerEvent(this, - ContainerEvent.COMPONENT_ADDED, - comp); - getToolkit().getSystemEventQueue().postEvent(ce); + if (isShowing ()) + { + // Post event to notify of adding the component. + ContainerEvent ce = new ContainerEvent(this, + ContainerEvent.COMPONENT_ADDED, + comp); + getToolkit().getSystemEventQueue().postEvent(ce); + } } } @@ -419,11 +422,14 @@ public class Container extends Component r.parent = null; - // Post event to notify of adding the container. - ContainerEvent ce = new ContainerEvent(this, - ContainerEvent.COMPONENT_REMOVED, - r); - getToolkit().getSystemEventQueue().postEvent(ce); + if (isShowing ()) + { + // Post event to notify of removing the component. + ContainerEvent ce = new ContainerEvent(this, + ContainerEvent.COMPONENT_REMOVED, + r); + getToolkit().getSystemEventQueue().postEvent(ce); + } } } @@ -1046,11 +1052,14 @@ public class Container extends Component */ protected String paramString() { - String param = super.paramString(); - if (layoutMgr != null) - param = param + ",layout=" + layoutMgr.getClass().getName(); + if (layoutMgr == null) + return super.paramString(); - return param; + StringBuffer sb = new StringBuffer(); + sb.append(super.paramString()); + sb.append(",layout="); + sb.append(layoutMgr.getClass().getName()); + return sb.toString(); } /** diff --git a/libjava/java/awt/DefaultKeyboardFocusManager.java b/libjava/java/awt/DefaultKeyboardFocusManager.java index 800b01d..9c94d8a 100644 --- a/libjava/java/awt/DefaultKeyboardFocusManager.java +++ b/libjava/java/awt/DefaultKeyboardFocusManager.java @@ -226,7 +226,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager Component focusOwner = getGlobalPermanentFocusOwner (); if (focusOwner != null) - processKeyEvent (focusOwner, (KeyEvent) e); + processKeyEvent (focusOwner, (KeyEvent) e); if (e.isConsumed ()) return true; diff --git a/libjava/java/awt/Dialog.java b/libjava/java/awt/Dialog.java index 6bfb80c8..30631b3 100644 --- a/libjava/java/awt/Dialog.java +++ b/libjava/java/awt/Dialog.java @@ -40,6 +40,11 @@ package java.awt; import java.awt.peer.DialogPeer; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleState; +import javax.accessibility.AccessibleStateSet; + /** * A dialog box widget class. * @@ -511,5 +516,38 @@ paramString() this.undecorated = undecorated; } + + protected class AccessibleAWTDialog extends AccessibleAWTWindow + { + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.DIALOG; + } + + public AccessibleStateSet getAccessibleState() + { + AccessibleStateSet states = super.getAccessibleStateSet(); + if (isResizable()) + states.add(AccessibleState.RESIZABLE); + if (isModal()) + states.add(AccessibleState.MODAL); + return states; + } + } + + /** + * Gets the AccessibleContext associated with this Dialog. + * 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) + accessibleContext = new AccessibleAWTDialog(); + return accessibleContext; + } + } // class Dialog diff --git a/libjava/java/awt/EventDispatchThread.java b/libjava/java/awt/EventDispatchThread.java index 0803ff6..d55f0f5 100644 --- a/libjava/java/awt/EventDispatchThread.java +++ b/libjava/java/awt/EventDispatchThread.java @@ -53,7 +53,6 @@ class EventDispatchThread extends Thread setName("AWT-EventQueue-" + ++dispatchThreadNum); this.queue = queue; setPriority(NORM_PRIORITY + 1); - start(); } public void run() @@ -63,11 +62,6 @@ class EventDispatchThread extends Thread try { AWTEvent evt = queue.getNextEvent(); - if (isInterrupted ()) - { - // We are interrupted when we should finish executing - return; - } KeyboardFocusManager manager; manager = KeyboardFocusManager.getCurrentKeyboardFocusManager (); @@ -80,6 +74,11 @@ class EventDispatchThread extends Thread if (!manager.dispatchEvent (evt)) queue.dispatchEvent(evt); } + catch (ThreadDeath death) + { + // If someone wants to kill us, let them. + return; + } catch (InterruptedException ie) { // We are interrupted when we should finish executing diff --git a/libjava/java/awt/EventQueue.java b/libjava/java/awt/EventQueue.java index fd1c806..fc0926c 100644 --- a/libjava/java/awt/EventQueue.java +++ b/libjava/java/awt/EventQueue.java @@ -40,9 +40,12 @@ package java.awt; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.InvocationEvent; +import java.awt.event.WindowEvent; import java.lang.reflect.InvocationTargetException; import java.util.EmptyStackException; +import gnu.java.awt.ClasspathToolkit; + /* Written using on-line Java 2 Platform Standard Edition v1.3 API * Specification, as well as "The Java Class Libraries", 2nd edition * (Addison-Wesley, 1998). @@ -71,6 +74,35 @@ public class EventQueue private long lastWhen = System.currentTimeMillis(); private EventDispatchThread dispatchThread = new EventDispatchThread(this); + private boolean shutdown = false; + + private long lastNativeQueueAccess = 0; + private long humanLatencyThreshold = 100; + + synchronized void setShutdown (boolean b) + { + shutdown = b; + } + + synchronized boolean isShutdown () + { + if (shutdown) + return true; + + // This is the exact self-shutdown condition specified in J2SE: + // http://java.sun.com/j2se/1.4.2/docs/api/java/awt/doc-files/AWTThreadIssues.html + + if (peekEvent() == null + && ((ClasspathToolkit) Toolkit.getDefaultToolkit()).nativeQueueEmpty()) + { + Frame[] frames = Frame.getFrames(); + for (int i = 0; i < frames.length; ++i) + if (frames[i].isDisplayable()) + return false; + return true; + } + return false; + } /** * Initializes a new instance of EventQueue. @@ -93,9 +125,51 @@ public class EventQueue { if (next != null) return next.getNextEvent(); + + ClasspathToolkit tk = ((ClasspathToolkit) Toolkit.getDefaultToolkit()); + long curr = System.currentTimeMillis(); + + if (! tk.nativeQueueEmpty() && + (curr - lastNativeQueueAccess > humanLatencyThreshold)) + { + tk.iterateNativeQueue(this, false); + lastNativeQueueAccess = curr; + } while (next_in == next_out) - wait(); + { + // Only the EventDispatchThread associated with the top of the stack is + // allowed to get events from the native source; everyone else just + // waits on the head of the queue. + + if (isDispatchThread()) + { + // We are not allowed to return null from this method, yet it + // is possible that we actually have run out of native events + // in the enclosing while() loop, and none of the native events + // happened to cause AWT events. We therefore ought to check + // the isShutdown() condition here, before risking a "native + // wait". If we check it before entering this function we may + // wait forever for events after the shutdown condition has + // arisen. + + if (isShutdown()) + throw new InterruptedException(); + + tk.iterateNativeQueue(this, true); + lastNativeQueueAccess = System.currentTimeMillis(); + } + else + { + try + { + wait(); + } + catch (InterruptedException ie) + { + } + } + } AWTEvent res = queue[next_out]; @@ -215,6 +289,22 @@ public class EventQueue next_out = 0; next_in = oldQueue.length; } + + if (dispatchThread == null || !dispatchThread.isAlive()) + { + dispatchThread = new EventDispatchThread(this); + dispatchThread.start(); + } + + // Window events might represent the closing of a window, which + // might cause the end of the dispatch thread's life, so we'll wake + // it up here to give it a chance to check for shutdown. + + if (!isDispatchThread() + || (evt.getID() == WindowEvent.WINDOW_CLOSED) + || (evt.getID() == WindowEvent.WINDOW_CLOSING)) + ((ClasspathToolkit) Toolkit.getDefaultToolkit()).wakeNativeQueue(); + notify(); } @@ -386,9 +476,10 @@ public class EventQueue next_in = 0; next_out = 0; - // Tell our EventDispatchThread that it can end execution - dispatchThread.interrupt (); + ((ClasspathToolkit) Toolkit.getDefaultToolkit()).wakeNativeQueue(); + setShutdown(true); dispatchThread = null; + this.notifyAll(); } } } diff --git a/libjava/java/awt/Frame.java b/libjava/java/awt/Frame.java index 80d2c99..465a268 100644 --- a/libjava/java/awt/Frame.java +++ b/libjava/java/awt/Frame.java @@ -39,8 +39,16 @@ exception statement from your version. */ package java.awt; import java.awt.peer.FramePeer; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Iterator; import java.util.Vector; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleState; +import javax.accessibility.AccessibleStateSet; + /** * This class is a top-level window with a title bar and window * decorations. @@ -196,7 +204,7 @@ private String title = ""; */ private boolean undecorated = false; -/* + /* * The number used to generate the name returned by getName. */ private static transient long next_frame_number; @@ -209,6 +217,7 @@ public Frame() { this(""); + noteFrame(this); } /** @@ -224,6 +233,7 @@ Frame(String title) this.title = title; // Top-level frames are initially invisible. visible = false; + noteFrame(this); } public @@ -231,6 +241,7 @@ Frame(GraphicsConfiguration gc) { super(gc); visible = false; + noteFrame(this); } public @@ -239,6 +250,7 @@ Frame(String title, GraphicsConfiguration gc) super(gc); setTitle(title); visible = false; + noteFrame(this); } /** @@ -391,6 +403,12 @@ remove(MenuComponent menu) /** * Notifies this frame that it should create its native peer. */ + +private static void fireDummyEvent() +{ + EventQueue.invokeLater(new Runnable() { public void run() { } }); +} + public void addNotify() { @@ -398,6 +416,12 @@ addNotify() menuBar.addNotify(); if (peer == null) peer = getToolkit ().createFrame (this); + + // We now know there's a Frame (us) with a live peer, so we can start the + // fundamental queue and dispatch thread, by inserting a dummy event. + if (parent != null && parent.isDisplayable()) + fireDummyEvent(); + super.addNotify(); } @@ -406,15 +430,21 @@ public void removeNotify() if (menuBar != null) menuBar.removeNotify(); super.removeNotify(); + + // By now we've been disconnected from the peer, and the peer set to + // null. This is formally the same as saying "we just became + // un-displayable", so we wake up the event queue with a dummy event to + // see if it's time to shut down. + fireDummyEvent(); } -/** - * Returns a debugging string describing this window. - * - * @return A debugging string describing this window. - */ + /** + * Returns a debugging string describing this window. + * + * @return A debugging string describing this window. + */ protected String paramString () -{ + { String title = getTitle (); String resizable = ""; @@ -442,15 +472,43 @@ public void removeNotify() } return super.paramString () + ",title=" + title + resizable + state; + } + +private static ArrayList weakFrames = new ArrayList(); + +private static void noteFrame(Frame f) +{ + weakFrames.add(new WeakReference(f)); } -public static Frame[] -getFrames() +public static Frame[] getFrames() { - //Frame[] array = new Frames[frames.size()]; - //return frames.toArray(array); - String msg = "FIXME: can't be implemented without weak references"; - throw new UnsupportedOperationException(msg); + int n = 0; + synchronized (weakFrames) + { + Iterator i = weakFrames.iterator(); + while (i.hasNext()) + { + WeakReference wr = (WeakReference) i.next(); + if (wr.get() != null) + ++n; + } + if (n == 0) + return new Frame[0]; + else + { + Frame[] frames = new Frame[n]; + n = 0; + i = weakFrames.iterator(); + while (i.hasNext()) + { + WeakReference wr = (WeakReference) i.next(); + if (wr.get() != null) + frames[n++] = (Frame) wr.get(); + } + return frames; + } + } } public void setState (int state) @@ -549,4 +607,37 @@ getFrames() { return next_frame_number++; } + + protected class AccessibleAWTFrame extends AccessibleAWTWindow + { + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.FRAME; + } + + public AccessibleStateSet getAccessibleState() + { + AccessibleStateSet states = super.getAccessibleStateSet(); + if (isResizable()) + states.add(AccessibleState.RESIZABLE); + if ((state & ICONIFIED) != 0) + states.add(AccessibleState.ICONIFIED); + return states; + } + } + + /** + * Gets the AccessibleContext associated with this Frame. + * 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) + accessibleContext = new AccessibleAWTFrame(); + return accessibleContext; + } + } diff --git a/libjava/java/awt/Label.java b/libjava/java/awt/Label.java index 189bc10..0206cec 100644 --- a/libjava/java/awt/Label.java +++ b/libjava/java/awt/Label.java @@ -306,10 +306,7 @@ public AccessibleContext getAccessibleContext() { /* Create the context if this is the first request */ if (accessibleContext == null) - { - /* Create the context */ - accessibleContext = new AccessibleAWTLabel(); - } + accessibleContext = new AccessibleAWTLabel(); return accessibleContext; } diff --git a/libjava/java/awt/List.java b/libjava/java/awt/List.java index 8fbbc07..e10cbae 100644 --- a/libjava/java/awt/List.java +++ b/libjava/java/awt/List.java @@ -47,6 +47,11 @@ import java.util.EventListener; import java.util.Vector; import javax.accessibility.Accessible; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleSelection; +import javax.accessibility.AccessibleState; +import javax.accessibility.AccessibleStateSet; /** * Class that implements a listbox widget @@ -106,6 +111,7 @@ private ItemListener item_listeners; // The list of ActionListeners for this object. private ActionListener action_listeners; + /*************************************************************************/ /* @@ -1076,4 +1082,182 @@ paramString() { return (ItemListener[]) getListeners (ItemListener.class); } + + // Accessibility internal class + protected class AccessibleAWTList extends AccessibleAWTComponent + implements AccessibleSelection, ItemListener, ActionListener + { + protected class AccessibleAWTListChild extends AccessibleAWTComponent + implements Accessible + { + private int index; + private List parent; + + public AccessibleAWTListChild(List parent, int indexInParent) + { + this.parent = parent; + index = indexInParent; + if (parent == null) + index = -1; + } + + /* (non-Javadoc) + * @see javax.accessibility.Accessible#getAccessibleContext() + */ + public AccessibleContext getAccessibleContext() + { + return this; + } + + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.LIST_ITEM; + } + + public AccessibleStateSet getAccessibleStateSet() + { + AccessibleStateSet states = super.getAccessibleStateSet(); + if (parent.isIndexSelected(index)) + states.add(AccessibleState.SELECTED); + return states; + } + + public int getAccessibleIndexInParent() + { + return index; + } + + } + + public AccessibleAWTList() + { + addItemListener(this); + addActionListener(this); + } + + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.LIST; + } + + public AccessibleStateSet getAccessibleStateSet() + { + AccessibleStateSet states = super.getAccessibleStateSet(); + states.add(AccessibleState.SELECTABLE); + if (isMultipleMode()) + states.add(AccessibleState.MULTISELECTABLE); + return states; + } + + public int getAccessibleChildrenCount() + { + return getItemCount(); + } + + public Accessible getAccessibleChild(int i) + { + if (i >= getItemCount()) + return null; + return new AccessibleAWTListChild(List.this, i); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleSelection#getAccessibleSelectionCount() + */ + public int getAccessibleSelectionCount() + { + return getSelectedIndexes().length; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleSelection#getAccessibleSelection() + */ + public AccessibleSelection getAccessibleSelection() + { + return this; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleSelection#getAccessibleSelection(int) + */ + public Accessible getAccessibleSelection(int i) + { + int[] items = getSelectedIndexes(); + if (i >= items.length) + return null; + return new AccessibleAWTListChild(List.this, items[i]); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleSelection#isAccessibleChildSelected(int) + */ + public boolean isAccessibleChildSelected(int i) + { + return isIndexSelected(i); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleSelection#addAccessibleSelection(int) + */ + public void addAccessibleSelection(int i) + { + select(i); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleSelection#removeAccessibleSelection(int) + */ + public void removeAccessibleSelection(int i) + { + deselect(i); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleSelection#clearAccessibleSelection() + */ + public void clearAccessibleSelection() + { + for (int i = 0; i < getItemCount(); i++) + deselect(i); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleSelection#selectAllAccessibleSelection() + */ + public void selectAllAccessibleSelection() + { + if (isMultipleMode()) + for (int i = 0; i < getItemCount(); i++) + select(i); + } + + /* (non-Javadoc) + * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent) + */ + public void itemStateChanged(ItemEvent event) + { + } + + /* (non-Javadoc) + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + public void actionPerformed(ActionEvent event) + { + } + + } + + /** + * Gets the AccessibleContext associated with this List. + * 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) + accessibleContext = new AccessibleAWTList(); + return accessibleContext; + } } // class List diff --git a/libjava/java/awt/Menu.java b/libjava/java/awt/Menu.java index 35798a06..3cc9cc3 100644 --- a/libjava/java/awt/Menu.java +++ b/libjava/java/awt/Menu.java @@ -451,12 +451,18 @@ paramString() } } - /* (non-Javadoc) - * @see java.awt.MenuComponent#getAccessibleContext() + /** + * Gets the AccessibleContext associated with this Menu. + * The context is created, if necessary. + * + * @return the associated context */ public AccessibleContext getAccessibleContext() { - return new AccessibleAWTMenu(); + /* Create the context if this is the first request */ + if (accessibleContext == null) + accessibleContext = new AccessibleAWTMenu(); + return accessibleContext; } } // class Menu diff --git a/libjava/java/awt/MenuBar.java b/libjava/java/awt/MenuBar.java index 6a97fa9..c040235 100644 --- a/libjava/java/awt/MenuBar.java +++ b/libjava/java/awt/MenuBar.java @@ -381,10 +381,7 @@ public AccessibleContext getAccessibleContext() { /* Create the context if this is the first request */ if (accessibleContext == null) - { - /* Create the context */ - accessibleContext = new AccessibleAWTMenuBar(); - } + accessibleContext = new AccessibleAWTMenuBar(); return accessibleContext; } diff --git a/libjava/java/awt/MenuComponent.java b/libjava/java/awt/MenuComponent.java index 78adfae..db6d4bd 100644 --- a/libjava/java/awt/MenuComponent.java +++ b/libjava/java/awt/MenuComponent.java @@ -130,7 +130,7 @@ private static final long serialVersionUID = -4536902356223894379L; * @see #getAccessibleContext() * @serial the accessibility information for this component. */ - private AccessibleContext accessibleContext; + AccessibleContext accessibleContext; /** * Was the name of the component set? This value defaults diff --git a/libjava/java/awt/MenuItem.java b/libjava/java/awt/MenuItem.java index a587742..56082d3 100644 --- a/libjava/java/awt/MenuItem.java +++ b/libjava/java/awt/MenuItem.java @@ -47,6 +47,7 @@ import java.util.EventListener; import javax.accessibility.Accessible; import javax.accessibility.AccessibleAction; +import javax.accessibility.AccessibleContext; import javax.accessibility.AccessibleRole; import javax.accessibility.AccessibleValue; @@ -562,7 +563,10 @@ protected void processActionEvent(ActionEvent event) { if (action_listeners != null) - action_listeners.actionPerformed(event); + { + event.setSource(this); + action_listeners.actionPerformed(event); + } } /*************************************************************************/ @@ -579,7 +583,18 @@ paramString() ",actionCommand=" + actionCommand + "," + super.paramString()); } -// Accessibility API not yet implemented. -// public AccessibleContext getAccessibleContext() +/** + * Gets the AccessibleContext associated with this MenuItem. + * 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) + accessibleContext = new AccessibleAWTMenuItem(); + return accessibleContext; +} } // class MenuItem diff --git a/libjava/java/awt/PopupMenu.java b/libjava/java/awt/PopupMenu.java index 7508202..92840df 100644 --- a/libjava/java/awt/PopupMenu.java +++ b/libjava/java/awt/PopupMenu.java @@ -151,9 +151,18 @@ show(Component component, int x, int y) } + /** + * Gets the AccessibleContext associated with this PopupMenu. + * The context is created, if necessary. + * + * @return the associated context + */ public AccessibleContext getAccessibleContext() { - return new AccessibleAWTPopupMenu(); + /* Create the context if this is the first request */ + if (accessibleContext == null) + accessibleContext = new AccessibleAWTPopupMenu(); + return accessibleContext; } } // class PopupMenu diff --git a/libjava/java/awt/Robot.java b/libjava/java/awt/Robot.java index f633fc0..49726c8 100644 --- a/libjava/java/awt/Robot.java +++ b/libjava/java/awt/Robot.java @@ -1,5 +1,5 @@ -/* Robot.java -- - Copyright (C) 2002 Free Software Foundation, Inc. +/* Robot.java -- a native input event generator + Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,112 +38,384 @@ exception statement from your version. */ package java.awt; +import gnu.java.awt.ClasspathToolkit; + +import java.awt.event.InputEvent; import java.awt.image.BufferedImage; +import java.awt.peer.RobotPeer; /** + * The Robot class is used to simulate user interaction with graphical + * programs. It can generate native windowing system input events and + * retrieve image data from the current screen. Robot is used to test + * the AWT and Swing library implementations; it can also be used to + * create self-running demo programs. + * + * Since Robot generates native windowing system events, rather than + * simply inserting {@link AWTEvents} on the AWT event queue, its use + * is not restricted to Java programs. It can be to programatically + * drive any graphical application. + * + * This implementation requires an X server that supports the XTest + * extension. + * + * @author Thomas Fitzsimmons (fitzsim@redhat.com) + * * @since 1.3 */ -/** STUB CLASS ONLY */ public class Robot { - private GraphicsDevice screen; private boolean waitForIdle; private int autoDelay; - + private RobotPeer peer; + /** - * Creates a Robot object. - * - * @exception AWTException If GraphicsEnvironment.isHeadless() returns true. - * @exception SecurityException If createRobot permission is not granted. + * Construct a Robot object that operates on the default screen. + * + * @exception AWTException if GraphicsEnvironment.isHeadless() + * returns true or if the X server does not support the XTest + * extension + * @exception SecurityException if createRobot permission is not + * granted */ - public Robot() throws AWTException + public Robot () throws AWTException { - throw new Error("not implemented"); + if (GraphicsEnvironment.isHeadless ()) + throw new AWTException ("Robot: headless graphics environment"); + + SecurityManager sm = System.getSecurityManager (); + if (sm != null) + sm.checkPermission (new AWTPermission ("createRobot")); + + ClasspathToolkit tk = (ClasspathToolkit) Toolkit.getDefaultToolkit (); + + // createRobot will throw AWTException if XTest is not supported. + peer = tk.createRobot (GraphicsEnvironment.getLocalGraphicsEnvironment () + .getDefaultScreenDevice ()); } /** - * Creates a Robot object. - * - * @exception AWTException If GraphicsEnvironment.isHeadless() returns true. - * @exception IllegalArgumentException If screen is not a screen - * GraphicsDevice. - * @exception SecurityException If createRobot permission is not granted. + * Construct a Robot object that operates on the specified screen. + * + * @exception AWTException if GraphicsEnvironment.isHeadless() + * returns true or if the X server does not support the XTest + * extension + * @exception IllegalArgumentException if screen is not a screen + * GraphicsDevice + * @exception SecurityException if createRobot permission is not + * granted */ - public Robot(GraphicsDevice screen) throws AWTException + public Robot (GraphicsDevice screen) throws AWTException { - this(); - this.screen = screen; + if (GraphicsEnvironment.isHeadless ()) + throw new AWTException ("Robot: headless graphics environment"); + + if (screen.getType () != GraphicsDevice.TYPE_RASTER_SCREEN) + throw new IllegalArgumentException ("Robot: graphics" + + " device is not a screen"); + + SecurityManager sm = System.getSecurityManager (); + if (sm != null) + sm.checkPermission (new AWTPermission ("createRobot")); + + ClasspathToolkit tk = (ClasspathToolkit) Toolkit.getDefaultToolkit (); + + // createRobot will throw AWTException if XTest is not supported. + peer = tk.createRobot (screen); } + /** + * Move the mouse pointer to absolute coordinates (x, y). + * + * @param x the destination x coordinate + * @param y the destination y coordinate + */ public void mouseMove(int x, int y) { + peer.mouseMove (x, y); + + if (waitForIdle) + waitForIdle (); + + if (autoDelay > 0) + delay (autoDelay); } - public void mousePress(int buttons) + /** + * Press one or more mouse buttons. + * + * @param buttons the buttons to press; a bitmask of one or more of + * these {@link InputEvent} fields: + * + *
    + *
  • BUTTON1_MASK
  • + *
  • BUTTON2_MASK
  • + *
  • BUTTON3_MASK
  • + *
+ * + * @exception IllegalArgumentException if the button mask is invalid + */ + public void mousePress (int buttons) { + if ((buttons & InputEvent.BUTTON1_MASK) == 0 + && (buttons & InputEvent.BUTTON2_MASK) == 0 + && (buttons & InputEvent.BUTTON3_MASK) == 0) + throw new IllegalArgumentException ("Robot: mousePress:" + + " invalid button mask"); + + peer.mousePress (buttons); + + if (waitForIdle) + waitForIdle (); + + if (autoDelay > 0) + delay (autoDelay); } + /** + * Release one or more mouse buttons. + * + * @param buttons the buttons to release; a bitmask of one or more + * of these {@link InputEvent} fields: + * + *
    + *
  • BUTTON1_MASK
  • + *
  • BUTTON2_MASK
  • + *
  • BUTTON3_MASK
  • + *
+ * + * @exception IllegalArgumentException if the button mask is invalid + */ public void mouseRelease(int buttons) { + if ((buttons & InputEvent.BUTTON1_MASK) == 0 + && (buttons & InputEvent.BUTTON2_MASK) == 0 + && (buttons & InputEvent.BUTTON3_MASK) == 0) + throw new IllegalArgumentException ("Robot: mouseRelease:" + + " invalid button mask"); + + peer.mouseRelease (buttons); + + if (waitForIdle) + waitForIdle (); + + if (autoDelay > 0) + delay (autoDelay); } - public void mouseWheel(int wheelAmt) + /** + * Rotate the mouse scroll wheel. + * + * @param wheelAmt number of steps to rotate mouse wheel. negative + * to rotate wheel up (away from the user), positive to rotate wheel + * down (toward the user). + * + * @since 1.4 + */ + public void mouseWheel (int wheelAmt) { + peer.mouseWheel (wheelAmt); + + if (waitForIdle) + waitForIdle (); + + if (autoDelay > 0) + delay (autoDelay); } - public void keyPress(int keycode) + /** + * Press a key. + * + * @param keycode key to press, a {@link KeyEvent} VK_ constant + * + * @exception IllegalArgumentException if keycode is not a valid key + */ + public void keyPress (int keycode) { + peer.keyPress (keycode); + + if (waitForIdle) + waitForIdle (); + + if (autoDelay > 0) + delay (autoDelay); } - public void keyRelease(int keycode) + /** + * Release a key. + * + * @param keycode key to release, a {@link KeyEvent} VK_ constant + * + * @exception IllegalArgumentException if keycode is not a valid key + */ + public void keyRelease (int keycode) { + peer.keyRelease (keycode); + + if (waitForIdle) + waitForIdle (); + + if (autoDelay > 0) + delay (autoDelay); } - - public Color getPixelColor(int x, int y) + + /** + * Return the color of the pixel at the given screen coordinates. + * + * @param x the x coordinate of the pixel + * @param y the y coordinate of the pixel + * + * @return the Color of the pixel at screen coodinates (x, y) + */ + public Color getPixelColor (int x, int y) { - return null; + return new Color (peer.getRGBPixel (x, y)); } - public BufferedImage createScreenCapture(Rectangle screen) + /** + * Create an image containing pixels read from the screen. The + * image does not include the mouse pointer. + * + * @param screenRect the rectangle of pixels to capture, in screen + * coordinates + * + * @return a BufferedImage containing the requested pixels + * + * @exception IllegalArgumentException if requested width and height + * are not both greater than zero + * @exception SecurityException if readDisplayPixels permission is + * not granted + */ + public BufferedImage createScreenCapture (Rectangle screenRect) { - return null; + if (screenRect.width <= 0) + throw new IllegalArgumentException ("Robot: capture width is <= 0"); + + if (screenRect.height <= 0) + throw new IllegalArgumentException ("Robot: capture height is <= 0"); + + SecurityManager sm = System.getSecurityManager (); + if (sm != null) + sm.checkPermission (new AWTPermission ("readDisplayPixels")); + + int[] pixels = peer.getRGBPixels (screenRect); + + BufferedImage bufferedImage = + new BufferedImage (screenRect.width, screenRect.height, + BufferedImage.TYPE_INT_ARGB); + + bufferedImage.setRGB (0, 0, screenRect.width, screenRect.height, + pixels, 0, screenRect.width); + + return bufferedImage; } - - public boolean isAutoWaitForIdle() + + /** + * Check if this Robot automatically calls {@link waitForIdle} after + * generating an event. + * + * @return true if waitForIdle is automatically called + */ + public boolean isAutoWaitForIdle () { return waitForIdle; } - - public void setAutoWaitForIdle(boolean value) + + /** + * Set whether or not this Robot automatically calls {@link + * waitForIdle} after generating an event. + * + * @param isOn true if waitForIdle should be called automatically + */ + public void setAutoWaitForIdle (boolean isOn) { - waitForIdle = value; + waitForIdle = isOn; } - - public int getAutoDelay() + + /** + * Retrieve the length of time this Robot sleeps after generating an + * event. + * + * @return the length of time in milliseconds + */ + public int getAutoDelay () { return autoDelay; } - - public void setAutoDelay(int ms) + + /** + * Set the length of time this Robot sleeps after generating an + * event. + * + * @param ms the length of time in milliseconds + * + * @exception IllegalArgumentException if ms is not between 0 and + * 60,000 milliseconds inclusive + */ + public void setAutoDelay (int ms) { - if (ms < 0 || ms > 60000) - throw new IllegalArgumentException(); - + if (ms <= 0 || ms >= 60000) + throw new IllegalArgumentException ("Robot: delay length out-of-bounds"); + autoDelay = ms; } - public void delay(int ms) + /** + * Sleep for a specified length of time. + * + * @param ms the length of time in milliseconds + * + * @exception IllegalArgumentException if ms is not between 0 and + * 60,000 milliseconds inclusive + */ + public void delay (int ms) { if (ms < 0 || ms > 60000) - throw new IllegalArgumentException(); + throw new IllegalArgumentException ("Robot: delay length out-of-bounds"); + + try + { + Thread.sleep (ms); + } + catch (InterruptedException e) + { + System.err.println ("Robot: delay interrupted"); + } } - public void waitForIdle() + /** + * Wait until the event dispatch thread is idle. + */ + public void waitForIdle () { + if (EventQueue.isDispatchThread ()) + throw new IllegalThreadStateException ("Robot: waitForIdle called from " + + "the event dispatch thread"); + + EventQueue q = Toolkit.getDefaultToolkit ().getSystemEventQueue (); + + while (q.peekEvent () != null) + { + try + { + wait (); + } + catch (InterruptedException e) + { + System.err.println ("Robot: waitForIdle interrupted"); + } + } } - public String toString() + /** + * Return a string representation of this Robot. + * + * @return a string representation + */ + public String toString () { - return "unimplemented"; + return getClass ().getName () + + "[ autoDelay = " + autoDelay + ", autoWaitForIdle = " + + waitForIdle + " ]"; } -} // class Robot +} diff --git a/libjava/java/awt/ScrollPane.java b/libjava/java/awt/ScrollPane.java index abd5514..c38feb3 100644 --- a/libjava/java/awt/ScrollPane.java +++ b/libjava/java/awt/ScrollPane.java @@ -43,6 +43,8 @@ import java.awt.peer.ComponentPeer; import java.awt.peer.ScrollPanePeer; import javax.accessibility.Accessible; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; /** * This widget provides a scrollable region that allows a single @@ -587,5 +589,27 @@ paramString() { wheelScrollingEnabled = enable; } + + protected class AccessibleAWTScrollPane extends AccessibleAWTContainer + { + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.SCROLL_PANE; + } + } + + /** + * Gets the AccessibleContext associated with this ScrollPane. + * 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) + accessibleContext = new AccessibleAWTScrollPane(); + return accessibleContext; + } } // class ScrollPane diff --git a/libjava/java/awt/Scrollbar.java b/libjava/java/awt/Scrollbar.java index 7cc9715..9141ea5 100644 --- a/libjava/java/awt/Scrollbar.java +++ b/libjava/java/awt/Scrollbar.java @@ -1,5 +1,5 @@ /* Scrollbar.java -- AWT Scrollbar widget - Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -45,694 +45,603 @@ import java.awt.peer.ScrollbarPeer; import java.util.EventListener; import javax.accessibility.Accessible; - -/** - * This class implements a scrollbar widget. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Tom Tromey - */ -public class Scrollbar extends Component implements Accessible, - Adjustable -{ - -// FIXME: Serialization readObject/writeObject - -/* - * Static Variables +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleState; +import javax.accessibility.AccessibleStateSet; +import javax.accessibility.AccessibleValue; + +/** + * This class implements a scrollbar widget. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + * @author Tom Tromey (tromey@cygnus.com) + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) */ +public class Scrollbar extends Component implements Accessible, Adjustable +{ + // FIXME: Serialization readObject/writeObject -/** - * Constant indicating that a scrollbar is horizontal. - */ -public static final int HORIZONTAL = 0; - -/** - * Constant indicating that a scrollbar is vertical. - */ -public static final int VERTICAL = 1; + /** + * Constant indicating that a scrollbar is horizontal. + */ + public static final int HORIZONTAL = 0; -// Serialization Constant -private static final long serialVersionUID = 8451667562882310543L; + /** + * Constant indicating that a scrollbar is vertical. + */ + public static final int VERTICAL = 1; -/*************************************************************************/ + /** + * Serialization Constant. + */ + private static final long serialVersionUID = 8451667562882310543L; -/** - * @serial The amount by which the value of the scrollbar is changed - * when incrementing in line mode. - */ -private int lineIncrement; + /** + * @serial The amount by which the value of the scrollbar is changed + * when incrementing in line mode. + */ + private int lineIncrement; -/** - * @serial The amount by which the value of the scrollbar is changed - * when incrementing in page mode. - */ -private int pageIncrement; + /** + * @serial The amount by which the value of the scrollbar is changed + * when incrementing in page mode. + */ + private int pageIncrement; -/** - * @serial The maximum value for this scrollbar - */ -private int maximum; + /** + * @serial The maximum value for this scrollbar + */ + private int maximum; -/** - * @serial The minimum value for this scrollbar - */ -private int minimum; + /** + * @serial The minimum value for this scrollbar + */ + private int minimum; -/** - * @serial The orientation of this scrollbar, which will be either - * the HORIZONTAL or VERTICAL constant - * from this class. - */ -private int orientation; + /** + * @serial The orientation of this scrollbar, which will be either + * the HORIZONTAL or VERTICAL constant + * from this class. + */ + private int orientation; -/** - * @serial The current value of this scrollbar. - */ -private int value; + /** + * @serial The current value of this scrollbar. + */ + private int value; -/** - * @serial The width of the scrollbar's thumb, which is relative - * to the minimum and maximum value of the scrollbar. - */ -private int visibleAmount; + /** + * @serial The width of the scrollbar's thumb, which is relative + * to the minimum and maximum value of the scrollbar. + */ + private int visibleAmount; -// List of AdjustmentListener's. -private AdjustmentListener adjustment_listeners; + /** + * List of AdjustmentListener's. + */ + private AdjustmentListener adjustment_listeners; -private transient boolean valueIsAdjusting = false; + /** + * true if the scrollbar is adjusting, false otherwise. + */ + private transient boolean valueIsAdjusting = false; - /* + /** * The number used to generate the name returned by getName. */ private static transient long next_scrollbar_number; -/*************************************************************************/ - -/* - * Constructors - */ - -/** - * Initializes a new instance of Scrollbar with a - * vertical orientation and default values for all other parameters. - * - * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, - */ -public -Scrollbar() -{ - this(VERTICAL); -} - -/*************************************************************************/ - -/** - * Initializes a new instance of Scrollbar with the - * specified orientation and default values for all other parameters. - * The orientation must be either the constant HORIZONTAL or - * VERTICAL from this class. An incorrect value will throw - * an exception. - * - * @param orientation The orientation of this scrollbar. - * - * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, - * @exception IllegalArgumentException If the orientation value is not valid. - */ -public -Scrollbar(int orientation) throws IllegalArgumentException -{ - this(orientation, 0, 10, 0, 100); -} - -/*************************************************************************/ - -/** - * Initializes a new instance of Scrollbar with the - * specified parameters. The orientation must be either the constant - * HORIZONTAL or VERTICAL. An incorrect value - * will throw an exception. Inconsistent values for other parameters - * are silently corrected to valid values. - * - * @param orientation The orientation of this scrollbar. - * @param value The initial value of the scrollbar. - * @param visibleAmount The width of the scrollbar thumb. - * @param minimum The minimum value of the scrollbar. - * @param maximum The maximum value of the scrollbar. - * - * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, - * @exception IllegalArgumentException If the orientation value is not valid. - */ -public -Scrollbar(int orientation, int value, int visibleAmount, int minimum, - int maximum) throws IllegalArgumentException -{ - if (GraphicsEnvironment.isHeadless()) - throw new HeadlessException (); - - if ((orientation != HORIZONTAL) && (orientation != VERTICAL)) - throw new IllegalArgumentException("Bad orientation value: " - + orientation); - - this.orientation = orientation; - - setValues(value, visibleAmount, minimum, maximum); - - // Default is 1 according to online docs. - lineIncrement = 1; - - // Default is 10 according to javadocs. - pageIncrement = 10; -} - -/*************************************************************************/ - -/* - * Instance Methods - */ - -/** - * Returns the orientation constant for this object. - * - * @return The orientation constant for this object. - */ -public int -getOrientation() -{ - return(orientation); -} - -/*************************************************************************/ - -/** - * Sets the orientation of this scrollbar to the specified value. This - * value must be either the constant HORIZONTAL or - * VERTICAL from this class or an exception will be thrown. - * - * @param orientation The new orientation value. - * - * @exception IllegalArgumentException If the orientation value is not valid. - */ -public void -setOrientation(int orientation) -{ - if ((orientation != HORIZONTAL) && (orientation != VERTICAL)) - throw new IllegalArgumentException("Bad orientation value: " - + orientation); - - // FIXME: Communicate to peer? Or must this be called before peer creation? - this.orientation = orientation; -} - -/*************************************************************************/ - -/** - * Returns the current value for this scrollbar. - * - * @return The current value for this scrollbar. - */ -public int -getValue() -{ - return(value); -} - -/*************************************************************************/ - -/** - * Sets the current value for this scrollbar to the specified value. - * If this is inconsistent with the minimum and maximum values for this - * scrollbar, the value is silently adjusted. - * - * @param value The new value for this scrollbar. - */ -public void -setValue(int value) -{ - setValues(value, visibleAmount, minimum, maximum); -} - -/*************************************************************************/ - -/** - * Returns the maximum value for this scrollbar. - * - * @return The maximum value for this scrollbar. - */ -public int -getMaximum() -{ - return(maximum); -} - -/*************************************************************************/ - -/** - * Sets the maximum value for this scrollbar to the specified value. - * If the value is less than the current minimum value, it is silent - * set to equal the minimum value. - * - * @param maximum The new maximum value for this scrollbar. - */ -public void -setMaximum(int maximum) -{ - setValues(value, visibleAmount, minimum, maximum); -} - -/*************************************************************************/ - -/** - * Returns the minimum value for this scrollbar. - * - * @return The minimum value for this scrollbar. - */ -public int -getMinimum() -{ - return(minimum); -} - -/*************************************************************************/ - -/** - * Sets the minimum value for this scrollbar to the specified value. If - * this is not consistent with the current value and maximum, it is - * silently adjusted to be consistent. - * - * @param minimum The new minimum value for this scrollbar. - */ -public void -setMinimum(int minimum) -{ - setValues(value, visibleAmount, minimum, maximum); -} - -/*************************************************************************/ - -/** - * Returns the width of the scrollbar's thumb, in units relative to the - * maximum and minimum value of the scrollbar. - * - * @return The width of the scrollbar's thumb. - */ -public int -getVisibleAmount() -{ - return getVisible (); -} - -/*************************************************************************/ - -/** - * Returns the width of the scrollbar's thumb, in units relative to the - * maximum and minimum value of the scrollbar. - * - * @return The width of the scrollbar's thumb. - * - * @deprecated This method is deprecated in favor of - * getVisibleAmount(). - */ -public int -getVisible() -{ - return visibleAmount; -} - -/*************************************************************************/ - -/** - * Sets the width of the scrollbar's thumb, in units relative to the - * maximum and minimum value of the scrollbar. - * - * @param visibleAmount The new visible amount value of the scrollbar. - */ -public void -setVisibleAmount(int visibleAmount) -{ - setValues(value, visibleAmount, minimum, maximum); -} - -/*************************************************************************/ - -/** - * Sets the current value, visible amount, minimum, and maximum for this - * scrollbar. These values are adjusted to be internally consistent - * if necessary. - * - * @param value The new value for this scrollbar. - * @param visibleAmount The new visible amount for this scrollbar. - * @param minimum The new minimum value for this scrollbar. - * @param maximum The new maximum value for this scrollbar. - */ -public synchronized void -setValues(int value, int visibleAmount, int minimum, int maximum) -{ - if (maximum < minimum) - maximum = minimum; - - if (value < minimum) - value = minimum; - - if (value > maximum) - value = maximum; - - if (visibleAmount > maximum - minimum) - visibleAmount = maximum - minimum; - - ScrollbarPeer peer = (ScrollbarPeer) getPeer (); - if (peer != null - && (this.value != value || this.visibleAmount != visibleAmount - || this.minimum != minimum || this.maximum != maximum)) - peer.setValues(value, visibleAmount, minimum, maximum); - - this.value = value; - this.visibleAmount = visibleAmount; - this.minimum = minimum; - this.maximum = maximum; - - int range = maximum - minimum; - if (lineIncrement > range) - { - if (range == 0) - lineIncrement = 1; - else - lineIncrement = range; - - if (peer != null) - peer.setLineIncrement(lineIncrement); - } - - if (pageIncrement > range) - { - if (range == 0) - pageIncrement = 1; - else - pageIncrement = range; - - if (peer != null) - peer.setPageIncrement(pageIncrement); - } -} - -/*************************************************************************/ + /** + * Initializes a new instance of Scrollbar with a + * vertical orientation and default values for all other parameters. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, + */ + public Scrollbar() + { + this(VERTICAL); + } -/** - * Returns the value added or subtracted when the user activates the scrollbar - * scroll by a "unit" amount. - * - * @return The unit increment value. - */ -public int -getUnitIncrement() -{ - return getLineIncrement (); -} + /** + * Initializes a new instance of Scrollbar with the + * specified orientation and default values for all other parameters. + * The orientation must be either the constant HORIZONTAL or + * VERTICAL from this class. An incorrect value will throw + * an exception. + * + * @param orientation The orientation of this scrollbar. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, + * @exception IllegalArgumentException If the orientation value is not valid. + */ + public Scrollbar(int orientation) throws IllegalArgumentException + { + this(orientation, 0, 10, 0, 100); + } -/*************************************************************************/ + /** + * Initializes a new instance of Scrollbar with the + * specified parameters. The orientation must be either the constant + * HORIZONTAL or VERTICAL. An incorrect value + * will throw an exception. Inconsistent values for other parameters + * are silently corrected to valid values. + * + * @param orientation The orientation of this scrollbar. + * @param value The initial value of the scrollbar. + * @param visibleAmount The width of the scrollbar thumb. + * @param minimum The minimum value of the scrollbar. + * @param maximum The maximum value of the scrollbar. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, + * @exception IllegalArgumentException If the orientation value is not valid. + */ + public Scrollbar(int orientation, int value, int visibleAmount, int minimum, + int maximum) throws IllegalArgumentException + { + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException(); -/** - * Returns the value added or subtracted when the user selects the scrollbar - * scroll by a "unit" amount control. - * - * @return The unit increment value. - * - * @deprecated This method is deprecated in favor of - * getUnitIncrement(). - */ -public int -getLineIncrement() -{ - return lineIncrement; -} + if ((orientation != HORIZONTAL) && (orientation != VERTICAL)) + throw new IllegalArgumentException("Bad orientation value: " + + orientation); -/*************************************************************************/ + this.orientation = orientation; -/** - * Sets the value added or subtracted to the scrollbar value when the - * user selects the scroll by a "unit" amount control. - * - * @param unitIncrement The new unit increment amount. - */ -public synchronized void -setUnitIncrement(int unitIncrement) -{ - setLineIncrement (unitIncrement); -} + setValues(value, visibleAmount, minimum, maximum); -/*************************************************************************/ + // Default is 1 according to online docs. + lineIncrement = 1; -/** - * Sets the value added or subtracted to the scrollbar value when the - * user selects the scroll by a "unit" amount control. - * - * @param lineIncrement The new unit increment amount. - * - * @deprecated This method is deprecated in favor of - * setUnitIncrement(). - */ -public void -setLineIncrement(int lineIncrement) -{ - if (lineIncrement < 0) - throw new IllegalArgumentException ("Unit increment less than zero."); + // Default is 10 according to javadocs. + pageIncrement = 10; + } - int range = maximum - minimum; - if (lineIncrement > range) - { - if (range == 0) - lineIncrement = 1; - else - lineIncrement = range; - } + /** + * Returns the orientation constant for this object. + * + * @return The orientation constant for this object. + */ + public int getOrientation() + { + return orientation; + } - if (lineIncrement == this.lineIncrement) - return; + /** + * Sets the orientation of this scrollbar to the specified value. This + * value must be either the constant HORIZONTAL or + * VERTICAL from this class or an exception will be thrown. + * + * @param orientation The new orientation value. + * + * @exception IllegalArgumentException If the orientation value is not valid. + */ + public void setOrientation(int orientation) + { + if ((orientation != HORIZONTAL) && (orientation != VERTICAL)) + throw new IllegalArgumentException("Bad orientation value: " + + orientation); - this.lineIncrement = lineIncrement; + // FIXME: Communicate to peer? Or must this be called before peer creation? + this.orientation = orientation; + } - ScrollbarPeer peer = (ScrollbarPeer) getPeer (); - if (peer != null) - peer.setLineIncrement (this.lineIncrement); -} + /** + * Returns the current value for this scrollbar. + * + * @return The current value for this scrollbar. + */ + public int getValue() + { + return value; + } -/*************************************************************************/ + /** + * Sets the current value for this scrollbar to the specified value. + * If this is inconsistent with the minimum and maximum values for this + * scrollbar, the value is silently adjusted. + * + * @param value The new value for this scrollbar. + */ + public void setValue(int value) + { + setValues(value, visibleAmount, minimum, maximum); + } -/** - * Returns the value added or subtracted when the user activates the scrollbar - * scroll by a "block" amount. - * - * @return The block increment value. - */ -public int -getBlockIncrement() -{ - return getPageIncrement (); -} + /** + * Returns the maximum value for this scrollbar. + * + * @return The maximum value for this scrollbar. + */ + public int getMaximum() + { + return maximum; + } -/*************************************************************************/ + /** + * Sets the maximum value for this scrollbar to the specified value. + * If the value is less than the current minimum value, it is silent + * set to equal the minimum value. + * + * @param maximum The new maximum value for this scrollbar. + */ + public void setMaximum(int maximum) + { + setValues(value, visibleAmount, minimum, maximum); + } -/** - * Returns the value added or subtracted when the user selects the scrollbar - * scroll by a "block" amount control. - * - * @return The block increment value. - * - * @deprecated This method is deprecated in favor of - * getBlockIncrement(). - */ -public int -getPageIncrement() -{ - return pageIncrement; -} + /** + * Returns the minimum value for this scrollbar. + * + * @return The minimum value for this scrollbar. + */ + public int getMinimum() + { + return minimum; + } -/*************************************************************************/ + /** + * Sets the minimum value for this scrollbar to the specified value. If + * this is not consistent with the current value and maximum, it is + * silently adjusted to be consistent. + * + * @param minimum The new minimum value for this scrollbar. + */ + public void setMinimum(int minimum) + { + setValues(value, visibleAmount, minimum, maximum); + } -/** - * Sets the value added or subtracted to the scrollbar value when the - * user selects the scroll by a "block" amount control. - * - * @param blockIncrement The new block increment amount. - */ -public synchronized void -setBlockIncrement(int blockIncrement) -{ - setPageIncrement (blockIncrement); -} + /** + * Returns the width of the scrollbar's thumb, in units relative to the + * maximum and minimum value of the scrollbar. + * + * @return The width of the scrollbar's thumb. + */ + public int getVisibleAmount() + { + return getVisible(); + } -/*************************************************************************/ + /** + * Returns the width of the scrollbar's thumb, in units relative to the + * maximum and minimum value of the scrollbar. + * + * @return The width of the scrollbar's thumb. + * + * @deprecated This method is deprecated in favor of + * getVisibleAmount(). + */ + public int getVisible() + { + return visibleAmount; + } -/** - * Sets the value added or subtracted to the scrollbar value when the - * user selects the scroll by a "block" amount control. - * - * @param pageIncrement The new block increment amount. - * - * @deprecated This method is deprecated in favor of - * setBlockIncrement(). - */ -public void -setPageIncrement(int pageIncrement) -{ - if (pageIncrement < 0) - throw new IllegalArgumentException ("Block increment less than zero."); + /** + * Sets the width of the scrollbar's thumb, in units relative to the + * maximum and minimum value of the scrollbar. + * + * @param visibleAmount The new visible amount value of the scrollbar. + */ + public void setVisibleAmount(int visibleAmount) + { + setValues(value, visibleAmount, minimum, maximum); + } - int range = maximum - minimum; - if (pageIncrement > range) - { - if (range == 0) - pageIncrement = 1; - else - pageIncrement = range; - } + /** + * Sets the current value, visible amount, minimum, and maximum for this + * scrollbar. These values are adjusted to be internally consistent + * if necessary. + * + * @param value The new value for this scrollbar. + * @param visibleAmount The new visible amount for this scrollbar. + * @param minimum The new minimum value for this scrollbar. + * @param maximum The new maximum value for this scrollbar. + */ + public synchronized void setValues(int value, int visibleAmount, + int minimum, int maximum) + { + if (maximum < minimum) + maximum = minimum; + + if (value < minimum) + value = minimum; + + if (value > maximum) + value = maximum; + + if (visibleAmount > maximum - minimum) + visibleAmount = maximum - minimum; + + ScrollbarPeer peer = (ScrollbarPeer) getPeer(); + if (peer != null + && (this.value != value || this.visibleAmount != visibleAmount + || this.minimum != minimum || this.maximum != maximum)) + peer.setValues(value, visibleAmount, minimum, maximum); + + this.value = value; + this.visibleAmount = visibleAmount; + this.minimum = minimum; + this.maximum = maximum; + + int range = maximum - minimum; + if (lineIncrement > range) + { + if (range == 0) + lineIncrement = 1; + else + lineIncrement = range; + + if (peer != null) + peer.setLineIncrement(lineIncrement); + } + + if (pageIncrement > range) + { + if (range == 0) + pageIncrement = 1; + else + pageIncrement = range; + + if (peer != null) + peer.setPageIncrement(pageIncrement); + } + } - if (pageIncrement == this.pageIncrement) - return; + /** + * Returns the value added or subtracted when the user activates the scrollbar + * scroll by a "unit" amount. + * + * @return The unit increment value. + */ + public int getUnitIncrement() + { + return getLineIncrement(); + } - this.pageIncrement = pageIncrement; + /** + * Returns the value added or subtracted when the user selects the scrollbar + * scroll by a "unit" amount control. + * + * @return The unit increment value. + * + * @deprecated This method is deprecated in favor of + * getUnitIncrement(). + */ + public int getLineIncrement() + { + return lineIncrement; + } - ScrollbarPeer peer = (ScrollbarPeer) getPeer (); - if (peer != null) - peer.setPageIncrement (this.pageIncrement); -} + /** + * Sets the value added or subtracted to the scrollbar value when the + * user selects the scroll by a "unit" amount control. + * + * @param unitIncrement The new unit increment amount. + */ + public synchronized void setUnitIncrement(int unitIncrement) + { + setLineIncrement(unitIncrement); + } -/*************************************************************************/ + /** + * Sets the value added or subtracted to the scrollbar value when the + * user selects the scroll by a "unit" amount control. + * + * @param lineIncrement The new unit increment amount. + * + * @deprecated This method is deprecated in favor of + * setUnitIncrement(). + */ + public void setLineIncrement(int lineIncrement) + { + if (lineIncrement < 0) + throw new IllegalArgumentException("Unit increment less than zero."); + + int range = maximum - minimum; + if (lineIncrement > range) + { + if (range == 0) + lineIncrement = 1; + else + lineIncrement = range; + } + + if (lineIncrement == this.lineIncrement) + return; + + this.lineIncrement = lineIncrement; + + ScrollbarPeer peer = (ScrollbarPeer) getPeer(); + if (peer != null) + peer.setLineIncrement(this.lineIncrement); + } -/** - * Notifies this object to create its native peer. - */ -public synchronized void -addNotify() -{ - if (peer == null) - peer = getToolkit ().createScrollbar (this); - super.addNotify (); -} + /** + * Returns the value added or subtracted when the user activates the scrollbar + * scroll by a "block" amount. + * + * @return The block increment value. + */ + public int getBlockIncrement() + { + return getPageIncrement(); + } -/*************************************************************************/ + /** + * Returns the value added or subtracted when the user selects the scrollbar + * scroll by a "block" amount control. + * + * @return The block increment value. + * + * @deprecated This method is deprecated in favor of + * getBlockIncrement(). + */ + public int getPageIncrement() + { + return pageIncrement; + } -/** - * Adds a new adjustment listener to the list of registered listeners - * for this object. - * - * @param listener The listener to add. - */ -public synchronized void -addAdjustmentListener(AdjustmentListener listener) -{ - adjustment_listeners = AWTEventMulticaster.add(adjustment_listeners, listener); - enableEvents(AWTEvent.ADJUSTMENT_EVENT_MASK); -} + /** + * Sets the value added or subtracted to the scrollbar value when the + * user selects the scroll by a "block" amount control. + * + * @param blockIncrement The new block increment amount. + */ + public synchronized void setBlockIncrement(int blockIncrement) + { + setPageIncrement(blockIncrement); + } -/*************************************************************************/ + /** + * Sets the value added or subtracted to the scrollbar value when the + * user selects the scroll by a "block" amount control. + * + * @param pageIncrement The new block increment amount. + * + * @deprecated This method is deprecated in favor of + * setBlockIncrement(). + */ + public void setPageIncrement(int pageIncrement) + { + if (pageIncrement < 0) + throw new IllegalArgumentException("Block increment less than zero."); + + int range = maximum - minimum; + if (pageIncrement > range) + { + if (range == 0) + pageIncrement = 1; + else + pageIncrement = range; + } + + if (pageIncrement == this.pageIncrement) + return; + + this.pageIncrement = pageIncrement; + + ScrollbarPeer peer = (ScrollbarPeer) getPeer(); + if (peer != null) + peer.setPageIncrement(this.pageIncrement); + } -/** - * Removes the specified listener from the list of registered listeners - * for this object. - * - * @param listener The listener to remove. - */ -public synchronized void -removeAdjustmentListener(AdjustmentListener listener) -{ - adjustment_listeners = AWTEventMulticaster.remove(adjustment_listeners, - listener); -} + /** + * Notifies this object to create its native peer. + */ + public synchronized void addNotify() + { + if (peer == null) + peer = getToolkit().createScrollbar(this); + super.addNotify(); + } -/*************************************************************************/ + /** + * Adds a new adjustment listener to the list of registered listeners + * for this object. + * + * @param listener The listener to add. + */ + public synchronized void addAdjustmentListener(AdjustmentListener listener) + { + adjustment_listeners = AWTEventMulticaster.add(adjustment_listeners, + listener); + enableEvents(AWTEvent.ADJUSTMENT_EVENT_MASK); + } -/** - * Processes events for this scrollbar. It does this by calling - * processAdjustmentEvent() if the event is an instance of - * AdjustmentEvent, otherwise it calls the superclass to - * process the event. - * - * @param event The event to process. - */ -protected void -processEvent(AWTEvent event) -{ - if (event instanceof AdjustmentEvent) - processAdjustmentEvent((AdjustmentEvent)event); - else - super.processEvent(event); -} + /** + * Removes the specified listener from the list of registered listeners + * for this object. + * + * @param listener The listener to remove. + */ + public synchronized void removeAdjustmentListener(AdjustmentListener listener) + { + adjustment_listeners = AWTEventMulticaster.remove(adjustment_listeners, + listener); + } -/*************************************************************************/ + /** + * Processes events for this scrollbar. It does this by calling + * processAdjustmentEvent() if the event is an instance of + * AdjustmentEvent, otherwise it calls the superclass to + * process the event. + * + * @param event The event to process. + */ + protected void processEvent(AWTEvent event) + { + if (event instanceof AdjustmentEvent) + processAdjustmentEvent((AdjustmentEvent) event); + else + super.processEvent(event); + } -/** - * Processes adjustment events for this object by dispatching them to - * any registered listeners. Note that this method will only be called - * if adjustment events are enabled. This will happen automatically if - * any listeners are registered. Otherwise, it can be enabled by a - * call to enableEvents(). - * - * @param event The event to process. - */ -protected void -processAdjustmentEvent(AdjustmentEvent event) -{ - value = event.getValue(); - if (adjustment_listeners != null) - adjustment_listeners.adjustmentValueChanged(event); -} + /** + * Processes adjustment events for this object by dispatching them to + * any registered listeners. Note that this method will only be called + * if adjustment events are enabled. This will happen automatically if + * any listeners are registered. Otherwise, it can be enabled by a + * call to enableEvents(). + * + * @param event The event to process. + */ + protected void processAdjustmentEvent(AdjustmentEvent event) + { + value = event.getValue(); + if (adjustment_listeners != null) + adjustment_listeners.adjustmentValueChanged(event); + } -void -dispatchEventImpl(AWTEvent e) -{ - if (e.id <= AdjustmentEvent.ADJUSTMENT_LAST + void dispatchEventImpl(AWTEvent e) + { + if (e.id <= AdjustmentEvent.ADJUSTMENT_LAST && e.id >= AdjustmentEvent.ADJUSTMENT_FIRST && (adjustment_listeners != null || (eventMask & AWTEvent.ADJUSTMENT_EVENT_MASK) != 0)) - processEvent(e); - else - super.dispatchEventImpl(e); -} - -/*************************************************************************/ + processEvent(e); + else + super.dispatchEventImpl(e); + } -/** - * Returns a debugging string for this object. - * - * @return A debugging string for this object. - */ -protected String -paramString() -{ - return("value=" + getValue() + ",visibleAmount=" + - getVisibleAmount() + ",minimum=" + getMinimum() - + ",maximum=" + getMaximum() - + ",pageIncrement=" + pageIncrement - + ",lineIncrement=" + lineIncrement - + ",orientation=" + (orientation == HORIZONTAL - ? "HORIZONTAL" : "VERTICAL") - + super.paramString()); -} + /** + * Returns a debugging string for this object. + * + * @return A debugging string for this object. + */ + protected String paramString() + { + return ("value=" + getValue() + ",visibleAmount=" + getVisibleAmount() + + ",minimum=" + getMinimum() + ",maximum=" + getMaximum() + + ",pageIncrement=" + pageIncrement + ",lineIncrement=" + + lineIncrement + ",orientation=" + + (orientation == HORIZONTAL ? "HORIZONTAL" : "VERTICAL") + + super.paramString()); + } /** * Returns an array of all the objects currently registered as FooListeners - * upon this Scrollbar. FooListeners are registered using the + * upon this Scrollbar. FooListeners are registered using the * addFooListener method. * * @exception ClassCastException If listenerType doesn't specify a class or * interface that implements java.util.EventListener. */ - public EventListener[] getListeners (Class listenerType) + public EventListener[] getListeners(Class listenerType) { if (listenerType == AdjustmentListener.class) - return AWTEventMulticaster.getListeners (adjustment_listeners, - listenerType); + return AWTEventMulticaster.getListeners(adjustment_listeners, + listenerType); - return super.getListeners (listenerType); + return super.getListeners(listenerType); } /** * Returns an array of all registered adjustment listeners. */ - public AdjustmentListener[] getAdjustmentListeners () + public AdjustmentListener[] getAdjustmentListeners() { - return (AdjustmentListener[]) getListeners (AdjustmentListener.class); + return (AdjustmentListener[]) getListeners(AdjustmentListener.class); } /** @@ -740,7 +649,7 @@ paramString() * * @since 1.4 */ - public boolean getValueIsAdjusting () + public boolean getValueIsAdjusting() { return valueIsAdjusting; } @@ -750,7 +659,7 @@ paramString() * * @since 1.4 */ - public void setValueIsAdjusting (boolean valueIsAdjusting) + public void setValueIsAdjusting(boolean valueIsAdjusting) { this.valueIsAdjusting = valueIsAdjusting; } @@ -760,14 +669,157 @@ paramString() * * @return A unique name for this scroll bar. */ - String generateName () + String generateName() { - return "scrollbar" + getUniqueLong (); + return "scrollbar" + getUniqueLong(); } - private static synchronized long getUniqueLong () + private static synchronized long getUniqueLong() { return next_scrollbar_number++; } -} // class Scrollbar + /** + * This class provides accessibility support for the + * scrollbar. + * + * @author Jerry Quinn (jlquinn@optonline.net) + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) + */ + protected class AccessibleAWTScrollBar extends AccessibleAWTComponent + implements AccessibleValue + { + /** + * Serialization constant to match JDK 1.5 + */ + private static final long serialVersionUID = -344337268523697807L; + + /** + * Returns the role of this accessible object. + * + * @return the instance of AccessibleRole, + * which describes this object. + * + * @see javax.accessibility.AccessibleRole + */ + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.SCROLL_BAR; + } + + /** + * Returns the state set of this accessible object. + * + * @return a set of AccessibleStates which + * represent the current state of the accessible object. + * + * @see javax.accessibility.AccessibleState + * @see javax.accessibility.AccessibleStateSet + */ + public AccessibleStateSet getAccessibleStateSet() + { + AccessibleStateSet states = super.getAccessibleStateSet(); + if (getOrientation() == HORIZONTAL) + states.add(AccessibleState.HORIZONTAL); + else + states.add(AccessibleState.VERTICAL); + if (getValueIsAdjusting()) + states.add(AccessibleState.BUSY); + return states; + } + + /** + * Returns an implementation of the AccessibleValue + * interface for this accessible object. In this case, the + * current instance is simply returned (with a more appropriate + * type), as it also implements the accessible value as well as + * the context. + * + * @return the accessible value associated with this context. + * + * @see javax.accessibility.AccessibleValue + */ + public AccessibleValue getAccessibleValue() + { + return this; + } + + /** + * Returns the current value of this accessible object. + * In this case, this is the same as the value for + * the scrollbar, wrapped in an Integer + * object. + * + * @return the numeric value of this scrollbar. + * + * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue() + */ + public Number getCurrentAccessibleValue() + { + return new Integer(getValue()); + } + + /** + * Sets the current value of this accessible object + * to that supplied. In this case, the value of the + * scrollbar is set, and this method always returns + * true. + * + * @param number the new accessible value. + * + * @return true if the value was set. + * + * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number) + */ + public boolean setCurrentAccessibleValue(Number number) + { + setValue(number.intValue()); + return true; + } + + /** + * Returns the minimum acceptable accessible value used + * by this object. In this case, this is the same as + * the minimum value of the scrollbar, wrapped in an + * object. + * + * @return the minimum value of this scrollbar. + * + * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue() + */ + public Number getMinimumAccessibleValue() + { + return new Integer(getMinimum()); + } + + /** + * Returns the maximum acceptable accessible value used + * by this object. In this case, this is the same as + * the maximum value of the scrollbar, wrapped in an + * object. + * + * @return the maximum value of this scrollbar. + * + * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue() + */ + public Number getMaximumAccessibleValue() + { + return new Integer(getMaximum()); + } + } + + /** + * Gets the AccessibleContext associated with this Scrollbar. + * 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) + accessibleContext = new AccessibleAWTScrollBar(); + + return accessibleContext; + } +} diff --git a/libjava/java/awt/TextArea.java b/libjava/java/awt/TextArea.java index 9efc775..dda45f3 100644 --- a/libjava/java/awt/TextArea.java +++ b/libjava/java/awt/TextArea.java @@ -613,8 +613,17 @@ public class TextArea extends TextComponent implements java.io.Serializable } } + /** + * Gets the AccessibleContext associated with this TextArea. + * The context is created, if necessary. + * + * @return the associated context + */ public AccessibleContext getAccessibleContext() { - return new AccessibleAWTTextArea(); + /* Create the context if this is the first request */ + if (accessibleContext == null) + accessibleContext = new AccessibleAWTTextArea(); + return accessibleContext; } } diff --git a/libjava/java/awt/TextComponent.java b/libjava/java/awt/TextComponent.java index 8f9f875..4c38439 100644 --- a/libjava/java/awt/TextComponent.java +++ b/libjava/java/awt/TextComponent.java @@ -46,6 +46,7 @@ import java.text.BreakIterator; import java.util.EventListener; import javax.accessibility.Accessible; +import javax.accessibility.AccessibleContext; import javax.accessibility.AccessibleRole; import javax.accessibility.AccessibleState; import javax.accessibility.AccessibleStateSet; @@ -690,6 +691,21 @@ paramString() return (TextListener[]) getListeners (TextListener.class); } + /** + * Gets the AccessibleContext associated with this TextComponent. + * 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) + accessibleContext = new AccessibleAWTTextComponent(); + return accessibleContext; + } + + /*******************************/ // Provide AccessibleAWTTextComponent access to several peer functions that // aren't publicly exposed. diff --git a/libjava/java/awt/Toolkit.java b/libjava/java/awt/Toolkit.java index 504572a..f1925a2 100644 --- a/libjava/java/awt/Toolkit.java +++ b/libjava/java/awt/Toolkit.java @@ -526,6 +526,10 @@ public abstract class Toolkit toolkit = (Toolkit) obj; return toolkit; } + catch (ThreadDeath death) + { + throw death; + } catch (Throwable t) { AWTError e = new AWTError("Cannot load AWT toolkit: " + toolkit_name); diff --git a/libjava/java/awt/Window.java b/libjava/java/awt/Window.java index d084bb4..786e51a 100644 --- a/libjava/java/awt/Window.java +++ b/libjava/java/awt/Window.java @@ -56,6 +56,9 @@ import java.util.Vector; import javax.accessibility.Accessible; import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleState; +import javax.accessibility.AccessibleStateSet; /** * This class represents a top-level window with no decorations. @@ -84,11 +87,26 @@ public class Window extends Container implements Accessible private transient WindowFocusListener windowFocusListener; private transient WindowStateListener windowStateListener; private transient GraphicsConfiguration graphicsConfiguration; - private transient AccessibleContext accessibleContext; private transient boolean shown; private transient Component windowFocusOwner; + + protected class AccessibleAWTWindow extends AccessibleAWTContainer + { + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.WINDOW; + } + + public AccessibleStateSet getAccessibleStateSet() + { + AccessibleStateSet states = super.getAccessibleStateSet(); + if (isActive()) + states.add(AccessibleState.ACTIVE); + return states; + } + } /** * This (package access) constructor is used by subclasses that want @@ -200,12 +218,11 @@ public class Window extends Container implements Accessible && gc.getDevice().getType() != GraphicsDevice.TYPE_RASTER_SCREEN) throw new IllegalArgumentException ("gc must be from a screen device"); - // FIXME: until we implement this, it just causes AWT to crash. -// if (gc == null) -// graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment() -// .getDefaultScreenDevice() -// .getDefaultConfiguration(); -// else + if (gc == null) + graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment() + .getDefaultScreenDevice() + .getDefaultConfiguration(); + else graphicsConfiguration = gc; } @@ -672,8 +689,34 @@ public class Window extends Container implements Accessible } } } + + /** + * Identifies if this window is active. The active window is a Frame or + * Dialog that has focus or owns the active window. + * + * @return true if active, else false. + * @since 1.4 + */ + public boolean isActive() + { + KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager (); + return manager.getActiveWindow() == this; + } /** + * Identifies if this window is focused. A window is focused if it is the + * focus owner or it contains the focus owner. + * + * @return true if focused, else false. + * @since 1.4 + */ + public boolean isFocused() + { + KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager (); + return manager.getFocusedWindow() == this; + } + + /** * Returns the child window that has focus if this window is active. * This method returns null if this window is not active * or no children have focus. @@ -731,6 +774,22 @@ public class Window extends Container implements Accessible return super.isShowing(); } + public void setLocationRelativeTo (Component c) + { + if (c == null || !c.isShowing ()) + { + int x = 0; + int y = 0; + + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); + Point center = ge.getCenterPoint (); + x = center.x - (width / 2); + y = center.y - (height / 2); + setLocation (x, y); + } + // FIXME: handle case where component is non-null. + } + /** * @since 1.2 * @@ -754,11 +813,18 @@ public class Window extends Container implements Accessible applyResourceBundle(rb); } + /** + * Gets the AccessibleContext associated with this Window. + * The context is created, if necessary. + * + * @return the associated context + */ public AccessibleContext getAccessibleContext() { - // FIXME - //return null; - throw new Error ("Not implemented"); + /* Create the context if this is the first request */ + if (accessibleContext == null) + accessibleContext = new AccessibleAWTWindow(); + return accessibleContext; } /** @@ -866,13 +932,13 @@ public class Window extends Container implements Accessible this.y = y; width = w; height = h; - if (resized) + if (resized && isShowing ()) { ComponentEvent ce = new ComponentEvent(this, ComponentEvent.COMPONENT_RESIZED); getToolkit().getSystemEventQueue().postEvent(ce); } - if (moved) + if (moved && isShowing ()) { ComponentEvent ce = new ComponentEvent(this, ComponentEvent.COMPONENT_MOVED); diff --git a/libjava/java/awt/color/ICC_Profile.java b/libjava/java/awt/color/ICC_Profile.java index 79aa886..b84eb96 100644 --- a/libjava/java/awt/color/ICC_Profile.java +++ b/libjava/java/awt/color/ICC_Profile.java @@ -316,8 +316,6 @@ public class ICC_Profile implements Serializable */ protected void finalize() { - header = null; - tagTable = null; } /** diff --git a/libjava/java/awt/dnd/DnDConstants.java b/libjava/java/awt/dnd/DnDConstants.java index 3e78121..a64fa5a 100644 --- a/libjava/java/awt/dnd/DnDConstants.java +++ b/libjava/java/awt/dnd/DnDConstants.java @@ -1,5 +1,5 @@ /* DnDConstants.java -- constants for drag-and-drop operations - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -69,4 +69,9 @@ public final class DnDConstants /** A synonym for {@link #ACTION_LINK}. */ public static final int ACTION_REFERENCE = ACTION_LINK; -} // class DnDConstants + + private DnDConstants() + { + // Do nothing here. + } +} diff --git a/libjava/java/awt/dnd/DropTarget.java b/libjava/java/awt/dnd/DropTarget.java index 7379ca7..2a8b79d 100644 --- a/libjava/java/awt/dnd/DropTarget.java +++ b/libjava/java/awt/dnd/DropTarget.java @@ -205,15 +205,14 @@ public class DropTarget /** * Adds a new DropTargetListener. * - * @exception TooManyListenersException If there is already a - * DropTargetListener. + * @exception TooManyListenersException Sun's JDK does not, despite + * documentation, throw this exception here when you install an additional + * DropTargetListener. So to be compatible, we do the same + * thing. */ public void addDropTargetListener (DropTargetListener dtl) throws TooManyListenersException { - if (dtl != null) - throw new TooManyListenersException (); - dropTargetListener = dtl; } diff --git a/libjava/java/awt/geom/Area.java b/libjava/java/awt/geom/Area.java index 9b1b9d3..68f905f 100644 --- a/libjava/java/awt/geom/Area.java +++ b/libjava/java/awt/geom/Area.java @@ -2631,11 +2631,9 @@ public class Area implements Shape, Cloneable double P = (y2 - 2 * y1 + y0); double Q = 2 * (y1 - y0); - double R = y0; double A = (x2 - 2 * x1 + x0); double B = 2 * (x1 - x0); - double C = x0; double area = (B * P - A * Q) / 3.0; return (area); @@ -2937,12 +2935,10 @@ public class Area implements Shape, Cloneable double P = y3 - 3 * y2 + 3 * y1 - y0; double Q = 3 * (y2 + y0 - 2 * y1); double R = 3 * (y1 - y0); - double S = y0; double A = x3 - 3 * x2 + 3 * x1 - x0; double B = 3 * (x2 + x0 - 2 * x1); double C = 3 * (x1 - x0); - double D = x0; double area = (B * P - A * Q) / 5.0 + (C * P - A * R) / 2.0 + (C * Q - B * R) / 3.0; diff --git a/libjava/java/awt/geom/Rectangle2D.java b/libjava/java/awt/geom/Rectangle2D.java index bd1a37c..d8217fe 100644 --- a/libjava/java/awt/geom/Rectangle2D.java +++ b/libjava/java/awt/geom/Rectangle2D.java @@ -1,5 +1,5 @@ /* Rectangle2D.java -- generic rectangles in 2-D space - Copyright (C) 2000, 2001, 2002 Free Software Foundation + Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation This file is part of GNU Classpath. @@ -57,30 +57,30 @@ import java.util.NoSuchElementException; public abstract class Rectangle2D extends RectangularShape { /** - * The point lies left of the rectangle (p.x < r.x). + * The point lies left of the rectangle (p.x < r.x). * - * @see #outcode() + * @see #outcode(double, double) */ public static final int OUT_LEFT = 1; /** - * The point lies above the rectangle (p.y < r.y). + * The point lies above the rectangle (p.y < r.y). * - * @see #outcode() + * @see #outcode(double, double) */ public static final int OUT_TOP = 2; /** * The point lies right of the rectangle (p.x > r.maxX). * - * @see #outcode() + * @see #outcode(double, double) */ public static final int OUT_RIGHT = 4; /** * The point lies below of the rectangle (p.y > r.maxY). * - * @see #outcode() + * @see #outcode(double, double) */ public static final int OUT_BOTTOM = 8; diff --git a/libjava/java/awt/im/InputContext.java b/libjava/java/awt/im/InputContext.java index 04e70e3..fc068c2 100644 --- a/libjava/java/awt/im/InputContext.java +++ b/libjava/java/awt/im/InputContext.java @@ -102,8 +102,8 @@ public class InputContext while (e.hasMoreElements()) { URL url = (URL) e.nextElement(); - BufferedReader in = null; - String line = null; + BufferedReader in; + String line; try { in = new BufferedReader diff --git a/libjava/java/awt/image/IndexColorModel.java b/libjava/java/awt/image/IndexColorModel.java index 6791589..e4ccc54 100644 --- a/libjava/java/awt/image/IndexColorModel.java +++ b/libjava/java/awt/image/IndexColorModel.java @@ -125,7 +125,9 @@ public class IndexColorModel extends ColorModel public IndexColorModel(int bits, int size, byte[] reds, byte[] greens, byte[] blues, byte[] alphas) { - super (bits); + // FIXME: This super() constructor should not be used since it can give + // the wrong value for hasAlpha() which is final and cannot be overloaded + super(bits); map_size = size; opaque = (alphas == null); @@ -416,10 +418,10 @@ public class IndexColorModel extends ColorModel */ public final int getAlpha (int pixel) { - if (pixel < map_size) - return (int) ((generateMask (3) & rgb[pixel]) >> (3 * pixel_bits)); - - return 0; + if (opaque || pixel >= map_size) + return 255; + + return (int) ((generateMask (3) & rgb[pixel]) >> (3 * pixel_bits)); } /** diff --git a/libjava/java/awt/image/MemoryImageSource.java b/libjava/java/awt/image/MemoryImageSource.java index 07e42cf..6b43d00 100644 --- a/libjava/java/awt/image/MemoryImageSource.java +++ b/libjava/java/awt/image/MemoryImageSource.java @@ -1,4 +1,4 @@ -/* MemoryImageSource.java -- Java class for providing image data +/* MemoryImageSource.java -- Java class for providing image data Copyright (C) 1999, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -41,335 +41,333 @@ package java.awt.image; import java.util.Hashtable; import java.util.Vector; -public class MemoryImageSource implements ImageProducer +public class MemoryImageSource implements ImageProducer { - private boolean animated = false; - private boolean fullbuffers = false; - private int pixeli[], width, height, offset, scansize; - private byte pixelb[]; - private ColorModel cm; - private Hashtable props = new Hashtable(); - private Vector consumers = new Vector(); - - /** - * Construct an image producer that reads image data from a byte - * array. - * - * @param w width of image - * @param h height of image - * @param cm the color model used to represent pixel values - * @param pix a byte array of pixel values - * @param off the offset into the array at which the first pixel is stored - * @param scan the number of array elements that represents a single pixel row - */ - public MemoryImageSource(int w, int h, ColorModel cm, - byte pix[], int off, int scan) - { - this ( w, h, cm, pix, off, scan, null ); - } - /** - Constructs an ImageProducer from memory - */ - public MemoryImageSource( int w, int h, ColorModel cm, - byte pix[], int off, int scan, - Hashtable props) - { - width = w; - height = h; - this.cm = cm; - offset = off; - scansize = scan; - this.props = props; - int max = (( scansize > width ) ? scansize : width ); - pixelb = pix; - } - /** - * Construct an image producer that reads image data from an - * integer array. - * - * @param w width of image - * @param h height of image - * @param cm the color model used to represent pixel values - * @param pix an integer array of pixel values - * @param off the offset into the array at which the first pixel is stored - * @param scan the number of array elements that represents a single pixel row - */ - public MemoryImageSource(int w, int h, ColorModel cm, - int pix[], int off, int scan) - { - this ( w, h, cm, pix, off, scan, null ); - } - - /** - Constructs an ImageProducer from memory - */ - public MemoryImageSource(int w, int h, ColorModel cm, - int pix[], int off, int scan, - Hashtable props) - { - width = w; - height = h; - this.cm = cm; - offset = off; - scansize = scan; - this.props = props; - int max = (( scansize > width ) ? scansize : width ); - pixeli = pix; - } - /** - Constructs an ImageProducer from memory using the default RGB ColorModel - */ - public MemoryImageSource(int w, int h, - int pix[], int off, int scan, - Hashtable props) - { - this ( w, h, ColorModel.getRGBdefault(), pix, off, scan, props); - } - - /** - Constructs an ImageProducer from memory using the default RGB ColorModel - */ - public MemoryImageSource(int w, int h, - int pix[], int off, int scan) - { - this ( w, h, ColorModel.getRGBdefault(), pix, off, scan, null); - } - - /** - * Used to register an ImageConsumer with this - * ImageProducer. - */ - public synchronized void addConsumer(ImageConsumer ic) { - if (consumers.contains(ic)) - return; - - consumers.addElement(ic); - } - - /** - * Used to determine if the given ImageConsumer is - * already registered with this ImageProducer. - */ - public synchronized boolean isConsumer(ImageConsumer ic) { - if (consumers.contains(ic)) - return true; - return false; - } - - /** - * Used to remove an ImageConsumer from the list of - * registered consumers for this ImageProducer. - */ - public synchronized void removeConsumer(ImageConsumer ic) { - consumers.removeElement(ic); - } - - /** - * Used to register an ImageConsumer with this - * ImageProducer and then immediately start - * reconstruction of the image data to be delivered to all - * registered consumers. - */ - public void startProduction(ImageConsumer ic) { - if (!(consumers.contains(ic))) { - consumers.addElement(ic); - } - + private boolean animated = false; + private boolean fullbuffers = false; + private int[] pixeli; + private int width; + private int height; + private int offset; + private int scansize; + private byte[] pixelb; + private ColorModel cm; + private Hashtable props = new Hashtable(); + private Vector consumers = new Vector(); + + /** + * Construct an image producer that reads image data from a byte + * array. + * + * @param w width of image + * @param h height of image + * @param cm the color model used to represent pixel values + * @param pix a byte array of pixel values + * @param off the offset into the array at which the first pixel is stored + * @param scan the number of array elements that represents a single pixel row + */ + public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, + int scan) + { + this(w, h, cm, pix, off, scan, null); + } + + /** + * Constructs an ImageProducer from memory + */ + public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, + int scan, Hashtable props) + { + width = w; + height = h; + this.cm = cm; + offset = off; + scansize = scan; + this.props = props; + int max = ((scansize > width) ? scansize : width); + pixelb = pix; + } + + /** + * Construct an image producer that reads image data from an + * integer array. + * + * @param w width of image + * @param h height of image + * @param cm the color model used to represent pixel values + * @param pix an integer array of pixel values + * @param off the offset into the array at which the first pixel is stored + * @param scan the number of array elements that represents a single pixel row + */ + public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, + int scan) + { + this(w, h, cm, pix, off, scan, null); + } + + /** + Constructs an ImageProducer from memory + */ + public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, + int scan, Hashtable props) + { + width = w; + height = h; + this.cm = cm; + offset = off; + scansize = scan; + this.props = props; + int max = ((scansize > width) ? scansize : width); + pixeli = pix; + } + + /** + * Constructs an ImageProducer from memory using the default RGB ColorModel + */ + public MemoryImageSource(int w, int h, int[] pix, int off, int scan, + Hashtable props) + { + this(w, h, ColorModel.getRGBdefault(), pix, off, scan, props); + } + + /** + * Constructs an ImageProducer from memory using the default RGB ColorModel + */ + public MemoryImageSource(int w, int h, int[] pix, int off, int scan) + { + this(w, h, ColorModel.getRGBdefault(), pix, off, scan, null); + } + + /** + * Used to register an ImageConsumer with this + * ImageProducer. + */ + public synchronized void addConsumer(ImageConsumer ic) + { + if (consumers.contains(ic)) + return; + + consumers.addElement(ic); + } + + /** + * Used to determine if the given ImageConsumer is + * already registered with this ImageProducer. + */ + public synchronized boolean isConsumer(ImageConsumer ic) + { + if (consumers.contains(ic)) + return true; + return false; + } + + /** + * Used to remove an ImageConsumer from the list of + * registered consumers for this ImageProducer. + */ + public synchronized void removeConsumer(ImageConsumer ic) + { + consumers.removeElement(ic); + } + + /** + * Used to register an ImageConsumer with this + * ImageProducer and then immediately start + * reconstruction of the image data to be delivered to all + * registered consumers. + */ + public void startProduction(ImageConsumer ic) + { + if (! (consumers.contains(ic))) + consumers.addElement(ic); + + Vector list = (Vector) consumers.clone(); + for (int i = 0; i < list.size(); i++) + { + ic = (ImageConsumer) list.elementAt(i); + sendPicture(ic); + if (animated) + ic.imageComplete(ImageConsumer.SINGLEFRAME); + else + ic.imageComplete(ImageConsumer.STATICIMAGEDONE); + } + } + + /** + * Used to register an ImageConsumer with this + * ImageProducer and then request that this producer + * resend the image data in the order top-down, left-right. + */ + public void requestTopDownLeftRightResend(ImageConsumer ic) + { + startProduction(ic); + } + + /** + * Changes a flag to indicate whether this MemoryImageSource supports + * animations. + * + * @param animated A flag indicating whether this class supports animations + */ + public synchronized void setAnimated(boolean animated) + { + this.animated = animated; + } + + /** + * A flag to indicate whether or not to send full buffer updates when + * sending animation. If this flag is set then full buffers are sent + * in the newPixels methods instead of just regions. + * + * @param fullbuffers - a flag indicating whether to send the full buffers + */ + public synchronized void setFullBufferUpdates(boolean fullbuffers) + { + this.fullbuffers = fullbuffers; + } + + /** + * Send an animation frame to the image consumers. + */ + public void newPixels() + { + if (animated == true) + { + ImageConsumer ic; Vector list = (Vector) consumers.clone(); - for(int i = 0; i < list.size(); i++) { + for (int i = 0; i < list.size(); i++) + { ic = (ImageConsumer) list.elementAt(i); - sendPicture( ic ); - if (animated) - ic.imageComplete( ImageConsumer.SINGLEFRAME ); - else - ic.imageComplete( ImageConsumer.STATICIMAGEDONE ); - } - } - - /** - * Used to register an ImageConsumer with this - * ImageProducer and then request that this producer - * resend the image data in the order top-down, left-right. - */ - public void requestTopDownLeftRightResend(ImageConsumer ic) { - startProduction ( ic ); - } - - - /** - Changes a flag to indicate whether this MemoryImageSource supports - animations. - - @param animated A flag indicating whether this class supports animations - */ - public synchronized void setAnimated(boolean animated) - { - this.animated = animated; - } - - - /** - A flag to indicate whether or not to send full buffer updates when - sending animation. If this flag is set then full buffers are sent - in the newPixels methods instead of just regions. - - @param fullbuffers - a flag indicating whether to send the full buffers - */ - public synchronized void setFullBufferUpdates(boolean fullbuffers) - { - this.fullbuffers = fullbuffers; - } - - /** - Send an animation frame to the image consumers. - */ - public void newPixels() - { - if( animated == true ) { - ImageConsumer ic; - Vector list = (Vector) consumers.clone(); - for(int i = 0; i < list.size(); i++) { - ic = (ImageConsumer) list.elementAt(i); - sendPicture( ic ); - ic.imageComplete( ImageConsumer.SINGLEFRAME ); - } - } - } - - - private void sendPicture ( ImageConsumer ic ) - { - ic.setHints( ImageConsumer.TOPDOWNLEFTRIGHT ); - if( props != null ) { - ic.setProperties( props ); - } - ic.setDimensions(width, height); - ic.setColorModel(cm); - if( pixeli != null ) { - ic.setPixels( 0, 0, width, height, cm, pixeli, offset, scansize ); - } else { - ic.setPixels( 0, 0, width, height, cm, pixelb, offset, scansize ); - } - } - - /** - Send an animation frame to the image consumers containing the specified - pixels unless setFullBufferUpdates is set. - */ - public synchronized void newPixels(int x, - int y, - int w, - int h) - { - if( animated == true ) - { - if( fullbuffers ) { - newPixels(); - } else { - ImageConsumer ic; - Vector list = (Vector) consumers.clone(); - for(int i = 0; i < list.size(); i++) { - ic = (ImageConsumer) list.elementAt(i); - ic.setHints( ImageConsumer.TOPDOWNLEFTRIGHT ); - if( props != null ) { - ic.setProperties( props ); - } - if( pixeli != null ) { - int[] pixelbuf = new int[w * h]; - for (int row = y; row < y + h; row++) - System.arraycopy(pixeli, row * scansize + x + offset, pixelbuf, 0, w * h); - ic.setPixels( x, y, w, h, cm, pixelbuf, 0, w ); - } else { - byte[] pixelbuf = new byte[w * h]; - for (int row = y; row < y + h; row++) - System.arraycopy(pixelb, row * scansize + x + offset, pixelbuf, 0, w * h); - - ic.setPixels( x, y, w, h, cm, pixelbuf, 0, w ); - } - ic.imageComplete( ImageConsumer.SINGLEFRAME ); - } - } - } - } - - - - /** - Send an animation frame to the image consumers containing the specified - pixels unless setFullBufferUpdates is set. - - If framenotify is set then a notification is sent when the frame - is sent otherwise no status is sent. - */ - public synchronized void newPixels(int x, - int y, - int w, - int h, - boolean framenotify) - { - if( animated == true ) - { - if( fullbuffers ) { - newPixels(); - } else { - ImageConsumer ic; - Vector list = (Vector) consumers.clone(); - for(int i = 0; i < list.size(); i++) { - ic = (ImageConsumer) list.elementAt(i); - ic.setHints( ImageConsumer.TOPDOWNLEFTRIGHT ); - if( props != null ) { - ic.setProperties( props ); - } - if( pixeli != null ) { - int[] pixelbuf = new int[w * h]; - for (int row = y; row < y + h; row++) - System.arraycopy(pixeli, row * scansize + x + offset, pixelbuf, 0, w * h); - ic.setPixels( x, y, w, h, cm, pixelbuf, 0, w ); - } else { - byte[] pixelbuf = new byte[w * h]; - for (int row = y; row < y + h; row++) - System.arraycopy(pixelb, row * scansize + x + offset, pixelbuf, 0, w * h); - ic.setPixels( x, y, w, h, cm, pixelbuf, 0, w ); - } - if( framenotify == true ) - ic.imageComplete( ImageConsumer.SINGLEFRAME ); - } - } - } - } - - public synchronized void newPixels(byte newpix[], - ColorModel newmodel, - int offset, - int scansize) - - { - pixeli = null; - pixelb = newpix; - cm = newmodel; - this.offset = offset; - this.scansize = scansize; - if( animated == true ) - { - newPixels(); - } - } - - public synchronized void newPixels(int newpix[], - ColorModel newmodel, - int offset, - int scansize) - - { - pixelb = null; - pixeli = newpix; - cm = newmodel; - this.offset = offset; - this.scansize = scansize; - if( animated == true ) - { - newPixels(); - } - } - + sendPicture(ic); + ic.imageComplete(ImageConsumer.SINGLEFRAME); + } + } + } + + private void sendPicture(ImageConsumer ic) + { + ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT); + if (props != null) + ic.setProperties(props); + ic.setDimensions(width, height); + ic.setColorModel(cm); + if (pixeli != null) + ic.setPixels(0, 0, width, height, cm, pixeli, offset, scansize); + else + ic.setPixels(0, 0, width, height, cm, pixelb, offset, scansize); + } + + /** + * Send an animation frame to the image consumers containing the specified + * pixels unless setFullBufferUpdates is set. + */ + public synchronized void newPixels(int x, int y, int w, int h) + { + if (animated == true) + { + if (fullbuffers) + newPixels(); + else + { + ImageConsumer ic; + Vector list = (Vector) consumers.clone(); + for (int i = 0; i < list.size(); i++) + { + ic = (ImageConsumer) list.elementAt(i); + ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT); + if (props != null) + ic.setProperties(props); + if (pixeli != null) + { + int[] pixelbuf = new int[w * h]; + for (int row = y; row < y + h; row++) + System.arraycopy(pixeli, row * scansize + x + offset, + pixelbuf, 0, w * h); + ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w); + } + else + { + byte[] pixelbuf = new byte[w * h]; + for (int row = y; row < y + h; row++) + System.arraycopy(pixelb, row * scansize + x + offset, + pixelbuf, 0, w * h); + + ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w); + } + ic.imageComplete(ImageConsumer.SINGLEFRAME); + } + } + } + } + + /** + * Send an animation frame to the image consumers containing the specified + * pixels unless setFullBufferUpdates is set. + * + * If framenotify is set then a notification is sent when the frame + * is sent otherwise no status is sent. + */ + public synchronized void newPixels(int x, int y, int w, int h, + boolean framenotify) + { + if (animated == true) + { + if (fullbuffers) + newPixels(); + else + { + ImageConsumer ic; + Vector list = (Vector) consumers.clone(); + for (int i = 0; i < list.size(); i++) + { + ic = (ImageConsumer) list.elementAt(i); + ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT); + if (props != null) + ic.setProperties(props); + if (pixeli != null) + { + int[] pixelbuf = new int[w * h]; + for (int row = y; row < y + h; row++) + System.arraycopy(pixeli, row * scansize + x + offset, + pixelbuf, 0, w * h); + ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w); + } + else + { + byte[] pixelbuf = new byte[w * h]; + for (int row = y; row < y + h; row++) + System.arraycopy(pixelb, row * scansize + x + offset, + pixelbuf, 0, w * h); + ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w); + } + if (framenotify == true) + ic.imageComplete(ImageConsumer.SINGLEFRAME); + } + } + } + } + + public synchronized void newPixels(byte[] newpix, ColorModel newmodel, + int offset, int scansize) + { + pixeli = null; + pixelb = newpix; + cm = newmodel; + this.offset = offset; + this.scansize = scansize; + if (animated == true) + newPixels(); + } + + public synchronized void newPixels(int[] newpix, ColorModel newmodel, + int offset, int scansize) + { + pixelb = null; + pixeli = newpix; + cm = newmodel; + this.offset = offset; + this.scansize = scansize; + if (animated == true) + newPixels(); + } } diff --git a/libjava/java/awt/image/MultiPixelPackedSampleModel.java b/libjava/java/awt/image/MultiPixelPackedSampleModel.java index 0525d37..6d5f284 100644 --- a/libjava/java/awt/image/MultiPixelPackedSampleModel.java +++ b/libjava/java/awt/image/MultiPixelPackedSampleModel.java @@ -59,7 +59,7 @@ public class MultiPixelPackedSampleModel extends SampleModel public MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits) { - this(dataType, w, h, 0, numberOfBits, 0); + this(dataType, w, h, numberOfBits, 0, 0); } public MultiPixelPackedSampleModel(int dataType, int w, int h, @@ -101,7 +101,7 @@ public class MultiPixelPackedSampleModel extends SampleModel // Compute scan line large enough for w pixels. if (scanlineStride == 0) - scanlineStride = ((dataBitOffset + w * numberOfBits) / elemBits) + 1; + scanlineStride = ((dataBitOffset + w * numberOfBits) / elemBits); this.scanlineStride = scanlineStride; @@ -112,8 +112,9 @@ public class MultiPixelPackedSampleModel extends SampleModel bitOffsets = new int[numElems]; for (int i=0; i < numElems; i++) { - bitOffsets[i] = numberOfBits * i; - bitMasks[i] = ((1 << numberOfBits) - 1) << bitOffsets[i]; + bitOffsets[numElems - i- 1] = numberOfBits * i; + bitMasks[numElems - i - 1] = ((1 << numberOfBits) - 1) << + bitOffsets[numElems - i - 1]; } } diff --git a/libjava/java/awt/image/RGBImageFilter.java b/libjava/java/awt/image/RGBImageFilter.java index 0fd977e..b613c1b 100644 --- a/libjava/java/awt/image/RGBImageFilter.java +++ b/libjava/java/awt/image/RGBImageFilter.java @@ -83,7 +83,7 @@ public abstract class RGBImageFilter extends ImageFilter } else { consumer.setColorModel(ColorModel.getRGBdefault()); - } + } } /** diff --git a/libjava/java/awt/image/ReplicateScaleFilter.java b/libjava/java/awt/image/ReplicateScaleFilter.java index a572da7..091909d 100644 --- a/libjava/java/awt/image/ReplicateScaleFilter.java +++ b/libjava/java/awt/image/ReplicateScaleFilter.java @@ -201,10 +201,10 @@ public class ReplicateScaleFilter extends ImageFilter model, destPixels, 0, destScansize); } - protected byte[] replicatePixels(int srcx, int srcy, int srcw, int srch, - ColorModel model, byte[] srcPixels, - int srcOffset, int srcScansize, - double rx, double ry, int destScansize) + private byte[] replicatePixels(int srcx, int srcy, int srcw, int srch, + ColorModel model, byte[] srcPixels, + int srcOffset, int srcScansize, + double rx, double ry, int destScansize) { byte[] destPixels = new byte[(int) Math.ceil(srcw/rx) * (int) Math.ceil(srch/ry)]; @@ -221,10 +221,10 @@ public class ReplicateScaleFilter extends ImageFilter return destPixels; } - protected int[] replicatePixels(int srcx, int srcy, int srcw, int srch, - ColorModel model, int[] srcPixels, - int srcOffset, int srcScansize, - double rx, double ry, int destScansize) + private int[] replicatePixels(int srcx, int srcy, int srcw, int srch, + ColorModel model, int[] srcPixels, + int srcOffset, int srcScansize, + double rx, double ry, int destScansize) { int[] destPixels = new int[(int) Math.ceil(srcw/rx) * (int) Math.ceil(srch/ry)]; diff --git a/libjava/java/awt/peer/RobotPeer.java b/libjava/java/awt/peer/RobotPeer.java index 2daa14d..a187fc0 100644 --- a/libjava/java/awt/peer/RobotPeer.java +++ b/libjava/java/awt/peer/RobotPeer.java @@ -43,12 +43,12 @@ import java.awt.Rectangle; public interface RobotPeer { void mouseMove (int x, int y); - void mousePress (int x); - void mouseRelease (int x); - void mouseWheel (int x); - void keyPress (int x); - void keyRelease (int x); + void mousePress (int buttons); + void mouseRelease (int buttons); + void mouseWheel (int wheelAmt); + void keyPress (int keycode); + void keyRelease (int keycode); int getRGBPixel (int x, int y); - int[] getRGBPixels (Rectangle r); + int[] getRGBPixels (Rectangle screen); } // interface RobotPeer diff --git a/libjava/java/awt/print/Book.java b/libjava/java/awt/print/Book.java index 9bdd7d6..41f360b 100644 --- a/libjava/java/awt/print/Book.java +++ b/libjava/java/awt/print/Book.java @@ -1,5 +1,5 @@ /* Book.java -- A mixed group of pages to print. - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -41,146 +41,119 @@ package java.awt.print; import java.util.Vector; /** - * This class allows documents to be created with different paper types, - * page formatters, and painters. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - */ -public class Book implements Pageable -{ - -/* - * Instance Variables - */ - -// Painter objects for the book -Vector printables = new Vector(); - -// Page formats for the book -Vector page_formats = new Vector(); - -/*************************************************************************/ - -/* - * Constructors + * This class allows documents to be created with different paper types, + * page formatters, and painters. + * + * @author Aaron M. Renn (arenn@urbanophile.com) */ - -/** - * Initializes a new instance of Book that is empty. - */ -public -Book() -{ - ; -} - -/*************************************************************************/ - -/** - * Returns the number of pages in this book. - * - * @return The number of pages in this book. - */ -public int -getNumberOfPages() -{ - return(printables.size()); -} - -/*************************************************************************/ - -/** - * This method returns the PageFormat object for the - * specified page. - * - * @param page_number The number of the page to get information for, where - * page numbers start at 0. - * - * @return The PageFormat object for the specified page. - * - * @exception IndexOutOfBoundsException If the page number is not valid. - */ -public PageFormat -getPageFormat(int page_number) -{ - return((PageFormat)page_formats.elementAt(page_number)); -} - -/*************************************************************************/ - -/** - * This method returns the Printable object for the - * specified page. - * - * @param page_number The number of the page to get information for, where - * page numbers start at 0. - * - * @return The Printable object for the specified page. - * - * @exception IndexOutOfBoundsException If the page number is not valid. - */ -public Printable -getPrintable(int page_number) -{ - return((Printable)printables.elementAt(page_number)); -} - -/*************************************************************************/ - -/** - * This method appends a page to the end of the book. - * - * @param printable The Printable for this page. - * @param page_format The PageFormat for this page. - * - * @exception NullPointerException If either argument is null. - */ -public void -append(Printable printable, PageFormat page_format) -{ - append(printable, page_format, 1); -} - -/*************************************************************************/ - -/** - * This method appends the specified number of pages to the end of the book. - * Each one will be associated with the specified Printable - * and PageFormat. - * - * @param printable The Printable for this page. - * @param page_format The PageFormat for this page. - * @param num_pages The number of pages to append. - * - * @exception NullPointerException If any argument is null. - */ -public void -append(Printable printable, PageFormat page_format, int num_pages) -{ - for (int i = 0; i < num_pages; i++) - { - printables.addElement(printable); - page_formats.addElement(page_format); - } -} - -/*************************************************************************/ - -/** - * This method changes the Printable and PageFormat - * for the specified page. The page must already exist or an exception - * will be thrown. - * - * @param page_num The page number to alter. - * @param printable The new Printable for the page. - * @param page_format The new PageFormat for the page. - * - * @throws IndexOutOfBoundsException If the specified page does not exist. - */ -public void -setPage(int page_num, Printable printable, PageFormat page_format) +public class Book implements Pageable { - printables.setElementAt(printable, page_num); - page_formats.setElementAt(page_format, page_num); -} + /** + * Painter objects for the book. + */ + Vector printables = new Vector(); + + /** + * Page formats for the book. + */ + Vector page_formats = new Vector(); + + /** + * Initializes a new instance of Book that is empty. + */ + public Book() + { + } + + /** + * Returns the number of pages in this book. + * + * @return The number of pages in this book. + */ + public int getNumberOfPages() + { + return printables.size(); + } + + /** + * This method returns the PageFormat object for the + * specified page. + * + * @param page_number The number of the page to get information for, where + * page numbers start at 0. + * + * @return The PageFormat object for the specified page. + * + * @exception IndexOutOfBoundsException If the page number is not valid. + */ + public PageFormat getPageFormat(int page_number) + { + return (PageFormat) page_formats.elementAt(page_number); + } + + /** + * This method returns the Printable object for the + * specified page. + * + * @param page_number The number of the page to get information for, where + * page numbers start at 0. + * + * @return The Printable object for the specified page. + * + * @exception IndexOutOfBoundsException If the page number is not valid. + */ + public Printable getPrintable(int page_number) + { + return (Printable) printables.elementAt(page_number); + } + + /** + * This method appends a page to the end of the book. + * + * @param printable The Printable for this page. + * @param page_format The PageFormat for this page. + * + * @exception NullPointerException If either argument is null. + */ + public void append(Printable printable, PageFormat page_format) + { + append(printable, page_format, 1); + } + + /** + * This method appends the specified number of pages to the end of the book. + * Each one will be associated with the specified Printable + * and PageFormat. + * + * @param printable The Printable for this page. + * @param page_format The PageFormat for this page. + * @param num_pages The number of pages to append. + * + * @exception NullPointerException If any argument is null. + */ + public void append(Printable printable, PageFormat page_format, int num_pages) + { + for (int i = 0; i < num_pages; i++) + { + printables.addElement(printable); + page_formats.addElement(page_format); + } + } + + /** + * This method changes the Printable and PageFormat + * for the specified page. The page must already exist or an exception + * will be thrown. + * + * @param page_num The page number to alter. + * @param printable The new Printable for the page. + * @param page_format The new PageFormat for the page. + * + * @throws IndexOutOfBoundsException If the specified page does not exist. + */ + public void setPage(int page_num, Printable printable, PageFormat page_format) + { + printables.setElementAt(printable, page_num); + page_formats.setElementAt(page_format, page_num); + } } diff --git a/libjava/java/awt/print/PrinterJob.java b/libjava/java/awt/print/PrinterJob.java index 8998aa0..bc5cfcd 100644 --- a/libjava/java/awt/print/PrinterJob.java +++ b/libjava/java/awt/print/PrinterJob.java @@ -1,5 +1,5 @@ /* PrinterJob.java -- This job is the printer control class - Copyright (C) 1999, 2004 Free Software Foundation, Inc. + Copyright (C) 1999, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,10 +38,9 @@ exception statement from your version. */ package java.awt.print; -import javax.print.DocFlavor; +import java.awt.HeadlessException; + import javax.print.PrintService; -import javax.print.PrintServiceLookup; -//import javax.print.StreamPrintServiceFactory; import javax.print.attribute.PrintRequestAttributeSet; /** @@ -61,7 +60,7 @@ public abstract class PrinterJob */ public static PrinterJob getPrinterJob() { - // FIXME: Need to fix this to load a default implementation instance. + // FIXME: Need to fix this to load a default implementation instance. return null; } @@ -149,7 +148,8 @@ public abstract class PrinterJob * * @return The modified PageFormat. */ - public abstract PageFormat pageDialog(PageFormat page_format); + public abstract PageFormat pageDialog(PageFormat page_format) + throws HeadlessException; /** * Prints the pages. @@ -169,7 +169,8 @@ public abstract class PrinterJob * @return false if the user cancels the dialog box, * true otherwise. */ - public abstract boolean printDialog(); + public abstract boolean printDialog() + throws HeadlessException; /** * Displays a dialog box to the user which allows the print job @@ -178,7 +179,8 @@ public abstract class PrinterJob * @return false if the user cancels the dialog box, * true otherwise. */ - public abstract boolean printDialog(PrintRequestAttributeSet attributes); + public abstract boolean printDialog(PrintRequestAttributeSet attributes) + throws HeadlessException; /** * This sets the pages that are to be printed. -- cgit v1.1