summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/java/awt
diff options
context:
space:
mode:
authorgraydon <graydon@138bc75d-0d04-0410-961f-82ee72b054a4>2005-02-16 20:03:29 +0000
committergraydon <graydon@138bc75d-0d04-0410-961f-82ee72b054a4>2005-02-16 20:03:29 +0000
commit9a88c53bf3f17897356531c943b1613f38a1f9d2 (patch)
treea4155758493cddf09d676b0715a4317059dda9dc /libjava/gnu/java/awt
parent1e89119c853abeb23c81639f8c93305c3b87bbe9 (diff)
downloadppe42-gcc-9a88c53bf3f17897356531c943b1613f38a1f9d2.tar.gz
ppe42-gcc-9a88c53bf3f17897356531c943b1613f38a1f9d2.zip
2005-02-15 Mark Wielaard <mark@klomp.org>
* java/awt/BasicStroke.java (hashCode): Check for null dash. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GtkArg.java, gnu/java/awt/peer/gtk/GtkArgList.java: Removed. 2005-02-15 Craig Black <craig.black@aonix.com> * 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_andrew@member.fsf.org> * 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 <mark@klomp.org> * 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 <green@redhat.com> * 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 <fitzsim@redhat.com> * 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 <konqueror@gmx.de> * 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 <fitzsim@redhat.com> * 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 <graydon@redhat.com> * Makefile.am: Fix library build breakage. * Makefile.in: Regenerate. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTabbedPane.java (Page.setDisplayedMnemonicIndex): Handle empty menmonic. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/tree/DefaultMutableTreeNode.java: Reworked Javadocs all over. (getPathToRoot): Fixed direction of result array initialization. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <craig.black@aonix.com> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <graydon@redhat.com> * 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 <graydon@redhat.com> * Makefile.am: Create "split library" structure. * Makefile.in: Regenerate. 2005-02-15 Graydon Hoare <graydon@redhat.com> * 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 <graydon@redhat.com> * 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 <gnu_andrew@member.fsf.org> * 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 <konqueror@gmx.de> * javax/swing/SwingUtilities.java (getFontMetrics): Removed. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * java/awt/dnd/DropTarget.java (addDropTargetListener): Clarified comments. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JComponent.java (getComponentGraphics): Removed accidently commited code. 2005-02-15 Graydon Hoare <graydon@redhat.com> * java/awt/dnd/DropTarget.java (addDropTargetListener): Despite documentation, do not throw. * javax/swing/JComponent.java: Set a default DropTarget. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/JTextField.java (postActionEvent): Use text in field when actionCommand is null. (getActionCommand): Removed. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/AbstractSet.java: Removed. * Makefile.am: Removed javax/swing/AbstractSet.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/Window.java (AccessibleWindow.getAccessibleStateSet): Fixed method name. * java/awt/dnd/DnDConstants.java (DnDConstants): New private constructor. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultCellRenderer.java: Removed. * Makefile.am: Removed javax/swing/DefaultCellRenderer.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <gnu_andrew@member.fsf.org> * 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 <graydon@redhat.com> Michael Koch <konqueror@gmx.de> * javax/swing/LayoutFocusTraversalPolicy.java, javax/swing/SortingFocusTraversalPolicy.java: New classes. * Makefile.am: Added new classes. * Makefike.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DebugGraphics.java: Mostly implemented. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/SwingUtilities.java (findFocusOwner): New method. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <gnu_andrew@member.fsf.org> * 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 <mark@klomp.org> * java/awt/BasicStroke.java (hashCode): Implement. (equals): Document. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/print/PrinterJob.java (pageDialog): Throws java.awt.HeadlessException. (printDialog): Likewise. 2005-02-15 Mark Wielaard <mark@klomp.org> * jni/gtk-peer/gtkpeer.h (gdk_env): Fix prototype. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTable.java (getValueAt): New method. * javax/swing/table/JTableHeader.java (columnAtPoint): New method. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTextField.java (actions): New field. (static): Initalize actions field. (getActions): New method. 2005-02-15 Andrew John Hughes <gnu_andrew@member.fsf.org> * 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 <sven@physto.se> * 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 <graydon@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (env_union): Use union to avoid type-punning warning. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultListSelectionModel.java (clone): New method. 2005-02-15 Mark Wielaard <mark@klomp.org> Reported by Martin Platter <motse@complang.tuwien.ac.at> * 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 <avdyk@gnu.org> * javax/swing/text/StringContent.java: New file. 2005-02-15 Michael Koch <konqueror@gmx.de> * Makefile.am: Added javax/swing/text/StringContent.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/ClasspathToolkit.java: Import statements reworked. (imageCache): Made it of type java.util.HashMap. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/imageio/stream/MemoryCacheImageInputStream.java: Reworked import statements. 2005-02-15 Graydon Hoare <graydon@redhat.com> * 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 <david.gilbert@object-refinery.com> * 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 <graydon@redhat.com> * 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 <graydon@redhat.com> * jni.cc (_Jv_JNI_RegisterNatives): Re-add sync, which was accidentally removed in last change. 2005-02-15 Michael Koch <konqueror@gmx.de> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c, gnu/java/awt/peer/gtk/GtkMainThread.java: Removed. 2005-02-15 Graydon Hoare <graydon@redhat.com> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/text/DefaultEditorKit.java (deinstall): Removed. (install): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/UIDefaults.java (put): Handle value of null. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <fitzsim@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c (nativeSetIconImageFromData): Re-add native implementation. 2005-02-15 David Gilbert <david.gilbert@object-refinery.com> * 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 <fitzsim@redhat.com> * libgcj.spec.in (lib): Add -l-javax-imageio. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * 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 <graydon@redhat.com> * 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 <fitzsim@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c (mouseWheel): Call XFlush. (keyPress): Likewise. (keyRelease): Likewise. 2005-02-15 Olga Rodimina <rodimina@redhat.com> * 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 <graydon@redhat.com> * 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 <konqueror@gmx.de> * javax/swing/plaf/metal/MetalLookAndFeel.java (getControlTextFont): New method. (getMenuTextFont): Likewise. (getSubTextFont): Likewise. (getSystemTextFont): Likewise. (getUserTextFont): Likewise. (getWindowTitleFont): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/AbstractDocument.java (documentFilter): New field. (getDocumentFilter): New method. (setDocumentFilter): Likewise. (dump): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTree.java (DynamicUtilTreeNode.hasChildren): Clarify javadoc. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/DefaultBoundedRangeModel.java (fireValueChanged): Fixed off-by-one error. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/LookAndFeel.java (getDesktopPropertyValue): New method. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTree.java (hasChildren): New instance field. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JComponent.java (getToolTipText): New method. (getTitledBorderText): Likewise. (getAccessibleKeyBinding): Likewise. (getVerifyInputWhenFocusTarget): Likewise. (setVerifyInputWhenFocusTarget): Likewise. (verifyInputWhenFocusTarget): New instance field. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultListSelectionModel.java (fireValueChanged): New method. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultBoundedRangeModel.java: Fixed javadocs all over. (fireStateChanged): Simplified. * javax/swing/BoundedRangeModel.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JRootPane.java (setMenuBar): Added @deprecated tag. (getMenuBar): Likewise. * javax/swing/JTable.java (sizeColumnsToFit): Likewise. 2005-02-15 Paul Jenner <psj.home@ntlworld.com> * javax/swing/ImageIcon.java (setImage): Implemented. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTable.java: Removed unused imports. 2005-02-15 Olga Rodimina <rodimina@redhat.com> (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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/JFormattedTextField.java (getFocusLostBehavior): Fixed typo in method name. (setFocusLostBehavior): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/TransferHandler.java: Reworked import statements. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/text/TextAction.java (getTextComponent): Simplified. Added Javadoc. (augmentList): Implemented. Added Javadoc. (getFocusedComponent): Added javadoc. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * java/awt/Scrollbar.java (AccessibleAWTScrollbar, getAccessibleContext): Implement. * java/awt/ScrollPane.java (AccessibleAWTScrollPane, getAccessibleContext): Implement. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * 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 <jlquinn@optonline.net> * java/awt/Window.java (AccessibleAWTWindow): Implement. (isActive, isFocused, getAccessibleContext): Implement. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * 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 <jlquinn@optonline.net> * java/awt/List.java: Implement AccessibleAWTList, AccessibleAWTListChild. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * java/awt/Choice.java: Add implements declaration for Accessible. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * javax/imageio/metadata/IIOInvalidTreeException.java: Use Node instead of Object. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * javax/imageio/metadata/IIOMetadataNode.java: Add Node to implemented interface list. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GtkComponentPeer.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GdkGraphics2D.java: More reformatting. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GdkGraphics2D.java: Reformatted. 2005-02-15 Jeroen Frijters <jeroen@frijters.net> * java/awt/EventDispatchThread.java, java/awt/Toolkit.java: Don't catch java.lang.ThreadDeath. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/PasswordView.java (drawEchoCharacter): Added javadoc. (drawSelectedText): Likewise. (drawUnselectedText): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JRootPane.java (windowDecorationStyle): New field. (setMenuBar): New method. (getMenuBar): Likewise. (getWindowDecorationStyle): Likewise. (setWindowDecorationStyle): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultListSelectionModel.java (leadAnchorNotificationEnabled): Made protected. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/InternalFrameFocusTraversalPolicy.java: New file. * Makefile.am: Added InternalFrameFocusTraversalPolicy.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/plaf/metal/MetalTheme.java (getControlTextColor): Return getControlInfo(). (getHighlightedTextColor): Return getControlTextColor(). 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/imageio/event/package.html, javax/imageio/metadata/package.html: New files. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/image/MemoryImageSource.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/tree/TreeCellEditor.java: Refomatted. 2005-02-15 Jeroen Frijters <jeroen@frijters.net> * java/awt/color/ICC_Profile.java (finalize): Removed pointless field assignments. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/text/DefaultStyledDocument.java: New file. * Makefile.am: Added javax/swing/text/DefaultStyledDocument.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JFileChooser.java (showDialog): Return CANCEL_OPTION for now. (showOpenDialog): Likewise. (showSaveDialog): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/JTextField.java (getPreferredSize): Re-implemented. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <thebohemian@gmx.net> * javax/swing/JComboBox.java: (JComboBox): Removed selection of the first item in the model. 2005-02-15 Robert Schuster <thebohemian@gmx.net> * 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 <konqueror@gmx.de> * 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 <rodimina@redhat.com> * 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 <konqueror@gmx.de> * javax/swing/JTable.java (addColumn): New method. (getColumnClass): Likewise. (getColumnName): Likewise. 2005-02-15 Paul Jenner <psj.home@ntlworld.com> * javax/swing/TransferHandler.java (createTransferable): Made protected. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/JTable.java (getIntercellSpacing): Fixed typo in method name. (setIntercellSpacing): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/JTextComponent.java (focusAccelerator): New variable. (getFocusAccelerator): New method. (setFocusAccelerator): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/JPasswordField.java: Updated javadocs. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/table/TableColumn.java: Added/fixed javadocs over all. (setHeaderValue): Simplified. Do nothing when old value == new value. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * 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 <konqueror@gmx.de> * 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 <graydon@redhat.com> * 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 <konqueror@gmx.de> * 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 <david.gilbert@object-refinery.com> * java/awt/Component.java, java/awt/geom/Rectangle2D.java: Javadoc fixes. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * java/awt/print/Book.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/geom/Area.java (QuadSegment.curveArea): Remove unused variables. (CubicSegment.curveArea): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * 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 <konqueror@gmx.de> * javax/swing/JLayeredPane.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/tree/DefaultMutableTreeNode.java: Completely Revised. * javax/swing/tree/MutableTreeNode.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JFormattedTextField.java (setDocument): Call setDocument of super class. Don't fire property change event. 2005-02-15 Sven de Marothy <sven@physto.se> * 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 <konqueror@gmx.de> * javax/swing/JList.java, javax/swing/JTree.java: Added much new methods and fixed much methods setting bound properties. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95115 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/java/awt')
-rw-r--r--libjava/gnu/java/awt/ClasspathToolkit.java17
-rw-r--r--libjava/gnu/java/awt/EmbeddedWindow.java1
-rw-r--r--libjava/gnu/java/awt/color/ClutProfileConverter.java1
-rw-r--r--libjava/gnu/java/awt/image/ImageDecoder.java42
-rw-r--r--libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java7
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java15
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java39
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java239
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGraphics.java3
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java1614
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java138
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java21
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java519
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java (renamed from libjava/gnu/java/awt/peer/gtk/GtkArg.java)59
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java (renamed from libjava/gnu/java/awt/peer/gtk/GtkArgList.java)47
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java1
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java1
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java13
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java1
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java18
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java4
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java4
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java1
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java11
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java8
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkMainThread.java111
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java1
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java5
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkToolkit.java82
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java15
36 files changed, 1777 insertions, 1273 deletions
diff --git a/libjava/gnu/java/awt/ClasspathToolkit.java b/libjava/gnu/java/awt/ClasspathToolkit.java
index de97c4a0edf..72302e11c30 100644
--- a/libjava/gnu/java/awt/ClasspathToolkit.java
+++ b/libjava/gnu/java/awt/ClasspathToolkit.java
@@ -41,16 +41,20 @@ package gnu.java.awt;
import gnu.java.awt.peer.ClasspathFontPeer;
import gnu.java.awt.peer.ClasspathTextLayoutPeer;
-import java.awt.Image;
+import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.DisplayMode;
+import java.awt.EventQueue;
import java.awt.Font;
import java.awt.FontMetrics;
+import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
+import java.awt.Image;
import java.awt.Toolkit;
import java.awt.font.FontRenderContext;
import java.awt.image.ColorModel;
import java.awt.image.ImageProducer;
+import java.awt.peer.RobotPeer;
import java.io.File;
import java.io.InputStream;
import java.net.MalformedURLException;
@@ -90,7 +94,7 @@ public abstract class ClasspathToolkit
* #getImage(java.net.URL)}. For images that were loaded via a path
* to an image file, the map contains a key with a file URL.
*/
- private Map imageCache;
+ private HashMap imageCache;
/**
@@ -169,7 +173,6 @@ public abstract class ClasspathToolkit
* this font peer should have, such as size, weight, family name, or
* transformation.
*/
-
public abstract ClasspathFontPeer getClasspathFontPeer (String name, Map attrs);
public abstract ClasspathTextLayoutPeer
@@ -184,7 +187,6 @@ public abstract class ClasspathToolkit
* implement {@link java.awt.font.OpenType} or
* {@link java.awt.font.MultipleMaster}.
*/
-
public Font getFont (String name, Map attrs)
{
return new Font (name, attrs);
@@ -350,6 +352,9 @@ public abstract class ClasspathToolkit
return null;
}
+ public abstract RobotPeer createRobot (GraphicsDevice screen)
+ throws AWTException;
+
/**
* Used to register ImageIO SPIs provided by the toolkit.
*/
@@ -357,4 +362,8 @@ public abstract class ClasspathToolkit
public void registerImageIOSpis(IIORegistry reg)
{
}
+
+ public abstract boolean nativeQueueEmpty();
+ public abstract void wakeNativeQueue();
+ public abstract void iterateNativeQueue(EventQueue locked, boolean block);
}
diff --git a/libjava/gnu/java/awt/EmbeddedWindow.java b/libjava/gnu/java/awt/EmbeddedWindow.java
index 08bc02755ea..c3cfac48b19 100644
--- a/libjava/gnu/java/awt/EmbeddedWindow.java
+++ b/libjava/gnu/java/awt/EmbeddedWindow.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.awt;
-import gnu.classpath.Configuration;
import gnu.java.awt.peer.EmbeddedWindowPeer;
import gnu.java.security.action.SetAccessibleAction;
diff --git a/libjava/gnu/java/awt/color/ClutProfileConverter.java b/libjava/gnu/java/awt/color/ClutProfileConverter.java
index d33a6887eec..5b06f48eed8 100644
--- a/libjava/gnu/java/awt/color/ClutProfileConverter.java
+++ b/libjava/gnu/java/awt/color/ClutProfileConverter.java
@@ -38,7 +38,6 @@
package gnu.java.awt.color;
-import java.awt.color.ColorSpace;
import java.awt.color.ICC_Profile;
diff --git a/libjava/gnu/java/awt/image/ImageDecoder.java b/libjava/gnu/java/awt/image/ImageDecoder.java
index 233dfb1b28d..d279d567467 100644
--- a/libjava/gnu/java/awt/image/ImageDecoder.java
+++ b/libjava/gnu/java/awt/image/ImageDecoder.java
@@ -74,6 +74,11 @@ public abstract class ImageDecoder implements ImageProducer
this.url = url;
}
+ public ImageDecoder (InputStream is)
+ {
+ this.input = is;
+ }
+
public ImageDecoder (byte[] imagedata, int imageoffset, int imagelength)
{
data = imagedata;
@@ -99,7 +104,7 @@ public abstract class ImageDecoder implements ImageProducer
public void startProduction (ImageConsumer ic)
{
if (!isConsumer(ic))
- addConsumer (ic);
+ addConsumer(ic);
Vector list = (Vector) consumers.clone ();
try
@@ -108,17 +113,30 @@ public abstract class ImageDecoder implements ImageProducer
// ImageDecoder constructors so that exceptions cause
// imageComplete to be called with an appropriate error
// status.
- if (url != null)
- input = url.openStream();
- else
- {
- if (filename != null)
- input = new FileInputStream (filename);
- else
- input = new ByteArrayInputStream (data, offset, length);
- }
-
- produce (list, input);
+ if (input == null)
+ {
+ try
+ {
+ if (url != null)
+ input = url.openStream();
+ else
+ {
+ if (filename != null)
+ input = new FileInputStream (filename);
+ else
+ input = new ByteArrayInputStream (data, offset, length);
+ }
+ produce (list, input);
+ }
+ finally
+ {
+ input = null;
+ }
+ }
+ else
+ {
+ produce (list, input);
+ }
}
catch (Exception e)
{
diff --git a/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java b/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
index 143412caf99..07b4b3eb403 100644
--- a/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
+++ b/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
@@ -38,19 +38,12 @@ exception statement from your version. */
package gnu.java.awt.peer;
-import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.font.TextHitInfo;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
-import java.text.CharacterIterator;
-import java.text.AttributedCharacterIterator;
-import java.text.AttributedString;
-import java.util.Map;
-import java.awt.font.TextAttribute;
-
/**
* @author Graydon Hoare
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java b/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java
index 3cd2f9a1cd2..e871587a4a9 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java
@@ -63,8 +63,6 @@ public class GdkFontMetrics extends FontMetrics
static final int TEXT_METRICS_X_ADVANCE = 4;
static final int TEXT_METRICS_Y_ADVANCE = 5;
- static native void getPeerFontMetrics(GdkFontPeer peer, double [] metrics);
- static native void getPeerTextMetrics(GdkFontPeer peer, String str, double [] metrics);
public GdkFontMetrics (Font font)
{
@@ -77,12 +75,7 @@ public class GdkFontMetrics extends FontMetrics
font_metrics = new int[5];
double [] hires = new double[5];
-
- if (GtkToolkit.useGraphics2D ())
- GdkGraphics2D.getPeerFontMetrics(peer, hires);
- else
- getPeerFontMetrics (peer, hires);
-
+ peer.getFontMetrics (hires);
for (int i = 0; i < 5; ++i)
font_metrics[i] = (int) hires[i];
}
@@ -90,10 +83,7 @@ public class GdkFontMetrics extends FontMetrics
public int stringWidth (String str)
{
double [] hires = new double[6];
- if (GtkToolkit.useGraphics2D())
- GdkGraphics2D.getPeerTextMetrics(peer, str, hires);
- else
- getPeerTextMetrics(peer, str, hires);
+ peer.getTextMetrics(str, hires);
return (int) hires [TEXT_METRICS_WIDTH];
}
@@ -115,7 +105,6 @@ public class GdkFontMetrics extends FontMetrics
public int getLeading ()
{
return 1;
-// return metrics[ASCENT] + metrics[DESCENT];
}
public int getAscent ()
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java b/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java
index ee051451026..5573a1b4d7f 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java
@@ -37,19 +37,21 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.peer.FontPeer;
-import java.awt.*;
-import java.awt.geom.*;
-import java.awt.font.*;
+
+import gnu.classpath.Configuration;
+import gnu.java.awt.peer.ClasspathFontPeer;
+
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.font.LineMetrics;
+import java.awt.geom.Rectangle2D;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
-import java.util.MissingResourceException;
import java.text.CharacterIterator;
-import java.text.AttributedCharacterIterator;
import java.text.StringCharacterIterator;
-import gnu.classpath.Configuration;
-import gnu.java.awt.peer.ClasspathFontPeer;
public class GdkFontPeer extends ClasspathFontPeer
{
@@ -81,6 +83,9 @@ public class GdkFontPeer extends ClasspathFontPeer
private native void dispose ();
private native void setFont (String family, int style, int size, boolean useGraphics2D);
+ native void getFontMetrics(double [] metrics);
+ native void getTextMetrics(String str, double [] metrics);
+
protected void finalize ()
{
if (GtkToolkit.useGraphics2D ())
@@ -158,26 +163,33 @@ public class GdkFontPeer extends ClasspathFontPeer
public boolean canDisplay (Font font, char c)
{
- throw new UnsupportedOperationException ();
+ // FIXME: inquire with pango
+ return true;
}
public int canDisplayUpTo (Font font, CharacterIterator i, int start, int limit)
{
- throw new UnsupportedOperationException ();
+ // FIXME: inquire with pango
+ return -1;
}
+
+ private native GdkGlyphVector getGlyphVector(String txt,
+ Font f,
+ FontRenderContext ctx);
public GlyphVector createGlyphVector (Font font,
FontRenderContext ctx,
CharacterIterator i)
{
- return new GdkGlyphVector(font, this, ctx, buildString (i));
+ return getGlyphVector(buildString (i), font, ctx);
}
public GlyphVector createGlyphVector (Font font,
FontRenderContext ctx,
int[] glyphCodes)
{
- return new GdkGlyphVector (font, this, ctx, glyphCodes);
+ return null;
+ // return new GdkGlyphVector (font, this, ctx, glyphCodes);
}
public byte getBaselineFor (Font font, char c)
@@ -259,7 +271,8 @@ public class GdkFontPeer extends ClasspathFontPeer
public Rectangle2D getStringBounds (Font font, CharacterIterator ci,
int begin, int limit, FontRenderContext frc)
{
- throw new UnsupportedOperationException ();
+ GdkGlyphVector gv = getGlyphVector(buildString (ci, begin, limit), font, frc);
+ return gv.getVisualBounds();
}
public boolean hasUniformLineMetrics (Font font)
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java b/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java
index c37de5274ac..4e66a86eb42 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java
@@ -38,8 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import gnu.classpath.Configuration;
-
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.Shape;
@@ -54,36 +52,57 @@ import java.awt.geom.Rectangle2D;
public class GdkGlyphVector extends GlyphVector
{
- static
+ /* We use a simple representation for glyph vectors here. Glyph i
+ * consumes 8 doubles:
+ *
+ * logical x: extents[ 10*i ]
+ * logical y: extents[ 10*i + 1 ]
+ * logical width: extents[ 10*i + 2 ]
+ * logical height: extents[ 10*i + 3 ]
+ *
+ * visual x: extents[ 10*i + 4 ]
+ * visual y: extents[ 10*i + 5 ]
+ * visual width: extents[ 10*i + 6 ]
+ * visual height: extents[ 10*i + 7 ]
+ *
+ * origin pos x: extents[ 10*i + 8 ]
+ * origin pos y: extents[ 10*i + 9 ]
+ *
+ * as well as one int, code[i], representing the glyph code in the font.
+ */
+
+ double [] extents;
+ int [] codes;
+
+ Font font;
+ FontRenderContext fontRenderContext;
+
+ Rectangle2D allLogical;
+ Rectangle2D allVisual;
+
+ public GdkGlyphVector(double[] extents, int[] codes, Font font, FontRenderContext frc)
{
- if (Configuration.INIT_LOAD_LIBRARY)
+ this.extents = extents;
+ this.codes = codes;
+ this.font = font;
+ this.fontRenderContext = frc;
+
+ allLogical = new Rectangle2D.Double();
+ allVisual = new Rectangle2D.Double();
+
+ for (int i = 0; i < codes.length; ++i)
{
- System.loadLibrary("gtkpeer");
+ allLogical.add (new Rectangle2D.Double(extents[10*i ] + extents[10*i + 8],
+ extents[10*i + 1] + extents[10*i + 9],
+ extents[10*i + 2],
+ extents[10*i + 3]));
+
+ allVisual.add (new Rectangle2D.Double(extents[10*i + 4] + extents[10*i + 8],
+ extents[10*i + 5] + extents[10*i + 9],
+ extents[10*i + 6],
+ extents[10*i + 7]));
}
-
- if (GtkToolkit.useGraphics2D ())
- initStaticState ();
}
- native static void initStaticState ();
- private final int native_state = GtkGenericPeer.getUniqueInteger ();
-
- private Font font;
- private FontRenderContext ctx;
-
- private native void initState (GdkFontPeer peer, FontRenderContext ctx);
- private native void setChars (String s);
- private native void setGlyphCodes (int codes[]);
- private native void dispose ();
- private native int glyphCode (int idx);
- private native int numGlyphs ();
- private native int glyphCharIndex (int idx);
- private native double[] allLogicalExtents ();
- private native double[] allInkExtents ();
- private native double[] glyphLogicalExtents (int idx);
- private native double[] glyphInkExtents (int idx);
- private native boolean glyphIsHorizontal (int idx);
- private native boolean isEqual (GdkGlyphVector ggv);
-
/*
geometric notes:
@@ -108,26 +127,14 @@ public class GdkGlyphVector extends GlyphVector
*/
-
- public GdkGlyphVector (Font f, GdkFontPeer peer, FontRenderContext c, String s)
+ public double[] getExtents()
{
- font = f;
- ctx = c;
- initState (peer, ctx);
- setChars (s);
+ return extents;
}
- public GdkGlyphVector (Font f, GdkFontPeer peer, FontRenderContext c, int codes[])
+ public int[] getCodes()
{
- font = f;
- ctx = c;
- initState (peer, ctx);
- setGlyphCodes (codes);
- }
-
- protected void finalize ()
- {
- dispose ();
+ return codes;
}
public Font getFont ()
@@ -137,12 +144,15 @@ public class GdkGlyphVector extends GlyphVector
public FontRenderContext getFontRenderContext ()
{
- return ctx;
+ return fontRenderContext;
}
public int getGlyphCharIndex (int glyphIndex)
{
- return glyphCharIndex (glyphIndex);
+ // FIXME: currently pango does not provide glyph-by-glyph
+ // reverse mapping information, so we assume a broken 1:1
+ // glyph model here. This is plainly wrong.
+ return glyphIndex;
}
public int[] getGlyphCharIndices (int beginGlyphIndex,
@@ -154,50 +164,44 @@ public class GdkGlyphVector extends GlyphVector
ix = new int[numEntries];
for (int i = 0; i < numEntries; i++)
- ix[i] = glyphCharIndex (beginGlyphIndex + i);
+ ix[i] = getGlyphCharIndex (beginGlyphIndex + i);
return ix;
}
public int getGlyphCode (int glyphIndex)
{
- return glyphCode (glyphIndex);
+ return codes[glyphIndex];
}
public int[] getGlyphCodes (int beginGlyphIndex, int numEntries,
int[] codeReturn)
{
- int ix[] = codeReturn;
- if (ix == null)
- ix = new int[numEntries];
+ if (codeReturn == null)
+ codeReturn = new int[numEntries];
- for (int i = 0; i < numEntries; i++)
- ix[i] = glyphCode (beginGlyphIndex + i);
- return ix;
+ System.arraycopy(codes, beginGlyphIndex, codeReturn, 0, numEntries);
+ return codeReturn;
}
- public Shape getGlyphLogicalBounds (int glyphIndex)
+ public Shape getGlyphLogicalBounds (int i)
{
- double extents[] = glyphLogicalExtents (glyphIndex);
- return new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
+ return new Rectangle2D.Double (extents[8*i], extents[8*i + 1],
+ extents[8*i + 2], extents[8*i + 3]);
}
- public GlyphMetrics getGlyphMetrics (int glyphIndex)
+ public GlyphMetrics getGlyphMetrics (int i)
{
- double extents[] = glyphLogicalExtents (glyphIndex);
- Rectangle2D log_bounds = new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
-
- extents = glyphInkExtents (glyphIndex);
- Rectangle2D ink_bounds = new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
-
- boolean is_horizontal = glyphIsHorizontal (glyphIndex);
-
- return new GlyphMetrics (is_horizontal,
- (float)(log_bounds.getWidth() + log_bounds.getX()),
- (float)(log_bounds.getHeight() + log_bounds.getY()),
- ink_bounds, GlyphMetrics.STANDARD);
+ // FIXME: pango does not yield vertical layout information at the
+ // moment.
+
+ boolean is_horizontal = true;
+ double advanceX = extents[8*i + 2]; // "logical width" == advanceX
+ double advanceY = 0;
+
+ return new GlyphMetrics (is_horizontal,
+ (float) advanceX, (float) advanceY,
+ (Rectangle2D) getGlyphVisualBounds(i),
+ GlyphMetrics.STANDARD);
}
public Shape getGlyphOutline (int glyphIndex)
@@ -210,20 +214,18 @@ public class GdkGlyphVector extends GlyphVector
throw new UnsupportedOperationException ();
}
- public Rectangle getGlyphPixelBounds (int glyphIndex,
+ public Rectangle getGlyphPixelBounds (int i,
FontRenderContext renderFRC,
float x, float y)
{
- double extents[] = glyphInkExtents(glyphIndex);
- return new Rectangle ((int)x, (int)y, (int)extents[2], (int)extents[3]);
+ return new Rectangle((int) x, (int) y,
+ (int) extents[8*i + 6], (int) extents[8*i + 7]);
}
- public Point2D getGlyphPosition (int glyphIndex)
+ public Point2D getGlyphPosition (int i)
{
- float[] ret = new float[2 * (glyphIndex + 1)];
- getGlyphPositions (0, glyphIndex + 1, ret);
- return new Point2D.Float (ret[2 * glyphIndex],
- ret[2 * glyphIndex + 1]);
+ return new Point2D.Double (extents[10*i + 8],
+ extents[10*i + 9]);
}
public float[] getGlyphPositions (int beginGlyphIndex,
@@ -234,35 +236,25 @@ public class GdkGlyphVector extends GlyphVector
if (fx == null)
fx = new float[numEntries * 2];
-
- float x = 0.0f;
- float y = 0.0f;
for (int i = 0; i < numEntries; ++i)
{
- boolean is_horizontal = glyphIsHorizontal (beginGlyphIndex + i);
- double log_extents[] = glyphLogicalExtents (beginGlyphIndex + i);
- fx[2*i] = x + (float)log_extents[0]; // x offset
- fx[2*i + 1] = y + (float)log_extents[1]; // y offset
- if (is_horizontal)
- x += (float)log_extents[2]; // x advance ("logical width") in pango-ese
- else
- y += (float)log_extents[3]; // y advance ("logical height") in pango-ese
+ fx[2*i ] = (float) extents[10*i + 8];
+ fx[2*i + 1] = (float) extents[10*i + 9];
}
return fx;
}
public AffineTransform getGlyphTransform (int glyphIndex)
{
- // glyphs don't have independent transforms in these simple glyph
+ // Glyphs don't have independent transforms in these simple glyph
// vectors; docs specify null is an ok return here.
return null;
}
- public Shape getGlyphVisualBounds (int glyphIndex)
+ public Shape getGlyphVisualBounds (int i)
{
- double extents[] = glyphInkExtents (glyphIndex);
- return new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
+ return new Rectangle2D.Double(extents[8*i + 4], extents[8*i + 5],
+ extents[8*i + 6], extents[8*i + 7]);
}
public int getLayoutFlags ()
@@ -272,14 +264,12 @@ public class GdkGlyphVector extends GlyphVector
public Rectangle2D getLogicalBounds ()
{
- double extents[] = allLogicalExtents ();
- return new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
+ return allLogical;
}
public int getNumGlyphs ()
{
- return numGlyphs ();
+ return codes.length;
}
public Shape getOutline ()
@@ -290,26 +280,28 @@ public class GdkGlyphVector extends GlyphVector
public Rectangle getPixelBounds (FontRenderContext renderFRC,
float x, float y)
{
- double extents[] = allInkExtents();
- return new Rectangle ((int)x, (int)y,
- (int)extents[2], (int)extents[3]);
+ return new Rectangle((int)x,
+ (int)y,
+ (int) allVisual.getWidth(),
+ (int) allVisual.getHeight());
}
public Rectangle2D getVisualBounds ()
{
- double extents[] = allInkExtents();
- return new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
+ return allVisual;
}
public void performDefaultLayout ()
{
}
- public void setGlyphPosition (int glyphIndex, Point2D newPos)
+ public void setGlyphPosition (int i, Point2D newPos)
{
- // should we be ok twiddling pango's structure here?
- throw new UnsupportedOperationException ();
+ extents[8*i ] = newPos.getX();
+ extents[8*i + 1] = newPos.getY();
+
+ extents[8*i + 4] = newPos.getX();
+ extents[8*i + 5] = newPos.getY();
}
public void setGlyphTransform (int glyphIndex,
@@ -327,8 +319,31 @@ public class GdkGlyphVector extends GlyphVector
if (! (gv instanceof GdkGlyphVector))
return false;
- GdkGlyphVector ggv = (GdkGlyphVector)gv;
- return isEqual(ggv);
+ GdkGlyphVector ggv = (GdkGlyphVector) gv;
+
+ if ((ggv.codes.length != this.codes.length)
+ || (ggv.extents.length != this.extents.length))
+ return false;
+
+ if ((ggv.font == null && this.font != null)
+ || (ggv.font != null && this.font == null)
+ || (!ggv.font.equals(this.font)))
+ return false;
+
+ if ((ggv.fontRenderContext == null && this.fontRenderContext != null)
+ || (ggv.fontRenderContext != null && this.fontRenderContext == null)
+ || (!ggv.fontRenderContext.equals(this.fontRenderContext)))
+ return false;
+
+ for (int i = 0; i < ggv.codes.length; ++i)
+ if (ggv.codes[i] != this.codes[i])
+ return false;
+
+ for (int i = 0; i < ggv.extents.length; ++i)
+ if (ggv.extents[i] != this.extents[i])
+ return false;
+
+ return true;
}
public GlyphJustificationInfo getGlyphJustificationInfo(int idx)
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java b/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
index 5aacf5296c6..0811287e9b6 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
@@ -426,7 +426,8 @@ public class GdkGraphics extends Graphics
public void setClip (int x, int y, int width, int height)
{
- if (component != null && ! component.isRealized ())
+ if ((component != null && ! component.isRealized ())
+ || clip == null)
return;
clip.x = x;
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java b/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java
index 82de03d5aec..3bf169cb6f7 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java
@@ -1,5 +1,5 @@
-/* GdkGraphics2D.java
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* GdkGraphics2D.java --
+ Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,7 +40,6 @@ package gnu.java.awt.peer.gtk;
import gnu.classpath.Configuration;
import gnu.java.awt.ClasspathToolkit;
-import gnu.java.awt.peer.ClasspathFontPeer;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
@@ -60,17 +59,15 @@ import java.awt.Shape;
import java.awt.Stroke;
import java.awt.TexturePaint;
import java.awt.Toolkit;
-import java.awt.color.ColorSpace;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
-import java.awt.font.GlyphJustificationInfo;
+import java.awt.geom.AffineTransform;
import java.awt.geom.Arc2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
-import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
@@ -78,16 +75,17 @@ import java.awt.image.ColorModel;
import java.awt.image.CropImageFilter;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferInt;
+import java.awt.image.DirectColorModel;
import java.awt.image.FilteredImageSource;
-import java.awt.image.ImageConsumer;
import java.awt.image.ImageObserver;
import java.awt.image.ImagingOpException;
-import java.awt.image.SampleModel;
+import java.awt.image.MultiPixelPackedSampleModel;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
+import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;
-import java.awt.image.renderable.RenderableImage;
import java.awt.image.renderable.RenderContext;
+import java.awt.image.renderable.RenderableImage;
import java.text.AttributedCharacterIterator;
import java.util.HashMap;
import java.util.Map;
@@ -95,7 +93,6 @@ import java.util.Stack;
public class GdkGraphics2D extends Graphics2D
{
-
//////////////////////////////////////
////// State Management Methods //////
//////////////////////////////////////
@@ -103,14 +100,14 @@ public class GdkGraphics2D extends Graphics2D
static
{
if (Configuration.INIT_LOAD_LIBRARY)
- {
- System.loadLibrary("gtkpeer");
- }
+ System.loadLibrary("gtkpeer");
- if (GtkToolkit.useGraphics2D ())
- initStaticState ();
+ if (GtkToolkit.useGraphics2D())
+ initStaticState();
}
- native static void initStaticState ();
+
+ static native void initStaticState();
+
private final int native_state = GtkGenericPeer.getUniqueInteger();
private Paint paint;
@@ -120,246 +117,255 @@ public class GdkGraphics2D extends Graphics2D
private Shape clip;
private AffineTransform transform;
private GtkComponentPeer component;
- private Font font;
+ private Font font;
private RenderingHints hints;
private BufferedImage bimage;
-
+ private boolean pixelConversionRequired;
+ private int[] pixelBuffer;
private Composite comp;
-
private Stack stateStack;
-
- native private void initState (GtkComponentPeer component);
- native private void initState (int width, int height);
- native private void copyState (GdkGraphics2D g);
- native public void dispose ();
- native private int[] getImagePixels();
- native private void cairoSurfaceSetFilter(int filter);
- native void connectSignals (GtkComponentPeer component);
- public void finalize ()
+ private native void initState(GtkComponentPeer component);
+ private native void initState(int width, int height);
+ private native void initState(int[] pixes, int width, int height);
+ private native void copyState(GdkGraphics2D g);
+ public native void dispose();
+ private native void cairoSurfaceSetFilter(int filter);
+ native void connectSignals(GtkComponentPeer component);
+
+ public void finalize()
{
dispose();
}
- public Graphics create ()
+ public Graphics create()
{
- return new GdkGraphics2D (this);
+ return new GdkGraphics2D(this);
}
- public Graphics create (int x, int y, int width, int height)
+ public Graphics create(int x, int y, int width, int height)
{
- return new GdkGraphics2D (width, height);
+ return new GdkGraphics2D(width, height);
}
- GdkGraphics2D (GdkGraphics2D g)
+ GdkGraphics2D(GdkGraphics2D g)
{
paint = g.paint;
stroke = g.stroke;
- setRenderingHints (g.hints);
+ setRenderingHints(g.hints);
if (g.fg.getAlpha() != -1)
- fg = new Color (g.fg.getRed (), g.fg.getGreen (),
- g.fg.getBlue (), g.fg.getAlpha ());
- else
- fg = new Color (g.fg.getRGB ());
+ fg = new Color(g.fg.getRed(), g.fg.getGreen(), g.fg.getBlue(),
+ g.fg.getAlpha());
+ else
+ fg = new Color(g.fg.getRGB());
if (g.bg.getAlpha() != -1)
- bg = new Color(g.bg.getRed (), g.bg.getGreen (),
- g.bg.getBlue (), g.bg.getAlpha ());
+ bg = new Color(g.bg.getRed(), g.bg.getGreen(), g.bg.getBlue(),
+ g.bg.getAlpha());
else
- bg = new Color (g.bg.getRGB ());
+ bg = new Color(g.bg.getRGB());
if (g.clip == null)
clip = null;
else
- clip = new Rectangle (g.getClipBounds ());
+ clip = new Rectangle(g.getClipBounds());
if (g.transform == null)
- transform = new AffineTransform ();
+ transform = new AffineTransform();
else
- transform = new AffineTransform (g.transform);
+ transform = new AffineTransform(g.transform);
font = g.font;
component = g.component;
- copyState (g);
-
- setColor (fg);
- setBackground (bg);
- setPaint (paint);
- setStroke (stroke);
- setTransform (transform);
- setClip (clip);
+ copyState(g);
+
+ setColor(fg);
+ setBackground(bg);
+ setPaint(paint);
+ setStroke(stroke);
+ setTransform(transform);
+ setClip(clip);
stateStack = new Stack();
}
- GdkGraphics2D (int width, int height)
+ GdkGraphics2D(int width, int height)
{
- initState (width, height);
+ initState(width, height);
setColor(Color.black);
- setBackground (Color.black);
- setPaint (getColor());
- setFont (new Font("SansSerif", Font.PLAIN, 12));
- setTransform (new AffineTransform ());
- setStroke (new BasicStroke ());
- setRenderingHints (getDefaultHints());
+ setBackground(Color.black);
+ setPaint(getColor());
+ setFont(new Font("SansSerif", Font.PLAIN, 12));
+ setTransform(new AffineTransform());
+ setStroke(new BasicStroke());
+ setRenderingHints(getDefaultHints());
stateStack = new Stack();
}
- GdkGraphics2D (GtkComponentPeer component)
+ GdkGraphics2D(GtkComponentPeer component)
{
this.component = component;
-
- setFont (new Font("SansSerif", Font.PLAIN, 12));
-
- if (component.isRealized ())
- initComponentGraphics2D ();
+
+ if (component.isRealized())
+ initComponentGraphics2D();
else
- connectSignals (component);
+ connectSignals(component);
}
- void initComponentGraphics2D ()
+ void initComponentGraphics2D()
{
- initState (component);
+ initState(component);
- setColor (component.awtComponent.getForeground ());
- setBackground (component.awtComponent.getBackground ());
- setPaint (getColor());
- setTransform (new AffineTransform ());
- setStroke (new BasicStroke ());
- setRenderingHints (getDefaultHints());
+ setColor(component.awtComponent.getForeground());
+ setBackground(component.awtComponent.getBackground());
+ setPaint(getColor());
+ setTransform(new AffineTransform());
+ setStroke(new BasicStroke());
+ setRenderingHints(getDefaultHints());
+ setFont(new Font("SansSerif", Font.PLAIN, 12));
- stateStack = new Stack ();
+ stateStack = new Stack();
}
- GdkGraphics2D (BufferedImage bimage)
+ GdkGraphics2D(BufferedImage bimage)
{
-
- this.bimage = bimage;
- initState (bimage.getWidth(), bimage.getHeight());
+ this.bimage = bimage;
+ this.pixelBuffer = findSimpleIntegerArray(bimage.getColorModel(),
+ bimage.getRaster());
+ if (this.pixelBuffer == null)
+ {
+ this.pixelBuffer = new int[bimage.getRaster().getWidth() * bimage.getRaster()
+ .getHeight()];
+ this.pixelConversionRequired = true;
+ }
+ else
+ {
+ this.pixelConversionRequired = false;
+ }
+
+ initState(this.pixelBuffer, bimage.getWidth(), bimage.getHeight());
setColor(Color.black);
- setBackground (Color.black);
- setPaint (getColor());
- setFont (new Font("SansSerif", Font.PLAIN, 12));
- setTransform (new AffineTransform ());
- setStroke (new BasicStroke ());
- setRenderingHints (getDefaultHints());
+ setBackground(Color.black);
+ setPaint(getColor());
+ setFont(new Font("SansSerif", Font.PLAIN, 12));
+ setTransform(new AffineTransform());
+ setStroke(new BasicStroke());
+ setRenderingHints(getDefaultHints());
stateStack = new Stack();
-
+
// draw current buffered image to the pixmap associated
- // with it.
-
- drawImage (bimage, new AffineTransform (1,0,0,1,0,0), bg, null);
+ // with it, if the image is not equal to our paint buffer.
+ if (pixelConversionRequired)
+ drawImage(bimage, new AffineTransform(1, 0, 0, 1, 0, 0), bg, null);
}
-
////////////////////////////////////
////// Native Drawing Methods //////
////////////////////////////////////
// GDK drawing methods
- private native void gdkDrawDrawable (GdkGraphics2D other, int x, int y);
+ private native void gdkDrawDrawable(GdkGraphics2D other, int x, int y);
// drawing utility methods
- private native void drawPixels (int pixels[], int w, int h, int stride, double i2u[]);
- private native void setTexturePixels (int pixels[], int w, int h, int stride);
- private native void setGradient (double x1, double y1,
- double x2, double y2,
- int r1, int g1, int b1, int a1,
- int r2, int g2, int b2, int a2,
- boolean cyclic);
+ private native void drawPixels(int[] pixels, int w, int h, int stride,
+ double[] i2u);
+ private native void setTexturePixels(int[] pixels, int w, int h, int stride);
+ private native void setGradient(double x1, double y1, double x2, double y2,
+ int r1, int g1, int b1, int a1, int r2,
+ int g2, int b2, int a2, boolean cyclic);
// simple passthroughs to cairo
- private native void cairoSave ();
- private native void cairoRestore ();
- private native void cairoSetMatrix (double m[]);
- private native void cairoSetOperator (int cairoOperator);
- private native void cairoSetRGBColor (double red, double green, double blue);
- private native void cairoSetAlpha (double alpha);
- private native void cairoSetFillRule (int cairoFillRule);
- private native void cairoSetLineWidth (double width);
- private native void cairoSetLineCap (int cairoLineCap);
- private native void cairoSetLineJoin (int cairoLineJoin);
- private native void cairoSetDash (double dashes[], int ndash, double offset);
- private native void cairoSetMiterLimit (double limit);
- private native void cairoNewPath ();
- private native void cairoMoveTo (double x, double y);
- private native void cairoLineTo (double x, double y);
- private native void cairoCurveTo (double x1, double y1,
- double x2, double y2,
- double x3, double y3);
- private native void cairoRelMoveTo (double dx, double dy);
- private native void cairoRelLineTo (double dx, double dy);
- private native void cairoRelCurveTo (double dx1, double dy1,
- double dx2, double dy2,
- double dx3, double dy3);
- private native void cairoRectangle (double x, double y,
- double width, double height);
- private native void cairoClosePath ();
- private native void cairoStroke ();
- private native void cairoFill ();
- private native void cairoClip ();
-
+ private native void cairoSave();
+ private native void cairoRestore();
+ private native void cairoSetMatrix(double[] m);
+ private native void cairoSetOperator(int cairoOperator);
+ private native void cairoSetRGBColor(double red, double green, double blue);
+ private native void cairoSetAlpha(double alpha);
+ private native void cairoSetFillRule(int cairoFillRule);
+ private native void cairoSetLineWidth(double width);
+ private native void cairoSetLineCap(int cairoLineCap);
+ private native void cairoSetLineJoin(int cairoLineJoin);
+ private native void cairoSetDash(double[] dashes, int ndash, double offset);
+
+ private native void cairoSetMiterLimit(double limit);
+ private native void cairoNewPath();
+ private native void cairoMoveTo(double x, double y);
+ private native void cairoLineTo(double x, double y);
+ private native void cairoCurveTo(double x1, double y1, double x2, double y2,
+ double x3, double y3);
+ private native void cairoRelMoveTo(double dx, double dy);
+ private native void cairoRelLineTo(double dx, double dy);
+ private native void cairoRelCurveTo(double dx1, double dy1, double dx2,
+ double dy2, double dx3, double dy3);
+ private native void cairoRectangle(double x, double y, double width,
+ double height);
+ private native void cairoClosePath();
+ private native void cairoStroke();
+ private native void cairoFill();
+ private native void cairoClip();
/////////////////////////////////////////////
////// General Drawing Support Methods //////
/////////////////////////////////////////////
- private class DrawState
- {
- private Paint paint;
- private Stroke stroke;
- private Color fg;
- private Color bg;
- private Shape clip;
- private AffineTransform transform;
- private Font font;
- private Composite comp;
- DrawState (GdkGraphics2D g)
- {
- this.paint = g.paint;
- this.stroke = g.stroke;
- this.fg = g.fg;
- this.bg = g.bg;
- this.clip = g.clip;
- if (g.transform != null)
- this.transform = (AffineTransform) g.transform.clone();
- this.font = g.font;
- this.comp = g.comp;
- }
- public void restore(GdkGraphics2D g)
- {
- g.paint = this.paint;
- g.stroke = this.stroke;
- g.fg = this.fg;
- g.bg = this.bg;
- g.clip = this.clip;
- g.transform = this.transform;
- g.font = this.font;
- g.comp = this.comp;
- }
- }
-
- private void stateSave ()
+ private class DrawState
+ {
+ private Paint paint;
+ private Stroke stroke;
+ private Color fg;
+ private Color bg;
+ private Shape clip;
+ private AffineTransform transform;
+ private Font font;
+ private Composite comp;
+
+ DrawState(GdkGraphics2D g)
{
- stateStack.push (new DrawState (this));
- cairoSave ();
+ this.paint = g.paint;
+ this.stroke = g.stroke;
+ this.fg = g.fg;
+ this.bg = g.bg;
+ this.clip = g.clip;
+ if (g.transform != null)
+ this.transform = (AffineTransform) g.transform.clone();
+ this.font = g.font;
+ this.comp = g.comp;
}
- private void stateRestore ()
+ public void restore(GdkGraphics2D g)
{
- ((DrawState)(stateStack.pop ())).restore (this);
- cairoRestore ();
+ g.paint = this.paint;
+ g.stroke = this.stroke;
+ g.fg = this.fg;
+ g.bg = this.bg;
+ g.clip = this.clip;
+ g.transform = this.transform;
+ g.font = this.font;
+ g.comp = this.comp;
}
+ }
+
+ private void stateSave()
+ {
+ stateStack.push(new DrawState(this));
+ cairoSave();
+ }
+
+ private void stateRestore()
+ {
+ ((DrawState) (stateStack.pop())).restore(this);
+ cairoRestore();
+ }
// Some operations (drawing rather than filling) require that their
// coords be shifted to land on 0.5-pixel boundaries, in order to land on
// "middle of pixel" coordinates and light up complete pixels.
-
private boolean shiftDrawCalls = false;
+
private final double shifted(double coord, boolean doShift)
{
if (doShift)
@@ -372,406 +378,377 @@ public class GdkGraphics2D extends Graphics2D
{
double x = 0;
double y = 0;
- double coords[] = new double[6];
+ double[] coords = new double[6];
- cairoSetFillRule (p.getWindingRule ());
- for ( ; ! p.isDone (); p.next())
+ cairoSetFillRule(p.getWindingRule());
+ for (; ! p.isDone(); p.next())
{
- int seg = p.currentSegment (coords);
- switch(seg)
- {
-
- case PathIterator.SEG_MOVETO:
- x = shifted(coords[0], doShift);
- y = shifted(coords[1], doShift);
- cairoMoveTo (x, y);
- break;
-
- case PathIterator.SEG_LINETO:
- x = shifted(coords[0], doShift);
- y = shifted(coords[1], doShift);
- cairoLineTo (x, y);
- break;
-
- case PathIterator.SEG_QUADTO:
-
- // splitting a quadratic bezier into a cubic:
- // see: http://pfaedit.sourceforge.net/bezier.html
-
- double x1 = x + (2.0/3.0) * (shifted(coords[0], doShift) - x);
- double y1 = y + (2.0/3.0) * (shifted(coords[1], doShift) - y);
-
- double x2 = x1 + (1.0/3.0) * (shifted(coords[2], doShift) - x);
- double y2 = y1 + (1.0/3.0) * (shifted(coords[3], doShift) - y);
-
- x = shifted(coords[2], doShift);
- y = shifted(coords[3], doShift);
- cairoCurveTo (x1, y1,
- x2, y2,
- x, y);
- break;
-
- case PathIterator.SEG_CUBICTO:
- x = shifted(coords[4], doShift);
- y = shifted(coords[5], doShift);
- cairoCurveTo (shifted(coords[0], doShift), shifted(coords[1], doShift),
- shifted(coords[2], doShift), shifted(coords[3], doShift),
- x, y);
- break;
-
- case PathIterator.SEG_CLOSE:
- cairoClosePath ();
- break;
- }
- }
+ int seg = p.currentSegment(coords);
+ switch (seg)
+ {
+ case PathIterator.SEG_MOVETO:
+ x = shifted(coords[0], doShift);
+ y = shifted(coords[1], doShift);
+ cairoMoveTo(x, y);
+ break;
+ case PathIterator.SEG_LINETO:
+ x = shifted(coords[0], doShift);
+ y = shifted(coords[1], doShift);
+ cairoLineTo(x, y);
+ break;
+ case PathIterator.SEG_QUADTO:
+ // splitting a quadratic bezier into a cubic:
+ // see: http://pfaedit.sourceforge.net/bezier.html
+ double x1 = x + (2.0 / 3.0) * (shifted(coords[0], doShift) - x);
+ double y1 = y + (2.0 / 3.0) * (shifted(coords[1], doShift) - y);
+
+ double x2 = x1 + (1.0 / 3.0) * (shifted(coords[2], doShift) - x);
+ double y2 = y1 + (1.0 / 3.0) * (shifted(coords[3], doShift) - y);
+
+ x = shifted(coords[2], doShift);
+ y = shifted(coords[3], doShift);
+ cairoCurveTo(x1, y1, x2, y2, x, y);
+ break;
+ case PathIterator.SEG_CUBICTO:
+ x = shifted(coords[4], doShift);
+ y = shifted(coords[5], doShift);
+ cairoCurveTo(shifted(coords[0], doShift),
+ shifted(coords[1], doShift),
+ shifted(coords[2], doShift),
+ shifted(coords[3], doShift), x, y);
+ break;
+ case PathIterator.SEG_CLOSE:
+ cairoClosePath();
+ break;
+ }
+ }
}
-
private final Map getDefaultHints()
{
- HashMap defaultHints = new HashMap ();
-
- defaultHints.put (RenderingHints.KEY_TEXT_ANTIALIASING,
- RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
-
- defaultHints.put (RenderingHints.KEY_STROKE_CONTROL,
- RenderingHints.VALUE_STROKE_DEFAULT);
-
- defaultHints.put (RenderingHints.KEY_FRACTIONALMETRICS,
- RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
-
- defaultHints.put (RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_OFF);
-
- defaultHints.put (RenderingHints.KEY_RENDERING,
- RenderingHints.VALUE_RENDER_DEFAULT);
-
+ HashMap defaultHints = new HashMap();
+
+ defaultHints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
+ RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
+
+ defaultHints.put(RenderingHints.KEY_STROKE_CONTROL,
+ RenderingHints.VALUE_STROKE_DEFAULT);
+
+ defaultHints.put(RenderingHints.KEY_FRACTIONALMETRICS,
+ RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
+
+ defaultHints.put(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_OFF);
+
+ defaultHints.put(RenderingHints.KEY_RENDERING,
+ RenderingHints.VALUE_RENDER_DEFAULT);
+
return defaultHints;
-
}
- private final void updateBufferedImage()
+ public static final int[] findSimpleIntegerArray (ColorModel cm, Raster raster)
{
- int[] pixels = getImagePixels();
- updateImagePixels(pixels);
- }
+ if (cm == null || raster == null)
+ return null;
-
- private final boolean isBufferedImageGraphics ()
- {
- return bimage != null;
- }
-
- private final void updateImagePixels (int[] pixels)
- {
+ if (! cm.getColorSpace().isCS_sRGB())
+ return null;
- // This function can only be used if
- // this graphics object is used to draw into
- // buffered image
-
- if (! isBufferedImageGraphics ())
- return;
+ if (! (cm instanceof DirectColorModel))
+ return null;
- WritableRaster raster = bimage.getRaster();
- DataBuffer db = raster.getDataBuffer ();
+ DirectColorModel dcm = (DirectColorModel) cm;
- // update pixels in the bufferedImage
+ if (dcm.getRedMask() != 0x00FF0000 || dcm.getGreenMask() != 0x0000FF00
+ || dcm.getBlueMask() != 0x000000FF)
+ return null;
- if (raster.getSampleModel ().getDataType () == DataBuffer.TYPE_INT
- && db instanceof DataBufferInt
- && db.getNumBanks () == 1)
- {
+ if (! (raster instanceof WritableRaster))
+ return null;
- // single bank, ARGB-ints buffer in sRGB space
- DataBufferInt dbi = (DataBufferInt) raster.getDataBuffer ();
+ if (raster.getSampleModel().getDataType() != DataBuffer.TYPE_INT)
+ return null;
- for (int i=0; i < pixels.length; i++)
- dbi.setElem(i, pixels[i]);
-
- }
- else
- {
- bimage.getRaster().setPixels (0, 0, raster.getWidth (),
- raster.getHeight (), pixels);
- }
- }
+ if (! (raster.getDataBuffer() instanceof DataBufferInt))
+ return null;
+ DataBufferInt db = (DataBufferInt) raster.getDataBuffer();
- private final boolean drawImage(Image img,
- AffineTransform xform,
- Color bgcolor,
- ImageObserver obs)
+ if (db.getNumBanks() != 1)
+ return null;
+
+ // Finally, we have determined that this is a single bank, [A]RGB-int
+ // buffer in sRGB space. It's worth checking all this, because it means
+ // that cairo can paint directly into the data buffer, which is very
+ // fast compared to all the normal copying and converting.
+
+ return db.getData();
+ }
+
+ private final void updateBufferedImage()
{
+ if (bimage != null && pixelConversionRequired)
+ {
+ int height = bimage.getHeight();
+ int width = bimage.getWidth();
+ for (int y = 0; y < height; ++y)
+ for (int x = 0; x < width; ++x)
+ bimage.setRGB(x, y, pixelBuffer[y*width+height]);
+ }
+ }
+ private final boolean drawImage(Image img, AffineTransform xform,
+ Color bgcolor, ImageObserver obs)
+ {
if (img == null)
return false;
- if (img instanceof GtkOffScreenImage &&
- img.getGraphics () instanceof GdkGraphics2D &&
- (xform == null
- || xform.getType () == AffineTransform.TYPE_IDENTITY
- || xform.getType () == AffineTransform.TYPE_TRANSLATION)
- )
+ if (img instanceof GtkOffScreenImage
+ && img.getGraphics() instanceof GdkGraphics2D
+ && (xform == null || xform.getType() == AffineTransform.TYPE_IDENTITY
+ || xform.getType() == AffineTransform.TYPE_TRANSLATION))
{
- // we are being asked to flush a double buffer from Gdk
- GdkGraphics2D g2 = (GdkGraphics2D) img.getGraphics ();
- gdkDrawDrawable (g2, (int)xform.getTranslateX(), (int)xform.getTranslateY());
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
-
- return true;
+ // we are being asked to flush a double buffer from Gdk
+ GdkGraphics2D g2 = (GdkGraphics2D) img.getGraphics();
+ gdkDrawDrawable(g2, (int) xform.getTranslateX(),
+ (int) xform.getTranslateY());
+
+ updateBufferedImage();
+
+ return true;
}
else
- {
-
- // In this case, xform is an AffineTransform that transforms bounding
- // box of the specified image from image space to user space. However
- // when we pass this transform to cairo, cairo will use this transform
- // to map "user coordinates" to "pixel" coordinates, which is the
- // other way around. Therefore to get the "user -> pixel" transform
- // that cairo wants from "image -> user" transform that we currently
- // have, we will need to invert the transformation matrix.
-
- AffineTransform invertedXform = new AffineTransform();
-
- try
- {
- invertedXform = xform.createInverse();
- if (img instanceof BufferedImage)
- {
- // draw an image which has actually been loaded
- // into memory fully
-
- BufferedImage b = (BufferedImage) img;
- return drawRaster (b.getColorModel (),
- b.getData (),
- invertedXform,
- bgcolor);
- }
- else
- {
- return this.drawImage(GdkPixbufDecoder.createBufferedImage(img.getSource()),
- xform, bgcolor,obs);
- }
- }
- catch (NoninvertibleTransformException e)
- {
- throw new ImagingOpException("Unable to invert transform "
- + xform.toString());
- }
+ {
+ // In this case, xform is an AffineTransform that transforms bounding
+ // box of the specified image from image space to user space. However
+ // when we pass this transform to cairo, cairo will use this transform
+ // to map "user coordinates" to "pixel" coordinates, which is the
+ // other way around. Therefore to get the "user -> pixel" transform
+ // that cairo wants from "image -> user" transform that we currently
+ // have, we will need to invert the transformation matrix.
+ AffineTransform invertedXform = new AffineTransform();
+
+ try
+ {
+ invertedXform = xform.createInverse();
+ if (img instanceof BufferedImage)
+ {
+ // draw an image which has actually been loaded
+ // into memory fully
+ BufferedImage b = (BufferedImage) img;
+ return drawRaster(b.getColorModel(), b.getData(),
+ invertedXform, bgcolor);
+ }
+ else
+ return this.drawImage(GdkPixbufDecoder.createBufferedImage(img
+ .getSource()),
+ xform, bgcolor, obs);
+ }
+ catch (NoninvertibleTransformException e)
+ {
+ throw new ImagingOpException("Unable to invert transform "
+ + xform.toString());
+ }
}
}
-
//////////////////////////////////////////////////
////// Implementation of Graphics2D Methods //////
//////////////////////////////////////////////////
- public void draw (Shape s)
+ public void draw(Shape s)
{
-
- if (stroke != null &&
- !(stroke instanceof BasicStroke))
+ if (stroke != null && ! (stroke instanceof BasicStroke))
{
- fill (stroke.createStrokedShape (s));
- return;
+ fill(stroke.createStrokedShape(s));
+ return;
}
- cairoNewPath ();
-
+ cairoNewPath();
+
if (s instanceof Rectangle2D)
{
- Rectangle2D r = (Rectangle2D)s;
- cairoRectangle (shifted(r.getX (), shiftDrawCalls),
- shifted(r.getY (), shiftDrawCalls),
- r.getWidth (), r.getHeight ());
+ Rectangle2D r = (Rectangle2D) s;
+ cairoRectangle(shifted(r.getX(), shiftDrawCalls),
+ shifted(r.getY(), shiftDrawCalls), r.getWidth(),
+ r.getHeight());
}
- else
- walkPath (s.getPathIterator (null), shiftDrawCalls);
- cairoStroke ();
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ else
+ walkPath(s.getPathIterator(null), shiftDrawCalls);
+ cairoStroke();
+
+ updateBufferedImage();
}
- public void fill (Shape s)
+ public void fill(Shape s)
{
- cairoNewPath ();
+ cairoNewPath();
if (s instanceof Rectangle2D)
{
- Rectangle2D r = (Rectangle2D)s;
- cairoRectangle (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
+ Rectangle2D r = (Rectangle2D) s;
+ cairoRectangle(r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
- else
- walkPath (s.getPathIterator (null), false);
- cairoFill ();
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ else
+ walkPath(s.getPathIterator(null), false);
+
+ cairoFill();
+ updateBufferedImage();
}
- public void clip (Shape s)
+ public void clip(Shape s)
{
- // update it
+ // update it
+ if (clip == null || s == null)
+ clip = s;
+ else if (s instanceof Rectangle2D && clip instanceof Rectangle2D)
+ {
+ Rectangle2D r = (Rectangle2D) s;
+ Rectangle2D curr = (Rectangle2D) clip;
+ clip = curr.createIntersection(r);
+ }
+ else
+ throw new UnsupportedOperationException();
- if (clip == null || s == null)
- clip = s;
- else if (s instanceof Rectangle2D
- && clip instanceof Rectangle2D)
+ // draw it
+ if (clip != null)
+ {
+ cairoNewPath();
+ if (clip instanceof Rectangle2D)
{
- Rectangle2D r = (Rectangle2D)s;
- Rectangle2D curr = (Rectangle2D)clip;
- clip = curr.createIntersection (r);
+ Rectangle2D r = (Rectangle2D) clip;
+ cairoRectangle(r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
- else
- throw new UnsupportedOperationException ();
+ else
+ walkPath(clip.getPathIterator(null), false);
- // draw it
- if (clip != null)
- {
- cairoNewPath ();
- if (clip instanceof Rectangle2D)
- {
- Rectangle2D r = (Rectangle2D)clip;
- cairoRectangle (r.getX (), r.getY (),
- r.getWidth (), r.getHeight ());
- }
- else
- walkPath (clip.getPathIterator (null), false);
- // cairoClosePath ();
- cairoClip ();
- }
+ // cairoClosePath ();
+ cairoClip();
+ }
}
- public Paint getPaint ()
+ public Paint getPaint()
{
return paint;
}
- public AffineTransform getTransform ()
+ public AffineTransform getTransform()
{
- return (AffineTransform) transform.clone ();
+ return (AffineTransform) transform.clone();
}
- public void setPaint (Paint p)
+ public void setPaint(Paint p)
{
if (paint == null)
- return;
-
+ return;
+
paint = p;
if (paint instanceof Color)
{
- setColor ((Color) paint);
+ setColor((Color) paint);
}
else if (paint instanceof TexturePaint)
{
- TexturePaint tp = (TexturePaint) paint;
- BufferedImage img = tp.getImage ();
-
- // map the image to the anchor rectangle
+ TexturePaint tp = (TexturePaint) paint;
+ BufferedImage img = tp.getImage();
- int width = (int) tp.getAnchorRect ().getWidth ();
- int height = (int) tp.getAnchorRect ().getHeight ();
-
- double scaleX = width / (double) img.getWidth ();
- double scaleY = width / (double) img.getHeight ();
-
- AffineTransform at = new AffineTransform (scaleX, 0, 0, scaleY, 0, 0);
- AffineTransformOp op = new AffineTransformOp (at, getRenderingHints());
- BufferedImage texture = op.filter(img, null);
- int pixels[] = texture.getRGB (0, 0, width, height, null, 0, width);
- setTexturePixels (pixels, width, height, width);
+ // map the image to the anchor rectangle
+ int width = (int) tp.getAnchorRect().getWidth();
+ int height = (int) tp.getAnchorRect().getHeight();
+
+ double scaleX = width / (double) img.getWidth();
+ double scaleY = width / (double) img.getHeight();
+ AffineTransform at = new AffineTransform(scaleX, 0, 0, scaleY, 0, 0);
+ AffineTransformOp op = new AffineTransformOp(at, getRenderingHints());
+ BufferedImage texture = op.filter(img, null);
+ int[] pixels = texture.getRGB(0, 0, width, height, null, 0, width);
+ setTexturePixels(pixels, width, height, width);
}
else if (paint instanceof GradientPaint)
{
- GradientPaint gp = (GradientPaint) paint;
- Point2D p1 = gp.getPoint1 ();
- Point2D p2 = gp.getPoint2 ();
- Color c1 = gp.getColor1 ();
- Color c2 = gp.getColor2 ();
- setGradient (p1.getX (), p1.getY (),
- p2.getX (), p2.getY (),
- c1.getRed (), c1.getGreen (),
- c1.getBlue (), c1.getAlpha (),
- c2.getRed (), c2.getGreen (),
- c2.getBlue (), c2.getAlpha (),
- gp.isCyclic ());
+ GradientPaint gp = (GradientPaint) paint;
+ Point2D p1 = gp.getPoint1();
+ Point2D p2 = gp.getPoint2();
+ Color c1 = gp.getColor1();
+ Color c2 = gp.getColor2();
+ setGradient(p1.getX(), p1.getY(), p2.getX(), p2.getY(), c1.getRed(),
+ c1.getGreen(), c1.getBlue(), c1.getAlpha(), c2.getRed(),
+ c2.getGreen(), c2.getBlue(), c2.getAlpha(), gp.isCyclic());
}
else
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
- public void setTransform (AffineTransform tx)
+ public void setTransform(AffineTransform tx)
{
transform = tx;
if (transform != null)
{
- double m[] = new double[6];
- transform.getMatrix (m);
- cairoSetMatrix (m);
+ double[] m = new double[6];
+ transform.getMatrix(m);
+ cairoSetMatrix(m);
}
}
- public void transform (AffineTransform tx)
+ public void transform(AffineTransform tx)
{
if (transform == null)
- transform = new AffineTransform (tx);
+ transform = new AffineTransform(tx);
else
- transform.concatenate (tx);
- setTransform (transform);
+ transform.concatenate(tx);
+ setTransform(transform);
if (clip != null)
{
- // FIXME: this should actuall try to transform the shape
- // rather than degrade to bounds.
- Rectangle2D r = clip.getBounds2D();
- double[] coords = new double[] { r.getX(), r.getY(),
- r.getX() + r.getWidth(),
- r.getY() + r.getHeight() };
- try
- {
- tx.createInverse().transform(coords, 0, coords, 0, 2);
- r.setRect(coords[0], coords[1],
- coords[2] - coords[0],
- coords[3] - coords[1]);
- clip = r;
- }
- catch (java.awt.geom.NoninvertibleTransformException e)
- {
- }
+ // FIXME: this should actuall try to transform the shape
+ // rather than degrade to bounds.
+ Rectangle2D r = clip.getBounds2D();
+ double[] coords = new double[]
+ {
+ r.getX(), r.getY(), r.getX() + r.getWidth(),
+ r.getY() + r.getHeight()
+ };
+ try
+ {
+ tx.createInverse().transform(coords, 0, coords, 0, 2);
+ r.setRect(coords[0], coords[1], coords[2] - coords[0],
+ coords[3] - coords[1]);
+ clip = r;
+ }
+ catch (java.awt.geom.NoninvertibleTransformException e)
+ {
+ }
}
}
public void rotate(double theta)
{
- transform (AffineTransform.getRotateInstance (theta));
+ transform(AffineTransform.getRotateInstance(theta));
}
public void rotate(double theta, double x, double y)
{
- transform (AffineTransform.getRotateInstance (theta, x, y));
+ transform(AffineTransform.getRotateInstance(theta, x, y));
}
public void scale(double sx, double sy)
{
- transform (AffineTransform.getScaleInstance (sx, sy));
+ transform(AffineTransform.getScaleInstance(sx, sy));
}
- public void translate (double tx, double ty)
+ public void translate(double tx, double ty)
{
- transform (AffineTransform.getTranslateInstance (tx, ty));
+ transform(AffineTransform.getTranslateInstance(tx, ty));
}
- public void translate (int x, int y)
+ public void translate(int x, int y)
{
- translate ((double) x, (double) y);
+ translate((double) x, (double) y);
}
public void shear(double shearX, double shearY)
{
- transform (AffineTransform.getShearInstance (shearX, shearY));
+ transform(AffineTransform.getShearInstance(shearX, shearY));
}
public Stroke getStroke()
@@ -779,173 +756,165 @@ public class GdkGraphics2D extends Graphics2D
return stroke;
}
- public void setStroke (Stroke st)
+ public void setStroke(Stroke st)
{
stroke = st;
if (stroke instanceof BasicStroke)
{
- BasicStroke bs = (BasicStroke) stroke;
- cairoSetLineCap (bs.getEndCap());
- cairoSetLineWidth (bs.getLineWidth());
- cairoSetLineJoin (bs.getLineJoin());
- cairoSetMiterLimit (bs.getMiterLimit());
- float dashes[] = bs.getDashArray();
- if (dashes != null)
- {
- double double_dashes[] = new double[dashes.length];
- for (int i = 0; i < dashes.length; i++)
- double_dashes[i] = dashes[i];
- cairoSetDash (double_dashes, double_dashes.length,
- (double) bs.getDashPhase ());
- }
+ BasicStroke bs = (BasicStroke) stroke;
+ cairoSetLineCap(bs.getEndCap());
+ cairoSetLineWidth(bs.getLineWidth());
+ cairoSetLineJoin(bs.getLineJoin());
+ cairoSetMiterLimit(bs.getMiterLimit());
+ float[] dashes = bs.getDashArray();
+ if (dashes != null)
+ {
+ double[] double_dashes = new double[dashes.length];
+ for (int i = 0; i < dashes.length; i++)
+ double_dashes[i] = dashes[i];
+ cairoSetDash(double_dashes, double_dashes.length,
+ (double) bs.getDashPhase());
+ }
}
}
-
////////////////////////////////////////////////
////// Implementation of Graphics Methods //////
////////////////////////////////////////////////
- public void setPaintMode ()
- {
- setComposite (java.awt.AlphaComposite.SrcOver);
+ public void setPaintMode()
+ {
+ setComposite(java.awt.AlphaComposite.SrcOver);
}
- public void setXORMode (Color c)
- {
- setComposite (new gnu.java.awt.BitwiseXORComposite(c));
+ public void setXORMode(Color c)
+ {
+ setComposite(new gnu.java.awt.BitwiseXORComposite(c));
}
- public void setColor (Color c)
+ public void setColor(Color c)
{
if (c == null)
c = Color.BLACK;
-
+
fg = c;
paint = c;
- cairoSetRGBColor (fg.getRed() / 255.0,
- fg.getGreen() / 255.0,
- fg.getBlue() / 255.0);
- cairoSetAlpha ((fg.getAlpha() & 255) / 255.0);
+ cairoSetRGBColor(fg.getRed() / 255.0, fg.getGreen() / 255.0,
+ fg.getBlue() / 255.0);
+ cairoSetAlpha((fg.getAlpha() & 255) / 255.0);
}
- public Color getColor ()
+ public Color getColor()
{
return fg;
}
- public void clipRect (int x, int y, int width, int height)
+ public void clipRect(int x, int y, int width, int height)
{
- clip (new Rectangle (x, y, width, height));
+ clip(new Rectangle(x, y, width, height));
}
- public Shape getClip ()
+ public Shape getClip()
{
- return getClipInDevSpace ();
+ return clip.getBounds2D(); //getClipInDevSpace();
}
- public Rectangle getClipBounds ()
+ public Rectangle getClipBounds()
{
if (clip == null)
return null;
else
- return clip.getBounds ();
+ return clip.getBounds();
}
- protected Rectangle2D getClipInDevSpace ()
+ protected Rectangle2D getClipInDevSpace()
{
- Rectangle2D uclip = clip.getBounds2D ();
+ Rectangle2D uclip = clip.getBounds2D();
if (transform == null)
return uclip;
else
{
- Point2D pos = transform.transform (new Point2D.Double(uclip.getX (),
- uclip.getY ()),
- (Point2D)null);
- Point2D extent = transform.deltaTransform (new Point2D.Double(uclip.getWidth (),
- uclip.getHeight ()),
- (Point2D)null);
- return new Rectangle2D.Double (pos.getX (), pos.getY (),
- extent.getX (), extent.getY ());
+ Point2D pos = transform.transform(new Point2D.Double(uclip.getX(),
+ uclip.getY()),
+ (Point2D) null);
+ Point2D extent = transform.deltaTransform(new Point2D.Double(uclip
+ .getWidth(),
+ uclip
+ .getHeight()),
+ (Point2D) null);
+ return new Rectangle2D.Double(pos.getX(), pos.getY(), extent.getX(),
+ extent.getY());
}
}
- public void setClip (int x, int y, int width, int height)
+ public void setClip(int x, int y, int width, int height)
{
- setClip(new Rectangle2D.Double ((double)x, (double)y,
- (double)width, (double)height));
+ setClip(new Rectangle2D.Double((double) x, (double) y, (double) width,
+ (double) height));
}
-
- public void setClip (Shape s)
+
+ public void setClip(Shape s)
{
clip = s;
if (s != null)
{
- cairoNewPath ();
- if (s instanceof Rectangle2D)
- {
- Rectangle2D r = (Rectangle2D)s;
- cairoRectangle (r.getX (), r.getY (),
- r.getWidth (), r.getHeight ());
- }
- else
- walkPath (s.getPathIterator (null), false);
- // cairoClosePath ();
- cairoClip ();
+ cairoNewPath();
+ if (s instanceof Rectangle2D)
+ {
+ Rectangle2D r = (Rectangle2D) s;
+ cairoRectangle(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+ }
+ else
+ walkPath(s.getPathIterator(null), false);
+
+ // cairoClosePath ();
+ cairoClip();
}
}
-
+
private static BasicStroke draw3DRectStroke = new BasicStroke();
- public void draw3DRect(int x, int y, int width,
- int height, boolean raised)
+ public void draw3DRect(int x, int y, int width, int height, boolean raised)
{
Stroke tmp = stroke;
setStroke(draw3DRectStroke);
super.draw3DRect(x, y, width, height, raised);
- setStroke(tmp);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ setStroke(tmp);
+ updateBufferedImage();
}
- public void fill3DRect(int x, int y, int width,
- int height, boolean raised)
+ public void fill3DRect(int x, int y, int width, int height, boolean raised)
{
Stroke tmp = stroke;
setStroke(draw3DRectStroke);
super.fill3DRect(x, y, width, height, raised);
- setStroke(tmp);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ setStroke(tmp);
+ updateBufferedImage();
}
-
- public void drawRect (int x, int y, int width, int height)
+ public void drawRect(int x, int y, int width, int height)
{
- draw(new Rectangle (x, y, width, height));
+ draw(new Rectangle(x, y, width, height));
}
- public void fillRect (int x, int y, int width, int height)
+ public void fillRect(int x, int y, int width, int height)
{
- cairoNewPath ();
- cairoRectangle (x, y, width, height);
- cairoFill ();
+ cairoNewPath();
+ cairoRectangle(x, y, width, height);
+ cairoFill();
}
- public void clearRect (int x, int y, int width, int height)
+ public void clearRect(int x, int y, int width, int height)
{
- cairoSetRGBColor (bg.getRed() / 255.0,
- bg.getGreen() / 255.0,
- bg.getBlue() / 255.0);
- cairoSetAlpha (1.0);
- cairoNewPath ();
- cairoRectangle (x, y, width, height);
- cairoFill ();
- setColor (fg);
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ cairoSetRGBColor(bg.getRed() / 255.0, bg.getGreen() / 255.0,
+ bg.getBlue() / 255.0);
+ cairoSetAlpha(1.0);
+ cairoNewPath();
+ cairoRectangle(x, y, width, height);
+ cairoFill();
+ setColor(fg);
+ updateBufferedImage();
}
public void setBackground(Color c)
@@ -958,181 +927,172 @@ public class GdkGraphics2D extends Graphics2D
return bg;
}
- private final void doPolygon(int[] xPoints, int[] yPoints, int nPoints,
+ private final void doPolygon(int[] xPoints, int[] yPoints, int nPoints,
boolean close, boolean fill)
- {
+ {
if (nPoints < 1)
return;
- GeneralPath gp = new GeneralPath (PathIterator.WIND_EVEN_ODD);
- gp.moveTo ((float)xPoints[0], (float)yPoints[0]);
+ GeneralPath gp = new GeneralPath(PathIterator.WIND_EVEN_ODD);
+ gp.moveTo((float) xPoints[0], (float) yPoints[0]);
for (int i = 1; i < nPoints; i++)
- gp.lineTo ((float)xPoints[i], (float)yPoints[i]);
-
+ gp.lineTo((float) xPoints[i], (float) yPoints[i]);
+
if (close)
- gp.closePath ();
+ gp.closePath();
Shape sh = gp;
- if (fill == false &&
- stroke != null &&
- !(stroke instanceof BasicStroke))
+ if (fill == false && stroke != null && ! (stroke instanceof BasicStroke))
{
- sh = stroke.createStrokedShape (gp);
- fill = true;
+ sh = stroke.createStrokedShape(gp);
+ fill = true;
}
-
- if (fill)
- fill (sh);
- else
- draw (sh);
+
+ if (fill)
+ fill(sh);
+ else
+ draw(sh);
}
- public void drawLine (int x1, int y1, int x2, int y2)
+ public void drawLine(int x1, int y1, int x2, int y2)
{
- int xp[] = new int[2];
- int yp[] = new int[2];
+ int[] xp = new int[2];
+ int[] yp = new int[2];
xp[0] = x1;
xp[1] = x2;
yp[0] = y1;
yp[1] = y2;
-
- doPolygon (xp, yp, 2, false, false);
+
+ doPolygon(xp, yp, 2, false, false);
}
public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
{
- doPolygon (xPoints, yPoints, nPoints, true, true);
+ doPolygon(xPoints, yPoints, nPoints, true, true);
}
-
+
public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
- {
- doPolygon (xPoints, yPoints, nPoints, true, false);
+ {
+ doPolygon(xPoints, yPoints, nPoints, true, false);
}
public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints)
{
- doPolygon (xPoints, yPoints, nPoints, false, false);
+ doPolygon(xPoints, yPoints, nPoints, false, false);
}
- private final boolean drawRaster (ColorModel cm, Raster r,
- AffineTransform imageToUser,
- Color bgcolor)
+ private final boolean drawRaster(ColorModel cm, Raster r,
+ AffineTransform imageToUser, Color bgcolor)
{
if (r == null)
return false;
- SampleModel sm = r.getSampleModel ();
- DataBuffer db = r.getDataBuffer ();
+ SampleModel sm = r.getSampleModel();
+ DataBuffer db = r.getDataBuffer();
if (db == null || sm == null)
return false;
if (cm == null)
- cm = ColorModel.getRGBdefault ();
+ cm = ColorModel.getRGBdefault();
double[] i2u = new double[6];
if (imageToUser != null)
imageToUser.getMatrix(i2u);
else
{
- i2u[0] = 1; i2u[1] = 0;
- i2u[2] = 0; i2u[3] = 1;
- i2u[4] = 0; i2u[5] = 0;
+ i2u[0] = 1;
+ i2u[1] = 0;
+ i2u[2] = 0;
+ i2u[3] = 1;
+ i2u[4] = 0;
+ i2u[5] = 0;
}
- int pixels[] = null;
+ int[] pixels = findSimpleIntegerArray(cm, r);
- if (sm.getDataType () == DataBuffer.TYPE_INT &&
- db instanceof DataBufferInt &&
- db.getNumBanks () == 1)
+ if (pixels == null)
{
- // single bank, ARGB-ints buffer in sRGB space
- DataBufferInt dbi = (DataBufferInt)db;
- pixels = dbi.getData ();
+ // FIXME: I don't think this code will work correctly with a non-RGB
+ // MultiPixelPackedSampleModel. Although this entire method should
+ // probably be rewritten to better utilize Cairo's different supported
+ // data formats.
+ if (sm instanceof MultiPixelPackedSampleModel)
+ {
+ pixels = r.getPixels(0, 0, r.getWidth(), r.getHeight(), pixels);
+ for (int i = 0; i < pixels.length; i++)
+ pixels[i] = cm.getRGB(pixels[i]);
+ }
+ else
+ {
+ pixels = new int[r.getWidth() * r.getHeight()];
+ for (int i = 0; i < pixels.length; i++)
+ pixels[i] = cm.getRGB(db.getElem(i));
+ }
}
- else
- pixels = r.getPixels (0, 0, r.getWidth (), r.getHeight (), pixels);
-
- ColorSpace cs = cm.getColorSpace ();
- if (cs != null &&
- cs.getType () != ColorSpace.CS_sRGB)
+
+ // Change all transparent pixels in the image to the specified bgcolor,
+ // or (if there's no alpha) fill in an alpha channel so that it paints
+ // correctly.
+ if (cm.hasAlpha())
{
- int pixels2[] = new int[pixels.length];
- for (int i = 0; i < pixels2.length; i++)
- pixels2[i] = cm.getRGB (pixels[i]);
- pixels = pixels2;
+ if (bgcolor != null && cm.hasAlpha())
+ for (int i = 0; i < pixels.length; i++)
+ {
+ if (cm.getAlpha(pixels[i]) == 0)
+ pixels[i] = bgcolor.getRGB();
+ }
}
-
- // change all transparent pixels in the image to the
- // specified bgcolor
-
- if (bgcolor != null)
- {
- for (int i = 0; i < pixels.length; i++)
- {
- if (cm.getAlpha (pixels[i]) == 0)
- pixels[i] = bgcolor.getRGB ();
- }
- }
-
- drawPixels (pixels, r.getWidth (), r.getHeight (), r.getWidth (), i2u);
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ else
+ for (int i = 0; i < pixels.length; i++)
+ pixels[i] |= 0xFF000000;
+
+ drawPixels(pixels, r.getWidth(), r.getHeight(), r.getWidth(), i2u);
+
+ updateBufferedImage();
return true;
}
- public void drawRenderedImage(RenderedImage image,
- AffineTransform xform)
+ public void drawRenderedImage(RenderedImage image, AffineTransform xform)
{
- drawRaster (image.getColorModel(), image.getData(), xform, bg);
+ drawRaster(image.getColorModel(), image.getData(), xform, bg);
}
-
- public void drawRenderableImage(RenderableImage image,
- AffineTransform xform)
+
+ public void drawRenderableImage(RenderableImage image, AffineTransform xform)
{
- drawRenderedImage (image.createRendering (new RenderContext (xform)), xform);
+ drawRenderedImage(image.createRendering(new RenderContext(xform)), xform);
}
-
- public boolean drawImage(Image img,
- AffineTransform xform,
- ImageObserver obs)
+
+ public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs)
{
- return drawImage(img, xform, bg, obs);
+ return drawImage(img, xform, bg, obs);
}
- public void drawImage(BufferedImage image,
- BufferedImageOp op,
- int x,
- int y)
+ public void drawImage(BufferedImage image, BufferedImageOp op, int x, int y)
{
Image filtered = op.filter(image, null);
- drawImage(filtered, new AffineTransform(1f,0f,0f,1f,x,y), bg, null);
+ drawImage(filtered, new AffineTransform(1f, 0f, 0f, 1f, x, y), bg, null);
}
- public boolean drawImage (Image img, int x, int y,
- ImageObserver observer)
+ public boolean drawImage(Image img, int x, int y, ImageObserver observer)
{
- return drawImage(img, new AffineTransform(1f,0f,0f,1f,x,y), bg, observer);
+ return drawImage(img, new AffineTransform(1f, 0f, 0f, 1f, x, y), bg,
+ observer);
}
-
///////////////////////////////////////////////
////// Unimplemented Stubs and Overloads //////
///////////////////////////////////////////////
-
-
- public boolean hit(Rectangle rect, Shape text,
- boolean onStroke)
+ public boolean hit(Rectangle rect, Shape text, boolean onStroke)
{
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
public GraphicsConfiguration getDeviceConfiguration()
{
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
public void setComposite(Composite comp)
@@ -1141,87 +1101,81 @@ public class GdkGraphics2D extends Graphics2D
if (comp instanceof AlphaComposite)
{
- AlphaComposite a = (AlphaComposite) comp;
- cairoSetOperator(a.getRule());
- Color c = getColor();
- setColor(new Color(c.getRed(),
- c.getGreen(),
- c.getBlue(),
- (int) (a.getAlpha() * ((float) c.getAlpha()))));
+ AlphaComposite a = (AlphaComposite) comp;
+ cairoSetOperator(a.getRule());
+ Color c = getColor();
+ setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(),
+ (int) (a.getAlpha() * ((float) c.getAlpha()))));
}
else
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
- public void setRenderingHint(RenderingHints.Key hintKey,
- Object hintValue)
+ public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue)
{
- hints.put (hintKey, hintValue);
-
+ hints.put(hintKey, hintValue);
+
if (hintKey.equals(RenderingHints.KEY_INTERPOLATION)
- || hintKey.equals(RenderingHints.KEY_ALPHA_INTERPOLATION))
+ || hintKey.equals(RenderingHints.KEY_ALPHA_INTERPOLATION))
{
-
- if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
- cairoSurfaceSetFilter(0);
-
- else if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
- cairoSurfaceSetFilter(1);
-
- else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
- cairoSurfaceSetFilter(2);
-
- else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
- cairoSurfaceSetFilter(3);
-
- else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
- cairoSurfaceSetFilter(4);
-
+ if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
+ cairoSurfaceSetFilter(0);
+
+ else if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
+ cairoSurfaceSetFilter(1);
+
+ else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
+ cairoSurfaceSetFilter(2);
+
+ else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
+ cairoSurfaceSetFilter(3);
+
+ else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
+ cairoSurfaceSetFilter(4);
}
- shiftDrawCalls = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
- || hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
-
+ shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE)
+ || hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT);
}
public Object getRenderingHint(RenderingHints.Key hintKey)
{
- return hints.get (hintKey);
+ return hints.get(hintKey);
}
-
+
public void setRenderingHints(Map hints)
{
- this.hints = new RenderingHints (getDefaultHints ());
- this.hints.add (new RenderingHints (hints));
-
- if (hints.containsKey(RenderingHints.KEY_INTERPOLATION))
+ this.hints = new RenderingHints(getDefaultHints());
+ this.hints.add(new RenderingHints(hints));
+
+ if (hints.containsKey(RenderingHints.KEY_INTERPOLATION))
+ {
+ if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
+ cairoSurfaceSetFilter(0);
+
+ else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
+ cairoSurfaceSetFilter(1);
+ }
+
+ if (hints.containsKey(RenderingHints.KEY_ALPHA_INTERPOLATION))
{
- if(hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
- cairoSurfaceSetFilter(0);
-
- else if(hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
- cairoSurfaceSetFilter(1);
+ if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
+ cairoSurfaceSetFilter(2);
+
+ else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
+ cairoSurfaceSetFilter(3);
+
+ else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
+ cairoSurfaceSetFilter(4);
}
-
- if (hints.containsKey(RenderingHints.KEY_ALPHA_INTERPOLATION))
- {
- if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
- cairoSurfaceSetFilter(2);
-
- else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
- cairoSurfaceSetFilter(3);
-
- else if(hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
- cairoSurfaceSetFilter(4);
- }
-
- shiftDrawCalls = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
- || hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
+
+ shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE)
+ || hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT);
}
public void addRenderingHints(Map hints)
{
- this.hints.add (new RenderingHints (hints));
+ this.hints.add(new RenderingHints(hints));
}
public RenderingHints getRenderingHints()
@@ -1237,70 +1191,62 @@ public class GdkGraphics2D extends Graphics2D
return comp;
}
- public FontRenderContext getFontRenderContext ()
+ public FontRenderContext getFontRenderContext()
{
- return new FontRenderContext (transform, true, true);
+ return new FontRenderContext(transform, true, true);
}
- public void copyArea (int x, int y, int width, int height, int dx, int dy)
+ public void copyArea(int x, int y, int width, int height, int dx, int dy)
{
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
- public void drawArc (int x, int y, int width, int height,
- int startAngle, int arcAngle)
+ public void drawArc(int x, int y, int width, int height, int startAngle,
+ int arcAngle)
{
- draw (new Arc2D.Double((double)x, (double)y,
- (double)width, (double)height,
- (double)startAngle, (double)arcAngle,
- Arc2D.OPEN));
+ draw(new Arc2D.Double((double) x, (double) y, (double) width,
+ (double) height, (double) startAngle,
+ (double) arcAngle, Arc2D.OPEN));
}
- public boolean drawImage (Image img, int x, int y, Color bgcolor,
- ImageObserver observer)
+ public boolean drawImage(Image img, int x, int y, Color bgcolor,
+ ImageObserver observer)
{
- return drawImage (img, x, y, img.getWidth (observer),
- img.getHeight (observer), bgcolor, observer);
+ return drawImage(img, x, y, img.getWidth(observer),
+ img.getHeight(observer), bgcolor, observer);
}
- public boolean drawImage (Image img, int x, int y, int width, int height,
- Color bgcolor, ImageObserver observer)
+ public boolean drawImage(Image img, int x, int y, int width, int height,
+ Color bgcolor, ImageObserver observer)
{
-
- double scaleX = width / (double) img.getWidth (observer);
- double scaleY = height / (double) img.getHeight (observer);
-
- return drawImage (img,
- new AffineTransform(scaleX, 0f, 0f, scaleY, x, y),
- bgcolor,
- observer);
+ double scaleX = width / (double) img.getWidth(observer);
+ double scaleY = height / (double) img.getHeight(observer);
+ return drawImage(img, new AffineTransform(scaleX, 0f, 0f, scaleY, x, y),
+ bgcolor, observer);
}
- public boolean drawImage (Image img, int x, int y, int width, int height,
- ImageObserver observer)
+ public boolean drawImage(Image img, int x, int y, int width, int height,
+ ImageObserver observer)
{
-
- return drawImage (img, x, y, width, height, bg, observer);
-
+ return drawImage(img, x, y, width, height, bg, observer);
}
- public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2,
- int sx1, int sy1, int sx2, int sy2,
- Color bgcolor, ImageObserver observer)
+ public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
+ int sx1, int sy1, int sx2, int sy2, Color bgcolor,
+ ImageObserver observer)
{
-
if (img == null)
return false;
- Image subImage;
-
+ Image subImage;
+
int sourceWidth = sx2 - sx1;
- int sourceHeight = sy2 - sy1;
-
+ int sourceHeight = sy2 - sy1;
+
int destWidth = dx2 - dx1;
int destHeight = dy2 - dy1;
-
+
double scaleX = destWidth / (double) sourceWidth;
double scaleY = destHeight / (double) sourceHeight;
@@ -1309,48 +1255,42 @@ public class GdkGraphics2D extends Graphics2D
if (img instanceof BufferedImage)
{
-
- BufferedImage b = (BufferedImage) img;
- subImage = b.getSubimage(sx1,sy1,sx2,sy2);
- }
- else
+ BufferedImage b = (BufferedImage) img;
+ subImage = b.getSubimage(sx1, sy1, sx2, sy2);
+ }
+ else
{
-
- // FIXME: This code currently doesn't work. Null Pointer
- // exception is thrown in this case. This happens
- // because img.getSource() always returns null, since source gets
- // never initialized when it is created with the help of
- // createImage(int width, int height).
-
- CropImageFilter filter = new CropImageFilter(sx1,sx2,sx2,sy2);
- FilteredImageSource src = new FilteredImageSource(img.getSource(),
- filter);
-
- subImage = Toolkit.getDefaultToolkit().createImage(src);
+ // FIXME: This code currently doesn't work. Null Pointer
+ // exception is thrown in this case. This happens
+ // because img.getSource() always returns null, since source gets
+ // never initialized when it is created with the help of
+ // createImage(int width, int height).
+ CropImageFilter filter = new CropImageFilter(sx1, sx2, sx2, sy2);
+ FilteredImageSource src = new FilteredImageSource(img.getSource(),
+ filter);
+
+ subImage = Toolkit.getDefaultToolkit().createImage(src);
}
- return drawImage(subImage, new AffineTransform(scaleX, 0, 0,
- scaleY, dx1, dy1),
- bgcolor,
- observer);
+ return drawImage(subImage,
+ new AffineTransform(scaleX, 0, 0, scaleY, dx1, dy1),
+ bgcolor, observer);
}
- public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2,
- int sx1, int sy1, int sx2, int sy2,
- ImageObserver observer)
+ public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
+ int sx1, int sy1, int sx2, int sy2,
+ ImageObserver observer)
{
-
- return drawImage (img, dx1, dy1, dx2, dy2,
- sx1, sy1, sx2, sy2, bg, observer);
+ return drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bg, observer);
}
public void drawOval(int x, int y, int width, int height)
{
- drawArc (x, y, width, height, 0, 360);
+ drawArc(x, y, width, height, 0, 360);
}
- public void drawRoundRect(int x, int y, int width, int height,
- int arcWidth, int arcHeight)
+ public void drawRoundRect(int x, int y, int width, int height, int arcWidth,
+ int arcHeight)
{
if (arcWidth > width)
arcWidth = width;
@@ -1360,93 +1300,89 @@ public class GdkGraphics2D extends Graphics2D
int xx = x + width - arcWidth;
int yy = y + height - arcHeight;
- drawArc (x, y, arcWidth, arcHeight, 90, 90);
- drawArc (xx, y, arcWidth, arcHeight, 0, 90);
- drawArc (xx, yy, arcWidth, arcHeight, 270, 90);
- drawArc (x, yy, arcWidth, arcHeight, 180, 90);
+ drawArc(x, y, arcWidth, arcHeight, 90, 90);
+ drawArc(xx, y, arcWidth, arcHeight, 0, 90);
+ drawArc(xx, yy, arcWidth, arcHeight, 270, 90);
+ drawArc(x, yy, arcWidth, arcHeight, 180, 90);
int y1 = y + arcHeight / 2;
int y2 = y + height - arcHeight / 2;
- drawLine (x, y1, x, y2);
- drawLine (x + width, y1, x + width, y2);
+ drawLine(x, y1, x, y2);
+ drawLine(x + width, y1, x + width, y2);
int x1 = x + arcWidth / 2;
int x2 = x + width - arcWidth / 2;
- drawLine (x1, y, x2, y);
- drawLine (x1, y + height, x2, y + height);
+ drawLine(x1, y, x2, y);
+ drawLine(x1, y + height, x2, y + height);
}
// these are the most accelerated painting paths
- native void cairoDrawGdkGlyphVector (GdkFontPeer f, GdkGlyphVector gv, float x, float y);
- native void cairoDrawGdkTextLayout (GdkFontPeer f, GdkTextLayout gl, float x, float y);
- native void cairoDrawString (GdkFontPeer f, String str, float x, float y);
+ native void cairoDrawGlyphVector(GdkFontPeer font,
+ float x, float y, int n,
+ int[] codes, float[] positions);
- GdkFontPeer getFontPeer()
- {
- return (GdkFontPeer) getFont().getPeer();
- }
+ native void cairoDrawGdkTextLayout(GdkTextLayout gl,
+ float x, float y);
- public void drawGdkGlyphVector(GdkGlyphVector gv, float x, float y)
+ GdkFontPeer getFontPeer()
{
- cairoDrawGdkGlyphVector(getFontPeer(), gv, x, y);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ return (GdkFontPeer) getFont().getPeer();
}
public void drawGdkTextLayout(GdkTextLayout gl, float x, float y)
{
- cairoDrawGdkTextLayout(getFontPeer(), gl, x, y);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ cairoDrawGdkTextLayout (gl, x, y);
+ updateBufferedImage ();
}
- public void drawString (String str, float x, float y)
+ public void drawString(String str, float x, float y)
{
- cairoDrawString(getFontPeer(), str, x, y);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ drawGlyphVector(getFont().createGlyphVector(null, str), x, y);
+ updateBufferedImage ();
}
- public void drawString (String str, int x, int y)
+ public void drawString(String str, int x, int y)
{
- drawString (str, (float)x, (float)y);
+ drawString (str, (float) x, (float) y);
}
- public void drawString (AttributedCharacterIterator ci, int x, int y)
+ public void drawString(AttributedCharacterIterator ci, int x, int y)
{
- drawString (ci, (float)x, (float)y);
+ drawString (ci, (float) x, (float) y);
}
- public void drawGlyphVector (GlyphVector gv, float x, float y)
+ public void drawGlyphVector(GlyphVector gv, float x, float y)
{
- if (gv instanceof GdkGlyphVector)
- drawGdkGlyphVector((GdkGlyphVector)gv, x, y);
- else
- throw new java.lang.UnsupportedOperationException ();
+ int n = gv.getNumGlyphs ();
+ int[] codes = gv.getGlyphCodes (0, n, null);
+ float[] positions = gv.getGlyphPositions (0, n, null);
+
+ setFont (gv.getFont ());
+ cairoDrawGlyphVector (getFontPeer(), x, y, n, codes, positions);
+ updateBufferedImage ();
}
- public void drawString (AttributedCharacterIterator ci, float x, float y)
+ public void drawString(AttributedCharacterIterator ci, float x, float y)
{
- GlyphVector gv = font.createGlyphVector (getFontRenderContext(), ci);
- drawGlyphVector (gv, x, y);
+ GlyphVector gv = getFont().createGlyphVector(getFontRenderContext(), ci);
+ drawGlyphVector(gv, x, y);
}
- public void fillArc (int x, int y, int width, int height,
- int startAngle, int arcAngle)
+ public void fillArc(int x, int y, int width, int height, int startAngle,
+ int arcAngle)
{
- fill (new Arc2D.Double((double)x, (double)y,
- (double)width, (double)height,
- (double)startAngle, (double)arcAngle,
- Arc2D.OPEN));
+ fill(new Arc2D.Double((double) x, (double) y, (double) width,
+ (double) height, (double) startAngle,
+ (double) arcAngle, Arc2D.OPEN));
}
public void fillOval(int x, int y, int width, int height)
{
- fillArc (x, y, width, height, 0, 360);
+ fillArc(x, y, width, height, 0, 360);
}
- public void fillRoundRect (int x, int y, int width, int height,
- int arcWidth, int arcHeight)
+ public void fillRoundRect(int x, int y, int width, int height, int arcWidth,
+ int arcHeight)
{
if (arcWidth > width)
arcWidth = width;
@@ -1456,17 +1392,19 @@ public class GdkGraphics2D extends Graphics2D
int xx = x + width - arcWidth;
int yy = y + height - arcHeight;
- fillArc (x, y, arcWidth, arcHeight, 90, 90);
- fillArc (xx, y, arcWidth, arcHeight, 0, 90);
- fillArc (xx, yy, arcWidth, arcHeight, 270, 90);
- fillArc (x, yy, arcWidth, arcHeight, 180, 90);
+ fillArc(x, y, arcWidth, arcHeight, 90, 90);
+ fillArc(xx, y, arcWidth, arcHeight, 0, 90);
+ fillArc(xx, yy, arcWidth, arcHeight, 270, 90);
+ fillArc(x, yy, arcWidth, arcHeight, 180, 90);
- fillRect (x, y + arcHeight / 2, width, height - arcHeight + 1);
- fillRect (x + arcWidth / 2, y, width - arcWidth + 1, height);
+ fillRect(x, y + arcHeight / 2, width, height - arcHeight + 1);
+ fillRect(x + arcWidth / 2, y, width - arcWidth + 1, height);
}
- public Font getFont ()
+ public Font getFont()
{
+ if (font == null)
+ return new Font("SansSerif", Font.PLAIN, 12);
return font;
}
@@ -1475,38 +1413,34 @@ public class GdkGraphics2D extends Graphics2D
// GtkFontMetrics into the drawing kit and ask cairo ourselves.
static native void releasePeerGraphicsResource(GdkFontPeer f);
- static native void getPeerTextMetrics (GdkFontPeer f, String str, double [] metrics);
- static native void getPeerFontMetrics (GdkFontPeer f, double [] metrics);
- public FontMetrics getFontMetrics ()
+ public FontMetrics getFontMetrics()
{
- // the reason we go via the toolkit here is to try to get
- // a cached object. the toolkit keeps such a cache.
- return Toolkit.getDefaultToolkit ().getFontMetrics (font);
+ return getFontMetrics(getFont());
}
- public FontMetrics getFontMetrics (Font f)
+ public FontMetrics getFontMetrics(Font f)
{
// the reason we go via the toolkit here is to try to get
// a cached object. the toolkit keeps such a cache.
- return Toolkit.getDefaultToolkit ().getFontMetrics (f);
+ return Toolkit.getDefaultToolkit().getFontMetrics(f);
}
- public void setFont (Font f)
+ public void setFont(Font f)
{
if (f.getPeer() instanceof GdkFontPeer)
font = f;
else
font =
- ((ClasspathToolkit)(Toolkit.getDefaultToolkit ()))
- .getFont (f.getName(), f.getAttributes ());
+ ((ClasspathToolkit)(Toolkit.getDefaultToolkit()))
+ .getFont(f.getName(), f.getAttributes());
}
-
+
public String toString()
{
- return getClass ().getName () +
- "[font=" + font.toString () +
- ",color=" + fg.toString () + "]";
+ return (getClass().getName()
+ + "[font=" + getFont().toString()
+ + ",color=" + fg.toString()
+ + "]");
}
-
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java b/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
new file mode 100644
index 00000000000..c5afd0bc952
--- /dev/null
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
@@ -0,0 +1,138 @@
+/* GdkGraphicsConfiguration.java -- describes characteristics of graphics
+ Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.peer.gtk;
+
+import java.awt.BufferCapabilities;
+import java.awt.ImageCapabilities;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.Rectangle;
+
+import java.awt.geom.AffineTransform;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.VolatileImage;
+
+public class GdkGraphicsConfiguration
+ extends GraphicsConfiguration
+{
+ GdkScreenGraphicsDevice gdkScreenGraphicsDevice;
+ ColorModel cm;
+ Rectangle bounds;
+
+ public GtkToolkit getToolkit()
+ {
+ return gdkScreenGraphicsDevice.getToolkit();
+ }
+
+ public GdkGraphicsConfiguration(GdkScreenGraphicsDevice dev)
+ {
+ this.gdkScreenGraphicsDevice = dev;
+ cm = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB).getColorModel();
+ bounds = getToolkit().getBounds();
+ }
+
+ public GraphicsDevice getDevice()
+ {
+ return gdkScreenGraphicsDevice;
+ }
+
+ public BufferedImage createCompatibleImage(int w, int h)
+ {
+ return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+ }
+
+ public BufferedImage createCompatibleImage(int w, int h,
+ int transparency)
+ {
+ return createCompatibleImage(w, h);
+ }
+
+ public VolatileImage createCompatibleVolatileImage(int w, int h)
+ {
+ throw new java.lang.UnsupportedOperationException ();
+ }
+
+ public VolatileImage createCompatibleVolatileImage(int w, int h,
+ ImageCapabilities caps)
+ throws java.awt.AWTException
+ {
+ throw new java.lang.UnsupportedOperationException ();
+ }
+
+ public ColorModel getColorModel()
+ {
+ return cm;
+ }
+
+ public ColorModel getColorModel(int transparency)
+ {
+ return getColorModel();
+ }
+
+ public AffineTransform getDefaultTransform()
+ {
+ // FIXME: extract the GDK DPI information here.
+ return new AffineTransform();
+ }
+
+ public AffineTransform getNormalizingTransform()
+ {
+ // FIXME: extract the GDK DPI information here.
+ return new AffineTransform();
+ }
+
+ public Rectangle getBounds()
+ {
+ return bounds;
+ }
+
+ public BufferCapabilities getBufferCapabilities()
+ {
+ return new BufferCapabilities(getImageCapabilities(),
+ getImageCapabilities(),
+ BufferCapabilities.FlipContents.UNDEFINED);
+ }
+
+ public ImageCapabilities getImageCapabilities()
+ {
+ return new ImageCapabilities(false);
+ }
+
+}
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java b/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
index 45e0c21c0f2..1f10c486921 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
@@ -42,26 +42,37 @@ import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
-import java.awt.Rectangle;
-import java.awt.Shape;
+import java.awt.HeadlessException;
import java.awt.image.BufferedImage;
import java.util.Locale;
public class GdkGraphicsEnvironment extends GraphicsEnvironment
{
- public GdkGraphicsEnvironment ()
+ GtkToolkit gtkToolkit;
+
+ public GtkToolkit getToolkit()
+ {
+ return gtkToolkit;
+ }
+
+ public GdkGraphicsEnvironment (GtkToolkit tk)
{
super();
+ gtkToolkit = tk;
}
public GraphicsDevice[] getScreenDevices ()
{
- throw new java.lang.UnsupportedOperationException ();
+ // FIXME: Support multiple screens, since GDK can.
+ return new GraphicsDevice[] { new GdkScreenGraphicsDevice (this) };
}
public GraphicsDevice getDefaultScreenDevice ()
{
- throw new java.lang.UnsupportedOperationException ();
+ if (GraphicsEnvironment.isHeadless ())
+ throw new HeadlessException ();
+
+ return new GdkScreenGraphicsDevice (this);
}
public Graphics2D createGraphics (BufferedImage image)
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java b/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
index a7b93e5b9ad..a9c1fb9db26 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
@@ -45,14 +45,31 @@ import java.awt.image.ColorModel;
import java.awt.image.DirectColorModel;
import java.awt.image.ImageConsumer;
import java.awt.image.ImageProducer;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
+import java.awt.image.Raster;
+import java.awt.image.RenderedImage;
+import java.io.DataOutput;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Locale;
import java.util.Vector;
+import javax.imageio.ImageReader;
+import javax.imageio.ImageWriter;
+import javax.imageio.ImageReadParam;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.IIOImage;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.spi.ImageReaderSpi;
+import javax.imageio.spi.ImageWriterSpi;
+import javax.imageio.spi.IIORegistry;
+import javax.imageio.stream.ImageInputStream;
+import javax.imageio.stream.ImageOutputStream;
+
public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
{
static
@@ -65,20 +82,27 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
}
native static void initStaticState ();
private final int native_state = GtkGenericPeer.getUniqueInteger ();
+ private boolean initialized = false;
// the current set of ImageConsumers for this decoder
Vector curr;
// interface to GdkPixbuf
native void initState ();
- native void pumpBytes (byte bytes[], int len);
+ native void pumpBytes (byte[] bytes, int len);
native void finish ();
+ static native void streamImage(int[] bytes, String format, int width, int height, boolean hasAlpha, DataOutput sink);
// gdk-pixbuf provids data in RGBA format
static final ColorModel cm = new DirectColorModel (32, 0xff000000,
0x00ff0000,
0x0000ff00,
0x000000ff);
+ public GdkPixbufDecoder (InputStream in)
+ {
+ super (in);
+ }
+
public GdkPixbufDecoder (String filename)
{
super (filename);
@@ -150,24 +174,349 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
curr = null;
}
- // remaining helper class and static method is a convenience for the Gtk
- // peers, for loading a BufferedImage in off a disk file. one would think
- // this ought to be fairly straightforward, but it does not appear
- // anywhere else I can find.
+ public void finalize()
+ {
+ finish();
+ }
+
+
+ public static class ImageFormatSpec
+ {
+ public String name;
+ public boolean writable = false;
+ public ArrayList mimeTypes = new ArrayList();
+ public ArrayList extensions = new ArrayList();
+
+ public ImageFormatSpec(String name, boolean writable)
+ {
+ this.name = name;
+ this.writable = writable;
+ }
+
+ public synchronized void addMimeType(String m)
+ {
+ mimeTypes.add(m);
+ }
+
+ public synchronized void addExtension(String e)
+ {
+ extensions.add(e);
+ }
+ }
+
+ static ArrayList imageFormatSpecs;
+
+ public static ImageFormatSpec registerFormat(String name, boolean writable)
+ {
+ ImageFormatSpec ifs = new ImageFormatSpec(name, writable);
+ synchronized(GdkPixbufDecoder.class)
+ {
+ if (imageFormatSpecs == null)
+ imageFormatSpecs = new ArrayList();
+ imageFormatSpecs.add(ifs);
+ }
+ return ifs;
+ }
+
+ static String[] getFormatNames(boolean writable)
+ {
+ ArrayList names = new ArrayList();
+ synchronized (imageFormatSpecs)
+ {
+ Iterator i = imageFormatSpecs.iterator();
+ while (i.hasNext())
+ {
+ ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+ if (writable && !ifs.writable)
+ continue;
+ names.add(ifs.name);
+
+ /*
+ * In order to make the filtering code work, we need to register
+ * this type under every "format name" likely to be used as a synonym.
+ * This generally means "all the extensions people might use".
+ */
+
+ Iterator j = ifs.extensions.iterator();
+ while (j.hasNext())
+ names.add((String) j.next());
+ }
+ }
+ Object[] objs = names.toArray();
+ String[] strings = new String[objs.length];
+ for (int i = 0; i < objs.length; ++i)
+ strings[i] = (String) objs[i];
+ return strings;
+ }
+
+ static String[] getFormatExtensions(boolean writable)
+ {
+ ArrayList extensions = new ArrayList();
+ synchronized (imageFormatSpecs)
+ {
+ Iterator i = imageFormatSpecs.iterator();
+ while (i.hasNext())
+ {
+ ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+ if (writable && !ifs.writable)
+ continue;
+ Iterator j = ifs.extensions.iterator();
+ while (j.hasNext())
+ extensions.add((String) j.next());
+ }
+ }
+ Object[] objs = extensions.toArray();
+ String[] strings = new String[objs.length];
+ for (int i = 0; i < objs.length; ++i)
+ strings[i] = (String) objs[i];
+ return strings;
+ }
+
+ static String[] getFormatMimeTypes(boolean writable)
+ {
+ ArrayList mimeTypes = new ArrayList();
+ synchronized (imageFormatSpecs)
+ {
+ Iterator i = imageFormatSpecs.iterator();
+ while (i.hasNext())
+ {
+ ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+ if (writable && !ifs.writable)
+ continue;
+ Iterator j = ifs.mimeTypes.iterator();
+ while (j.hasNext())
+ mimeTypes.add((String) j.next());
+ }
+ }
+ Object[] objs = mimeTypes.toArray();
+ String[] strings = new String[objs.length];
+ for (int i = 0; i < objs.length; ++i)
+ strings[i] = (String) objs[i];
+ return strings;
+ }
+
+
+ static String findFormatName(Object ext, boolean needWritable)
+ {
+ if (ext == null)
+ throw new IllegalArgumentException("extension is null");
+
+ if (!(ext instanceof String))
+ throw new IllegalArgumentException("extension is not a string");
+
+ String str = (String) ext;
+
+ Iterator i = imageFormatSpecs.iterator();
+ while (i.hasNext())
+ {
+ ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+
+ if (needWritable && !ifs.writable)
+ continue;
+
+ if (ifs.name.equals(str))
+ return str;
+
+ Iterator j = ifs.extensions.iterator();
+ while (j.hasNext())
+ {
+ String extension = (String)j.next();
+ if (extension.equals(str))
+ return ifs.name;
+ }
+
+ j = ifs.mimeTypes.iterator();
+ while (j.hasNext())
+ {
+ String mimeType = (String)j.next();
+ if (mimeType.equals(str))
+ return ifs.name;
+ }
+ }
+ throw new IllegalArgumentException("unknown extension '" + str + "'");
+ }
+
+ private static GdkPixbufReaderSpi readerSpi;
+ private static GdkPixbufWriterSpi writerSpi;
+
+ public static synchronized GdkPixbufReaderSpi getReaderSpi()
+ {
+ if (readerSpi == null)
+ readerSpi = new GdkPixbufReaderSpi();
+ return readerSpi;
+ }
+
+ public static synchronized GdkPixbufWriterSpi getWriterSpi()
+ {
+ if (writerSpi == null)
+ writerSpi = new GdkPixbufWriterSpi();
+ return writerSpi;
+ }
+
+ public static void registerSpis(IIORegistry reg)
+ {
+ reg.registerServiceProvider(getReaderSpi(), ImageReaderSpi.class);
+ reg.registerServiceProvider(getWriterSpi(), ImageWriterSpi.class);
+ }
+
+ public static class GdkPixbufWriterSpi extends ImageWriterSpi
+ {
+ public GdkPixbufWriterSpi()
+ {
+ super("GdkPixbuf", "2.x",
+ GdkPixbufDecoder.getFormatNames(true),
+ GdkPixbufDecoder.getFormatExtensions(true),
+ GdkPixbufDecoder.getFormatMimeTypes(true),
+ "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufWriter",
+ new Class[] { ImageOutputStream.class },
+ new String[] { "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufReaderSpi" },
+ false, null, null, null, null,
+ false, null, null, null, null);
+ }
+
+ public boolean canEncodeImage(ImageTypeSpecifier ts)
+ {
+ return true;
+ }
+
+ public ImageWriter createWriterInstance(Object ext)
+ {
+ return new GdkPixbufWriter(this, ext);
+ }
+
+ public String getDescription(java.util.Locale loc)
+ {
+ return "GdkPixbuf Writer SPI";
+ }
+
+ }
+
+ public static class GdkPixbufReaderSpi extends ImageReaderSpi
+ {
+ public GdkPixbufReaderSpi()
+ {
+ super("GdkPixbuf", "2.x",
+ GdkPixbufDecoder.getFormatNames(false),
+ GdkPixbufDecoder.getFormatExtensions(false),
+ GdkPixbufDecoder.getFormatMimeTypes(false),
+ "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufReader",
+ new Class[] { ImageInputStream.class },
+ new String[] { "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufWriterSpi" },
+ false, null, null, null, null,
+ false, null, null, null, null);
+ }
- private static class BufferedImageBuilder implements ImageConsumer
+ public boolean canDecodeInput(Object obj)
+ {
+ return true;
+ }
+
+ public ImageReader createReaderInstance(Object ext)
+ {
+ return new GdkPixbufReader(this, ext);
+ }
+
+ public String getDescription(Locale loc)
+ {
+ return "GdkPixbuf Reader SPI";
+ }
+ }
+
+ private static class GdkPixbufWriter
+ extends ImageWriter
+ {
+ String ext;
+ public GdkPixbufWriter(GdkPixbufWriterSpi ownerSpi, Object ext)
+ {
+ super(ownerSpi);
+ this.ext = findFormatName(ext, true);
+ }
+
+ public IIOMetadata convertImageMetadata (IIOMetadata inData,
+ ImageTypeSpecifier imageType,
+ ImageWriteParam param)
+ {
+ return null;
+ }
+
+ public IIOMetadata convertStreamMetadata (IIOMetadata inData,
+ ImageWriteParam param)
+ {
+ return null;
+ }
+
+ public IIOMetadata getDefaultImageMetadata (ImageTypeSpecifier imageType,
+ ImageWriteParam param)
+ {
+ return null;
+ }
+
+ public IIOMetadata getDefaultStreamMetadata (ImageWriteParam param)
+ {
+ return null;
+ }
+
+ public void write (IIOMetadata streamMetadata, IIOImage i, ImageWriteParam param)
+ throws IOException
+ {
+ RenderedImage image = i.getRenderedImage();
+ Raster ras = image.getData();
+ int width = ras.getWidth();
+ int height = ras.getHeight();
+ ColorModel model = image.getColorModel();
+ int[] pixels = GdkGraphics2D.findSimpleIntegerArray (image.getColorModel(), ras);
+
+ if (pixels == null)
+ {
+ BufferedImage img = new BufferedImage(width, height,
+ (model != null && model.hasAlpha() ?
+ BufferedImage.TYPE_INT_ARGB
+ : BufferedImage.TYPE_INT_RGB));
+ int[] pix = new int[4];
+ for (int y = 0; y < height; ++y)
+ for (int x = 0; x < width; ++x)
+ img.setRGB(x, y, model.getRGB(ras.getPixel(x, y, pix)));
+ pixels = GdkGraphics2D.findSimpleIntegerArray (img.getColorModel(),
+ img.getRaster());
+ model = img.getColorModel();
+ }
+
+ processImageStarted(1);
+ streamImage(pixels, this.ext, width, height, model.hasAlpha(),
+ (DataOutput) this.getOutput());
+ processImageComplete();
+ }
+ }
+
+ private static class GdkPixbufReader
+ extends ImageReader
+ implements ImageConsumer
{
+ // ImageConsumer parts
+ GdkPixbufDecoder dec;
BufferedImage bufferedImage;
ColorModel defaultModel;
+ int width;
+ int height;
+ String ext;
+
+ public GdkPixbufReader(GdkPixbufReaderSpi ownerSpi, Object ext)
+ {
+ super(ownerSpi);
+ this.ext = findFormatName(ext, false);
+ }
- public BufferedImage getBufferedImage()
+ public GdkPixbufReader(GdkPixbufReaderSpi ownerSpi, Object ext, GdkPixbufDecoder d)
{
- return bufferedImage;
+ this(ownerSpi, ext);
+ dec = d;
}
- public void setDimensions(int width, int height)
+ public void setDimensions(int w, int h)
{
- bufferedImage = new BufferedImage (width, height, BufferedImage.TYPE_INT_ARGB);
+ processImageStarted(1);
+ width = w;
+ height = h;
}
public void setProperties(Hashtable props) {}
@@ -189,65 +538,137 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
ColorModel model, int[] pixels,
int offset, int scansize)
{
- if (bufferedImage != null)
+ if (model == null)
+ model = defaultModel;
+
+ if (bufferedImage == null)
{
+ bufferedImage = new BufferedImage (width, height, (model != null && model.hasAlpha() ?
+ BufferedImage.TYPE_INT_ARGB
+ : BufferedImage.TYPE_INT_RGB));
+ }
- if (model == null)
- model = defaultModel;
-
- int pixels2[];
- if (model != null)
- {
- pixels2 = new int[pixels.length];
- for (int yy = 0; yy < h; yy++)
- for (int xx = 0; xx < w; xx++)
- {
- int i = yy * scansize + xx;
- pixels2[i] = model.getRGB (pixels[i]);
- }
- }
- else
- pixels2 = pixels;
-
- bufferedImage.setRGB (x, y, w, h, pixels2, offset, scansize);
+ int pixels2[];
+ if (model != null)
+ {
+ pixels2 = new int[pixels.length];
+ for (int yy = 0; yy < h; yy++)
+ for (int xx = 0; xx < w; xx++)
+ {
+ int i = yy * scansize + xx;
+ pixels2[i] = model.getRGB (pixels[i]);
+ }
}
+ else
+ pixels2 = pixels;
+
+ bufferedImage.setRGB (x, y, w, h, pixels2, offset, scansize);
+ processImageProgress(y / (height == 0 ? 1 : height));
+ }
+
+ public void imageComplete(int status)
+ {
+ processImageComplete();
+ }
+
+ public BufferedImage getBufferedImage()
+ {
+ if (bufferedImage == null && dec != null)
+ dec.startProduction (this);
+ return bufferedImage;
+ }
+
+ // ImageReader parts
+
+ public int getNumImages(boolean allowSearch)
+ throws IOException
+ {
+ return 1;
+ }
+
+ public IIOMetadata getImageMetadata(int i)
+ {
+ return null;
+ }
+
+ public IIOMetadata getStreamMetadata()
+ throws IOException
+ {
+ return null;
}
- public void imageComplete(int status) {}
+ public Iterator getImageTypes(int imageIndex)
+ throws IOException
+ {
+ BufferedImage img = getBufferedImage();
+ Vector vec = new Vector();
+ vec.add(new ImageTypeSpecifier(img));
+ return vec.iterator();
+ }
+
+ public int getHeight(int imageIndex)
+ throws IOException
+ {
+ return getBufferedImage().getHeight();
+ }
+
+ public int getWidth(int imageIndex)
+ throws IOException
+ {
+ return getBufferedImage().getWidth();
+ }
+
+ public void setInput(Object input,
+ boolean seekForwardOnly,
+ boolean ignoreMetadata)
+ {
+ super.setInput(input, seekForwardOnly, ignoreMetadata);
+ dec = new GdkPixbufDecoder((InputStream) getInput());
+ }
+
+ public BufferedImage read(int imageIndex, ImageReadParam param)
+ throws IOException
+ {
+ return getBufferedImage ();
+ }
}
+ // remaining helper class and static method is a convenience for the Gtk
+ // peers, for loading a BufferedImage in off a disk file without going
+ // through the whole imageio system.
+
public static BufferedImage createBufferedImage (String filename)
{
- BufferedImageBuilder bb = new BufferedImageBuilder ();
- GdkPixbufDecoder dec = new GdkPixbufDecoder (filename);
- dec.startProduction (bb);
- return bb.getBufferedImage ();
+ GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(),
+ "png", // reader auto-detects, doesn't matter
+ new GdkPixbufDecoder (filename));
+ return r.getBufferedImage ();
}
public static BufferedImage createBufferedImage (URL u)
{
- BufferedImageBuilder bb = new BufferedImageBuilder ();
- GdkPixbufDecoder dec = new GdkPixbufDecoder (u);
- dec.startProduction (bb);
- return bb.getBufferedImage ();
+ GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(),
+ "png", // reader auto-detects, doesn't matter
+ new GdkPixbufDecoder (u));
+ return r.getBufferedImage ();
}
public static BufferedImage createBufferedImage (byte[] imagedata, int imageoffset,
int imagelength)
{
- BufferedImageBuilder bb = new BufferedImageBuilder ();
- GdkPixbufDecoder dec = new GdkPixbufDecoder (imagedata, imageoffset, imagelength);
- dec.startProduction (bb);
- return bb.getBufferedImage ();
+ GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(),
+ "png", // reader auto-detects, doesn't matter
+ new GdkPixbufDecoder (imagedata,
+ imageoffset,
+ imagelength));
+ return r.getBufferedImage ();
}
public static BufferedImage createBufferedImage (ImageProducer producer)
{
- BufferedImageBuilder bb = new BufferedImageBuilder ();
- producer.startProduction(bb);
- return bb.getBufferedImage ();
+ GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(), "png" /* ignored */, null);
+ producer.startProduction(r);
+ return r.getBufferedImage ();
}
-
-
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkArg.java b/libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java
index 0491856849c..2438b68501a 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkArg.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java
@@ -1,5 +1,5 @@
-/* GtkArg.java
- Copyright (C) 1999 Free Software Foundation, Inc.
+/* GdkRobot.java -- an XTest implementation of RobotPeer
+ Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,27 +35,60 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-
package gnu.java.awt.peer.gtk;
-public class GtkArg
+import java.awt.AWTException;
+import java.awt.GraphicsDevice;
+import java.awt.image.ColorModel;
+import java.awt.image.DirectColorModel;
+import java.awt.Rectangle;
+import java.awt.peer.RobotPeer;
+
+/**
+ * Implements the RobotPeer interface using the XTest extension.
+ *
+ * @author Thomas Fitzsimmons
+ */
+public class GdkRobotPeer implements RobotPeer
{
- String name;
- Object value;
+ // gdk-pixbuf provides data in RGBA format
+ static final ColorModel cm = new DirectColorModel (32, 0xff000000,
+ 0x00ff0000,
+ 0x0000ff00,
+ 0x000000ff);
- public GtkArg (String name, Object value)
+ public GdkRobotPeer (GraphicsDevice screen) throws AWTException
{
- this.name = name;
- this.value = value;
+ // FIXME: make use of screen parameter when GraphicsDevice is
+ // implemented.
+ if (!initXTest ())
+ throw new AWTException ("XTest extension not supported");
}
- public String getName ()
+ native boolean initXTest ();
+
+ // RobotPeer methods
+ public native void mouseMove (int x, int y);
+ public native void mousePress (int buttons);
+ public native void mouseRelease (int buttons);
+ public native void mouseWheel (int wheelAmt);
+ public native void keyPress (int keycode);
+ public native void keyRelease (int keycode);
+ native int[] nativeGetRGBPixels (int x, int y, int width, int height);
+
+ public int getRGBPixel (int x, int y)
{
- return name;
+ return cm.getRGB (nativeGetRGBPixels (x, y, 1, 1)[0]);
}
- public Object getValue ()
+ public int[] getRGBPixels (Rectangle r)
{
- return value;
+ int[] gdk_pixels = nativeGetRGBPixels (r.x, r.y, r.width, r.height);
+ int[] pixels = new int[r.width * r.height];
+
+ for (int i = 0; i < r.width * r.height; i++)
+ pixels[i] = cm.getRGB (gdk_pixels[i]);
+
+ return pixels;
}
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkArgList.java b/libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java
index 28cea93db4a..0acef60b177 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkArgList.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java
@@ -1,5 +1,5 @@
-/* GtkArgList.java
- Copyright (C) 1999 Free Software Foundation, Inc.
+/* GdkScreenGraphicsDevice.java -- information about a screen device
+ Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,39 +37,46 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.util.Vector;
-public class GtkArgList extends Vector
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsConfiguration;
+
+public class GdkScreenGraphicsDevice extends GraphicsDevice
{
- void add (GtkArg arg)
+ GdkGraphicsEnvironment env;
+
+ public GtkToolkit getToolkit()
{
- addElement (arg);
+ return env.getToolkit();
}
- void add (String name, boolean value)
- {
- addElement (new GtkArg (name, Boolean.valueOf(value)));
+ public GdkScreenGraphicsDevice (GdkGraphicsEnvironment e)
+ {
+ super ();
+ env = e;
}
-
- void add (String name, int value)
+
+ public int getType ()
{
- addElement (new GtkArg (name, new Integer (value)));
+ return GraphicsDevice.TYPE_RASTER_SCREEN;
}
- void add (String name, float value)
+ public String getIDstring ()
{
- addElement (new GtkArg (name, new Float (value)));
+ // FIXME: query X for this string
+ return "default GDK device ID string";
}
- void add (String name, Object value)
+ public GraphicsConfiguration[] getConfigurations ()
{
- addElement (new GtkArg (name, value));
+ // FIXME: query X for the list of possible configurations
+ return new GraphicsConfiguration [] { new GdkGraphicsConfiguration(this) };
}
- synchronized void setArgs (GtkComponentPeer cp)
+ public GraphicsConfiguration getDefaultConfiguration ()
{
- for (int i = 0; i < elementCount; i++)
- cp.set ((GtkArg)elementData[i]);
+
+ // FIXME: query X for default configuration
+ return new GdkGraphicsConfiguration(this);
}
}
-
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java b/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
index 26cfc16f0da..b5548a837ba 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
@@ -52,7 +52,6 @@ import java.awt.geom.Rectangle2D;
import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
-import java.util.Map;
import java.awt.font.TextAttribute;
import gnu.classpath.Configuration;
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
index 9fba828b74b..1ef992f02df 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
@@ -41,7 +41,6 @@ package gnu.java.awt.peer.gtk;
import java.awt.AWTEvent;
import java.awt.Button;
import java.awt.Component;
-import java.awt.Font;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
index adb7008ca3f..2d1f6500862 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
+import java.awt.ItemSelectable;
+import java.awt.event.ItemEvent;
import java.awt.CheckboxMenuItem;
import java.awt.peer.CheckboxMenuItemPeer;
import java.awt.peer.MenuItemPeer;
@@ -54,4 +56,15 @@ public class GtkCheckboxMenuItemPeer extends GtkMenuItemPeer
}
native public void setState (boolean t);
+
+ protected void postMenuActionEvent ()
+ {
+ CheckboxMenuItem item = (CheckboxMenuItem)awtWidget;
+ q().postEvent (new ItemEvent ((ItemSelectable)awtWidget,
+ ItemEvent.ITEM_STATE_CHANGED,
+ item.getActionCommand(),
+ item.getState() ? ItemEvent.DESELECTED : ItemEvent.SELECTED));
+
+ super.postMenuActionEvent();
+ }
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
index a6fd1bac183..4af88f5332c 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
@@ -40,8 +40,6 @@ package gnu.java.awt.peer.gtk;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
-import java.awt.Component;
-import java.awt.Font;
import java.awt.peer.CheckboxPeer;
public class GtkCheckboxPeer extends GtkComponentPeer
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
index 05464143dcf..a065e13abcb 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
import java.awt.Choice;
import java.awt.event.ItemEvent;
import java.awt.peer.ChoicePeer;
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
index 31d59ce19b0..d9d9907e92e 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
@@ -47,14 +47,12 @@ import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
-import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.Insets;
import java.awt.ItemSelectable;
-import java.awt.KeyboardFocusManager;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
@@ -386,7 +384,7 @@ public class GtkComponentPeer extends GtkGenericPeer
if (x == 0 && y == 0 && width == 0 && height == 0)
return;
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
new Rectangle (x, y, width, height)));
}
@@ -508,14 +506,14 @@ public class GtkComponentPeer extends GtkGenericPeer
protected void postMouseEvent(int id, long when, int mods, int x, int y,
int clickCount, boolean popupTrigger)
{
- q.postEvent(new MouseEvent(awtComponent, id, when, mods, x, y,
+ q().postEvent(new MouseEvent(awtComponent, id, when, mods, x, y,
clickCount, popupTrigger));
}
protected void postExposeEvent (int x, int y, int width, int height)
{
if (!isInRepaint)
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x, y, width, height)));
}
@@ -535,23 +533,23 @@ public class GtkComponentPeer extends GtkGenericPeer
{
synchronized (q)
{
- q.postEvent (keyEvent);
- q.postEvent (new KeyEvent (awtComponent, KeyEvent.KEY_TYPED, when, mods,
+ q().postEvent (keyEvent);
+ q().postEvent (new KeyEvent (awtComponent, KeyEvent.KEY_TYPED, when, mods,
KeyEvent.VK_UNDEFINED, keyChar, keyLocation));
}
}
else
- q.postEvent (keyEvent);
+ q().postEvent (keyEvent);
}
protected void postFocusEvent (int id, boolean temporary)
{
- q.postEvent (new FocusEvent (awtComponent, id, temporary));
+ q().postEvent (new FocusEvent (awtComponent, id, temporary));
}
protected void postItemEvent (Object item, int stateChange)
{
- q.postEvent (new ItemEvent ((ItemSelectable)awtComponent,
+ q().postEvent (new ItemEvent ((ItemSelectable)awtComponent,
ItemEvent.ITEM_STATE_CHANGED,
item, stateChange));
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
index 7fddd56619f..61551835ec7 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
@@ -46,7 +45,6 @@ import java.awt.Font;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Window;
-import java.awt.event.PaintEvent;
import java.awt.peer.ComponentPeer;
import java.awt.peer.ContainerPeer;
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
index af22a2723ef..9bf234404d1 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
@@ -38,8 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
-import java.awt.Component;
import java.awt.Dialog;
import java.awt.Graphics;
import java.awt.Rectangle;
@@ -76,7 +74,7 @@ public class GtkDialogPeer extends GtkWindowPeer
protected void postExposeEvent (int x, int y, int width, int height)
{
if (!isInRepaint)
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x + insets.left,
y + insets.top,
width, height)));
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
index 19925568e87..fd9c155d2d1 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
@@ -38,12 +38,10 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
import java.awt.Dialog;
import java.awt.FileDialog;
import java.awt.Graphics;
import java.awt.Window;
-import java.awt.event.WindowEvent;
import java.awt.peer.FileDialogPeer;
import java.io.File;
import java.io.FilenameFilter;
@@ -114,7 +112,7 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
// GtkFileChooser requires absolute filenames. If the given filename
// is not absolute, let's construct it based on current directory.
- currentFile = fileName;
+ currentFile = fileName;
if (fileName.indexOf(FS) == 0)
{
nativeSetFile (fileName);
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
index 605d738a199..1369657a8aa 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
@@ -46,7 +46,6 @@ import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.font.LineMetrics;
import java.awt.geom.Rectangle2D;
-import java.awt.peer.FontPeer;
import java.text.CharacterIterator;
import java.util.Locale;
import java.util.MissingResourceException;
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
index c0c1437b656..b22a25e8869 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
@@ -38,11 +38,8 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.Component;
-import java.awt.Container;
import java.awt.Frame;
import java.awt.Graphics;
-import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MenuBar;
import java.awt.Rectangle;
@@ -165,7 +162,7 @@ public class GtkFramePeer extends GtkWindowPeer
setMenuBar (frame.getMenuBar ());
setTitle (frame.getTitle ());
- setResizable (frame.isResizable ());
+ gtkWindowSetResizable (frame.isResizable ());
setIconImage(frame.getIconImage());
}
@@ -237,9 +234,9 @@ public class GtkFramePeer extends GtkWindowPeer
frame_y,
frame_width,
frame_height);
- }
- awtComponent.validate();
+ awtComponent.validate();
+ }
}
protected void postMouseEvent(int id, long when, int mods, int x, int y,
@@ -253,7 +250,7 @@ public class GtkFramePeer extends GtkWindowPeer
protected void postExposeEvent (int x, int y, int width, int height)
{
if (!isInRepaint)
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x + insets.left,
y + insets.top,
width, height)));
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java
index 657e830bf2e..f161526f647 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java
@@ -39,6 +39,7 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.EventQueue;
+import java.awt.Toolkit;
import java.awt.event.ActionEvent;
public class GtkGenericPeer
@@ -57,6 +58,11 @@ public class GtkGenericPeer
// Dispose of our native state.
public native void dispose ();
+ static EventQueue q ()
+ {
+ return Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+ }
+
protected GtkGenericPeer (Object awtWidget)
{
this.awtWidget = awtWidget;
@@ -70,7 +76,7 @@ public class GtkGenericPeer
protected void postActionEvent (String command, int mods)
{
- q.postEvent (new ActionEvent (awtWidget, ActionEvent.ACTION_PERFORMED,
+ q().postEvent (new ActionEvent (awtWidget, ActionEvent.ACTION_PERFORMED,
command, mods));
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java
index 25473d78ea2..3e3e2e3f1cb 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java
@@ -38,8 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.Component;
-import java.awt.Font;
import java.awt.Label;
import java.awt.peer.LabelPeer;
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java b/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java
deleted file mode 100644
index 4cbe190731c..00000000000
--- a/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/* GtkMainThread.java -- Runs gtk_main()
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-02111-1307 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.awt.peer.gtk;
-
-public class GtkMainThread extends GtkGenericPeer implements Runnable
-{
- private static Thread mainThread = null;
- private static Object mainThreadLock = new Object();
-
- // Whether the gtk+ subsystem has been initialized.
- private boolean gtkInitCalled = false;
-
- /**
- * Call gtk_init. It is very important that this happen before any other
- * gtk calls.
- *
- * @param portableNativeSync 1 if the Java property
- * gnu.classpath.awt.gtk.portable.native.sync is set to "true". 0 if it is
- * set to "false". -1 if unset.
- */
- static native void gtkInit(int portableNativeSync);
- native void gtkMain();
-
- public GtkMainThread()
- {
- super (null);
- synchronized (mainThreadLock)
- {
- if (mainThread != null)
- throw new IllegalStateException();
- mainThread = new Thread(this, "GtkMain");
- }
-
- synchronized (this)
- {
- mainThread.start();
-
- while (!gtkInitCalled)
- {
- try
- {
- wait();
- }
- catch (InterruptedException e) { }
- }
- }
- }
-
- public void run()
- {
- /* Pass the value of the gnu.classpath.awt.gtk.portable.native.sync system
- * property to C. */
- int portableNativeSync;
- String portNatSyncProp =
- System.getProperty("gnu.classpath.awt.gtk.portable.native.sync");
-
- if (portNatSyncProp == null)
- portableNativeSync = -1; // unset
- else if (Boolean.valueOf(portNatSyncProp).booleanValue())
- portableNativeSync = 1; // true
- else
- portableNativeSync = 0; // false
-
- synchronized (this)
- {
- gtkInit(portableNativeSync);
- gtkInitCalled = true;
- notifyAll();
- }
- gtkMain();
- }
-}
-
-
-
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
index dd061ed37b8..cd7ca8ac79b 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
@@ -38,8 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.Font;
-import java.awt.MenuComponent;
import java.awt.peer.MenuComponentPeer;
public class GtkMenuComponentPeer extends GtkGenericPeer
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
index 81da90df012..33242f69c4b 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
@@ -43,8 +43,6 @@ import java.awt.Menu;
import java.awt.MenuComponent;
import java.awt.MenuBar;
import java.awt.MenuItem;
-import java.awt.peer.MenuBarPeer;
-import java.awt.peer.MenuComponentPeer;
import java.awt.peer.MenuItemPeer;
import java.awt.peer.MenuPeer;
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
index 233bed75a9b..b99ef24c881 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
@@ -41,7 +41,6 @@ package gnu.java.awt.peer.gtk;
import java.awt.Adjustable;
import java.awt.Dimension;
import java.awt.ScrollPane;
-import java.awt.peer.ComponentPeer;
import java.awt.peer.ScrollPanePeer;
public class GtkScrollPanePeer extends GtkContainerPeer
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
index ef4289633c4..d6a498ce5df 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
@@ -73,7 +73,7 @@ public class GtkScrollbarPeer extends GtkComponentPeer
protected void postAdjustmentEvent (int type, int value)
{
- q.postEvent (new AdjustmentEvent ((Adjustable)awtComponent,
+ q().postEvent (new AdjustmentEvent ((Adjustable)awtComponent,
AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
type, value));
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
index 8893e36e838..3051ecfcfa8 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
@@ -38,11 +38,8 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
-import java.awt.Component;
import java.awt.Rectangle;
import java.awt.TextComponent;
-import java.awt.event.KeyEvent;
import java.awt.event.TextEvent;
import java.awt.peer.TextComponentPeer;
@@ -85,6 +82,6 @@ public class GtkTextComponentPeer extends GtkComponentPeer
protected void postTextEvent ()
{
- q.postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
+ q().postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
}
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java b/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java
index def22e9874e..f57f53a17a7 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java
@@ -51,7 +51,6 @@ import java.awt.datatransfer.Clipboard;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.font.FontRenderContext;
-import java.awt.font.TextAttribute;
import java.awt.im.InputMethodHighlight;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
@@ -59,15 +58,17 @@ import java.awt.image.ImageConsumer;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.peer.*;
+import java.io.InputStream;
import java.net.URL;
import java.text.AttributedString;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.MissingResourceException;
import java.util.Properties;
+import javax.imageio.spi.IIORegistry;
/* This class uses a deprecated method java.awt.peer.ComponentPeer.getPeer().
This merits comment. We are basically calling Sun's bluff on this one.
@@ -86,9 +87,8 @@ import java.util.Properties;
public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
implements EmbeddedWindowSupport
{
- GtkMainThread main;
Hashtable containers = new Hashtable();
- static EventQueue q = new EventQueue();
+ static EventQueue q;
static Clipboard systemClipboard;
static boolean useGraphics2dSet;
static boolean useGraphics2d;
@@ -103,19 +103,32 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
return useGraphics2d;
}
+ static native void gtkInit(int portableNativeSync);
+
static
{
if (Configuration.INIT_LOAD_LIBRARY)
System.loadLibrary("gtkpeer");
+
+ int portableNativeSync;
+ String portNatSyncProp =
+ System.getProperty("gnu.classpath.awt.gtk.portable.native.sync");
+
+ if (portNatSyncProp == null)
+ portableNativeSync = -1; // unset
+ else if (Boolean.valueOf(portNatSyncProp).booleanValue())
+ portableNativeSync = 1; // true
+ else
+ portableNativeSync = 0; // false
+
+ gtkInit(portableNativeSync);
}
public GtkToolkit ()
{
- main = new GtkMainThread ();
systemClipboard = new GtkClipboard ();
- GtkGenericPeer.enableQueue (q);
}
-
+
native public void beep ();
native private void getScreenSizeDimensions (int[] xy);
@@ -313,7 +326,7 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
"SansSerif" });
}
- private class LRUCache extends java.util.LinkedHashMap
+ private class LRUCache extends LinkedHashMap
{
int max_entries;
public LRUCache(int max)
@@ -333,15 +346,18 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
public FontMetrics getFontMetrics (Font font)
{
- if (metricsCache.containsKey(font))
- return (FontMetrics) metricsCache.get(font);
- else
+ synchronized (metricsCache)
+ {
+ if (metricsCache.containsKey(font))
+ return (FontMetrics) metricsCache.get(font);
+ }
+
+ FontMetrics m = new GdkFontMetrics (font);
+ synchronized (metricsCache)
{
- FontMetrics m;
- m = new GdkFontMetrics (font);
metricsCache.put(font, m);
- return m;
- }
+ }
+ return m;
}
public Image getImage (String filename)
@@ -594,6 +610,14 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
protected EventQueue getSystemEventQueueImpl()
{
+ synchronized (GtkToolkit.class)
+ {
+ if (q == null)
+ {
+ q = new EventQueue();
+ GtkGenericPeer.enableQueue (q);
+ }
+ }
return q;
}
@@ -609,19 +633,37 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
throw new Error("not implemented");
}
+ public Rectangle getBounds()
+ {
+ int[] dims = new int[2];
+ getScreenSizeDimensions(dims);
+ return new Rectangle(0, 0, dims[0], dims[1]);
+ }
+
// ClasspathToolkit methods
public GraphicsEnvironment getLocalGraphicsEnvironment()
{
- GraphicsEnvironment ge;
- ge = new GdkGraphicsEnvironment ();
- return ge;
+ return new GdkGraphicsEnvironment(this);
+ }
+
+ public Font createFont(int format, InputStream stream)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public RobotPeer createRobot (GraphicsDevice screen) throws AWTException
+ {
+ return new GdkRobotPeer (screen);
}
- public Font createFont(int format, java.io.InputStream stream)
+ public void registerImageIOSpis(IIORegistry reg)
{
- throw new java.lang.UnsupportedOperationException ();
+ GdkPixbufDecoder.registerSpis(reg);
}
+ public native boolean nativeQueueEmpty();
+ public native void wakeNativeQueue();
+ public native void iterateNativeQueue(EventQueue locked, boolean block);
} // class GtkToolkit
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
index c61eecd5aa5..1d6e253b072 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
@@ -39,7 +39,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.Component;
-import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Window;
import java.awt.event.WindowEvent;
@@ -166,10 +165,12 @@ public class GtkWindowPeer extends GtkContainerPeer
|| frame_y != awtComponent.getY()
|| frame_width != awtComponent.getWidth()
|| frame_height != awtComponent.getHeight())
- setBoundsCallback ((Window) awtComponent,
- frame_x, frame_y, frame_width, frame_height);
+ {
+ setBoundsCallback ((Window) awtComponent,
+ frame_x, frame_y, frame_width, frame_height);
- awtComponent.validate();
+ awtComponent.validate();
+ }
}
native void nativeSetVisible (boolean b);
@@ -192,7 +193,7 @@ public class GtkWindowPeer extends GtkContainerPeer
// Post a WINDOW_OPENED event the first time this window is shown.
if (!hasBeenShown)
{
- q.postEvent (new WindowEvent ((Window) awtComponent, id,
+ q().postEvent (new WindowEvent ((Window) awtComponent, id,
opposite));
hasBeenShown = true;
}
@@ -201,12 +202,12 @@ public class GtkWindowPeer extends GtkContainerPeer
{
if (oldState != newState)
{
- q.postEvent (new WindowEvent ((Window) awtComponent, id, opposite,
+ q().postEvent (new WindowEvent ((Window) awtComponent, id, opposite,
oldState, newState));
oldState = newState;
}
}
else
- q.postEvent (new WindowEvent ((Window) awtComponent, id, opposite));
+ q().postEvent (new WindowEvent ((Window) awtComponent, id, opposite));
}
}
OpenPOWER on IntegriCloud