revert: [multiple changes]
2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GdkGraphics.java (drawImage variants): Update image observer. * gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage): Start image production. * gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Protect against negative menu bar widths. (setBounds): Likewise. (postConfigureEvent): Likewise. * gnu/java/awt/peer/gtk/GtkImage.java (imageComplete): Don't remove consumer unless only a single frame has completed. * gnu/java/awt/peer/gtk/GtkImagePainter.java (GtkImagePainter): Add observer parameter. (setPixels): Update image observer. (imageComplete): Likewise. * java/applet/Applet.java (width): New field. (height): Likewise. (setStub): Set size if width or height field has been set. (resize): If stub is null save width and height values. * java/awt/Component.java (reshape): Protect against null parent. * java/awt/image/MemoryImageSource.java (MemoryImageSource(int,int,ColorModel,byte[],int,int)): Document. (MemoryImageSource(int,int,ColorModel,int[],int,int)): Likewise. (MemoryImageSource(int,int,ColorModel,byte[],int,int,Hashtable)): Reference pixel array directly, rather than creating a local copy. (MemoryImageSource(int,int,ColorModel,int[],int,int,Hashtable)): Likewise. (newPixels(int,int,int,int)): Fix for loop and array copy bounds. (newPixels(int,int,int,int,boolean)): Likewise. (startProduction): If animated call imageComplete with SINGLEFRAME. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Uncomment gdk_flush lines. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c (drawPixels): Return if g is null or g->drawable is not a gdk drawable. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultSingleSelectionModel.java, javax/swing/JPasswordField.java, javax/swing/tree/AbstractLayoutCache.java: Reformatted and javadocs cleaned up. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/Component.java: Fixed argument names to match javadocs. (setFont): Rewritten set property first and then fire event. (setLocale): Likewise. * javax/swing/text/JTextComponent.java (setEditable): Likewise. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/Button.java (AccessibleAWTButton.getAccessibleActionDescription): Explain the source of 'click'. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/Checkbox.java: Remove stub comments. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/Button.java (AccessibleAWTButton.getAccessibleActionDescription): Return 'click'. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/CardLayout.java: Made some constants static. (serialVersionUID): Made private. (addLayoutComponent): Simplified code. * java/awt/event/InputEvent.java (getModifiersEx): Added missing @param tag. * java/awt/image/RGBImageFilter.java (filterRGBPixels): Reformatted, removed wrong @param tag. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/text/FieldView.java, javax/swing/text/JTextComponent.java: Removed debug code. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/BorderFactory.java (BorderFactory): Added private constructor. * javax/swing/SwingUtilities.java (SwingUtilities): Likewise. (computeStringWidth): New method. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/color/ICC_Profile.java (icSigNamedColorTag): Removed. * java/awt/datatransfer/DataFlavor.java (isMimeTypeEqual): Made final. * java/awt/image/AffineTransformOp.java: Reworked javadocs. (TYPE_BICUBIC): Added @since tag. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/Checkbox.java (AccessibleAWTCheckBox): Remove todo comments. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/Checkbox.java (itemStateChanged): Implement function. (getAccessibleContext): Add AccessibleAWTCheckBox to item listeners. 2004-11-30 Sven de Marothy <sven@physto.se> * java/awt/Polygon.java (contains): Reimplemented. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/print/PrinterJob.java: Reformatted. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/image/AffineTransformOp.java, java/awt/image/ColorConvertOp.java, java/awt/image/LookupOp.java, java/awt/image/RescaleOp.java: Added final keywords where they belong. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/CardLayout.java, java/awt/Component.java, java/awt/Font.java, java/awt/image/SinglePixelPackedSampleModel.java: Fixed javadocs and argument names all over. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/image/DataBufferShort.java: Fixed file header. * java/awt/image/DataBufferUShort.java: Likewise. (DataBufferUShort): Throw NullPointerException if dataArray is null. 2004-11-30 Sven de Marothy <sven@physto.se> * java/awt/geom/Arc2D.java (setAngleStart): Corrected (wrong sign on atan2 y parameter). (setAngles): Likewise. (containsAngle): Return false on zero extent, don't include final angle. (contains): Treat OPEN-type arcs like CHORD ones, not as PIE ones. 2004-11-30 Sven de Marothy <sven@physto.se> * java/awt/geom/AffineTransform.java, (inverseTransform): Fixed bug and simplified code. (createTransformedShape): Return null on null parameter. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/color/ICC_ColorSpace.java, java/awt/color/ICC_Profile.java, java/awt/color/ICC_ProfileGray.java, java/awt/color/ICC_ProfileRGB.java: Re-indent copyright header to be standardish. * java/awt/datatransfer/StringSelection.java: Reformatted. * java/awt/geom/Area.java (EPSILON): Made static. (RS_EPSILON): Likewise. (PE_EPSILON): Likewide. 2004-11-30 Sven de Marothy <sven@physto.se> * javax/swing/SwingUtilities.java: (computeDifference): Implemented (computeIntersection): Likewise (computeUnion): Likewise (isRectangleContainingRectangle): Likewise 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/BasicStroke.java, java/awt/Button.java, java/awt/Canvas.java, java/awt/CheckboxMenuItem.java, java/awt/Container.java, java/awt/EventQueue.java, java/awt/FileDialog.java, java/awt/FlowLayout.java, java/awt/FontMetrics.java, java/awt/Graphics.java, java/awt/GridLayout.java, java/awt/KeyboardFocusManager.java, java/awt/Label.java, java/awt/LayoutManager2.java, java/awt/List.java, java/awt/MenuBar.java, java/awt/Scrollbar.java, java/awt/Toolkit.java, java/awt/Window.java, java/awt/datatransfer/DataFlavor.java, java/awt/datatransfer/FlavorTable.java, java/awt/event/ActionListener.java, java/awt/event/HierarchyBoundsAdapter.java, java/awt/geom/Arc2D.java, java/awt/geom/Rectangle2D.java, java/awt/geom/RectangularShape.java, java/awt/im/spi/InputMethod.java, java/awt/image/ByteLookupTable.java, java/awt/image/ColorModel.java, java/awt/image/DirectColorModel.java, java/awt/image/ShortLookupTable.java, java/awt/print/Book.java: Fixed javadocs and method argument names all over. 2004-11-30 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GdkFontPeer.java (buildString): Optimise String building. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/TextArea.java (AccessibleAWTTextArea, getAccessibleContext): Implement. * java/awt/TextField.java (AccessibleAWTTextField, getAccessibleContext): Implement. 2004-11-30 Tom Tromey <tromey@redhat.com> * Makefile.in: Rebuilt. * Makefile.am (jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo): Fixed typo. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/Menu.java (AccessibleAWTMenu, getAccessibleContext): Implement. * java/awt/PopupMenu.java (AccessibleAWTMenu, getAccessibleContext): Implement. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/print/PrinterJob.java (lookupPrintServices, getPrintService, setPrintService): Implement. (lookupStreamPrintServices): Add commented out implementation. (printer): New field. 2004-11-30 Mark Wielaard <mark@klomp.org> * javax/swing/ToolTipManager.java (mouseMoved): Set currentComponent when not yet set. 2004-11-30 Sven de Marothy <sven@physto.se> * java/awt/geom/GeneralPath.java (evaluateCrossings): Fixed epsilon value, should always be nonzero. 2004-11-30 Paul Jenner <psj.home@ntlworld.com> * java/awt/image/Raster.java (createPackedRaster): Implemented. 2004-11-30 Graydon Hoare <graydon@redhat.com> * javax/swing/plaf/basic/BasicTextUI.java: Listen to focus events, indicate focus via caret. * javax/swing/text/GapContent.java (getString): Return substring. * javax/swing/text/PlainDocument.java (reindex): New method. (createDefaultRoot): Call it. (insertUpdate): Likewise. (removeUpdate): Likewise. * javax/swing/text/Utilities.java (drawTabbedText): Always advance on tab and newline, even if no painting happens. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * Makefile.am: List peer JNI header: Java source file dependencies explicitly. Likewise for JNI .lo: JNI header dependencies. * Makefile.in: Regenerate. 2004-11-30 Graydon Hoare <graydon@redhat.com> * Makefile.am: Add entry for BasicTextPaneUI.java * Makefile.in: Regenerate. * gnu/java/awt/peer/gtk/GdkGraphics2D.java (GdkGraphics2D): Set clip after transform. (drawImage): Protect against null image. * gnu/java/awt/peer/gtk/GtkFramePeer.java (setIconImage): Protect against non-GtkImage args. * gnu/java/awt/peer/gtk/GtkToolkit.java (checkImage): Protect against non-GtkImage args. * java/awt/print/PrinterJob.java: (print): Add variant taking PrintRequestAttributeSet. (printDialog): Likewise. * javax/swing/JComponent.java: (transferHandler): New field. (getComponentGraphics): Build new Graphics for each sub-paint. (getTransferHandler): New method. (setTransferHandler): New method. * javax/swing/JDesktopPane.java (setDragMode): Force LIVE_DRAG_MODE. * javax/swing/JMenuItem.java (menuSelectionChanged): Protect against null parent. * javax/swing/JTable.java (setDefaultRenderer): New method. * javax/swing/JTree.java: Get basic ctors and UI working. * javax/swing/JViewport.java (JViewport): Set scroll mode. * javax/swing/RepaintManager.java (addDirtyRegion): Skip empty regions. * javax/swing/ScrollPaneLayout.java (minimumLayoutSize): Do not bound scrollpane minimum by central view minimum. * javax/swing/ToolTipManager.java (showTip): Guard against null component. * javax/swing/TransferHandler.java: Stub out. * javax/swing/plaf/basic/BasicLookAndFeel.java: Add entry for TextPaneUI, change Tree icons to pngs. * javax/swing/plaf/basic/BasicMenuItemUI.java: (installDefaults): Set text position and alignment. (paintMenuItem): Layout icon with normal compound function. * javax/swing/plaf/basic/BasicTableHeaderUI.java: (getMaximumSize): Delete. (getMinimumSize): Delete. (getPreferredSize): Use column model's total width. * javax/swing/plaf/basic/BasicTextPaneUI.java: New file. * javax/swing/plaf/basic/BasicTextUI.java (modelChanged): Make resilient against nulls. * javax/swing/plaf/basic/BasicTreeUI.java: Add some simplistic config / painting functions. * javax/swing/plaf/basic/BasicViewportUI.java (paintSimple): Add new non-backingstore paint mode. (paintBackingStore): Split out backing store code. (paint): Switch on painting mode. * javax/swing/text/SimpleAttributeSet.java (SimpleAttributeSet): Resist nulls. * javax/swing/tree/DefaultTreeCellRenderer.java: Implement. * javax/swing/tree/DefaultTreeModel.java: Partially implement. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (setFont): Set pango context's description and language. 2004-11-30 Mark Wielaard <mark@klomp.org> * java/awt/image/LookupOp.java: Comments and indentation fixes. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/Checkbox.java (AccessibleAWTCheckBox): Implement. (getAccessibleContext): Implement. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/TextComponent.java (AccessibleAWTTextComponent): Implement. (getIndexAtPoint, getCharacterBounds): New methods. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/Button.java (AccessibleAWTButton): Implement. 2004-11-30 Mark Wielaard <mark@klomp.org> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (filenameFilterCallback): Made static. 2004-11-30 Michael Koch <konqueror@gmx.de> * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c (cairoShowGlyphs) Removed. 2004-11-30 Sven de Marothy <sven@physto.se> * gnu/java/awt/color/RgbProfileConverter.java (RgbProfileConverter): Don't invert matrix when reverse CLUT is available. * gnu/java/awt/color/LinearRGBConverter.java: Documentation update. * java/awt/color/ICC_ColorSpace.java: Likewise. * java/awt/color/ICC_Profile.java: Likewise. * java/awt/color/ICC_ProfileGray.java: Likewise. * java/awt/color/ICC_ProfileRGB.java: Likewise. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/MenuItem.java (AccessibleAWTMenuItem): Implement. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/Choice.java (AccessibleAWTChoice): Implement. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/BandedSampleModel.java (scanlineStride): Remove field hiding ComponentSampleModel.scanlineStride. 2004-11-30 Noa Resare <noa@resare.com> * java/awt/geom/GeneralPath.java (currentSegment): Fix typo in transform.transform() invocation. 2004-11-30 Sven de Marothy <sven@physto.se> * gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage): Created bitmap should be filled with bg color 2004-11-30 Noa Resare <noa@resare.com> * java/awt/Choice.java (add): Implement correct selection behavior when peer == null. (insert): Likewise. (remove): Likewise. 2004-11-30 Mark Wielaard <mark@klomp.org> * gnu/java/awt/peer/gtk/GtkChoicePeer.java (GtkChoicePeer): Call select() when Choice has a selected item. 2004-11-30 Michael Koch <address@bogus.example.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c: Fixed method names to start at begin of line. This is desired by GNU coding style guide. 2004-11-30 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GtkComponentPeer.java (gtkWidgetSetVisible): Unused. Removed. (connectJObject): Likewise. * gnu/java/awt/peer/gtk/GtkScrollPanePeer.java (gtkScrolledWindowSetScrollPosition): Commented out. 2004-11-30 Mark Wielaard <mark@klomp.org> * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c (Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText): Installed and renamed from Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText. 2004-11-30 Mark Wielaard <mark@klomp.org> * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c (Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText): Removed. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (init_dpi_conversion_factor): Correct prototype. 2004-11-30 Sven de Marothy <sven@physto.se> * java/awt/image/ConvolveOp.java: Added missing copyright notice. 2004-11-30 Robert Schuster <theBohemian@gmx.net> Fixes bug #10908 * gnu/java/beans/IntrospectionIncubator.java: (addMethod): static methods are discarded now, too. 2004-11-30 Mark Wielaard <mark@klomp.org> * Makefile.am (awt_java_source_files): Add new gnu/java/awt/color java source files. * Makefile.in: Regenerated. 2004-11-30 Sven de Marothy <sven@physto.se> * gnu/java/awt/color/CieXyzConverter.java, gnu/java/awt/color/GrayScaleConverter.java, gnu/java/awt/color/SrgbConverter.java, gnu/java/awt/color/ClutProfileConverter.java, gnu/java/awt/color/LinearRGBConverter.java, gnu/java/awt/color/TagEntry.java, gnu/java/awt/color/ColorLookUpTable.java, gnu/java/awt/color/ProfileHeader.java, gnu/java/awt/color/ToneReproductionCurve.java, gnu/java/awt/color/ColorSpaceConverter.java, gnu/java/awt/color/PyccConverter.java, gnu/java/awt/color/GrayProfileConverter.java, gnu/java/awt/color/RgbProfileConverter.java: New files. * java/awt/color/ICC_ColorSpace.java, java/awt/color/ICC_Profile.java, java/awt/color/ICC_ProfileGray.java, java/awt/color/ICC_ProfileRGB.java: Implemented (sans PhotoYCC color space). 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/AffineTransformOp.java (filter): Implement bilinear interpolation for Rasters. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/IndexColorModel.java (IndexColorModel): Actually use the provided colormap. Throw documented exceptions. Document exceptions. 2004-11-30 Paul Jenner <psj.home@ntlworld.com> * java/awt/image/IndexColorModel.java (IndexColorModel): Fix constructor. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/AffineTransformOp.java: Add TYPE_BICUBIC. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/AffineTransformOp.java (filter): Implement Raster filtering. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ComponentSampleModel.java (getDataElements, setDataElements): Implement SHORT, FLOAT, and INT transfer types. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * java/awt/Font.java (name): New field. (size): Likewise. (style): Likewise. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/Raster.java (createBandedRaster): Implement. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ConvolveOp.java: New class. * Makefile.am: Add ConvolveOp. * Makefile.in: Regenerate. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/RescaleOp.java (BandCombineOp, ColorConvertOp, LookupOp, RescaleOp): Fix loop bounds. 2004-11-30 jlquinn <jlquinn@optonline.net> * Makefile.am: Fix typo in BandCombineOp. * Makefile.in: Regenerate. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/BandCombineOp.java: New class. * Makefile.am: Add BandCombineOp. * Makefile.in: Regenerate. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/LookupOp.java: New class. * Makefile.am: Add LookupOp. * Makefile.in: Regenerate. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/SampleModel.java (createSubsetSampleModel): Add javadocs. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ColorModel.java (cloneColorModel): Fix line wrap. Use Boolean.valueOf. 2004-11-30 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GdkGraphics2D.java (releasePeerGraphicsResource): Fixed typo in method name. * gnu/java/awt/peer/gtk/GdkFontPeer.java (finalize): Fixed typo in releasePeerGraphicsResource. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/font/TextAttribute.java (RUN_DIRECTION_LTR): Initialie with static value instead of calculating it. (RUN_DIRECTION_RTL): Likewise. (STRIKETHROUGH_ON): Likewise. (SWAP_COLORS_ON): Likewise. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ColorConvertOp.java: New class. * java/awt/image/ColorModel.java (cloneColorModel): New method. * Makefile.am: Add ColorConvertOp. * Makefile.in: Regenerate. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * java/awt/DefaultKeyboardFocusManager.java (dispatchEvent): Track Window focus owner on FOCUS_GAINED events. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c (nativeSetIconImage): Rename to nativeSetIconImageFromDecoder. 2004-11-30 Andreas Tobler <a.tobler@schweiz.ch> * jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c (Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun): Fix pointer warning. 2004-11-30 Andreas Tobler <a.tobler@schweiz.ch> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter): Fix pointer warning. * jni/gtk-peer/gtkpeer.h: Introduce widget_union to fix type punned warnings. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect): Use widget_union to fix type punned pointer warning. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (pre_event_handler): Likewise. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (window_get_new_state): Introduce unions to fix warnings as above. (window_property_changed_cb): Likewise. (window_active_state_change_cb): Mark unused variables unused. (window_focus_state_change_cb): Likewise. (window_focus_in_cb): Likewise. (window_focus_out_cb): Likewise. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont): Convert PangoFontMap correctly with PANGO_FT2FONT_MAP macro. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JMenuBar.java (updateUI): Simplified. * javax/swing/tree/DefaultTreeSelectionModel.java: Reorganized import statements. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/font/TextAttribute.java, javax/swing/JComponent.java, javax/swing/JInternalFrame.java, javax/swing/table/TableColumn.java, javax/swing/text/StyleConstants.java: Replaced "new Boolean(boolean)" with "Boolean.valueOf(boolean)". 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/tree/DefaultTreeCellEditor.java, javax/swing/tree/DefaultTreeModel.java, javax/swing/tree/DefaultTreeSelectionModel.java: Jalopied. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/tree/DefaultTreeCellEditor.java (EditorContainer.EditorContainer): Fixed arguments. (EditorContainer.EditorContainer): New method. (DefaultTextField.DefaultTextField): Fixed arguments, implemented. (DefaultTextField.getBorder): Implemented. (listenerList): New field. (addCellEditorListener): Implemented. (removeCellEditorListener): Implemented. (getCellEditorListeners): New method. * javax/swing/tree/DefaultTreeModel.java (addTreeModelListener): Fixed javadoc. (removeTreeModelListener): Likewise. (getTreeModelListeners): New method. (fireTreeNodesChanged): Implemented. (fireTreeNodesInserted): Likewise. (fireTreeNodesRemoved): Likewise. (fireTreeStructureChanged): Likewise. (getListeners): Fixed javadoc. * javax/swing/tree/DefaultTreeSelectionModel.java (addTreeSelectionListener): Implemented. (removeTreeSelectionListener): Likewise. (fireValueChanged): Likewise. (getListeners): Likewise. (addPropertyChangeListener): Likewise. (removePropertyChangeListener): Likewise. (getTreeSelectionListeners): New method. (getPropertyChangeListeners): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/plaf/basic/BasicScrollBarUI.java (maximumThumbSize): Removed static keyword. (minimumThumbSize): Likewise. * javax/swing/plaf/basic/BasicInternalFrameTitlePane.java (CloseAction): Made public. (IconifyAction): Likewise. (MaximizeAction): Likewise. (MoveAction): Likewise. (RestoreAction): Likewise. (SizeAction): Likewise. (SystemMenuBar): Likewise. * javax/swing/plaf/basic/BasicSliderUI.java (TrackListener): Likewise. * javax/swing/plaf/basic/BasicSplitPaneUI.java (KeyboardDownRightHandler): Likewise. (KeyboardEndHandler): Likewise. (KeyboardHomeHandler): Likewise. (KeyboardResizeToggleHandler): Likewise. (KeyboardUpLeftHandler): Likewise. (PropertyHandler): Likewise. * javax/swing/plaf/basic/BasicTabbedPaneUI.java (PropertyChangeHandler): Likewise. (TabSelectionHandler): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/text/JTextComponent.java (getKeymap): Made public. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JEditorPane.java (getStream): Throws IOException. (read): Likewise. * javax/swing/JRootPane.java (createContentPane): Fixed return type. * javax/swing/JSpinner.java (commitEdit): Throws ParseException. * javax/swing/plaf/metal/MetalLookAndFeel.java (serialVersionUID): New field. * javax/swing/table/TableColumn.java (resizedPostingDisableCount): Added @deprecated tag. (disableResizedPosting): Likewise. (enableResizedPosting): Likewise. * javax/swing/text/Document.java (TitleProperty): Fixed value. * javax/swing/tree/TreeCellEditor.java (TreeCellEditor): Extends CellEditor. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JWindow.java javax/swing/SpinnerModel.java javax/swing/Timer.java javax/swing/event/MenuKeyEvent.java javax/swing/plaf/basic/BasicButtonUI.java javax/swing/plaf/basic/BasicIconFactory.java javax/swing/plaf/basic/BasicTabbedPaneUI.java javax/swing/text/AttributeSet.java javax/swing/text/Highlighter.java javax/swing/text/StyleConstants.java javax/swing/tree/TreeCellEditor.java: Removed redundant and reordered modifiers. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/plaf/basic/BasicToolTipUI.java: Reformatted copyright header. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/AbstractAction.java, javax/swing/AbstractButton.java, javax/swing/AbstractCellEditor.java, javax/swing/AbstractListModel.java, javax/swing/AbstractSpinnerModel.java, javax/swing/ActionMap.java, javax/swing/BorderFactory.java, javax/swing/Box.java, javax/swing/ButtonModel.java, javax/swing/CellEditor.java, javax/swing/CellRendererPane.java, javax/swing/DefaultBoundedRangeModel.java, javax/swing/DefaultButtonModel.java, javax/swing/DefaultCellEditor.java, javax/swing/DefaultDesktopManager.java, javax/swing/DefaultListCellRenderer.java, javax/swing/DefaultListSelectionModel.java, javax/swing/DefaultSingleSelectionModel.java, javax/swing/GrayFilter.java, javax/swing/InputMap.java, javax/swing/JApplet.java, javax/swing/JCheckBoxMenuItem.java, javax/swing/JColorChooser.java, javax/swing/JComboBox.java, javax/swing/JComponent.java, javax/swing/JDesktopPane.java, javax/swing/JDialog.java, javax/swing/JEditorPane.java, javax/swing/JFileChooser.java, javax/swing/JFormattedTextField.java, javax/swing/JFrame.java, javax/swing/JInternalFrame.java, javax/swing/JLabel.java, javax/swing/JLayeredPane.java, javax/swing/JList.java, javax/swing/JMenu.java, javax/swing/JMenuBar.java, javax/swing/JMenuItem.java, javax/swing/JOptionPane.java, javax/swing/JPanel.java, javax/swing/JPasswordField.java, javax/swing/JPopupMenu.java, javax/swing/JRadioButtonMenuItem.java, javax/swing/JRootPane.java, javax/swing/JSpinner.java, javax/swing/JSplitPane.java, javax/swing/JTabbedPane.java, javax/swing/JTable.java, javax/swing/JTextArea.java, javax/swing/JTextPane.java, javax/swing/JToggleButton.java, javax/swing/JToolBar.java, javax/swing/JToolTip.java, javax/swing/JTree.java, javax/swing/JViewport.java, javax/swing/ListModel.java, javax/swing/LookAndFeel.java, javax/swing/MenuSelectionManager.java, javax/swing/ProgressMonitorInputStream.java, javax/swing/RepaintManager.java, javax/swing/RootPaneContainer.java, javax/swing/ScrollPaneLayout.java, javax/swing/SpringLayout.java, javax/swing/SwingUtilities.java, javax/swing/Timer.java, javax/swing/ToolTipManager.java, javax/swing/UIDefaults.java, javax/swing/UIManager.java, javax/swing/border/MatteBorder.java, javax/swing/colorchooser/AbstractColorChooserPanel.java, javax/swing/colorchooser/ColorSelectionModel.java, javax/swing/colorchooser/DefaultColorSelectionModel.java, javax/swing/colorchooser/DefaultHSBChooserPanel.java, javax/swing/colorchooser/DefaultPreviewPanel.java, javax/swing/colorchooser/DefaultRGBChooserPanel.java, javax/swing/colorchooser/DefaultSwatchChooserPanel.java, javax/swing/event/AncestorEvent.java, javax/swing/event/HyperlinkEvent.java, javax/swing/event/InternalFrameEvent.java, javax/swing/event/MenuDragMouseEvent.java, javax/swing/event/TableColumnModelEvent.java, javax/swing/event/TableModelEvent.java, javax/swing/event/TreeExpansionEvent.java, javax/swing/event/TreeModelEvent.java, javax/swing/event/TreeSelectionEvent.java, javax/swing/event/TreeWillExpandListener.java, javax/swing/event/UndoableEditEvent.java, javax/swing/filechooser/FileView.java, javax/swing/plaf/BorderUIResource.java, javax/swing/plaf/ComponentUI.java, javax/swing/plaf/FileChooserUI.java, javax/swing/plaf/IconUIResource.java, javax/swing/plaf/ListUI.java, javax/swing/plaf/PopupMenuUI.java, javax/swing/plaf/SplitPaneUI.java, javax/swing/plaf/TabbedPaneUI.java, javax/swing/plaf/TextUI.java, javax/swing/plaf/TreeUI.java, javax/swing/plaf/basic/BasicArrowButton.java, javax/swing/plaf/basic/BasicBorders.java, javax/swing/plaf/basic/BasicButtonUI.java, javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java, javax/swing/plaf/basic/BasicColorChooserUI.java, javax/swing/plaf/basic/BasicComboBoxEditor.java, javax/swing/plaf/basic/BasicComboBoxRenderer.java, javax/swing/plaf/basic/BasicComboBoxUI.java, javax/swing/plaf/basic/BasicComboPopup.java, javax/swing/plaf/basic/BasicDesktopIconUI.java, javax/swing/plaf/basic/BasicDesktopPaneUI.java, javax/swing/plaf/basic/BasicIconFactory.java, javax/swing/plaf/basic/BasicInternalFrameTitlePane.java, javax/swing/plaf/basic/BasicInternalFrameUI.java, javax/swing/plaf/basic/BasicListUI.java, javax/swing/plaf/basic/BasicLookAndFeel.java, javax/swing/plaf/basic/BasicMenuBarUI.java, javax/swing/plaf/basic/BasicMenuItemUI.java, javax/swing/plaf/basic/BasicMenuUI.java, javax/swing/plaf/basic/BasicOptionPaneUI.java, javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java, javax/swing/plaf/basic/BasicPopupMenuUI.java, javax/swing/plaf/basic/BasicProgressBarUI.java, javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java, javax/swing/plaf/basic/BasicRootPaneUI.java, javax/swing/plaf/basic/BasicScrollBarUI.java, javax/swing/plaf/basic/BasicSeparatorUI.java, javax/swing/plaf/basic/BasicSliderUI.java, javax/swing/plaf/basic/BasicSpinnerUI.java, javax/swing/plaf/basic/BasicSplitPaneDivider.java, javax/swing/plaf/basic/BasicSplitPaneUI.java, javax/swing/plaf/basic/BasicTabbedPaneUI.java, javax/swing/plaf/basic/BasicTableHeaderUI.java, javax/swing/plaf/basic/BasicTableUI.java, javax/swing/plaf/basic/BasicTextAreaUI.java, javax/swing/plaf/basic/BasicTextFieldUI.java, javax/swing/plaf/basic/BasicTextUI.java, javax/swing/plaf/basic/BasicToolBarSeparatorUI.java, javax/swing/plaf/basic/BasicToolBarUI.java, javax/swing/plaf/basic/BasicToolTipUI.java, javax/swing/plaf/basic/BasicTreeUI.java, javax/swing/plaf/basic/BasicViewportUI.java, javax/swing/plaf/basic/ComboPopup.java, javax/swing/table/AbstractTableModel.java, javax/swing/table/DefaultTableCellRenderer.java, javax/swing/table/DefaultTableColumnModel.java, javax/swing/table/DefaultTableModel.java, javax/swing/table/JTableHeader.java, javax/swing/table/TableCellEditor.java, javax/swing/table/TableCellRenderer.java, javax/swing/table/TableColumn.java, javax/swing/table/TableColumnModel.java, javax/swing/text/AbstractDocument.java, javax/swing/text/Caret.java, javax/swing/text/DefaultCaret.java, javax/swing/text/DefaultEditorKit.java, javax/swing/text/DefaultHighlighter.java, javax/swing/text/EditorKit.java, javax/swing/text/JTextComponent.java, javax/swing/text/LayeredHighlighter.java, javax/swing/text/PasswordView.java, javax/swing/text/SimpleAttributeSet.java, javax/swing/text/StyleConstants.java, javax/swing/text/StyleContext.java, javax/swing/text/StyledEditorKit.java, javax/swing/text/TextAction.java, javax/swing/text/View.java, javax/swing/tree/AbstractLayoutCache.java, javax/swing/tree/DefaultTreeCellRenderer.java, javax/swing/tree/DefaultTreeModel.java, javax/swing/tree/DefaultTreeSelectionModel.java, javax/swing/tree/FixedHeightLayoutCache.java, javax/swing/tree/TreeCellRenderer.java, javax/swing/tree/TreeSelectionModel.java, javax/swing/tree/VariableHeightLayoutCache.java, javax/swing/undo/AbstractUndoableEdit.java, javax/swing/undo/UndoableEditSupport.java: Imports cleaned up. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/Container.java, java/awt/Font.java, java/awt/font/TextLayout.java: Imports cleaned up. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/AbstractButton.java (getLabel): Added @deprecated tag. (setLabel): Likewise. * javax/swing/FocusManager.java (disableSwingFocusManager): Likewise. (isFocusManagerEnabled): Likewise. * javax/swing/JComponent.java (isManagingFocus): Added version to @deprecated tag. (getNextFocusableComponent): Moved @deprecated tag to bottom of javadoc. (getConditionForKeyStroke): Likewise. (getActionForKeyStroke): Likewise. * javax/swing/JDesktopPane.java (LIVE_DRAG_MODE): Added @specnote tag. (OUTLINE_DRAG_MODE): Likewise. * javax/swing/JInternalFrame.java (MENU_BAR_PROPERTY): Fixed value. (getMenuBar): Added @deprecated tag. (setMenuBar): Likewise. * javax/swing/JViewport.java (isBackingStoreEnabled): Likewise. (setBackingStoreEnabled): Likewise. * javax/swing/plaf/basic/BasicDesktopPaneUI.java (closeKey): Likewise. (maximizeKey): Likewise. (minimizeKey): Likewise. (navigateKey): Likewise. (navigateKey2): Likewise. * javax/swing/plaf/basic/BasicInternalFrameUI.java (openMenuKey): Likewise. * javax/swing/plaf/basic/BasicSplitPaneUI.java (keyboardDownRightListener): Likewise. (keyboardEndListener): Likewise. (keyboardHomeListener): Likewise. (keyboardResizeToggleListener): Likewise. (keyboardUpLeftListener): Likewise. (dividerResizeToggleKey): Likewise. (downKey): Likewise. (endKey): Likewise. (homeKey): Likewise. (leftKey): Likewise. (rightKey): Likewise. (upKey): Likewise. (createKeyboardUpLeftListener): Likewise. (createKeyboardDownRightListener): Likewise. (createKeyboardHomeListener): Likewise. (createKeyboardEndListener): Likewise. (createKeyboardResizeToggleListener): Likewise. (getDividerBorderSize): Likewise. * javax/swing/plaf/basic/BasicTabbedPaneUI.java (downKey): Likewise. (leftKey): Likewise. (rightKey): Likewise. (upKey): Likewise. 2004-11-30 Andreas Tobler <a.tobler@schweiz.ch> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c (Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Use the GTK_TEXT_VIEW macro. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (connect_awt_hook_cb): Mark unused variable unused. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c (selection_get): Do the cast right. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create): According to the gtk API gtk_combo_box_new_text actually returns a GtkWidget. Remove unused var menu. (selection_changed): Remove unused value. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds): Fix pointer warning with using an intermediate variable. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_updated): Fix unused var warning for BE archs. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (Java_gnu_java_awt_peer_gtk_GdkGraphics_connectSignals): Remove unused var. (realize_cb): Mark unused variable unused. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c (seek_glyphstring_idx): Fix a C90 warning. * jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c (Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun): Mark unused arguments unused. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c (Java_gnu_java_awt_peer_gtk_GdkGlyphVector_initState), (Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setGlyphCodes), (Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphCharIndex), (Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphIsHorizontal): Likewise. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c (Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerFontMetrics), (Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerTextMetrics): Likewise. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter): Likewise. (filenameFilterCallback): Remove unused var. (handle_response): Declare str_fileName and remove last else statement. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c: New File. (nativeGetNumFontsFamilies) New function. (nativeGetFontFamilies) Likewise. * gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java (getAvailableFontFamilyNames): Implement. * Makefile.am (gtk_c_source_files): Add GdkGraphicsEnvironment.c. * Makefile.in: Regenerate. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/ClasspathFontPeer.java (setStandardAttributes(String,Map)): If size attribute doesn't exist, default to size 12. Clamp size value to a minimum of 1. 2004-11-30 Jeroen Frijters <jeroen@frijters.net> * javax/swing/JDialog.java (decorated): Likewise. * javax/swing/JFrame.java (defaultLookAndFeelDecorated): Likewise. 2004-11-30 Jeroen Frijters <jeroen@frijters.net> * javax/swing/plaf/basic/BasicToolBarUI.java (offset, regular): Made final. * javax/swing/plaf/basic/BasicScrollBarUI.java (DECREASE_HIGHLIGHT, INCREASE_HIGHLIGHT, NO_HIGHLIGHT, POSITIVE_SCROLL, NEGATIVE_SCROLL): Made final. 2004-11-30 Michael Koch <konqueror@gmx.de> * gnu/java/awt/BitwiseXORComposite.java, gnu/java/awt/ClasspathToolkit.java, gnu/java/awt/image/XBMDecoder.java, gnu/java/awt/peer/GLightweightPeer.java, gnu/java/awt/peer/gtk/GdkGlyphVector.java: Reorganized import statements. 2004-11-30 Jeroen Frijters <jeroen@frijters.net> * java/awt/Button.java (next_button_number): Removed useless initializer. * java/awt/Frame.java (next_frame_number): Likewise. * java/awt/Panel.java (next_panel_number): Likewise, * java/awt/Scrollbar.java (next_scrollbar_number): Likewise. * java/awt/TextArea.java (next_text_number): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/image/ByteLookupTable.java (ByteLookupTable) :Fixed HTML entities in javadocs. (lookupPixel): Fix case when dst is null. * java/awt/image/ShortLookupTable.java (ShortLookupTable) :Fixed HTML entities in javadocs. (lookupPixel): Fix case when dst is null. * java/awt/image/DataBufferByte.java, java/awt/image/DataBufferDouble.java, java/awt/image/DataBufferFloat.java, java/awt/image/DataBufferInt.java, java/awt/image/DataBufferShort.java, java/awt/image/DataBufferUShort.java: Fix initialization of bankData in constructors. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GtkButtonPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (setNativeBounds): Set GtkEventBox, GtkButton and GtkLabel size requests. * gnu/java/awt/peer/gtk/GtkComponentPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c (setNativeBounds): Make package private. Set size request even if GTK parent is NULL. * gnu/java/awt/peer/gtk/GtkLabelPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (setNativeBounds): Set GtkEventBox and GtkLabel size requests. 2004-11-30 Mark Wielaard <mark@klomp.org> Workaround for bug #17952. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (request_frame_extents): Check window->window != NULL. 2004-11-30 Mark Wielaard <mark@klomp.org> * jni/gtk-peer/gdkfont.h: Include gtkpeer.h not gtkcairopeer.h. 2004-11-30 Andreas Tobler <a.tobler@schweiz.ch> * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Use native_text_layout_state_table here. * jni/gtk-peer/gdkfont.h: Mark native_text_layout_state_table extern. 2004-11-30 Mark Wielaard <mark@klomp.org> * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c (setChars): Only call pango_itemize() when vec->glyphitems != NULL. Only call pango_shape() when gi->glyphs->num_glyphs > 0. 2004-11-30 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GtkToolkit.java: Merged import statements. 2004-11-30 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GdkGraphics2D.java (isBufferedImageGraphics): Simplified. 2004-11-30 Paul Jenner <psj.home@ntlworld.com> * javax/swing/JTree.java (isRootVisible): Fixed typo in method name. * javax/swing/JScrollBar.java (setValues): Likewise. * javax/swing/JScrollPane.java (createScrollListener): Call JScrollBar.setValues. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GtkContainerPeer.java (endValidate): Don't call setParentAndBounds on GtkWindowPeers. * java/awt/Component.java (static): Don't set default keyboard focus manager. * java/awt/KeyboardFocusManager.java (getCurrentKeyboardFocusManager): If current keyboard focus manager is null set a default. * gnu/java/awt/peer/gtk/GtkButtonPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (gtkWidgetSetBackground): New method. (block_expose_events_cb): New function. (connectSignals): Block the AWT's expose event processing on button press and release. (gtkSetLabel): Set text on proper widget. (gtkWidgetModifyFont): Modify font on proper widget. (gtkWidgetSetBackground): Set normal, active and prelight colours. (gtkWidgetSetForeground): Set forground colour of proper widget. (gtkActivate): Activate the correct widget. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (clearRect): Only clear rectangle if the backing component is not an event box. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (beginNativeRepaintID): New variable. (endNativeRepaintID): Likewise. (gtkInit): Initialize new fields with method IDs. * jni/gtk-peer/gtkpeer.h (beginNativeRepaintID): Declare extern. (endNativeRepaintID): Likewise. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * javax/swing/JList.java (init): Revert accidental commit. * gnu/java/awt/peer/gtk/GdkGraphics.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (GdkGraphics): Call initComponentGraphics or connectSignals depending on component's realization status. (realize_cb): New function. (initComponentGraphics): New method. (connectSignals): New method. (clipRect): Return immediately if component is not realized. (setClip): Likewise. (translate): Likewise. (drawImage variants): Return false immediately if component is not realized. * gnu/java/awt/peer/gtk/GdkGraphics2D.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c (connectSignals): New method. (GdkGraphics2D): Call initComponentGraphics2D or connectSignals depending on component's realization status. Move other initialization calls to ... (initComponentGraphics2D): New method. (realize_cb): New function. (cairoSetMatrix): Return immediately if gr is NULL. (cairoNewPath): Likewise. (cairoRectangle): Likewise. (cairoClip): Likewise. * gnu/java/awt/peer/gtk/GtkComponentPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c (gtkWidgetRepaintArea): Remove method. (isRealized): New method. (GtkComponentPeer): Move setParent, connectJObject and setCursor calls to setParentAndBounds. Call setParentAndBounds. (setParentAndBounds): New method. (setComponentBounds): Return immediately if bounds are all zero. (repaint): Remove call to gtkWidgetRepaintArea. Return immediately if requested paint region is 0x0. (setCursor): New method. (gtkWidgetSetParent): Only set widget's parent if its parent is currently NULL. (setNativeBounds): Only set widget's bounds if it has a parent. (connectSignals): Don't call gtk_widget_realize. Connect "realize" signal to connect_awt_hook_cb handler. * gnu/java/awt/peer/gtk/GtkContainerPeer.java (isValidating): New field. (beginValidate): Set isValidating true. (endValidate): Set parents and bounds for children first, then for this. Set isValidating false. * gnu/java/awt/peer/gtk/GtkFileDialogPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (connectJObject): Remove method. (connectSignals): Don't call gtk_widget_realize. * gnu/java/awt/peer/gtk/GtkListPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (connectJObject): Remove method. (connectSignals): Don't call gtk_widget_realize. * gnu/java/awt/peer/gtk/GtkPanelPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (connectJObject): Remove method. * gnu/java/awt/peer/gtk/GtkScrollbarPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c (connectJObject): Remove method. * gnu/java/awt/peer/gtk/GtkWindowPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create): Don't call gtk_widget_realize. (connectJObject): Remove method. (connectSignals): Don't call gtk_widget_realize. Connect "realize" signal to connect_awt_hook_cb handler. (nativeSetBounds): Don't attempt to move GDK window if it is NULL. * java/awt/Container.java (addImpl): Don't call comp.addNotify if peer is not null. (validateTree): Create peers for all children before calling doLayout. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (connectSignals): Don't call gtk_widget_realize. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (connect_awt_hook_cb): New function. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (initComponentGraphicsID): New variable. (initComponentGraphics2DID): Likewise. (setCursorID): Likewise. (gtkInit): Initialize new fields with method IDs. * jni/gtk-peer/gtkpeer.h (initComponentGraphicsID): Declare extern. (initComponentGraphics2DID): Declare extern. (setCursorID): Likewise. (connect_awt_hook_cb): Declare function. 2004-11-30 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java, gnu/java/awt/peer/gtk/GdkGlyphVector.java, gnu/java/awt/peer/gtk/GdkGraphics2D.java, gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java, gnu/java/awt/peer/gtk/GdkPixbufDecoder.java, gnu/java/awt/peer/gtk/GtkButtonPeer.java, gnu/java/awt/peer/gtk/GtkClipboard.java, gnu/java/awt/peer/gtk/GtkDialogPeer.java, gnu/java/awt/peer/gtk/GtkFileDialogPeer.java, gnu/java/awt/peer/gtk/GtkFontPeer.java, gnu/java/awt/peer/gtk/GtkListPeer.java, gnu/java/awt/peer/gtk/GtkMenuItemPeer.java, gnu/java/awt/peer/gtk/GtkToolkit.java, gnu/java/awt/peer/gtk/GtkWindowPeer.java: Import statements reworked. Some little reformattings. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/image/AffineTransformOp.java (TYPE_BILINEAR): Initialize with 2. * java/awt/print/Printable.java: Jalopied. (PAGE_EXISTS): Initialize with 0; (NO_SUCH_PAGE): Initialized with 1. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * Makefile.am: Add BufferedImageFilter.java. * Makefile.in: Regenerate. 2004-11-30 Graydon Hoare <graydon@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c (install_font_peer): Minor bug fixes to track cairo font semantics. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/BufferedImageFilter.java: Implement. 2004-11-30 Graydon Hoare <graydon@redhat.com> * Makefile.am (jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c) (jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c) (gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java) (gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java): Remove. (jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c) (jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c) (gnu/java/awt/peer/gtk/GdkTextLayout.java) (gnu/java/awt/peer/gtk/GdkFontPeer.java) (gnu/java/awt/peer/ClasspathTextLayoutPeer.java): Add * Makefile.in: Regenerate. * gnu/awt/xlib/XToolkit.java (getClasspathTextLayoutPeer): Add stub. * gnu/java/awt/ClasspathToolkit.java (getClasspathTextLayoutPeer) Add. * gnu/java/awt/peer/ClasspathFontPeer.java (copyStyleToAttrs) (copySizeToAttrs): Make public. * gnu/java/awt/peer/ClasspathTextLayoutPeer.java: New file. * gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java: Remove. * gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java: Remove. * gnu/java/awt/peer/gtk/GdkFontMetrics.java: Rewrite. * gnu/java/awt/peer/gtk/GdkFontPeer.java: New file. * gnu/java/awt/peer/gtk/GdkGlyphVector.java: Adjust type names. * gnu/java/awt/peer/gtk/GdkGraphics.java (getFontPeer): New function. (drawString): Pass font peer to native side. * gnu/java/awt/peer/gtk/GdkGraphics2D.java (cairoSetFont) (cairoShowGlyphs) (PainterThread): Remove. (GdkGraphics2D): Set hints during construction. (shifted) (walkPath) (draw) (setRenderingHint) (setRenderingHints): Reimplement normalization logic. (getDefaultHints) (updateBufferedImage) (isBufferedImageGraphics) (updateImagePixels) (drawImage): Make final. (drawImage): Always paint synchronously. (drawString) (drawGlyphVector): Rewrite. (releasePeerGraphicResource) (getPeerTextMetrics) (getPeerFontMetrics) (drawGdkGlyphVector) (drawGdkTextLayout) (cairoDrawGdkGlyphVector) (cairoDrawGdkTextLayout) (cairoDrawString) (getFontPeer): New functions. * gnu/java/awt/peer/gtk/GdkTextLayout.java: New file. * gnu/java/awt/peer/gtk/GtkComponentPeer.java (getFontMetrics): Get metrics via toolkit, to hit cache. * gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Use getFontMetrics. * gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkToolkit.java (LRUCache): New class. (fontCache) (metricsCache) (imageCache): New members. (getFontMetrics) (getImage) (getClasspathFontPeer): Use caches. (getFontPeer): Route through getClasspathFontPeer. * java/awt/Font.java (attrsToMap): Remove, adjust ctors. * java/awt/font/TextLayout.java: Implement in terms of peer. * javax/swing/plaf/basic/BasicSliderUI.java (paintThumb): Use polyline rather than polygon. * javax/swing/plaf/basic/BasicGraphicsUtils.java: Update comment but, alas, still do not switch to using TextLayouts. * javax/swing/text/Utilities.java (drawTabbedText): Draw text run-at-a-time, not char-at-a-time. * jni/gtk-peer/gdkfont.h: Publicize some of the font interface, add layout table. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c: Remove files. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Rewrite to incorporate brains of old GdkClasspathFontPeerMetrics. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Rewrite to incorporate brains of old GdkClasspathFontPeer. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: New file. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString): Rewrite to use persistent layout in peer font. Comment out extraneous gdk_flush calls. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c (metrics_cairo) (metrics_surface): New static variables. (paint_glyph_run) (install_font_peer): New helper functions. (releasePeerGraphicResource) (getPeerTextMetrics) (getPeerFontMetrics) (cairoDrawGdkTextLayout) (cairoDrawGdkGlyphVector): New native methods. (cairoDrawString): Rewrite, leaving layout-based version commented out for the time being. * jni/gtk-peer/gtkpeer.h (graphics): Add fields for pango stuff. 2004-11-30 David Gilbert <david.gilbert@object-refinery.com> * java/awt/geom/AffineTransform.java: Fixed javadocs overall. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ComponentColorModel.java: Remove FIXME comment since it's correct. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/IndexColorModel.java: Fix use of immutable BigIntegers. 2004-11-30 Tom Tromey <tromey@redhat.com> * javax/swing/plaf/basic/BasicOptionPaneUI.java (MessageIcon): Renamed from 'messageIcon'. (errorIcon, infoIcon, warningIcon, questionIcon): Updated. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/RescaleOp.java: Fix formatting. 2004-11-30 Olga Rodimina <rodimina@redhat.com> * javax/swing/plaf/basic/BasicComboPopup.java (SCROLL_DOWN): made final. (SCROLL_UP): made final. 2004-11-30 Olga Rodimina <rodimina@redhat.com> * javax/swing/plaf/basic/BasicComboPopup.java: Added javadocs for undocumented fields. (show): scroll down to the selected item and highlight selected item. (startAutoScrolling): Implemented. (stopAutoScrolling): Implemented. (autoScrollUp): Implemented. (autoScrollDown): Implemented. (InvocationMouseHandler.mouseReleased): Implemented. (InvocationMouseMotionHandler.mouseDragged): Implemented. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/RescaleOp.java: Implement. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/IndexColorModel.java (getRGBs, convertToIntDiscrete): Implement. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/IndexColorModel.java: Add class docs. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/IndexColorModel.java (isValid, getValidPixels): Implement. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/MenuBar.java, java/awt/peer/MenuBarPeer.java: Revert accidentally commited changes. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/AWTKeyStroke.java, java/awt/Canvas.java, java/awt/CardLayout.java, java/awt/CheckboxMenuItem.java, java/awt/Component.java, java/awt/Container.java, java/awt/DefaultKeyboardFocusManager.java, java/awt/EventDispatchThread.java, java/awt/FileDialog.java, java/awt/FlowLayout.java, java/awt/Font.java, java/awt/Frame.java, java/awt/Graphics2D.java, java/awt/GraphicsEnvironment.java, java/awt/GridBagConstraints.java, java/awt/GridBagLayout.java, java/awt/GridLayout.java, java/awt/Image.java, java/awt/KeyboardFocusManager.java, java/awt/Label.java, java/awt/List.java, java/awt/MediaTracker.java, java/awt/Menu.java, java/awt/MenuBar.java, java/awt/MenuComponent.java, java/awt/Panel.java, java/awt/PopupMenu.java, java/awt/ScrollPane.java, java/awt/Scrollbar.java, java/awt/SystemColor.java, java/awt/TextArea.java, java/awt/TextField.java, java/awt/Toolkit.java, java/awt/Window.java, java/awt/color/ICC_Profile.java, java/awt/datatransfer/DataFlavor.java, java/awt/datatransfer/StringSelection.java, java/awt/datatransfer/SystemFlavorMap.java, java/awt/dnd/Autoscroll.java, java/awt/dnd/DropTarget.java, java/awt/dnd/DropTargetContext.java, java/awt/dnd/DropTargetDragEvent.java, java/awt/dnd/peer/DropTargetContextPeer.java, java/awt/event/AdjustmentEvent.java, java/awt/event/InputEvent.java, java/awt/event/InvocationEvent.java, java/awt/event/KeyEvent.java, java/awt/event/MouseEvent.java, java/awt/font/TextLayout.java, java/awt/geom/GeneralPath.java, java/awt/geom/Point2D.java, java/awt/im/InputContext.java, java/awt/im/spi/InputMethodContext.java, java/awt/image/AffineTransformOp.java, java/awt/image/BufferedImage.java, java/awt/image/ColorModel.java, java/awt/image/ComponentColorModel.java, java/awt/image/CropImageFilter.java, java/awt/image/DirectColorModel.java, java/awt/image/MemoryImageSource.java, java/awt/image/PackedColorModel.java, java/awt/image/PixelGrabber.java, java/awt/image/RasterOp.java, java/awt/peer/MenuBarPeer.java: Some fixes for checkstyle. Import statement and modifier order redordering. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JTable.java (setModel): Reimplemented. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JTextArea.java (append): Re-implemented. (insert): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JSpinner.java (serialVersionUID): New static field. * javax/swing/JToggleButton.java (JToggleButton): Fixed email addresses. * javax/swing/SpinnerNumberModel.java (serialVersionUID): Added javadoc. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JTextArea.java: Don't use JTextComponent.doc directly. GCJ from java-gui-branch has a bug here which is fixed in HEAD ... 2004-11-30 Andrew John Hughes <address@hidden> * javax/swing/JTextArea.java: Added additional documentation. 2004-11-30 Andrew John Hughes <address@hidden> * javax/swing/JRadioButton.java: Implemented additional constructors and accessibility classes. Added documentation and fixed a typo in AbstractButton. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/IndexColorModel.java (IndexColorModel): Implement missing constructor. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ComponentColorModel.java (ComponentColorModel): Implement missing 1.4 constructor. 2004-11-30 Andrew John Hughes <address@hidden> * javax/swing/JToggleButton.java: Implemented additional constructors and accessibility classes. Added documentation and fixed a typo in AbstractButton. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ColorModel.java (getDataElement, getDataElements): Document since 1.4. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/BandedSampleModel.java: Implement. * Makefile.am: Add java/awt/image/BandedSampleModel.java. * Makefile.in: Regenerated. 2004-11-30 Michael Koch <konqueror@gmx.de> * java/awt/Window.java: Fixed whitespace difference with GNU classpath. 2004-11-30 Mark Wielaard <mark@klomp.org> * Makefile.am: Add javax/swing/SpinnerListModel.java. * Makefile.in: Regenerated. 2004-11-30 Andrew John Hughes <gnu_andrew@member.fsf.org> * javax/swing/SpinnerListModel.java, javax/swing/SpinnerModel.java Implemented SpinnerListModel. Added documentation to SpinnerModel. 2004-11-30 Andreas Tobler <a.tobler@schweiz.ch> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (init_dpi_conversion_factor): Apply the patch from main correctly. 2004-06-26 Andreas Tobler <a.tobler@schweiz.ch> 2004-11-30 Tom Tromey <tromey@redhat.com> Bug 9948. * javax/swing/JDesktopPane.java (LIVE_DRAG_MODE): Now final. (OUTLINE_DRAG_MODE): LIVE_DRAG_MODE. * javax/swing/plaf/basic/BasicSplitPaneUI.java (NON_CONTINUOUS_DIVIDER): Now final. Initialize. 2004-11-30 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/awt/Canvas.java (AccessibleAWTCanvas): added serialization UID * java/awt/Label.java (AccessibleAWTLabel): added serialization UID * javax/swing/JRootPane.java (AccessibleJRootPane): added comment to existing UID * javax/swing/JSpinner.java (DefaultEditor): added serialization UID (NumberEditor): added serialization UID * javax/swing/text/html/HTML.java (UnknownTag): added serialization UID 2004-11-30 Jeroen Frijters <jeroen@frijters.net> * javax/swing/JInternalFrame.java (CONTENT_PANE_PROPERTY,FRAME_ICON_PROPERTY,GLASS_PANE_PROPERTY, IS_CLOSED_PROPERTY,IS_ICON_PROPERTY,IS_MAXIMUM_PROPERTY, IS_SELECTED_PROPERTY,LAYERED_PANE_PROPERTY,MENU_BAR_PROPERTY, ROOT_PANE_PROPERTY,TITLE_PROPERTY): Made final as per API spec. * javax/swing/plaf/basic/BasicInternalFrameTitlePane.java (CLOSE_CMD,ICONIFY_CMD,MAXIMIZE_CMD,MOVE_CMD,RESTORE_CMD,SIZE_CMD): Made final as per API spec. 2004-11-30 Andreas Tobler <a.tobler@schweiz.ch> * jni/gtk-peer/gtkpeer.h: Remove duplicated copyright string. 2004-11-30 Sven de Marothy <sven@physto.se> * java/awt/geom/Arc2D.java: Reformatted. (setArc): Correct documentation to say 'upper left corner'. (setArcByTangent,contains,intersects): Implemented. (containsAngle): Corrected to handle negative extents. (ArcIterator): Set to private. (ArcIterator): Corrected for CHORD-type arcs, negative extents. (intersects): Fix: Now checks the arc segment. (contains): Cleaned up. * java/awt/geom/CubicCurve2a.javaD: Fix insideness-test. Reindent. (contains): Implemented. (intersects): Implemented. * java/awt/geom/QuadCurve2D.java: Fix insideness-test. Reindent. * java/awt/geom/GeneralPath: Fix insideness-test. Reindent and document. Fully (re)implemented using separate xpoints and ypoints float[] coords. 2004-11-30 Andreas Tobler <a.tobler@schweiz.ch> * configure.ac: Introduce AC_C_BIGENDIAN_CROSS for WORDS_BIGENDIAN. * configure: Regenerate. * include/config.h.in: Likewise. * jni/gtk-peer/gtkpeer.h (SWAPU32): Introduce macro to swap pixels. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c: Moved SWAPU32 macro to gtkpeer.h. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c (Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePixels): Convert pixels from 0xBBGGRRAA to 0xAARRGGBB only on Little Endian architectures. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_updated): Likewise. 2004-11-30 David Gilbert <david.gilbert@object-refinery.com> * java/awt/SystemColor.java: Fix @link doc entries. 2004-11-30 David Gilbert <david.gilbert@object-refinery.com> * java/awt/RenderingHints.java: Documented. (RenderingHints): Accept null init Map. (putAll): Preprocess map to generate appropriate exceptions. (remove): Cast object to Key and remove from hintMap. 2004-11-30 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/awt/MenuComponent.java, java/awt/MenuBar.java: Implementation of accessibility classes and methods for these two components. 2004-11-30 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/awt/KeyboardFocusManager.java: Added missing documentation. 2004-11-30 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/awt/Label.java, java/awt/Canvas.java: Added accessibility classes to AWT Label and Canvas, as well as additional documentation for Canvas. 2004-11-30 David Gilbert <address@bogus.example.com> * java/awt/image/DataBuffer.java: Update API documentation. * java/awt/image/DataBufferByte.java: Likewise. * java/awt/image/DataBufferDouble.java: Likewise. * java/awt/image/DataBufferFloat.java: Likewise. * java/awt/image/DataBufferInt.java: Likewise. * java/awt/image/DataBufferShort.java: Likewise. * java/awt/image/DataBufferUShort.java: Likewise. 2004-11-30 Dalibor Topic <robilad@kaffe.org> * java/awt/Component.java (postEvent): Only delegate to parent if a parent exists. Reported by: Stephane Meslin-Weber <steph@tangency.co.uk> 2004-11-30 Sven de Marothy <sven@physto.se> *java/awt/AWTEventMulticaster.java, java/awt/Adjustable.java, java/awt/Point.java, java/awt/Polygon.java, java/awt/Rectangle.java, java/awt/Shape.java, java/awt/geom/Area.java, java/awt/geom/Ellipse2D.java, java/awt/geom/PathIterator.java, java/awt/geom/Point2D.java, java/awt/geom/Rectangle2D.java, java/lang/Comparable.java, java/util/Arrays.java: Fixed documentation errors 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ComponentSampleModel.java: Add documentation. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ComponentSampleModel.java (constructor): Initialize numBanks when figuring out the max bank index. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/Raster.java (createPackedRaster): Implement MultiPixelPackedSampleModel codepath. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/MultiPixelPackedSampleModel.java: Implement. * Makefile.am: Add MultiPixelPackedSampleModel.java. * Makefile.in: Regenerate. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/Raster.java (getNumBands): Implement. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/Raster.java (createPackedRaster(int,int,int,int,int,Point)): Implement for bands>1. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/SinglePixelPackedSampleModel.java (SinglePixelPackedSampleModel): Throw exception for unsupported datatype. 2004-11-30 Jerry Quinn <jlquinn@optonline.net> * java/awt/image/ColorModel.java (getDataElement): Implemented. Update javadoc. (getDataElements): Add missing version. Remove bogus version. Update javadoc. 2004-11-30 Olga Rodimina <rodimina@redhat.com> * javax/swing/plaf/basic/BasicComboBoxUI.java: (paintCurrentValue): Pass correct parameters to getListCellRendererComponent(). (ListDataHandler.intervalRemoved): Implemented. (PropertyChangeHandler.propertyChange): Handle changes in MODEL_CHANGED_PROPERTY of the JComboBox * javax/swing/plaf/basic/BasicComboPopup.java: (BasicComboPopup): Moved code that configures popup to configurePopup() and call it instead. (firePopupMenuWillBecomeVisible): Implemented. (firePopupMenuWillBecomeInvisible): Likewise. (firePopupMenuCanceled): Likewise. (configureList): Set list's visibleRowCount same as comboBox's visibleRowCount. (configurePopup): Implemented. (getPopupHeightForRowCount): Get item's from JComboBox's model and not from model of the JList. (ListMouseMotionHandler.mouseMoved): Implemented. (PropertyChangeHandler.propertyChange): Handles change in the JComboBox's model. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JComponent.java (isMaximumSizeSet): New method. (isMinimumSizeSet): Likewise. (isPreferredSizeSet): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JSpinner.java: Some Re-formatting. (spinner): New field. (DefaultEditor): New method. (getSpinner): Likewise. (NumberEdito): Likewise. (getModel): Likewise 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/InputVerifier.java: Re-formatted. * javax/swing/JComponent.java (inputVerifier): New property field. (getInputVerifier): New method. (setInputVerifier): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JComponent.java (JComponent): Added javadoc comment. (setBorder): Fire property change eventr. (setEnabled): Likewise. (setMaximumSize): Likewise. (setMinimumSize): Likewise. (setPreferredSize): Likewise. (setOpaque): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JTextField.java (action): New field. (actionCommand): Likewise. (actionPropertyChangeListener): Likewise. (setHorizontalAlignment): Abort soon if new value == old value. Fire event before repainting. (postActionEvent): New method. (getAction): Likewise. (setAction): Likewise. (getActionCommand): Likewise. (setActionCommand): Likewise. (createActionPropertyChangeListener): Likewise. (configurePropertiesFromAction): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/DebugGraphics.java: Re-formatted. Fixed some javadocs. * javax/swing/JApplet.java (rootPaneCheckingEnabled): Renamed from checking. * javax/swing/JCheckBox.java (BORDER_PAINTED_FLAT_CHANGED_PROPERTY): New statif field. * javax/swing/JFrame.java: Re-formatted a bit and reordered some methods. (rootPaneCheckingEnabled): Renamed from checking. (getPreferredSize): Simplified. * javax/swing/JTextArea.java (getColumnWidth): New method. (getLineCount): Likewise. (getLineStartOffset): Likewise. (getLineEndOffset): Likewise. (getLineOfOffset): Likewise. (getRowHeight): Likewise. (insert): Likewise. (replaceRange): Likewise. * javax/swing/JTextField.java (scrollOffset): new field. (getScrollOffset): New method. (setScrollOffset): Likewise. (getColumnWidth): Likewise. * javax/swing/JTree.java (ANCHOR_SELECTION_PATH_PROPERTY): New static field. (CELL_EDITOR_PROPERTY): Likewise. (CELL_RENDERER_PROPERTY): Likewise. (EDITABLE_PROPERTY): Likewise. (EXPANDS_SELECTED_PATHS_PROPERTY): Likewise. (INVOKES_STOP_CELL_EDITING_PROPERTY): Likewise. (LARGE_MODEL_PROPERTY): Likewise. (LEAD_SELECTION_PATH_PROPERTY): Likewise. (ROOT_VISIBLE_PROPERTY): Likewise. (ROW_HEIGHT_PROPERTY): Likewise. (SCROLLS_ON_EXPAND_PROPERTY): Likewise. (SELECTION_MODEL_PROPERTY): Likewise. (SHOWS_ROOT_HANDLES_PROPERTY): Likewise. (TOGGLE_CLICK_COUNT_PROPERTY): Likewise. (TREE_MODEL_PROPERTY): Likewise. (VISIBLE_ROW_COUNT_PROPERTY): Likewise. (cellEditor): New field. (invokesStopCellEditing): Likewise. (largeModel): Likewise. (rowHeight): Likewise. (scrollsOnExpand): Likewise. (selectionModel): Likewise. (toggleClickCount): Likewise. (visibleRowCount): Likewise. (setShowsRootHandles): Fixed typo in method name. (getCellEditor): New method. (setCellEditor): Likewise. (getSelectionModel): Likewise. (setSelectionModel): Likewise. (getVisibleRowCount): Likewise. (setVisibleRowCount): Likewise. (isLargeModel): Likewise. (setLargeModel): Likewise. (getRowHeight): Likewise. (setRowHeight): Likewise. (getInvokesStopCellEditing): Likewise. (setInvokesStopCellEditing): Likewise. (getToggleClickCount): Likewise. (setToggleClickCount): Likewise. (getScrollsOnExpand): Likewise. (setScrollsOnExpand): Likewise. * javax/swing/table/DefaultTableColumnModel.java (addColumnModelListener): Fixed javadoc. (removeColumnModelListener): Implemented. Fixed javadoc. (getColumnModelListeners): New method. * javax/swing/table/JTableHeader.java (columnModel): Made protected. (draggedColumn): Likewise. (draggedDistance): Likewise. (reorderingAllowed): Likewise. (resizingAllowed): Likewise. (resizingColumn): Likewise. (table): Likewise. (updateTableInRealTime): Likewise. (createDefaultColumnModel): Renamed from createDefaultTableColumnModel. (setDefaultRenderer): New method. * javax/swing/table/TableColumn.java (getPropertyChangeListeners): New method. * javax/swing/text/DefaultHighlighter.java (drawsLayeredHighlights): New field. (getDrawsLayeredHighlights): New method. (setDrawsLayeredHighlights): Likewise. * javax/swing/text/DocumentFilter.java (FilterBypass): New inner class. (insertString): New method. (remove): Likewise. (replace): Likewise. * javax/swing/text/JTextComponent.java (dragEnabled): New field. (getSelectedText): New method. (getDragEnabled): Likewise. (setDragEnabled): Likewise. (replaceSelection): Reimplemented. * javax/swing/text/NavigationFilter.java (FilterBypass): New inner class. (NavigationFilter): New method. (moveDot): Likewise. (setDot): Likewise. * javax/swing/text/SimpleAttributeSet.java (EMPTY): Made public final. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/SpinnerNumberModel.java (getMinimum): New method. (setMinimum): Likewise. (getMaximum): Likewise. (setMaximum): Likewise. (getStepSize): Likewise. (setStepSize): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JMenu.java (getMenuListeners): New method. (fireMenuSelected): Simplified. * javax/swing/JRootPane.java (NONE): New static field. (FRAME): Likewise. (PLAIN_DIALOG): Likewise. (INFORMATION_DIALOG): Likewise. (ERROR_DIALOG): Likewise. (COLOR_CHOOSER_DIALOG): Likewise. (FILE_CHOOSER_DIALOG): Likewise. (QUESTION_DIALOG): Likewise. (WARNING_DIALOG): Likewise. (defaultButton): New field. (getDefaultButton): New method. (setDefaultButton): Likewise. * javax/swing/JScrollPane.java (getUI): New method. (setUI): Likewise. * javax/swing/JTable.java (getUI): Javadoc added. (setUI): New method. * javax/swing/JViewport.java (getUI): New method. (setUI): Likewise. * javax/swing/UIDefaults.java (removePropertyChangeListener): Made public. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JApplet.java, javax/swing/JFrame.java: Re-indented. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/AbstractButton.java: Little re-formatting. (changeEvent): Made protected. (fireStateChanged): Removed argument. (setHorizontalAlignment): Abort method when old value is equal too new value. (setHorizontalTextPosition): Likewise. (setVerticalAlignment): Likewise. (setVerticalTextPosition): Likewise. (setBorderPainted): Likewise. (setIcon): Likewise. (setText): Likewise. (setIconTextGap): Likewise. (setMargin): Likewise. (setPressedIcon): Likewise. (setFocusPainted): Likewise. (setDisabledSelectedIcon): Likewise. (setRolloverIcon): Likewise. (setRolloverSelectedIcon): Likewise. (setSelectedIcon): Likewise. (setContentAreaFilled): Likewise. 2004-11-30 Kim Ho <kho@redhat.com> * javax/swing/plaf/basic/BasicArrowButton.java: Jalopy. Reimplement. * javax/swing/plaf/basic/BasicScrollBarUI.java: Jalopy. (arrowIcon, upIcon, downIcon, leftIcon, rightIcon): Removed. (createIncreaseButton): Use BasicArrowButton. (createDecreaseButton): Ditto. * javax/swing/plaf/basic/BasicSplitPaneDivider.java: (createRightOneTouchButton): Remove button border. (createLeftOneTouchButton): Ditto. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JSpinner.java (setModel): New method. * javax/swing/SpringLayout.java (Constraints): May not be final. 2004-11-30 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GtkClipboard.java, java/awt/datatransfer/Clipboard.java, java/awt/datatransfer/ClipboardOwner.java: Reformated to make it use our coding standard. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/SpinnerNumberModel.java (SpinnerNumberModel): Implements java.io.Serializable. (serialVersionUID): New field. (SpinnerNumberModel): Added missing @throws tags to javadocs. * javax/swing/UIManager.java (get): New method. (getBoolean): Likewise. (getBorder): Likewise. (getColor): Likewise. (getDimension): Likewise. (getFont): Likewise. (getIcon): Likewise. (getInsets): Likewise. (getInt): Likewise. (getString): Likewise. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JPasswordField.java: Reformated. Implemented construtors. * javax/swing/plaf/basic/BasicPasswordFieldUI.java (create): New method. * javax/swing/text/PlainView.java (selectedColor): Made package-private to allow access from sub-classes in same package too. (unselectedColor): Likewise. (font): Likewise. (drawSelectedText): Make protected. (drawUnselectedText): Likewise. * javax/swing/text/PasswordView.java: New file. * Makefile.am: Added javax/swing/text/PasswordView.java. * Makefile.in: Regenerated. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Set menu bar's width. * gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (nativeSetHelpMenu): Add FIXME comment. (addHelpMenu): Elide call to nativeSetHelpMenu. * java/awt/Menu.java (isTearOff): Rename to tearOff. (menuSerializedDataVersion): Initialize to 1. (separatorLabel): Mark transient. (insert(MenuItem,int)): Implement. * java/awt/MenuBar.java (setHelpMenu): Call getPeer to retrieve peer. (countMenus): Count help menu. * java/awt/MenuComponent.java (nameExplicitlySet, newEventsOnly, accessibleContext): Add fields. * java/awt/MenuItem.java: Remove event mask FIXME. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c (gtkWidgetModifyFont): Only set font if label is non-NULL. (setLabel): Don't treat "-" specially. 2004-11-30 Kim Ho <kho@redhat.com> * javax/swing/colorchooser/DefaultHSBChooserPanel.java: (stateChanged): Only update the image and the track if the values are not being adjusted. (updateChooser): Grab the new mouse point from the spinner values. Update the image and track only if the values are not being adjusted. (getHSBValues): New method. * javax/swing/colorchooser/DefaultRGBChooserPanel.java: (SliderHandler::stateChanged): Changed internalChange to updateChange. Set sliderChange. (SpinnerHandler::stateChanged): Ditto. Set spinnerChange. (spinnerChange): New variable. (sliderChange): Ditto. (updateChange): Renamed from internalChange. (updateChooser): Do not update sliders if the sliders were the original source of the change. Ditto for spinners. * javax/swing/plaf/basic/BasicTabbedPaneUI.java: (mousePress): Don't scroll the JViewport if there will be extra space at the end of the run. Change layout() to revalidate(). (calculateSize): Use the component's width/height unless it is smaller than the max tab width/height. (calculateTabRects): Subtract the tab run overlay. (rotateTabRuns): Don't rotate if there's only one run. (layoutContainer): Reuse the viewport point. (createLayoutManager): Set the viewport to use no layout. (paintTabArea): Don't paint the tabs that are not visible to the JViewport. (paintContentBorderTopEdge): Check for scroll tab layout before looking for gap. (paintContentBorderLeftEdge): Ditto. (paintContentBorderBottomEdge): Ditto. (paintContentBorderRightEdge): Ditto. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GtkButtonPeer.java (gtkWidgetSetFont): Rename ... (gtkWidgetModifyFont): New method. * gnu/java/awt/peer/gtk/GtkFramePeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c (setMenuBarWidth): New method. (setBounds): Set the menu bar width. (postConfigureEvent): Set the menu bar width if the window's width has changed. * gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (GtkMenuBarPeer): Don't call create. (setFont): New method. * gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java (create): New method. (setFont): Likewise. (GtkMenuComponentPeer): Call create and setFont. * gnu/java/awt/peer/gtk/GtkMenuItemPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c (connectSignals): Make package private. (gtkWidgetModifyFont): New method. (create): Likewise. (GtkMenuItemPeer): Don't call create. (setFont): New method. * java/awt/CheckboxMenuItem.java (addNotify): Fix peer == null condition. * java/awt/Container.java (validateTree): Fix comment typos. * java/awt/MenuComponent.java (getFont): Return parent's font if our font is null. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c (create): Remove call to deprecated gtk_check_menu_item_set_show_toggle function. 2004-11-30 Hans Boehm <Hans.Boehm@hp.com> * java/lang/natObject.cc (LOCK_LOG, LOG): Add debug tracing. (Almost everywhere): add LOG calls, fix, add comments. (_Jv_MonitorEnter): Replace masking of LOCKED bit with assertion. Add explicit check for LOCKED bit in slow case (PR 16662). (_Jv_MonitorExit): Add casts in debug-only code. Always release LOCKED bit before throwing exception. (_Jv_ObjectCheckMonitor): Lock may be held if lightweight lock isn't. Handle easy cases without lock acquisition. (Object::wait): Use NotifyAll for lock inflation. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GtkFramePeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c (gtkFixedMove): Remove method. 2004-11-30 Sven de Marothy <sven@physto.se> * java/awt/geom/Area.java: Implemented. 2004-11-30 Mark Wielaard <mark@klomp.org> * java/awt/geom/Arc2D.java (ArcIterator): Make package private. 2004-11-30 Sven de Marothy <sven@physto.se> * java/awt/geom/Arc2D.java Reformatted. (setArc): Correct documentation to say 'upper left corner'. (setArcByTangent,contains,intersects): Implemented. (containsAngle): Corrected to handle negative extents. (ArcIterator): Set to private. (ArcIterator): Corrected for CHORD-type arcs, negative extents. * java/awt/geom/Ellipse2D.java Documented. (contains,intersects): Implemented. * java/awt/geom/Line2D.java (linesIntersect): Correct handling of special cases. 2004-11-30 Mark Wielaard <mark@klomp.org> * gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Use Color.BLACK if c == null, don't create new Color object each time. * gnu/java/awt/peer/gtk/GdkGraphics2D.java (comp): New private field. (setColor): Use Color.BLACK when argument null. (setComposite): Set this.comp field. (getComposite): Return this.comp, or AlphaComposite.SrcOver when null. (DrawState.comp): New private field. (DrawState.save): Save Composite. (DrawState.restore): Restore comp field. * java/awt/FontMetrics.java (gRC): New static final private field. (getLineMetrics(String, Graphics)): New method. (getLineMetrics(String, int, int, Graphics)): Likewise. (getLineMetrics(char[], int, int, Graphics)): Likewise. (getLineMetrics(CharacterIterator, int, int, Graphics)): Likewise. * javax/swing/JMenu.java (JMenu(String, boolean)): Ignore tearoff argument. PR SWING/17294. * javax/swing/plaf/basic/BasicGraphicsUtils.java (): Always use the fall-back code since none of the TextArea methods are really implemented now. PR SWING/17296. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c (GdkGlyphVector_setChars): Replace assert() with if block when pango_itemize() returns null. PR AWT/17295. (GdkGlyphVector_allInkExtents): Likewise when vec->glyphitems is null. 2004-11-30 Thomas Fitzsimmons <fitzsim@redhat.com> * Makefile.am (gtk_c_source_files): Add gnu_java_awt_peer_gtk_GtkFramePeer.c. * Makefile.in: Regenerate. * gnu/java/awt/peer/gtk/GdkGraphics.java (getClipBounds): Remove comment. * gnu/java/awt/peer/gtk/GtkButtonPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (create): Pack GtkButton in GtkEventBox. (connectJObject): Remove. (focus_in_cb): New function. (focus_out_cb): Likewise. (connectSignals): Connect focus-in-event and focus-out-event signals. (gtkSetFont): Rename to ... (gtkWidgetModifyFont): New method. (gtkWidgetRequestFocus): New method. * gnu/java/awt/peer/gtk/GtkCheckboxPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c (gtkSetFont): Rename to ... (gtkWidgetModifyFont): New method. * gnu/java/awt/peer/gtk/GtkComponentPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c (isInRepaint): New field. (gtkSetFont): Remove method. (addExposeFilter): Likewise. (removeExposeFilter): Likewise. (gtkWidgetQueueDrawArea): Rename to ... (gtkWidgetRepaintArea): New method. (beginNativeRepaint): New method. (endNativeRepaint): New method. (setComponentBounds): Move implementation here from GtkComponentPeer. (paint): Remove implementation. (repaint): Wrap call to gtkWidgetRepaintArea with calls to beginNativeRepaint and endNativeRepaint. (setBounds): Use menu bar height in bounds calculation. (postExposeEvent): Only post paint event if we're not doing a native repaint. (gtkWidgetSetParent): Replace gtk_layout_put with gtk_fixed_put. (setNativeBounds): Replace gtk_layout_move with gtk_fixed_move. (find_gtk_layout): Remove function. (filter_expose_event_handler): Likewise. * gnu/java/awt/peer/gtk/GtkDialogPeer.java (postExposeEvent): Likewise. * gnu/java/awt/peer/gtk/GtkFileDialogPeer.java (setComponentBounds): Call GtkComponentPeer's setComponentBounds. * gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight): New method. (moveLayout): Rename to ... (gtkFixedMove): New method. (gtkLayoutSetVisible): Rename to ... (gtkFixedSetVisible): New method. (setMenuBar): Rearrange, to make the three separate cases clearer. (postExposeEvent): Only post paint event if we're not doing a native repaint. * gnu/java/awt/peer/gtk/GtkGenericPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c (gtkWidgetModifyFont): New method. * gnu/java/awt/peer/gtk/GtkImagePainter.java (GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,Color)): Call run directly, rather than spawning a new thread. (GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,int,int,int,int,Color)): Likewise. * gnu/java/awt/peer/gtk/GtkLabelPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (gtkSetFont): Rename to ... (gtkWidgetModifyFont): New method. (create): Rename ebox to eventbox. * gnu/java/awt/peer/gtk/GtkListPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont): Rename to ... (gtkWidgetModifyFont): New method. * gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java (GtkMenuComponentPeer): Set the default font. * gnu/java/awt/peer/gtk/GtkTextAreaPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c (gtkSetFont): Rename to ... (gtkWidgetModifyFont): New method. * gnu/java/awt/peer/gtk/GtkTextFieldPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise. * java/awt/Component.java (locale): Initialize to default locale. * java/awt/Container.java (invalidateTree): Make package-private. (paint): Paint self first. (setMenuBar): Call invalidateTree. * java/awt/Panel.java (dispatchEventImpl): Remove method. * java/awt/Window.java (show): Call no-parameter variant of requestFocusInWindow. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (initState): Remove special case for window widget. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c (grab_current_drawable): Likewise. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c (create): Replace GtkLayout with GtkFixed. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (pre_event_handler): Remove special cases for GDK_EXPOSE events. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: New file. Move all GtkFramePeer native method implementations here from gnu_java_awt_peer_gtk_GtkWindowPeer.c. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create): Replace GtkLayout with GtkFixed. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (find_layout): Remove function. (create): Replace GtkLayout with GtkFixed. (connectSignals): Remove find_layout call. (toBack): Replace XFlush with gdk_flush. (toFront): Replace XFlush with gdk_flush. Move GtkFramePeer native method implementations to gnu_java_awt_peer_gtk_GtkFramePeer.c. * jni/gtk-peer/gtkpeer.h: Remove declaration of find_gtk_layout. 2004-11-30 Michael Koch <konqueror@gmx.de> * javax/swing/JTextArea.java (lineWrap): Renamed from "wrapping". (wrapStyleWord): NEw field. (getLineWrap): Re-edited javadoc comment. (setLineWrap): Likewise. (getWrapStyleWord): New method. (setWrapStyleWord): Likewise. From-SVN: r91544
This commit is contained in:
parent
c21accc5d9
commit
ea28b8f60f
429 changed files with 29663 additions and 8685 deletions
|
@ -160,7 +160,7 @@ public abstract class ClasspathFontPeer
|
|||
return name;
|
||||
}
|
||||
|
||||
protected static void copyStyleToAttrs (int style, Map attrs)
|
||||
public static void copyStyleToAttrs (int style, Map attrs)
|
||||
{
|
||||
if ((style & Font.BOLD) == Font.BOLD)
|
||||
attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
|
||||
|
@ -179,7 +179,7 @@ public abstract class ClasspathFontPeer
|
|||
attrs.put (TextAttribute.FAMILY, fam);
|
||||
}
|
||||
|
||||
protected static void copySizeToAttrs (float size, Map attrs)
|
||||
public static void copySizeToAttrs (float size, Map attrs)
|
||||
{
|
||||
attrs.put (TextAttribute.SIZE, new Float (size));
|
||||
}
|
||||
|
@ -218,7 +218,7 @@ public abstract class ClasspathFontPeer
|
|||
AffineTransform trans = this.transform;
|
||||
float size = this.size;
|
||||
int style = this.style;
|
||||
|
||||
|
||||
if (attribs.containsKey (TextAttribute.FAMILY))
|
||||
family = (String) attribs.get (TextAttribute.FAMILY);
|
||||
|
||||
|
@ -243,7 +243,13 @@ public abstract class ClasspathFontPeer
|
|||
{
|
||||
Float sz = (Float) attribs.get (TextAttribute.SIZE);
|
||||
size = sz.floatValue ();
|
||||
|
||||
// Pango doesn't accept 0 as a font size.
|
||||
if (size < 1)
|
||||
size = 1;
|
||||
}
|
||||
else
|
||||
size = 12;
|
||||
|
||||
if (attribs.containsKey (TextAttribute.TRANSFORM))
|
||||
{
|
||||
|
|
111
libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
Normal file
111
libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
Normal file
|
@ -0,0 +1,111 @@
|
|||
/* ClasspathTextLayoutPeer.java
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.java.awt.peer;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Shape;
|
||||
import java.awt.font.TextHitInfo;
|
||||
import java.awt.font.TextLayout;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.text.CharacterIterator;
|
||||
import java.text.AttributedCharacterIterator;
|
||||
import java.text.AttributedString;
|
||||
import java.util.Map;
|
||||
import java.awt.font.TextAttribute;
|
||||
|
||||
|
||||
/**
|
||||
* @author Graydon Hoare
|
||||
*/
|
||||
|
||||
public interface ClasspathTextLayoutPeer
|
||||
{
|
||||
TextHitInfo getStrongCaret (TextHitInfo hit1,
|
||||
TextHitInfo hit2);
|
||||
|
||||
void draw (Graphics2D g2, float x, float y);
|
||||
|
||||
byte getBaseline ();
|
||||
|
||||
boolean isLeftToRight ();
|
||||
boolean isVertical ();
|
||||
|
||||
float getAdvance ();
|
||||
float getAscent ();
|
||||
float getDescent ();
|
||||
float getLeading ();
|
||||
|
||||
int getCharacterCount ();
|
||||
byte getCharacterLevel (int index);
|
||||
|
||||
float[] getBaselineOffsets ();
|
||||
Shape getBlackBoxBounds (int firstEndpoint, int secondEndpoint);
|
||||
Rectangle2D getBounds ();
|
||||
|
||||
float[] getCaretInfo (TextHitInfo hit, Rectangle2D bounds);
|
||||
Shape getCaretShape (TextHitInfo hit, Rectangle2D bounds);
|
||||
Shape[] getCaretShapes (int offset, Rectangle2D bounds,
|
||||
TextLayout.CaretPolicy policy);
|
||||
|
||||
Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint,
|
||||
Rectangle2D bounds);
|
||||
int[] getLogicalRangesForVisualSelection (TextHitInfo firstEndpoint,
|
||||
TextHitInfo secondEndpoint);
|
||||
|
||||
TextHitInfo getNextLeftHit (int offset, TextLayout.CaretPolicy policy);
|
||||
TextHitInfo getNextRightHit (int offset, TextLayout.CaretPolicy policy);
|
||||
TextHitInfo hitTestChar (float x, float y, Rectangle2D bounds);
|
||||
TextHitInfo getVisualOtherHit (TextHitInfo hit);
|
||||
|
||||
float getVisibleAdvance ();
|
||||
Shape getOutline (AffineTransform tx);
|
||||
Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
|
||||
TextHitInfo secondEndpoint,
|
||||
Rectangle2D bounds);
|
||||
|
||||
TextLayout getJustifiedLayout (float justificationWidth);
|
||||
void handleJustify (float justificationWidth);
|
||||
|
||||
Object clone ();
|
||||
int hashCode ();
|
||||
boolean equals (ClasspathTextLayoutPeer tl);
|
||||
String toString ();
|
||||
}
|
|
@ -35,6 +35,7 @@ this exception to your version of the library, but you are not
|
|||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.java.awt.peer;
|
||||
|
||||
import java.awt.AWTEvent;
|
||||
|
|
|
@ -1,116 +0,0 @@
|
|||
/* GdkClasspathFontPeerMetrics.java
|
||||
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.font.*;
|
||||
import java.awt.geom.*;
|
||||
|
||||
public class GdkClasspathFontPeerMetrics extends FontMetrics
|
||||
{
|
||||
private final int native_state = GtkGenericPeer.getUniqueInteger();
|
||||
|
||||
private static final int ASCENT = 0, MAX_ASCENT = 1,
|
||||
DESCENT = 2, MAX_DESCENT = 3,
|
||||
MAX_ADVANCE = 4;
|
||||
|
||||
private int[] metrics;
|
||||
private native int[] initState (Object font);
|
||||
|
||||
public GdkClasspathFontPeerMetrics (Font font)
|
||||
{
|
||||
super (font);
|
||||
metrics = initState (font.getPeer());
|
||||
}
|
||||
|
||||
public int stringWidth (String str)
|
||||
{
|
||||
GlyphVector gv = font.createGlyphVector
|
||||
(new FontRenderContext
|
||||
(new AffineTransform (), false, false), str);
|
||||
Rectangle2D r = gv.getVisualBounds ();
|
||||
return (int) r.getWidth ();
|
||||
}
|
||||
|
||||
public int charWidth (char ch)
|
||||
{
|
||||
return stringWidth (new String (new char[] { ch }));
|
||||
}
|
||||
|
||||
public int charsWidth (char data[], int off, int len)
|
||||
{
|
||||
return stringWidth (new String (data, off, len));
|
||||
}
|
||||
|
||||
/*
|
||||
Sun's Motif implementation always returns 0 or 1 here (???), but
|
||||
going by the X11 man pages, it seems as though we should return
|
||||
font.ascent + font.descent.
|
||||
*/
|
||||
public int getLeading ()
|
||||
{
|
||||
return 1;
|
||||
// return metrics[ASCENT] + metrics[DESCENT];
|
||||
}
|
||||
|
||||
public int getAscent ()
|
||||
{
|
||||
return metrics[ASCENT];
|
||||
}
|
||||
|
||||
public int getMaxAscent ()
|
||||
{
|
||||
return metrics[MAX_ASCENT];
|
||||
}
|
||||
|
||||
public int getDescent ()
|
||||
{
|
||||
return metrics[DESCENT];
|
||||
}
|
||||
|
||||
public int getMaxDescent ()
|
||||
{
|
||||
return metrics[MAX_DESCENT];
|
||||
}
|
||||
|
||||
public int getMaxAdvance ()
|
||||
{
|
||||
return metrics[MAX_ADVANCE];
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/* GdkFontMetrics.java
|
||||
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
|
@ -38,33 +38,63 @@ exception statement from your version. */
|
|||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import gnu.java.awt.ClasspathToolkit;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.Toolkit;
|
||||
|
||||
public class GdkFontMetrics extends FontMetrics
|
||||
{
|
||||
private final int native_state = GtkGenericPeer.getUniqueInteger();
|
||||
|
||||
private int[] font_metrics;
|
||||
GdkFontPeer peer;
|
||||
|
||||
private static final int ASCENT = 0, MAX_ASCENT = 1,
|
||||
DESCENT = 2, MAX_DESCENT = 3,
|
||||
MAX_ADVANCE = 4;
|
||||
static final int FONT_METRICS_ASCENT = 0;
|
||||
static final int FONT_METRICS_MAX_ASCENT = 1;
|
||||
static final int FONT_METRICS_DESCENT = 2;
|
||||
static final int FONT_METRICS_MAX_DESCENT = 3;
|
||||
static final int FONT_METRICS_MAX_ADVANCE = 4;
|
||||
|
||||
private int[] metrics;
|
||||
private native int[] initState (String fname, int style, int size);
|
||||
static final int TEXT_METRICS_X_BEARING = 0;
|
||||
static final int TEXT_METRICS_Y_BEARING = 1;
|
||||
static final int TEXT_METRICS_WIDTH = 2;
|
||||
static final int TEXT_METRICS_HEIGHT = 3;
|
||||
static final int TEXT_METRICS_X_ADVANCE = 4;
|
||||
static final int TEXT_METRICS_Y_ADVANCE = 5;
|
||||
|
||||
static native void getPeerFontMetrics(GdkFontPeer peer, double [] metrics);
|
||||
static native void getPeerTextMetrics(GdkFontPeer peer, String str, double [] metrics);
|
||||
|
||||
public GdkFontMetrics (Font font)
|
||||
{
|
||||
super (font);
|
||||
metrics = initState (font.getName (), font.getStyle (), font.getSize ());
|
||||
{
|
||||
super (font.getPeer() instanceof GdkFontPeer
|
||||
? font
|
||||
: ((ClasspathToolkit)(Toolkit.getDefaultToolkit ()))
|
||||
.getFont (font.getName(), font.getAttributes ()));
|
||||
|
||||
peer = (GdkFontPeer) this.font.getPeer();
|
||||
|
||||
font_metrics = new int[5];
|
||||
double [] hires = new double[5];
|
||||
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
GdkGraphics2D.getPeerFontMetrics(peer, hires);
|
||||
else
|
||||
getPeerFontMetrics (peer, hires);
|
||||
|
||||
for (int i = 0; i < 5; ++i)
|
||||
font_metrics[i] = (int) hires[i];
|
||||
}
|
||||
|
||||
native public int stringWidth (String fname, int style, int size,
|
||||
String str);
|
||||
|
||||
|
||||
public int stringWidth (String str)
|
||||
{
|
||||
return stringWidth (font.getName (), font.getStyle (), font.getSize (),
|
||||
str);
|
||||
double [] hires = new double[6];
|
||||
if (GtkToolkit.useGraphics2D())
|
||||
GdkGraphics2D.getPeerTextMetrics(peer, str, hires);
|
||||
else
|
||||
getPeerTextMetrics(peer, str, hires);
|
||||
return (int) hires [TEXT_METRICS_WIDTH];
|
||||
}
|
||||
|
||||
public int charWidth (char ch)
|
||||
|
@ -77,34 +107,39 @@ public class GdkFontMetrics extends FontMetrics
|
|||
return stringWidth (new String (data, off, len));
|
||||
}
|
||||
|
||||
// Sun's Motif implementation always returns 0 or 1 here (???).
|
||||
/*
|
||||
Sun's Motif implementation always returns 0 or 1 here (???), but
|
||||
going by the X11 man pages, it seems as though we should return
|
||||
font.ascent + font.descent.
|
||||
*/
|
||||
public int getLeading ()
|
||||
{
|
||||
return 0;
|
||||
return 1;
|
||||
// return metrics[ASCENT] + metrics[DESCENT];
|
||||
}
|
||||
|
||||
public int getAscent ()
|
||||
{
|
||||
return metrics[ASCENT];
|
||||
return font_metrics[FONT_METRICS_ASCENT];
|
||||
}
|
||||
|
||||
public int getMaxAscent ()
|
||||
{
|
||||
return metrics[MAX_ASCENT];
|
||||
return font_metrics[FONT_METRICS_MAX_ASCENT];
|
||||
}
|
||||
|
||||
public int getDescent ()
|
||||
{
|
||||
return metrics[DESCENT];
|
||||
return font_metrics[FONT_METRICS_DESCENT];
|
||||
}
|
||||
|
||||
public int getMaxDescent ()
|
||||
{
|
||||
return metrics[MAX_DESCENT];
|
||||
return font_metrics[FONT_METRICS_MAX_DESCENT];
|
||||
}
|
||||
|
||||
public int getMaxAdvance ()
|
||||
{
|
||||
return metrics[MAX_ADVANCE];
|
||||
return font_metrics[FONT_METRICS_MAX_ADVANCE];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,68 +1,62 @@
|
|||
/* GdkClasspathFontPeer.java -- backend implementation for Font object
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
/* GdkFontPeer.java -- Implements FontPeer with GTK+
|
||||
Copyright (C) 1999, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.peer.FontPeer;
|
||||
import java.awt.*;
|
||||
import java.awt.font.*;
|
||||
import java.awt.geom.*;
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.awt.font.*;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.MissingResourceException;
|
||||
import java.text.CharacterIterator;
|
||||
import java.text.AttributedCharacterIterator;
|
||||
import java.text.StringCharacterIterator;
|
||||
import java.awt.font.TextAttribute;
|
||||
import gnu.classpath.Configuration;
|
||||
import gnu.java.awt.peer.ClasspathFontPeer;
|
||||
|
||||
/**
|
||||
* This class represents a windowing system font using the Pango
|
||||
* unicode/glyph/font library and the Cairo rendering library.
|
||||
*
|
||||
* @author Graydon Hoare (graydon@redhat.com)
|
||||
*/
|
||||
|
||||
public class GdkClasspathFontPeer extends ClasspathFontPeer
|
||||
public class GdkFontPeer extends ClasspathFontPeer
|
||||
{
|
||||
|
||||
native static void initStaticState ();
|
||||
private final int native_state = GtkGenericPeer.getUniqueInteger ();
|
||||
private static ResourceBundle bundle;
|
||||
|
||||
static
|
||||
{
|
||||
|
@ -71,26 +65,26 @@ public class GdkClasspathFontPeer extends ClasspathFontPeer
|
|||
System.loadLibrary("gtkpeer");
|
||||
}
|
||||
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
initStaticState ();
|
||||
initStaticState ();
|
||||
|
||||
try
|
||||
{
|
||||
bundle = ResourceBundle.getBundle ("gnu.java.awt.peer.gtk.font");
|
||||
}
|
||||
catch (Throwable ignored)
|
||||
{
|
||||
bundle = null;
|
||||
}
|
||||
}
|
||||
native static void initStaticState ();
|
||||
private final int native_state = GtkGenericPeer.getUniqueInteger ();
|
||||
|
||||
|
||||
/* Instance Variables */
|
||||
|
||||
private native void initState ();
|
||||
private native void dispose ();
|
||||
private native void setFont (String family, int style, int size);
|
||||
|
||||
protected void sync ()
|
||||
{
|
||||
this.setFont (this.familyName, this.style, (int)this.size);
|
||||
}
|
||||
private native void setFont (String family, int style, int size, boolean useGraphics2D);
|
||||
|
||||
protected void finalize ()
|
||||
{
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
GdkGraphics2D.releasePeerGraphicsResource(this);
|
||||
dispose ();
|
||||
}
|
||||
|
||||
|
@ -101,49 +95,57 @@ public class GdkClasspathFontPeer extends ClasspathFontPeer
|
|||
* triplicate.
|
||||
*/
|
||||
|
||||
private String buildString(CharacterIterator i) {
|
||||
String s = new String ();
|
||||
for(char c = i.first(); c != CharacterIterator.DONE; c = i.next())
|
||||
s += c;
|
||||
return s;
|
||||
private String buildString(CharacterIterator iter)
|
||||
{
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next())
|
||||
sb.append(c);
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String buildString(CharacterIterator iter, int begin, int limit) {
|
||||
String s = new String ();
|
||||
private String buildString(CharacterIterator iter, int begin, int limit)
|
||||
{
|
||||
StringBuffer sb = new StringBuffer();
|
||||
int i = 0;
|
||||
for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next(), i++)
|
||||
{
|
||||
if (begin <= i)
|
||||
s += c;
|
||||
sb.append(c);
|
||||
if (limit <= i)
|
||||
break;
|
||||
}
|
||||
return s;
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String buildString(char[] chars, int begin, int limit) {
|
||||
String s = new String ();
|
||||
for(int i = begin; i <= limit; i++)
|
||||
s += chars[i];
|
||||
return s;
|
||||
private String buildString(char[] chars, int begin, int limit)
|
||||
{
|
||||
return new String(chars, begin, limit - begin);
|
||||
}
|
||||
|
||||
/* Public API */
|
||||
|
||||
public GdkClasspathFontPeer (String name, int style, int size)
|
||||
public GdkFontPeer (String name, int style)
|
||||
{
|
||||
// All fonts get a default size of 12 if size is not specified.
|
||||
this(name, style, 12);
|
||||
}
|
||||
|
||||
public GdkFontPeer (String name, int style, int size)
|
||||
{
|
||||
super(name, style, size);
|
||||
initState ();
|
||||
setFont (this.familyName, this.style, (int)this.size);
|
||||
setFont (this.familyName, this.style, (int)this.size,
|
||||
GtkToolkit.useGraphics2D());
|
||||
}
|
||||
|
||||
public GdkClasspathFontPeer (String name, Map attributes)
|
||||
public GdkFontPeer (String name, Map attributes)
|
||||
{
|
||||
super(name, attributes);
|
||||
initState ();
|
||||
setFont (this.familyName, this.style, (int)this.size);
|
||||
setFont (this.familyName, this.style, (int)this.size,
|
||||
GtkToolkit.useGraphics2D());
|
||||
}
|
||||
|
||||
|
||||
public String getSubFamilyName(Font font, Locale locale)
|
||||
{
|
||||
return null;
|
||||
|
@ -228,7 +230,6 @@ public class GdkClasspathFontPeer extends ClasspathFontPeer
|
|||
|
||||
}
|
||||
|
||||
|
||||
public LineMetrics getLineMetrics (Font font, CharacterIterator ci,
|
||||
int begin, int limit, FontRenderContext rc)
|
||||
{
|
||||
|
@ -288,8 +289,7 @@ public class GdkClasspathFontPeer extends ClasspathFontPeer
|
|||
|
||||
public FontMetrics getFontMetrics (Font font)
|
||||
{
|
||||
return new GdkClasspathFontPeerMetrics (font);
|
||||
return new GdkFontMetrics (font);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,57 +1,57 @@
|
|||
/* GdkGlyphVector.java -- Glyph vector object
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.font.*;
|
||||
import java.awt.geom.*;
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
import java.text.CharacterIterator;
|
||||
import java.text.AttributedCharacterIterator;
|
||||
import gnu.classpath.Configuration;
|
||||
|
||||
public class GdkGlyphVector extends GlyphVector
|
||||
import java.awt.Font;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Shape;
|
||||
import java.awt.font.FontRenderContext;
|
||||
import java.awt.font.GlyphMetrics;
|
||||
import java.awt.font.GlyphVector;
|
||||
import java.awt.font.GlyphJustificationInfo;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
public class GdkGlyphVector extends GlyphVector
|
||||
{
|
||||
|
||||
static
|
||||
|
@ -70,7 +70,7 @@ public class GdkGlyphVector extends GlyphVector
|
|||
private Font font;
|
||||
private FontRenderContext ctx;
|
||||
|
||||
private native void initState (GdkClasspathFontPeer peer, FontRenderContext ctx);
|
||||
private native void initState (GdkFontPeer peer, FontRenderContext ctx);
|
||||
private native void setChars (String s);
|
||||
private native void setGlyphCodes (int codes[]);
|
||||
private native void dispose ();
|
||||
|
@ -109,7 +109,7 @@ public class GdkGlyphVector extends GlyphVector
|
|||
*/
|
||||
|
||||
|
||||
public GdkGlyphVector (Font f, GdkClasspathFontPeer peer, FontRenderContext c, String s)
|
||||
public GdkGlyphVector (Font f, GdkFontPeer peer, FontRenderContext c, String s)
|
||||
{
|
||||
font = f;
|
||||
ctx = c;
|
||||
|
@ -117,7 +117,7 @@ public class GdkGlyphVector extends GlyphVector
|
|||
setChars (s);
|
||||
}
|
||||
|
||||
public GdkGlyphVector (Font f, GdkClasspathFontPeer peer, FontRenderContext c, int codes[])
|
||||
public GdkGlyphVector (Font f, GdkFontPeer peer, FontRenderContext c, int codes[])
|
||||
{
|
||||
font = f;
|
||||
ctx = c;
|
||||
|
|
|
@ -90,17 +90,31 @@ public class GdkGraphics extends Graphics
|
|||
GdkGraphics (GtkComponentPeer component)
|
||||
{
|
||||
this.component = component;
|
||||
font = component.awtComponent.getFont ();
|
||||
|
||||
if (component.isRealized ())
|
||||
initComponentGraphics ();
|
||||
else
|
||||
connectSignals (component);
|
||||
}
|
||||
|
||||
void initComponentGraphics ()
|
||||
{
|
||||
initState (component);
|
||||
color = component.awtComponent.getForeground ();
|
||||
font = component.awtComponent.getFont ();
|
||||
Dimension d = component.awtComponent.getSize ();
|
||||
clip = new Rectangle (0, 0, d.width, d.height);
|
||||
}
|
||||
|
||||
native void connectSignals (GtkComponentPeer component);
|
||||
|
||||
public native void clearRect (int x, int y, int width, int height);
|
||||
|
||||
public void clipRect (int x, int y, int width, int height)
|
||||
{
|
||||
if (component != null && ! component.isRealized ())
|
||||
return;
|
||||
|
||||
clip = clip.intersection (new Rectangle (x, y, width, height));
|
||||
setClipRectangle (clip.x, clip.y, clip.width, clip.height);
|
||||
}
|
||||
|
@ -113,16 +127,6 @@ public class GdkGraphics extends Graphics
|
|||
return new GdkGraphics (this);
|
||||
}
|
||||
|
||||
// public Graphics create (int x, int y, int width, int height)
|
||||
// {
|
||||
// GdkGraphics g = new GdkGraphics (this);
|
||||
// System.out.println ("translating by: " + x +" " + y);
|
||||
// g.translate (x, y);
|
||||
// g.clipRect (0, 0, width, height);
|
||||
|
||||
// return g;
|
||||
// }
|
||||
|
||||
native public void dispose ();
|
||||
|
||||
native void copyPixmap (Graphics g, int x, int y, int width, int height);
|
||||
|
@ -134,24 +138,45 @@ public class GdkGraphics extends Graphics
|
|||
public boolean drawImage (Image img, int x, int y,
|
||||
Color bgcolor, ImageObserver observer)
|
||||
{
|
||||
if (component != null && ! component.isRealized ())
|
||||
return false;
|
||||
|
||||
if (img instanceof GtkOffScreenImage)
|
||||
{
|
||||
int width = img.getWidth (null);
|
||||
int height = img.getHeight (null);
|
||||
copyPixmap (img.getGraphics (),
|
||||
x, y, img.getWidth (null), img.getHeight (null));
|
||||
x, y, width, height);
|
||||
// FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
|
||||
if (observer != null)
|
||||
observer.imageUpdate (img,
|
||||
ImageObserver.FRAMEBITS,
|
||||
x, y, width, height);
|
||||
return true;
|
||||
}
|
||||
|
||||
GtkImage image = (GtkImage) img;
|
||||
new GtkImagePainter (image, this, x, y, -1, -1, bgcolor);
|
||||
new GtkImagePainter (image, this, x, y, -1, -1, bgcolor, observer);
|
||||
return image.isLoaded ();
|
||||
}
|
||||
|
||||
public boolean drawImage (Image img, int x, int y, ImageObserver observer)
|
||||
{
|
||||
if (component != null && ! component.isRealized ())
|
||||
return false;
|
||||
|
||||
if (img instanceof GtkOffScreenImage)
|
||||
{
|
||||
int width = img.getWidth (null);
|
||||
int height = img.getHeight (null);
|
||||
copyPixmap (img.getGraphics (),
|
||||
x, y, img.getWidth (null), img.getHeight (null));
|
||||
x, y, width, height);
|
||||
|
||||
// FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
|
||||
if (observer != null)
|
||||
observer.imageUpdate (img,
|
||||
ImageObserver.FRAMEBITS,
|
||||
x, y, width, height);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -164,22 +189,33 @@ public class GdkGraphics extends Graphics
|
|||
public boolean drawImage (Image img, int x, int y, int width, int height,
|
||||
Color bgcolor, ImageObserver observer)
|
||||
{
|
||||
if (component != null && ! component.isRealized ())
|
||||
return false;
|
||||
|
||||
if (img instanceof GtkOffScreenImage)
|
||||
{
|
||||
copyAndScalePixmap (img.getGraphics (), false, false,
|
||||
0, 0, img.getWidth (null), img.getHeight (null),
|
||||
x, y, width, height);
|
||||
// FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
|
||||
if (observer != null)
|
||||
observer.imageUpdate (img,
|
||||
ImageObserver.FRAMEBITS,
|
||||
x, y, width, height);
|
||||
return true;
|
||||
}
|
||||
|
||||
GtkImage image = (GtkImage) img;
|
||||
new GtkImagePainter (image, this, x, y, width, height, bgcolor);
|
||||
new GtkImagePainter (image, this, x, y, width, height, bgcolor, observer);
|
||||
return image.isLoaded ();
|
||||
}
|
||||
|
||||
public boolean drawImage (Image img, int x, int y, int width, int height,
|
||||
ImageObserver observer)
|
||||
{
|
||||
if (component != null && ! component.isRealized ())
|
||||
return false;
|
||||
|
||||
if (component != null)
|
||||
return drawImage (img, x, y, width, height, component.getBackground (),
|
||||
observer);
|
||||
|
@ -192,6 +228,9 @@ public class GdkGraphics extends Graphics
|
|||
int sx1, int sy1, int sx2, int sy2,
|
||||
Color bgcolor, ImageObserver observer)
|
||||
{
|
||||
if (component != null && ! component.isRealized ())
|
||||
return false;
|
||||
|
||||
if (img instanceof GtkOffScreenImage)
|
||||
{
|
||||
int dx_start, dy_start, d_width, d_height;
|
||||
|
@ -247,12 +286,18 @@ public class GdkGraphics extends Graphics
|
|||
copyAndScalePixmap (img.getGraphics (), x_flip, y_flip,
|
||||
sx_start, sy_start, s_width, s_height,
|
||||
dx_start, dy_start, d_width, d_height);
|
||||
|
||||
// FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
|
||||
if (observer != null)
|
||||
observer.imageUpdate (img,
|
||||
ImageObserver.FRAMEBITS,
|
||||
dx_start, dy_start, d_width, d_height);
|
||||
return true;
|
||||
}
|
||||
|
||||
GtkImage image = (GtkImage) img;
|
||||
new GtkImagePainter (image, this, dx1, dy1, dx2, dy2,
|
||||
sx1, sy1, sx2, sy2, bgcolor);
|
||||
sx1, sy1, sx2, sy2, bgcolor, observer);
|
||||
return image.isLoaded ();
|
||||
}
|
||||
|
||||
|
@ -260,6 +305,9 @@ public class GdkGraphics extends Graphics
|
|||
int sx1, int sy1, int sx2, int sy2,
|
||||
ImageObserver observer)
|
||||
{
|
||||
if (component != null && ! component.isRealized ())
|
||||
return false;
|
||||
|
||||
if (component != null)
|
||||
return drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
|
||||
component.getBackground (), observer);
|
||||
|
@ -285,11 +333,17 @@ public class GdkGraphics extends Graphics
|
|||
native public void drawRect(int x, int y, int width, int height);
|
||||
native public void fillRect (int x, int y, int width, int height);
|
||||
|
||||
native void drawString (String str, int x, int y, String fname, int style, int size);
|
||||
GdkFontPeer getFontPeer()
|
||||
{
|
||||
return (GdkFontPeer) getFont().getPeer();
|
||||
}
|
||||
|
||||
native void drawString (GdkFontPeer f, String str, int x, int y);
|
||||
public void drawString (String str, int x, int y)
|
||||
{
|
||||
drawString (str, x, y, font.getName(), font.getStyle(), font.getSize());
|
||||
drawString(getFontPeer(), str, x, y);
|
||||
}
|
||||
|
||||
|
||||
public void drawString (AttributedCharacterIterator ci, int x, int y)
|
||||
{
|
||||
|
@ -350,7 +404,6 @@ public class GdkGraphics extends Graphics
|
|||
|
||||
public Rectangle getClipBounds ()
|
||||
{
|
||||
// System.out.println ("returning CLIP: " + clip);
|
||||
return new Rectangle (clip.x, clip.y, clip.width, clip.height);
|
||||
}
|
||||
|
||||
|
@ -373,6 +426,9 @@ public class GdkGraphics extends Graphics
|
|||
|
||||
public void setClip (int x, int y, int width, int height)
|
||||
{
|
||||
if (component != null && ! component.isRealized ())
|
||||
return;
|
||||
|
||||
clip.x = x;
|
||||
clip.y = y;
|
||||
clip.width = width;
|
||||
|
@ -396,7 +452,7 @@ public class GdkGraphics extends Graphics
|
|||
public void setColor (Color c)
|
||||
{
|
||||
if (c == null)
|
||||
color = new Color (0, 0, 0);
|
||||
color = Color.BLACK;
|
||||
else
|
||||
color = c;
|
||||
|
||||
|
@ -407,7 +463,7 @@ public class GdkGraphics extends Graphics
|
|||
color.getGreen () ^ xorColor.getGreen (),
|
||||
color.getBlue () ^ xorColor.getBlue ());
|
||||
}
|
||||
|
||||
|
||||
public void setFont (Font font)
|
||||
{
|
||||
this.font = font;
|
||||
|
@ -437,6 +493,9 @@ public class GdkGraphics extends Graphics
|
|||
|
||||
public void translate (int x, int y)
|
||||
{
|
||||
if (component != null && ! component.isRealized ())
|
||||
return;
|
||||
|
||||
clip.x -= x;
|
||||
clip.y -= y;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* GdkGraphics2D.java
|
||||
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
|
@ -38,21 +38,60 @@ exception statement from your version. */
|
|||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.geom.*;
|
||||
import java.awt.font.*;
|
||||
import java.awt.color.*;
|
||||
import java.awt.image.*;
|
||||
import java.awt.image.renderable.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import java.text.AttributedCharacterIterator;
|
||||
import java.util.Stack;
|
||||
import java.lang.Integer;
|
||||
import gnu.classpath.Configuration;
|
||||
import gnu.java.awt.ClasspathToolkit;
|
||||
import gnu.java.awt.peer.ClasspathFontPeer;
|
||||
import gnu.classpath.Configuration;
|
||||
|
||||
import java.awt.AlphaComposite;
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Color;
|
||||
import java.awt.Composite;
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.GradientPaint;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.GraphicsConfiguration;
|
||||
import java.awt.Image;
|
||||
import java.awt.Paint;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.Shape;
|
||||
import java.awt.Stroke;
|
||||
import java.awt.TexturePaint;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.color.ColorSpace;
|
||||
import java.awt.font.FontRenderContext;
|
||||
import java.awt.font.GlyphVector;
|
||||
import java.awt.font.GlyphJustificationInfo;
|
||||
import java.awt.geom.Arc2D;
|
||||
import java.awt.geom.GeneralPath;
|
||||
import java.awt.geom.NoninvertibleTransformException;
|
||||
import java.awt.geom.PathIterator;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.image.AffineTransformOp;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.BufferedImageOp;
|
||||
import java.awt.image.ColorModel;
|
||||
import java.awt.image.CropImageFilter;
|
||||
import java.awt.image.DataBuffer;
|
||||
import java.awt.image.DataBufferInt;
|
||||
import java.awt.image.FilteredImageSource;
|
||||
import java.awt.image.ImageConsumer;
|
||||
import java.awt.image.ImageObserver;
|
||||
import java.awt.image.ImagingOpException;
|
||||
import java.awt.image.SampleModel;
|
||||
import java.awt.image.Raster;
|
||||
import java.awt.image.RenderedImage;
|
||||
import java.awt.image.WritableRaster;
|
||||
import java.awt.image.renderable.RenderableImage;
|
||||
import java.awt.image.renderable.RenderContext;
|
||||
import java.text.AttributedCharacterIterator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Stack;
|
||||
|
||||
public class GdkGraphics2D extends Graphics2D
|
||||
{
|
||||
|
@ -85,6 +124,8 @@ public class GdkGraphics2D extends Graphics2D
|
|||
private RenderingHints hints;
|
||||
private BufferedImage bimage;
|
||||
|
||||
private Composite comp;
|
||||
|
||||
private Stack stateStack;
|
||||
|
||||
native private void initState (GtkComponentPeer component);
|
||||
|
@ -93,6 +134,7 @@ public class GdkGraphics2D extends Graphics2D
|
|||
native public void dispose ();
|
||||
native private int[] getImagePixels();
|
||||
native private void cairoSurfaceSetFilter(int filter);
|
||||
native void connectSignals (GtkComponentPeer component);
|
||||
|
||||
public void finalize ()
|
||||
{
|
||||
|
@ -113,7 +155,7 @@ public class GdkGraphics2D extends Graphics2D
|
|||
{
|
||||
paint = g.paint;
|
||||
stroke = g.stroke;
|
||||
hints = g.hints;
|
||||
setRenderingHints (g.hints);
|
||||
|
||||
if (g.fg.getAlpha() != -1)
|
||||
fg = new Color (g.fg.getRed (), g.fg.getGreen (),
|
||||
|
@ -145,8 +187,8 @@ public class GdkGraphics2D extends Graphics2D
|
|||
setBackground (bg);
|
||||
setPaint (paint);
|
||||
setStroke (stroke);
|
||||
setClip (clip);
|
||||
setTransform (transform);
|
||||
setClip (clip);
|
||||
stateStack = new Stack();
|
||||
}
|
||||
|
||||
|
@ -168,12 +210,22 @@ public class GdkGraphics2D extends Graphics2D
|
|||
GdkGraphics2D (GtkComponentPeer component)
|
||||
{
|
||||
this.component = component;
|
||||
|
||||
setFont (new Font("SansSerif", Font.PLAIN, 12));
|
||||
|
||||
if (component.isRealized ())
|
||||
initComponentGraphics2D ();
|
||||
else
|
||||
connectSignals (component);
|
||||
}
|
||||
|
||||
void initComponentGraphics2D ()
|
||||
{
|
||||
initState (component);
|
||||
|
||||
setColor (component.awtComponent.getForeground ());
|
||||
setBackground (component.awtComponent.getBackground ());
|
||||
setPaint (getColor());
|
||||
setFont (new Font("SansSerif", Font.PLAIN, 12));
|
||||
setTransform (new AffineTransform ());
|
||||
setStroke (new BasicStroke ());
|
||||
setRenderingHints (getDefaultHints());
|
||||
|
@ -224,9 +276,6 @@ public class GdkGraphics2D extends Graphics2D
|
|||
private native void cairoSave ();
|
||||
private native void cairoRestore ();
|
||||
private native void cairoSetMatrix (double m[]);
|
||||
private native void cairoSetFont (GdkClasspathFontPeer peer);
|
||||
private native void cairoShowGlyphs (int codes[],
|
||||
float positions[]);
|
||||
private native void cairoSetOperator (int cairoOperator);
|
||||
private native void cairoSetRGBColor (double red, double green, double blue);
|
||||
private native void cairoSetAlpha (double alpha);
|
||||
|
@ -268,6 +317,7 @@ public class GdkGraphics2D extends Graphics2D
|
|||
private Shape clip;
|
||||
private AffineTransform transform;
|
||||
private Font font;
|
||||
private Composite comp;
|
||||
DrawState (GdkGraphics2D g)
|
||||
{
|
||||
this.paint = g.paint;
|
||||
|
@ -278,6 +328,7 @@ public class GdkGraphics2D extends Graphics2D
|
|||
if (g.transform != null)
|
||||
this.transform = (AffineTransform) g.transform.clone();
|
||||
this.font = g.font;
|
||||
this.comp = g.comp;
|
||||
}
|
||||
public void restore(GdkGraphics2D g)
|
||||
{
|
||||
|
@ -288,6 +339,7 @@ public class GdkGraphics2D extends Graphics2D
|
|||
g.clip = this.clip;
|
||||
g.transform = this.transform;
|
||||
g.font = this.font;
|
||||
g.comp = this.comp;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -303,17 +355,23 @@ public class GdkGraphics2D extends Graphics2D
|
|||
cairoRestore ();
|
||||
}
|
||||
|
||||
// Some operations (drawing rather than filling) require that their
|
||||
// coords be shifted to land on 0.5-pixel boundaries, in order to land on
|
||||
// "middle of pixel" coordinates and light up complete pixels.
|
||||
|
||||
double x;
|
||||
double y;
|
||||
private void setPos (double nx, double ny)
|
||||
private boolean shiftDrawCalls = false;
|
||||
private final double shifted(double coord, boolean doShift)
|
||||
{
|
||||
x = nx;
|
||||
y = ny;
|
||||
if (doShift)
|
||||
return Math.floor(coord) + 0.5;
|
||||
else
|
||||
return coord;
|
||||
}
|
||||
|
||||
private void walkPath(PathIterator p)
|
||||
private final void walkPath(PathIterator p, boolean doShift)
|
||||
{
|
||||
double x = 0;
|
||||
double y = 0;
|
||||
double coords[] = new double[6];
|
||||
|
||||
cairoSetFillRule (p.getWindingRule ());
|
||||
|
@ -324,13 +382,15 @@ public class GdkGraphics2D extends Graphics2D
|
|||
{
|
||||
|
||||
case PathIterator.SEG_MOVETO:
|
||||
setPos(coords[0], coords[1]);
|
||||
cairoMoveTo (coords[0], coords[1]);
|
||||
x = shifted(coords[0], doShift);
|
||||
y = shifted(coords[1], doShift);
|
||||
cairoMoveTo (x, y);
|
||||
break;
|
||||
|
||||
case PathIterator.SEG_LINETO:
|
||||
setPos(coords[0], coords[1]);
|
||||
cairoLineTo (coords[0], coords[1]);
|
||||
x = shifted(coords[0], doShift);
|
||||
y = shifted(coords[1], doShift);
|
||||
cairoLineTo (x, y);
|
||||
break;
|
||||
|
||||
case PathIterator.SEG_QUADTO:
|
||||
|
@ -338,23 +398,25 @@ public class GdkGraphics2D extends Graphics2D
|
|||
// splitting a quadratic bezier into a cubic:
|
||||
// see: http://pfaedit.sourceforge.net/bezier.html
|
||||
|
||||
double x1 = x + (2.0/3.0) * (coords[0] - x);
|
||||
double y1 = y + (2.0/3.0) * (coords[1] - y);
|
||||
double x1 = x + (2.0/3.0) * (shifted(coords[0], doShift) - x);
|
||||
double y1 = y + (2.0/3.0) * (shifted(coords[1], doShift) - y);
|
||||
|
||||
double x2 = x1 + (1.0/3.0) * (coords[2] - x);
|
||||
double y2 = y1 + (1.0/3.0) * (coords[3] - y);
|
||||
double x2 = x1 + (1.0/3.0) * (shifted(coords[2], doShift) - x);
|
||||
double y2 = y1 + (1.0/3.0) * (shifted(coords[3], doShift) - y);
|
||||
|
||||
setPos(coords[2], coords[3]);
|
||||
x = shifted(coords[2], doShift);
|
||||
y = shifted(coords[3], doShift);
|
||||
cairoCurveTo (x1, y1,
|
||||
x2, y2,
|
||||
coords[2], coords[3]);
|
||||
x, y);
|
||||
break;
|
||||
|
||||
case PathIterator.SEG_CUBICTO:
|
||||
setPos(coords[4], coords[5]);
|
||||
cairoCurveTo (coords[0], coords[1],
|
||||
coords[2], coords[3],
|
||||
coords[4], coords[5]);
|
||||
x = shifted(coords[4], doShift);
|
||||
y = shifted(coords[5], doShift);
|
||||
cairoCurveTo (shifted(coords[0], doShift), shifted(coords[1], doShift),
|
||||
shifted(coords[2], doShift), shifted(coords[3], doShift),
|
||||
x, y);
|
||||
break;
|
||||
|
||||
case PathIterator.SEG_CLOSE:
|
||||
|
@ -365,7 +427,7 @@ public class GdkGraphics2D extends Graphics2D
|
|||
}
|
||||
|
||||
|
||||
private Map getDefaultHints()
|
||||
private final Map getDefaultHints()
|
||||
{
|
||||
HashMap defaultHints = new HashMap ();
|
||||
|
||||
|
@ -388,23 +450,19 @@ public class GdkGraphics2D extends Graphics2D
|
|||
|
||||
}
|
||||
|
||||
private void updateBufferedImage()
|
||||
private final void updateBufferedImage()
|
||||
{
|
||||
int[] pixels = getImagePixels();
|
||||
updateImagePixels(pixels);
|
||||
}
|
||||
|
||||
|
||||
private boolean isBufferedImageGraphics ()
|
||||
private final boolean isBufferedImageGraphics ()
|
||||
{
|
||||
|
||||
if (bimage != null)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
return bimage != null;
|
||||
}
|
||||
|
||||
private void updateImagePixels (int[] pixels)
|
||||
private final void updateImagePixels (int[] pixels)
|
||||
{
|
||||
|
||||
// This function can only be used if
|
||||
|
@ -439,11 +497,15 @@ public class GdkGraphics2D extends Graphics2D
|
|||
}
|
||||
|
||||
|
||||
private boolean drawImage(Image img,
|
||||
AffineTransform xform,
|
||||
Color bgcolor,
|
||||
ImageObserver obs)
|
||||
private final boolean drawImage(Image img,
|
||||
AffineTransform xform,
|
||||
Color bgcolor,
|
||||
ImageObserver obs)
|
||||
{
|
||||
|
||||
if (img == null)
|
||||
return false;
|
||||
|
||||
if (img instanceof GtkOffScreenImage &&
|
||||
img.getGraphics () instanceof GdkGraphics2D &&
|
||||
(xform == null
|
||||
|
@ -461,8 +523,8 @@ public class GdkGraphics2D extends Graphics2D
|
|||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
{
|
||||
|
||||
// In this case, xform is an AffineTransform that transforms bounding
|
||||
// box of the specified image from image space to user space. However
|
||||
// when we pass this transform to cairo, cairo will use this transform
|
||||
|
@ -475,23 +537,22 @@ public class GdkGraphics2D extends Graphics2D
|
|||
|
||||
try
|
||||
{
|
||||
invertedXform = xform.createInverse();
|
||||
invertedXform = xform.createInverse();
|
||||
if (img instanceof BufferedImage)
|
||||
{
|
||||
// draw an image which has actually been loaded
|
||||
// into memory fully
|
||||
|
||||
BufferedImage b = (BufferedImage) img;
|
||||
return drawRaster (b.getColorModel (),
|
||||
b.getData (),
|
||||
invertedXform,
|
||||
bgcolor);
|
||||
BufferedImage b = (BufferedImage) img;
|
||||
return drawRaster (b.getColorModel (),
|
||||
b.getData (),
|
||||
invertedXform,
|
||||
bgcolor);
|
||||
}
|
||||
else
|
||||
{
|
||||
// begin progressive loading in a separate thread
|
||||
new PainterThread (this, img, invertedXform, bgcolor);
|
||||
return false;
|
||||
return this.drawImage(GdkPixbufDecoder.createBufferedImage(img.getSource()),
|
||||
xform, bgcolor,obs);
|
||||
}
|
||||
}
|
||||
catch (NoninvertibleTransformException e)
|
||||
|
@ -517,38 +578,25 @@ public class GdkGraphics2D extends Graphics2D
|
|||
return;
|
||||
}
|
||||
|
||||
stateSave ();
|
||||
cairoNewPath ();
|
||||
|
||||
boolean normalize;
|
||||
normalize = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
|
||||
|| hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
|
||||
|
||||
if (normalize)
|
||||
translate (0.5,0.5);
|
||||
|
||||
if (s instanceof Rectangle2D)
|
||||
{
|
||||
Rectangle2D r = (Rectangle2D)s;
|
||||
cairoRectangle (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
|
||||
cairoRectangle (shifted(r.getX (), shiftDrawCalls),
|
||||
shifted(r.getY (), shiftDrawCalls),
|
||||
r.getWidth (), r.getHeight ());
|
||||
}
|
||||
else
|
||||
walkPath (s.getPathIterator (null));
|
||||
walkPath (s.getPathIterator (null), shiftDrawCalls);
|
||||
cairoStroke ();
|
||||
|
||||
if (normalize)
|
||||
translate (-0.5,-0.5);
|
||||
|
||||
stateRestore ();
|
||||
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
|
||||
}
|
||||
|
||||
public void fill (Shape s)
|
||||
{
|
||||
stateSave();
|
||||
cairoNewPath ();
|
||||
if (s instanceof Rectangle2D)
|
||||
{
|
||||
|
@ -556,9 +604,8 @@ public class GdkGraphics2D extends Graphics2D
|
|||
cairoRectangle (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
|
||||
}
|
||||
else
|
||||
walkPath (s.getPathIterator (null));
|
||||
walkPath (s.getPathIterator (null), false);
|
||||
cairoFill ();
|
||||
stateRestore ();
|
||||
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
|
@ -592,8 +639,8 @@ public class GdkGraphics2D extends Graphics2D
|
|||
r.getWidth (), r.getHeight ());
|
||||
}
|
||||
else
|
||||
walkPath (clip.getPathIterator (null));
|
||||
cairoClosePath ();
|
||||
walkPath (clip.getPathIterator (null), false);
|
||||
// cairoClosePath ();
|
||||
cairoClip ();
|
||||
}
|
||||
}
|
||||
|
@ -739,7 +786,7 @@ public class GdkGraphics2D extends Graphics2D
|
|||
{
|
||||
BasicStroke bs = (BasicStroke) stroke;
|
||||
cairoSetLineCap (bs.getEndCap());
|
||||
cairoSetLineWidth (bs.getLineWidth() / 2.0);
|
||||
cairoSetLineWidth (bs.getLineWidth());
|
||||
cairoSetLineJoin (bs.getLineJoin());
|
||||
cairoSetMiterLimit (bs.getMiterLimit());
|
||||
float dashes[] = bs.getDashArray();
|
||||
|
@ -771,6 +818,9 @@ public class GdkGraphics2D extends Graphics2D
|
|||
|
||||
public void setColor (Color c)
|
||||
{
|
||||
if (c == null)
|
||||
c = Color.BLACK;
|
||||
|
||||
fg = c;
|
||||
paint = c;
|
||||
cairoSetRGBColor (fg.getRed() / 255.0,
|
||||
|
@ -802,23 +852,23 @@ public class GdkGraphics2D extends Graphics2D
|
|||
return clip.getBounds ();
|
||||
}
|
||||
|
||||
protected Rectangle2D getClipInDevSpace ()
|
||||
{
|
||||
Rectangle2D uclip = clip.getBounds2D ();
|
||||
if (transform == null)
|
||||
return uclip;
|
||||
else
|
||||
{
|
||||
Point2D pos = transform.transform (new Point2D.Double(uclip.getX (),
|
||||
uclip.getY ()),
|
||||
(Point2D)null);
|
||||
Point2D extent = transform.deltaTransform (new Point2D.Double(uclip.getWidth (),
|
||||
uclip.getHeight ()),
|
||||
(Point2D)null);
|
||||
return new Rectangle2D.Double (pos.getX (), pos.getY (),
|
||||
extent.getX (), extent.getY ());
|
||||
}
|
||||
}
|
||||
protected Rectangle2D getClipInDevSpace ()
|
||||
{
|
||||
Rectangle2D uclip = clip.getBounds2D ();
|
||||
if (transform == null)
|
||||
return uclip;
|
||||
else
|
||||
{
|
||||
Point2D pos = transform.transform (new Point2D.Double(uclip.getX (),
|
||||
uclip.getY ()),
|
||||
(Point2D)null);
|
||||
Point2D extent = transform.deltaTransform (new Point2D.Double(uclip.getWidth (),
|
||||
uclip.getHeight ()),
|
||||
(Point2D)null);
|
||||
return new Rectangle2D.Double (pos.getX (), pos.getY (),
|
||||
extent.getX (), extent.getY ());
|
||||
}
|
||||
}
|
||||
|
||||
public void setClip (int x, int y, int width, int height)
|
||||
{
|
||||
|
@ -839,96 +889,34 @@ public class GdkGraphics2D extends Graphics2D
|
|||
r.getWidth (), r.getHeight ());
|
||||
}
|
||||
else
|
||||
walkPath (s.getPathIterator (null));
|
||||
cairoClosePath ();
|
||||
walkPath (s.getPathIterator (null), false);
|
||||
// cairoClosePath ();
|
||||
cairoClip ();
|
||||
}
|
||||
}
|
||||
|
||||
private static BasicStroke draw3DRectStroke = new BasicStroke();
|
||||
|
||||
public void draw3DRect(int x, int y, int width,
|
||||
int height, boolean raised)
|
||||
{
|
||||
Color std = fg;
|
||||
Color light = std.brighter();
|
||||
Color dark = std.darker();
|
||||
|
||||
if (!raised)
|
||||
{
|
||||
Color t = light;
|
||||
light = dark;
|
||||
dark = t;
|
||||
}
|
||||
|
||||
double x1 = (double) x;
|
||||
double x2 = (double) x + width;
|
||||
|
||||
double y1 = (double) y;
|
||||
double y2 = (double) y + height;
|
||||
|
||||
stateSave ();
|
||||
|
||||
cairoNewPath ();
|
||||
|
||||
boolean normalize;
|
||||
normalize = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
|
||||
|| hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
|
||||
|
||||
if (normalize)
|
||||
{
|
||||
x1 += 0.5;
|
||||
y1 += 0.5;
|
||||
x2 += 0.5;
|
||||
y2 += 0.5;
|
||||
}
|
||||
|
||||
setColor (light);
|
||||
cairoMoveTo (x1, y1);
|
||||
cairoLineTo (x2, y1);
|
||||
cairoLineTo (x2, y2);
|
||||
cairoStroke ();
|
||||
|
||||
cairoNewPath ();
|
||||
setColor (dark);
|
||||
cairoMoveTo (x1, y1);
|
||||
cairoLineTo (x1, y2);
|
||||
cairoLineTo (x2, y2);
|
||||
cairoStroke ();
|
||||
|
||||
stateRestore ();
|
||||
|
||||
Stroke tmp = stroke;
|
||||
setStroke(draw3DRectStroke);
|
||||
super.draw3DRect(x, y, width, height, raised);
|
||||
setStroke(tmp);
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
|
||||
}
|
||||
|
||||
public void fill3DRect(int x, int y, int width,
|
||||
int height, boolean raised)
|
||||
{
|
||||
double step = 1.0;
|
||||
if (stroke != null && stroke instanceof BasicStroke)
|
||||
{
|
||||
BasicStroke bs = (BasicStroke) stroke;
|
||||
step = bs.getLineWidth();
|
||||
}
|
||||
|
||||
Color bright = fg.brighter ();
|
||||
Color dark = fg.darker ();
|
||||
|
||||
draw3DRect (x, y, width, height, raised);
|
||||
|
||||
stateSave ();
|
||||
translate (step/2.0, step/2.0);
|
||||
cairoNewPath ();
|
||||
cairoRectangle ((double) x, (double) y,
|
||||
((double) width) - step,
|
||||
((double) height) - step );
|
||||
cairoClosePath ();
|
||||
cairoFill ();
|
||||
stateRestore ();
|
||||
|
||||
Stroke tmp = stroke;
|
||||
setStroke(draw3DRectStroke);
|
||||
super.fill3DRect(x, y, width, height, raised);
|
||||
setStroke(tmp);
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -939,21 +927,21 @@ public class GdkGraphics2D extends Graphics2D
|
|||
|
||||
public void fillRect (int x, int y, int width, int height)
|
||||
{
|
||||
fill(new Rectangle (x, y, width, height));
|
||||
cairoNewPath ();
|
||||
cairoRectangle (x, y, width, height);
|
||||
cairoFill ();
|
||||
}
|
||||
|
||||
public void clearRect (int x, int y, int width, int height)
|
||||
{
|
||||
stateSave ();
|
||||
cairoSetRGBColor (bg.getRed() / 255.0,
|
||||
bg.getGreen() / 255.0,
|
||||
bg.getBlue() / 255.0);
|
||||
cairoSetAlpha (1.0);
|
||||
cairoNewPath ();
|
||||
cairoRectangle (x, y, width, height);
|
||||
cairoClosePath ();
|
||||
cairoFill ();
|
||||
stateRestore ();
|
||||
setColor (fg);
|
||||
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
|
@ -970,8 +958,8 @@ public class GdkGraphics2D extends Graphics2D
|
|||
return bg;
|
||||
}
|
||||
|
||||
private void doPolygon(int[] xPoints, int[] yPoints, int nPoints,
|
||||
boolean close, boolean fill)
|
||||
private final void doPolygon(int[] xPoints, int[] yPoints, int nPoints,
|
||||
boolean close, boolean fill)
|
||||
{
|
||||
if (nPoints < 1)
|
||||
return;
|
||||
|
@ -1026,9 +1014,9 @@ public class GdkGraphics2D extends Graphics2D
|
|||
doPolygon (xPoints, yPoints, nPoints, false, false);
|
||||
}
|
||||
|
||||
private boolean drawRaster (ColorModel cm, Raster r,
|
||||
AffineTransform imageToUser,
|
||||
Color bgcolor)
|
||||
private final boolean drawRaster (ColorModel cm, Raster r,
|
||||
AffineTransform imageToUser,
|
||||
Color bgcolor)
|
||||
{
|
||||
if (r == null)
|
||||
return false;
|
||||
|
@ -1087,10 +1075,7 @@ public class GdkGraphics2D extends Graphics2D
|
|||
}
|
||||
}
|
||||
|
||||
stateSave ();
|
||||
translate (x, y);
|
||||
drawPixels (pixels, r.getWidth (), r.getHeight (), r.getWidth (), i2u);
|
||||
stateRestore ();
|
||||
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
|
@ -1133,113 +1118,6 @@ public class GdkGraphics2D extends Graphics2D
|
|||
}
|
||||
|
||||
|
||||
////////////////////////////////////////
|
||||
////// Supporting Private Classes //////
|
||||
////////////////////////////////////////
|
||||
|
||||
private class PainterThread implements Runnable, ImageConsumer
|
||||
{
|
||||
|
||||
// this is a helper which is spun off when someone tries to do
|
||||
// Graphics2D.drawImage on an image we cannot determine to be either
|
||||
// one of our own offscreen images or a BufferedImage; that is, when
|
||||
// someone wants to draw an image which is possibly still loading over
|
||||
// a network or something. you run it in a separate thread and it
|
||||
// writes through to the underlying Graphics2D as pixels becomg
|
||||
// available.
|
||||
|
||||
GdkGraphics2D gr;
|
||||
Image image;
|
||||
ColorModel defaultModel;
|
||||
AffineTransform xform;
|
||||
Color bgcolor;
|
||||
|
||||
public PainterThread (GdkGraphics2D g, Image im,
|
||||
AffineTransform xf, Color bg)
|
||||
{
|
||||
image = im;
|
||||
xform = xf;
|
||||
bgcolor = bg;
|
||||
this.gr = (GdkGraphics2D) g.create ();
|
||||
new Thread (this).start ();
|
||||
}
|
||||
|
||||
public void imageComplete (int status)
|
||||
{
|
||||
}
|
||||
|
||||
public void setColorModel (ColorModel model)
|
||||
{
|
||||
defaultModel = model;
|
||||
}
|
||||
|
||||
public void setDimensions (int width, int height)
|
||||
{
|
||||
}
|
||||
|
||||
public void setHints (int hintflags)
|
||||
{
|
||||
}
|
||||
|
||||
public void setPixels (int x, int y, int w, int h, ColorModel model,
|
||||
byte[] pixels, int off, int scansize)
|
||||
{
|
||||
}
|
||||
|
||||
public void setPixels (int x, int y, int w, int h, ColorModel model,
|
||||
int[] pixels, int off, int scansize)
|
||||
{
|
||||
gr.stateSave ();
|
||||
gr.translate (x, y);
|
||||
|
||||
if (model == null)
|
||||
model = defaultModel;
|
||||
|
||||
int pixels2[];
|
||||
if (model != null)
|
||||
{
|
||||
pixels2 = new int[pixels.length];
|
||||
for (int yy = 0; yy < h; yy++)
|
||||
for (int xx = 0; xx < w; xx++)
|
||||
{
|
||||
int i = yy * scansize + xx;
|
||||
pixels2[i] = model.getRGB (pixels[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
pixels2 = pixels;
|
||||
|
||||
// change all transparent pixels in the image to the
|
||||
// specified bgcolor
|
||||
|
||||
if (bgcolor != null)
|
||||
{
|
||||
for (int i = 0; i < pixels2.length; i++)
|
||||
{
|
||||
if (model.getAlpha (pixels2[i]) == 0)
|
||||
pixels2[i] = bgcolor.getRGB ();
|
||||
}
|
||||
}
|
||||
|
||||
double[] xf = new double[6];
|
||||
xform.getMatrix(xf);
|
||||
gr.drawPixels (pixels2, w, h, scansize, xf);
|
||||
gr.stateRestore ();
|
||||
}
|
||||
|
||||
public void setProperties (java.util.Hashtable props)
|
||||
{
|
||||
}
|
||||
|
||||
public void run ()
|
||||
{
|
||||
image.getSource ().startProduction (this);
|
||||
gr.dispose ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////
|
||||
////// Unimplemented Stubs and Overloads //////
|
||||
///////////////////////////////////////////////
|
||||
|
@ -1259,6 +1137,8 @@ public class GdkGraphics2D extends Graphics2D
|
|||
|
||||
public void setComposite(Composite comp)
|
||||
{
|
||||
this.comp = comp;
|
||||
|
||||
if (comp instanceof AlphaComposite)
|
||||
{
|
||||
AlphaComposite a = (AlphaComposite) comp;
|
||||
|
@ -1297,8 +1177,11 @@ public class GdkGraphics2D extends Graphics2D
|
|||
else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
|
||||
cairoSurfaceSetFilter(4);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
shiftDrawCalls = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
|
||||
|| hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
|
||||
|
||||
}
|
||||
|
||||
public Object getRenderingHint(RenderingHints.Key hintKey)
|
||||
|
@ -1331,6 +1214,9 @@ public class GdkGraphics2D extends Graphics2D
|
|||
else if(hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
|
||||
cairoSurfaceSetFilter(4);
|
||||
}
|
||||
|
||||
shiftDrawCalls = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
|
||||
|| hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
|
||||
}
|
||||
|
||||
public void addRenderingHints(Map hints)
|
||||
|
@ -1345,7 +1231,10 @@ public class GdkGraphics2D extends Graphics2D
|
|||
|
||||
public Composite getComposite()
|
||||
{
|
||||
throw new java.lang.UnsupportedOperationException ();
|
||||
if (comp == null)
|
||||
return AlphaComposite.SrcOver;
|
||||
else
|
||||
return comp;
|
||||
}
|
||||
|
||||
public FontRenderContext getFontRenderContext ()
|
||||
|
@ -1353,23 +1242,6 @@ public class GdkGraphics2D extends Graphics2D
|
|||
return new FontRenderContext (transform, true, true);
|
||||
}
|
||||
|
||||
public void drawGlyphVector (GlyphVector g, float x, float y)
|
||||
{
|
||||
stateSave ();
|
||||
setFont (g.getFont ());
|
||||
translate ((double)x, (double)y);
|
||||
cairoMoveTo (0, 0);
|
||||
int nglyphs = g.getNumGlyphs ();
|
||||
int codes[] = g.getGlyphCodes (0, nglyphs, (int []) null);
|
||||
float posns[] = g.getGlyphPositions (0, nglyphs, (float []) null);
|
||||
cairoShowGlyphs (codes, posns);
|
||||
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
|
||||
stateRestore ();
|
||||
}
|
||||
|
||||
public void copyArea (int x, int y, int width, int height, int dx, int dy)
|
||||
{
|
||||
throw new java.lang.UnsupportedOperationException ();
|
||||
|
@ -1418,6 +1290,9 @@ public class GdkGraphics2D extends Graphics2D
|
|||
Color bgcolor, ImageObserver observer)
|
||||
{
|
||||
|
||||
if (img == null)
|
||||
return false;
|
||||
|
||||
Image subImage;
|
||||
|
||||
int sourceWidth = sx2 - sx1;
|
||||
|
@ -1501,22 +1376,55 @@ public class GdkGraphics2D extends Graphics2D
|
|||
drawLine (x1, y + height, x2, y + height);
|
||||
}
|
||||
|
||||
// these are the most accelerated painting paths
|
||||
native void cairoDrawGdkGlyphVector (GdkFontPeer f, GdkGlyphVector gv, float x, float y);
|
||||
native void cairoDrawGdkTextLayout (GdkFontPeer f, GdkTextLayout gl, float x, float y);
|
||||
native void cairoDrawString (GdkFontPeer f, String str, float x, float y);
|
||||
|
||||
GdkFontPeer getFontPeer()
|
||||
{
|
||||
return (GdkFontPeer) getFont().getPeer();
|
||||
}
|
||||
|
||||
public void drawGdkGlyphVector(GdkGlyphVector gv, float x, float y)
|
||||
{
|
||||
cairoDrawGdkGlyphVector(getFontPeer(), gv, x, y);
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
}
|
||||
|
||||
public void drawGdkTextLayout(GdkTextLayout gl, float x, float y)
|
||||
{
|
||||
cairoDrawGdkTextLayout(getFontPeer(), gl, x, y);
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
}
|
||||
|
||||
public void drawString (String str, float x, float y)
|
||||
{
|
||||
cairoDrawString(getFontPeer(), str, x, y);
|
||||
if (isBufferedImageGraphics ())
|
||||
updateBufferedImage();
|
||||
}
|
||||
|
||||
public void drawString (String str, int x, int y)
|
||||
{
|
||||
drawString (str, (float)x, (float)y);
|
||||
}
|
||||
|
||||
public void drawString (String str, float x, float y)
|
||||
{
|
||||
GlyphVector gv = font.createGlyphVector (getFontRenderContext(), str);
|
||||
drawGlyphVector (gv, x, y);
|
||||
}
|
||||
|
||||
public void drawString (AttributedCharacterIterator ci, int x, int y)
|
||||
{
|
||||
drawString (ci, (float)x, (float)y);
|
||||
}
|
||||
|
||||
public void drawGlyphVector (GlyphVector gv, float x, float y)
|
||||
{
|
||||
if (gv instanceof GdkGlyphVector)
|
||||
drawGdkGlyphVector((GdkGlyphVector)gv, x, y);
|
||||
else
|
||||
throw new java.lang.UnsupportedOperationException ();
|
||||
}
|
||||
|
||||
public void drawString (AttributedCharacterIterator ci, float x, float y)
|
||||
{
|
||||
GlyphVector gv = font.createGlyphVector (getFontRenderContext(), ci);
|
||||
|
@ -1562,30 +1470,38 @@ public class GdkGraphics2D extends Graphics2D
|
|||
return font;
|
||||
}
|
||||
|
||||
// Until such time as pango is happy to talk directly to cairo, we
|
||||
// actually need to redirect some calls from the GtkFontPeer and
|
||||
// GtkFontMetrics into the drawing kit and ask cairo ourselves.
|
||||
|
||||
static native void releasePeerGraphicsResource(GdkFontPeer f);
|
||||
static native void getPeerTextMetrics (GdkFontPeer f, String str, double [] metrics);
|
||||
static native void getPeerFontMetrics (GdkFontPeer f, double [] metrics);
|
||||
|
||||
public FontMetrics getFontMetrics ()
|
||||
{
|
||||
// the reason we go via the toolkit here is to try to get
|
||||
// a cached object. the toolkit keeps such a cache.
|
||||
return Toolkit.getDefaultToolkit ().getFontMetrics (font);
|
||||
}
|
||||
|
||||
public FontMetrics getFontMetrics (Font f)
|
||||
{
|
||||
// the reason we go via the toolkit here is to try to get
|
||||
// a cached object. the toolkit keeps such a cache.
|
||||
return Toolkit.getDefaultToolkit ().getFontMetrics (f);
|
||||
}
|
||||
|
||||
public void setFont (Font f)
|
||||
{
|
||||
if (f.getPeer() instanceof GdkClasspathFontPeer)
|
||||
if (f.getPeer() instanceof GdkFontPeer)
|
||||
font = f;
|
||||
else
|
||||
font =
|
||||
((ClasspathToolkit)(Toolkit.getDefaultToolkit ()))
|
||||
.getFont (f.getName(), f.getAttributes ());
|
||||
|
||||
if (f != null &&
|
||||
f.getPeer() instanceof GdkClasspathFontPeer)
|
||||
cairoSetFont ((GdkClasspathFontPeer) f.getPeer());
|
||||
.getFont (f.getName(), f.getAttributes ());
|
||||
}
|
||||
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return getClass ().getName () +
|
||||
|
|
|
@ -38,18 +38,20 @@ exception statement from your version. */
|
|||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.GraphicsDevice;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Shape;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.Locale;
|
||||
|
||||
|
||||
public class GdkGraphicsEnvironment extends GraphicsEnvironment
|
||||
{
|
||||
|
||||
public GdkGraphicsEnvironment ()
|
||||
{
|
||||
super();
|
||||
super();
|
||||
}
|
||||
|
||||
public GraphicsDevice[] getScreenDevices ()
|
||||
|
@ -66,22 +68,28 @@ public class GdkGraphicsEnvironment extends GraphicsEnvironment
|
|||
{
|
||||
return new GdkGraphics2D (image);
|
||||
}
|
||||
native private int nativeGetNumFontFamilies ();
|
||||
native private void nativeGetFontFamilies (String[] family_names);
|
||||
|
||||
public Font[] getAllFonts ()
|
||||
{
|
||||
throw new java.lang.UnsupportedOperationException ();
|
||||
}
|
||||
|
||||
public String[] getAvailableFontFamilyNames ()
|
||||
{
|
||||
throw new java.lang.UnsupportedOperationException ();
|
||||
}
|
||||
public String[] getAvailableFontFamilyNames ()
|
||||
{
|
||||
String[] family_names;
|
||||
int array_size;
|
||||
|
||||
array_size = nativeGetNumFontFamilies();
|
||||
family_names = new String[array_size];
|
||||
|
||||
nativeGetFontFamilies(family_names);
|
||||
return family_names;
|
||||
}
|
||||
|
||||
public String[] getAvailableFontFamilyNames (Locale l)
|
||||
{
|
||||
throw new java.lang.UnsupportedOperationException ();
|
||||
}
|
||||
|
||||
|
||||
} // class GdkGraphicsEnvironment
|
||||
|
||||
}
|
||||
|
|
|
@ -1,52 +1,57 @@
|
|||
/* GdkPixbufDecoder.java -- Image data decoding object
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.image.*;
|
||||
import gnu.classpath.Configuration;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.ColorModel;
|
||||
import java.awt.image.DirectColorModel;
|
||||
import java.awt.image.ImageConsumer;
|
||||
import java.awt.image.ImageProducer;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.Vector;
|
||||
import java.util.Hashtable;
|
||||
import gnu.classpath.Configuration;
|
||||
import java.util.Vector;
|
||||
|
||||
public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
|
||||
{
|
||||
|
|
435
libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
Normal file
435
libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
Normal file
|
@ -0,0 +1,435 @@
|
|||
/* GdkTextLayout.java
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Shape;
|
||||
import java.awt.font.FontRenderContext;
|
||||
import java.awt.font.GlyphMetrics;
|
||||
import java.awt.font.GlyphVector;
|
||||
import java.awt.font.TextHitInfo;
|
||||
import java.awt.font.TextLayout;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.GeneralPath;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.text.CharacterIterator;
|
||||
import java.text.AttributedCharacterIterator;
|
||||
import java.text.AttributedString;
|
||||
import java.util.Map;
|
||||
import java.awt.font.TextAttribute;
|
||||
|
||||
import gnu.classpath.Configuration;
|
||||
import gnu.java.awt.peer.ClasspathTextLayoutPeer;
|
||||
|
||||
/**
|
||||
* This is an implementation of the text layout peer interface which
|
||||
* delegates all the hard work to pango.
|
||||
*
|
||||
* @author Graydon Hoare
|
||||
*/
|
||||
|
||||
public class GdkTextLayout
|
||||
implements ClasspathTextLayoutPeer
|
||||
{
|
||||
// native side, plumbing, etc.
|
||||
static
|
||||
{
|
||||
if (Configuration.INIT_LOAD_LIBRARY)
|
||||
{
|
||||
System.loadLibrary("gtkpeer");
|
||||
}
|
||||
initStaticState ();
|
||||
}
|
||||
private native void setText(String str);
|
||||
private native void getExtents(double[] inkExtents,
|
||||
double[] logExtents);
|
||||
private native void indexToPos(int idx, double[] pos);
|
||||
private native void initState ();
|
||||
private native void dispose ();
|
||||
native static void initStaticState ();
|
||||
private final int native_state = GtkGenericPeer.getUniqueInteger ();
|
||||
protected void finalize ()
|
||||
{
|
||||
dispose ();
|
||||
}
|
||||
|
||||
// we hold on to these to make sure we can render when presented
|
||||
// with non-GdkGraphics2D paint targets
|
||||
private AttributedString attributedString;
|
||||
private FontRenderContext fontRenderContext;
|
||||
|
||||
public GdkTextLayout(AttributedString str, FontRenderContext frc)
|
||||
{
|
||||
initState();
|
||||
attributedString = str;
|
||||
fontRenderContext = frc;
|
||||
}
|
||||
|
||||
protected class CharacterIteratorProxy
|
||||
implements CharacterIterator
|
||||
{
|
||||
public CharacterIterator target;
|
||||
public int begin;
|
||||
public int limit;
|
||||
public int index;
|
||||
|
||||
public CharacterIteratorProxy (CharacterIterator ci)
|
||||
{
|
||||
target = ci;
|
||||
}
|
||||
|
||||
public int getBeginIndex ()
|
||||
{
|
||||
return begin;
|
||||
}
|
||||
|
||||
public int getEndIndex ()
|
||||
{
|
||||
return limit;
|
||||
}
|
||||
|
||||
public int getIndex ()
|
||||
{
|
||||
return index;
|
||||
}
|
||||
|
||||
public char setIndex (int idx)
|
||||
throws IllegalArgumentException
|
||||
{
|
||||
if (idx < begin || idx >= limit)
|
||||
throw new IllegalArgumentException ();
|
||||
char ch = target.setIndex (idx);
|
||||
index = idx;
|
||||
return ch;
|
||||
}
|
||||
|
||||
public char first ()
|
||||
{
|
||||
int save = target.getIndex ();
|
||||
char ch = target.setIndex (begin);
|
||||
target.setIndex (save);
|
||||
return ch;
|
||||
}
|
||||
|
||||
public char last ()
|
||||
{
|
||||
if (begin == limit)
|
||||
return this.first ();
|
||||
|
||||
int save = target.getIndex ();
|
||||
char ch = target.setIndex (limit - 1);
|
||||
target.setIndex (save);
|
||||
return ch;
|
||||
}
|
||||
|
||||
public char current ()
|
||||
{
|
||||
return target.current();
|
||||
}
|
||||
|
||||
public char next ()
|
||||
{
|
||||
if (index >= limit - 1)
|
||||
return CharacterIterator.DONE;
|
||||
else
|
||||
{
|
||||
index++;
|
||||
return target.next();
|
||||
}
|
||||
}
|
||||
|
||||
public char previous ()
|
||||
{
|
||||
if (index <= begin)
|
||||
return CharacterIterator.DONE;
|
||||
else
|
||||
{
|
||||
index--;
|
||||
return target.previous ();
|
||||
}
|
||||
}
|
||||
|
||||
public Object clone ()
|
||||
{
|
||||
CharacterIteratorProxy cip = new CharacterIteratorProxy (this.target);
|
||||
cip.begin = this.begin;
|
||||
cip.limit = this.limit;
|
||||
cip.index = this.index;
|
||||
return cip;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// public side
|
||||
|
||||
public void draw (Graphics2D g2, float x, float y)
|
||||
{
|
||||
if (g2 instanceof GdkGraphics2D)
|
||||
{
|
||||
// we share pango structures directly with GdkGraphics2D
|
||||
// when legal
|
||||
GdkGraphics2D gg2 = (GdkGraphics2D) g2;
|
||||
gg2.drawGdkTextLayout(this, x, y);
|
||||
}
|
||||
else
|
||||
{
|
||||
// falling back to a rather tedious layout algorithm when
|
||||
// not legal
|
||||
AttributedCharacterIterator ci = attributedString.getIterator ();
|
||||
CharacterIteratorProxy proxy = new CharacterIteratorProxy (ci);
|
||||
Font defFont = g2.getFont ();
|
||||
|
||||
/* Note: this implementation currently only interprets FONT text
|
||||
* attributes. There is a reasonable argument to be made for some
|
||||
* attributes being interpreted out here, where we have control of the
|
||||
* Graphics2D and can construct or derive new fonts, and some
|
||||
* attributes being interpreted by the GlyphVector itself. So far, for
|
||||
* all attributes except FONT we do neither.
|
||||
*/
|
||||
|
||||
for (char c = ci.first ();
|
||||
c != CharacterIterator.DONE;
|
||||
c = ci.next ())
|
||||
{
|
||||
proxy.begin = ci.getIndex ();
|
||||
proxy.limit = ci.getRunLimit(TextAttribute.FONT);
|
||||
if (proxy.limit <= proxy.begin)
|
||||
continue;
|
||||
|
||||
proxy.index = proxy.begin;
|
||||
|
||||
Object fnt = ci.getAttribute(TextAttribute.FONT);
|
||||
GlyphVector gv;
|
||||
if (fnt instanceof Font)
|
||||
gv = ((Font)fnt).createGlyphVector (fontRenderContext, proxy);
|
||||
else
|
||||
gv = defFont.createGlyphVector (fontRenderContext, proxy);
|
||||
|
||||
g2.drawGlyphVector (gv, x, y);
|
||||
|
||||
int n = gv.getNumGlyphs ();
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
GlyphMetrics gm = gv.getGlyphMetrics (i);
|
||||
if (gm.getAdvanceX() == gm.getAdvance ())
|
||||
x += gm.getAdvanceX ();
|
||||
else
|
||||
y += gm.getAdvanceY ();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public TextHitInfo getStrongCaret (TextHitInfo hit1,
|
||||
TextHitInfo hit2)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public byte getBaseline ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public boolean isLeftToRight ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public boolean isVertical ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public float getAdvance ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public float getAscent ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public float getDescent ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public float getLeading ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public int getCharacterCount ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public byte getCharacterLevel (int index)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public float[] getBaselineOffsets ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public Shape getBlackBoxBounds (int firstEndpoint, int secondEndpoint)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public Rectangle2D getBounds ()
|
||||
{
|
||||
double[] inkExtents = new double[4];
|
||||
double[] logExtents = new double[4];
|
||||
getExtents(inkExtents, logExtents);
|
||||
return new Rectangle2D.Double(logExtents[0], logExtents[1],
|
||||
logExtents[2], logExtents[3]);
|
||||
}
|
||||
|
||||
public float[] getCaretInfo (TextHitInfo hit, Rectangle2D bounds)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public Shape getCaretShape (TextHitInfo hit, Rectangle2D bounds)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public Shape[] getCaretShapes (int offset, Rectangle2D bounds,
|
||||
TextLayout.CaretPolicy policy)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint,
|
||||
Rectangle2D bounds)
|
||||
{
|
||||
AffineTransform at = new AffineTransform();
|
||||
GeneralPath gp = new GeneralPath();
|
||||
double [] rect = new double[4];
|
||||
Rectangle2D tmp = new Rectangle2D.Double();
|
||||
for (int i = firstEndpoint; i <= secondEndpoint; ++i)
|
||||
{
|
||||
indexToPos(i, rect);
|
||||
tmp.setRect(rect[0], rect[1], rect[2], rect[3]);
|
||||
Rectangle2D.intersect(tmp, bounds, tmp);
|
||||
gp.append(tmp.getPathIterator(at), false);
|
||||
}
|
||||
return gp;
|
||||
}
|
||||
|
||||
public int[] getLogicalRangesForVisualSelection (TextHitInfo firstEndpoint,
|
||||
TextHitInfo secondEndpoint)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public TextHitInfo getNextLeftHit (int offset, TextLayout.CaretPolicy policy)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
public TextHitInfo getNextRightHit (int offset, TextLayout.CaretPolicy policy)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
public TextHitInfo hitTestChar (float x, float y, Rectangle2D bounds)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
public TextHitInfo getVisualOtherHit (TextHitInfo hit)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public float getVisibleAdvance ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public Shape getOutline (AffineTransform tx)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
|
||||
TextHitInfo secondEndpoint,
|
||||
Rectangle2D bounds)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
|
||||
public TextLayout getJustifiedLayout (float justificationWidth)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public void handleJustify (float justificationWidth)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public Object clone ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public int hashCode ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public boolean equals (ClasspathTextLayoutPeer tl)
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
public String toString ()
|
||||
{
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/* GtkButtonPeer.java -- Implements ButtonPeer with GTK
|
||||
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
|
@ -43,8 +43,8 @@ import java.awt.Button;
|
|||
import java.awt.Component;
|
||||
import java.awt.Font;
|
||||
import java.awt.Point;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.peer.ButtonPeer;
|
||||
|
||||
public class GtkButtonPeer extends GtkComponentPeer
|
||||
|
@ -52,13 +52,15 @@ public class GtkButtonPeer extends GtkComponentPeer
|
|||
{
|
||||
native void create (String label);
|
||||
|
||||
public native void connectJObject ();
|
||||
public native void connectSignals ();
|
||||
|
||||
native void gtkSetFont (String name, int style, int size);
|
||||
native void gtkWidgetModifyFont (String name, int style, int size);
|
||||
native void gtkSetLabel (String label);
|
||||
native void gtkWidgetSetForeground (int red, int green, int blue);
|
||||
native void gtkWidgetSetBackground (int red, int green, int blue);
|
||||
native void gtkActivate ();
|
||||
native void gtkWidgetRequestFocus ();
|
||||
native void setNativeBounds (int x, int y, int width, int height);
|
||||
|
||||
public GtkButtonPeer (Button b)
|
||||
{
|
||||
|
@ -86,8 +88,8 @@ public class GtkButtonPeer extends GtkComponentPeer
|
|||
if (!me.isConsumed ()
|
||||
&& (me.getModifiersEx () & MouseEvent.BUTTON1_DOWN_MASK) != 0
|
||||
&& awtComponent.getBounds().contains(p))
|
||||
postActionEvent (((Button)awtComponent).getActionCommand (),
|
||||
me.getModifiersEx ());
|
||||
postActionEvent (((Button) awtComponent).getActionCommand (),
|
||||
me.getModifiersEx ());
|
||||
}
|
||||
|
||||
if (e.getID () == KeyEvent.KEY_PRESSED)
|
||||
|
|
|
@ -55,7 +55,7 @@ public class GtkCheckboxPeer extends GtkComponentPeer
|
|||
public native void create (GtkCheckboxGroupPeer group);
|
||||
public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group);
|
||||
public native void connectSignals ();
|
||||
native void gtkSetFont (String name, int style, int size);
|
||||
native void gtkWidgetModifyFont (String name, int style, int size);
|
||||
native void gtkButtonSetLabel (String label);
|
||||
native void gtkToggleButtonSetActive (boolean is_active);
|
||||
|
||||
|
|
|
@ -59,6 +59,10 @@ public class GtkChoicePeer extends GtkComponentPeer
|
|||
|
||||
append (items);
|
||||
}
|
||||
|
||||
int selected = c.getSelectedIndex();
|
||||
if (selected >= 0)
|
||||
select(selected);
|
||||
}
|
||||
|
||||
native void create ();
|
||||
|
|
|
@ -43,9 +43,9 @@ import java.awt.datatransfer.ClipboardOwner;
|
|||
import java.awt.datatransfer.DataFlavor;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.awt.datatransfer.Transferable;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
|
||||
public class GtkClipboard extends Clipboard
|
||||
{
|
||||
|
@ -60,15 +60,13 @@ public class GtkClipboard extends Clipboard
|
|||
|
||||
static boolean hasSelection = false;
|
||||
|
||||
protected
|
||||
GtkClipboard ()
|
||||
protected GtkClipboard()
|
||||
{
|
||||
super ("System Clipboard");
|
||||
initNativeState ();
|
||||
super("System Clipboard");
|
||||
initNativeState();
|
||||
}
|
||||
|
||||
public Transferable
|
||||
getContents (Object requestor)
|
||||
public Transferable getContents(Object requestor)
|
||||
{
|
||||
synchronized (this)
|
||||
{
|
||||
|
@ -77,72 +75,76 @@ public class GtkClipboard extends Clipboard
|
|||
}
|
||||
|
||||
/* Java doesn't own the selection, so we need to ask X11 */
|
||||
// XXX: Does this hold with Swing too ?
|
||||
synchronized (selectionLock)
|
||||
{
|
||||
requestStringConversion ();
|
||||
requestStringConversion();
|
||||
|
||||
try
|
||||
{
|
||||
selectionLock.wait (SELECTION_RECEIVED_TIMEOUT);
|
||||
selectionLock.wait(SELECTION_RECEIVED_TIMEOUT);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return (selection == null) ? null : new StringSelection (selection);
|
||||
return selection == null ? null : new StringSelection(selection);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
stringSelectionReceived (String newSelection)
|
||||
void stringSelectionReceived(String newSelection)
|
||||
{
|
||||
synchronized (selectionLock)
|
||||
{
|
||||
selection = newSelection;
|
||||
selectionLock.notify ();
|
||||
selectionLock.notify();
|
||||
}
|
||||
}
|
||||
|
||||
/* convert Java clipboard data into a String suitable for sending
|
||||
to another application */
|
||||
synchronized String
|
||||
stringSelectionHandler () throws IOException
|
||||
synchronized String stringSelectionHandler() throws IOException
|
||||
{
|
||||
String selection = null;
|
||||
|
||||
try {
|
||||
if (contents.isDataFlavorSupported (DataFlavor.stringFlavor))
|
||||
selection = (String)contents.getTransferData (DataFlavor.stringFlavor);
|
||||
else if (contents.isDataFlavorSupported (DataFlavor.plainTextFlavor))
|
||||
{
|
||||
StringBuffer sbuf = new StringBuffer ();
|
||||
InputStreamReader reader;
|
||||
char readBuf[] = new char[512];
|
||||
int numChars;
|
||||
try
|
||||
{
|
||||
if (contents.isDataFlavorSupported(DataFlavor.stringFlavor))
|
||||
selection = (String)contents.getTransferData(DataFlavor.stringFlavor);
|
||||
else if (contents.isDataFlavorSupported(DataFlavor.plainTextFlavor))
|
||||
{
|
||||
StringBuffer sbuf = new StringBuffer();
|
||||
InputStreamReader reader;
|
||||
char readBuf[] = new char[512];
|
||||
int numChars;
|
||||
|
||||
reader = new InputStreamReader
|
||||
((InputStream)
|
||||
contents.getTransferData (DataFlavor.plainTextFlavor), "UNICODE");
|
||||
reader = new InputStreamReader
|
||||
((InputStream)
|
||||
contents.getTransferData(DataFlavor.plainTextFlavor), "UNICODE");
|
||||
|
||||
while (true)
|
||||
{
|
||||
numChars = reader.read (readBuf);
|
||||
if (numChars == -1)
|
||||
break;
|
||||
sbuf.append (readBuf, 0, numChars);
|
||||
}
|
||||
while (true)
|
||||
{
|
||||
numChars = reader.read(readBuf);
|
||||
if (numChars == -1)
|
||||
break;
|
||||
sbuf.append(readBuf, 0, numChars);
|
||||
}
|
||||
|
||||
selection = new String (sbuf);
|
||||
}
|
||||
} catch (Exception e) { }
|
||||
selection = new String(sbuf);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
|
||||
return selection;
|
||||
}
|
||||
|
||||
public synchronized void
|
||||
setContents (Transferable contents, ClipboardOwner owner)
|
||||
public synchronized void setContents(Transferable contents,
|
||||
ClipboardOwner owner)
|
||||
{
|
||||
selectionGet ();
|
||||
selectionGet();
|
||||
|
||||
this.contents = contents;
|
||||
this.owner = owner;
|
||||
|
@ -150,20 +152,19 @@ public class GtkClipboard extends Clipboard
|
|||
hasSelection = true;
|
||||
}
|
||||
|
||||
synchronized
|
||||
void selectionClear ()
|
||||
synchronized void selectionClear()
|
||||
{
|
||||
hasSelection = false;
|
||||
|
||||
if (owner != null)
|
||||
{
|
||||
owner.lostOwnership (this, contents);
|
||||
owner.lostOwnership(this, contents);
|
||||
owner = null;
|
||||
contents = null;
|
||||
}
|
||||
}
|
||||
|
||||
native void initNativeState ();
|
||||
native static void requestStringConversion ();
|
||||
native static void selectionGet ();
|
||||
native void initNativeState();
|
||||
native static void requestStringConversion();
|
||||
native static void selectionGet();
|
||||
}
|
||||
|
|
|
@ -77,6 +77,8 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
|
||||
Insets insets;
|
||||
|
||||
boolean isInRepaint;
|
||||
|
||||
/* this isEnabled differs from Component.isEnabled, in that it
|
||||
knows if a parent is disabled. In that case Component.isEnabled
|
||||
may return true, but our isEnabled will always return false */
|
||||
|
@ -85,7 +87,6 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
|
||||
native int[] gtkWidgetGetForeground ();
|
||||
native int[] gtkWidgetGetBackground ();
|
||||
native void gtkWidgetSetVisible (boolean b);
|
||||
native void gtkWidgetGetDimensions (int[] dim);
|
||||
native void gtkWidgetGetPreferredDimensions (int[] dim);
|
||||
native void gtkWidgetGetLocationOnScreen (int[] point);
|
||||
|
@ -97,17 +98,14 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
native void gtkWidgetRequestFocus ();
|
||||
native void gtkWidgetDispatchKeyEvent (int id, long when, int mods,
|
||||
int keyCode, int keyLocation);
|
||||
native void gtkSetFont (String name, int style, int size);
|
||||
native void gtkWidgetQueueDrawArea(int x, int y, int width, int height);
|
||||
native void addExposeFilter();
|
||||
native void removeExposeFilter();
|
||||
|
||||
native boolean isRealized ();
|
||||
|
||||
void create ()
|
||||
{
|
||||
throw new RuntimeException ();
|
||||
}
|
||||
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
|
||||
protected GtkComponentPeer (Component awtComponent)
|
||||
|
@ -118,9 +116,6 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
|
||||
create ();
|
||||
|
||||
setParent ();
|
||||
|
||||
connectJObject ();
|
||||
connectSignals ();
|
||||
|
||||
if (awtComponent.getForeground () != null)
|
||||
|
@ -130,12 +125,22 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
if (awtComponent.getFont() != null)
|
||||
setFont(awtComponent.getFont());
|
||||
|
||||
setCursor (awtComponent.getCursor ());
|
||||
Component parent = awtComponent.getParent ();
|
||||
|
||||
// Only set our parent on the GTK side if our parent on the AWT
|
||||
// side is not showing. Otherwise the gtk peer will be shown
|
||||
// before we've had a chance to position and size it properly.
|
||||
if (awtComponent instanceof Window
|
||||
|| (parent != null && ! parent.isShowing ()))
|
||||
setParentAndBounds ();
|
||||
}
|
||||
|
||||
void setParentAndBounds ()
|
||||
{
|
||||
setParent ();
|
||||
|
||||
setComponentBounds ();
|
||||
|
||||
Rectangle bounds = awtComponent.getBounds ();
|
||||
setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
|
||||
setVisibleAndEnabled ();
|
||||
}
|
||||
|
||||
|
@ -154,15 +159,32 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
gtkWidgetSetParent (p);
|
||||
}
|
||||
|
||||
void beginNativeRepaint ()
|
||||
{
|
||||
isInRepaint = true;
|
||||
}
|
||||
|
||||
void endNativeRepaint ()
|
||||
{
|
||||
isInRepaint = false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the bounds of this peer's AWT Component based on dimensions
|
||||
* returned by the native windowing system. Most Components impose
|
||||
* their dimensions on the peers so the default implementation does
|
||||
* nothing. However some peers, like GtkFileDialogPeer, need to
|
||||
* pass their size back to the AWT Component.
|
||||
* their dimensions on the peers which is what the default
|
||||
* implementation does. However some peers, like GtkFileDialogPeer,
|
||||
* need to pass their size back to the AWT Component.
|
||||
*/
|
||||
void setComponentBounds ()
|
||||
{
|
||||
Rectangle bounds = awtComponent.getBounds ();
|
||||
|
||||
if (bounds.x == 0 && bounds.y == 0
|
||||
&& bounds.width == 0 && bounds.height == 0)
|
||||
return;
|
||||
|
||||
setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
|
||||
}
|
||||
|
||||
void setVisibleAndEnabled ()
|
||||
|
@ -180,7 +202,9 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
|
||||
public Image createImage (ImageProducer producer)
|
||||
{
|
||||
return new GtkImage (producer, null);
|
||||
GtkImage image = new GtkImage (producer, null);
|
||||
producer.startProduction (image);
|
||||
return image;
|
||||
}
|
||||
|
||||
public Image createImage (int width, int height)
|
||||
|
@ -195,6 +219,9 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
else
|
||||
g = new GdkGraphics (width, height);
|
||||
|
||||
g.setColor(getBackground());
|
||||
g.fillRect(0, 0, width, height);
|
||||
|
||||
return new GtkOffScreenImage (null, g, width, height);
|
||||
}
|
||||
|
||||
|
@ -215,7 +242,7 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
|
||||
public FontMetrics getFontMetrics (Font font)
|
||||
{
|
||||
return new GdkFontMetrics (font);
|
||||
return getToolkit().getFontMetrics(font);
|
||||
}
|
||||
|
||||
public Graphics getGraphics ()
|
||||
|
@ -265,8 +292,8 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
// Some peers like GtkFileDialogPeer are repainted by Gtk itself
|
||||
if (g == null)
|
||||
break;
|
||||
|
||||
g.setClip (((PaintEvent)event).getUpdateRect());
|
||||
|
||||
g.setClip (((PaintEvent) event).getUpdateRect());
|
||||
|
||||
if (id == PaintEvent.PAINT)
|
||||
awtComponent.paint (g);
|
||||
|
@ -310,21 +337,6 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
|
||||
public void paint (Graphics g)
|
||||
{
|
||||
Component parent = awtComponent.getParent();
|
||||
GtkComponentPeer parentPeer = null;
|
||||
if ((parent instanceof Container) && !parent.isLightweight())
|
||||
parentPeer = (GtkComponentPeer) parent.getPeer();
|
||||
|
||||
addExposeFilter();
|
||||
if (parentPeer != null)
|
||||
parentPeer.addExposeFilter();
|
||||
|
||||
Rectangle clip = g.getClipBounds();
|
||||
gtkWidgetQueueDrawArea(clip.x, clip.y, clip.width, clip.height);
|
||||
|
||||
removeExposeFilter();
|
||||
if (parentPeer != null)
|
||||
parentPeer.removeExposeFilter();
|
||||
}
|
||||
|
||||
public Dimension preferredSize ()
|
||||
|
@ -371,8 +383,11 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
|
||||
public void repaint (long tm, int x, int y, int width, int height)
|
||||
{
|
||||
if (x == 0 && y == 0 && width == 0 && height == 0)
|
||||
return;
|
||||
|
||||
q.postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
|
||||
new Rectangle (x, y, width, height)));
|
||||
new Rectangle (x, y, width, height)));
|
||||
}
|
||||
|
||||
public void requestFocus ()
|
||||
|
@ -391,7 +406,7 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
gtkWidgetSetBackground (c.getRed(), c.getGreen(), c.getBlue());
|
||||
}
|
||||
|
||||
native public void setNativeBounds (int x, int y, int width, int height);
|
||||
native void setNativeBounds (int x, int y, int width, int height);
|
||||
|
||||
public void setBounds (int x, int y, int width, int height)
|
||||
{
|
||||
|
@ -426,13 +441,24 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
if (parent instanceof Window && !lightweightChild)
|
||||
{
|
||||
Insets insets = ((Window) parent).getInsets ();
|
||||
// Convert from Java coordinates to GTK coordinates.
|
||||
setNativeBounds (x - insets.left, y - insets.top, width, height);
|
||||
GtkWindowPeer peer = (GtkWindowPeer) parent.getPeer ();
|
||||
int menuBarHeight = 0;
|
||||
if (peer instanceof GtkFramePeer)
|
||||
menuBarHeight = ((GtkFramePeer) peer).getMenuBarHeight ();
|
||||
|
||||
// Convert from Java coordinates to GTK coordinates.
|
||||
setNativeBounds (x - insets.left, y - insets.top + menuBarHeight,
|
||||
width, height);
|
||||
}
|
||||
else
|
||||
setNativeBounds (x, y, width, height);
|
||||
}
|
||||
|
||||
void setCursor ()
|
||||
{
|
||||
setCursor (awtComponent.getCursor ());
|
||||
}
|
||||
|
||||
public void setCursor (Cursor cursor)
|
||||
{
|
||||
gtkWidgetSetCursor (cursor.getType ());
|
||||
|
@ -448,7 +474,7 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
// FIXME: This should really affect the widget tree below me.
|
||||
// Currently this is only handled if the call is made directly on
|
||||
// a text widget, which implements setFont() itself.
|
||||
gtkSetFont(f.getName(), f.getStyle(), f.getSize());
|
||||
gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
|
||||
}
|
||||
|
||||
public void setForeground (Color c)
|
||||
|
@ -488,8 +514,9 @@ public class GtkComponentPeer extends GtkGenericPeer
|
|||
|
||||
protected void postExposeEvent (int x, int y, int width, int height)
|
||||
{
|
||||
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
|
||||
new Rectangle (x, y, width, height)));
|
||||
if (!isInRepaint)
|
||||
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
|
||||
new Rectangle (x, y, width, height)));
|
||||
}
|
||||
|
||||
protected void postKeyEvent (int id, long when, int mods,
|
||||
|
|
|
@ -45,13 +45,16 @@ import java.awt.Container;
|
|||
import java.awt.Font;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Window;
|
||||
import java.awt.event.PaintEvent;
|
||||
import java.awt.peer.ComponentPeer;
|
||||
import java.awt.peer.ContainerPeer;
|
||||
|
||||
public class GtkContainerPeer extends GtkComponentPeer
|
||||
implements ContainerPeer
|
||||
{
|
||||
Container c;
|
||||
boolean isValidating;
|
||||
|
||||
public GtkContainerPeer(Container c)
|
||||
{
|
||||
|
@ -59,22 +62,38 @@ public class GtkContainerPeer extends GtkComponentPeer
|
|||
this.c = c;
|
||||
}
|
||||
|
||||
public void beginValidate()
|
||||
public void beginValidate ()
|
||||
{
|
||||
isValidating = true;
|
||||
}
|
||||
|
||||
public void endValidate()
|
||||
public void endValidate ()
|
||||
{
|
||||
// q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
|
||||
// new Rectangle (x, y, width, height)));
|
||||
// Graphics gc = getGraphics ();
|
||||
// if (gc != null)
|
||||
// {
|
||||
// awtComponent.update (gc);
|
||||
// gc.dispose ();
|
||||
// }
|
||||
// System.out.println ("got here");
|
||||
// awtComponent.repaint ();
|
||||
Component parent = awtComponent.getParent ();
|
||||
|
||||
// Only set our parent on the GTK side if our parent on the AWT
|
||||
// side is not showing. Otherwise the gtk peer will be shown
|
||||
// before we've had a chance to position and size it properly.
|
||||
if (parent != null && parent.isShowing ())
|
||||
{
|
||||
Component[] components = ((Container) awtComponent).getComponents ();
|
||||
int ncomponents = components.length;
|
||||
|
||||
for (int i = 0; i < ncomponents; i++)
|
||||
{
|
||||
ComponentPeer peer = components[i].getPeer ();
|
||||
|
||||
// Skip lightweight peers.
|
||||
if (peer instanceof GtkComponentPeer)
|
||||
((GtkComponentPeer) peer).setParentAndBounds ();
|
||||
}
|
||||
|
||||
// GTK windows don't have parents.
|
||||
if (!(awtComponent instanceof Window))
|
||||
setParentAndBounds ();
|
||||
}
|
||||
|
||||
isValidating = false;
|
||||
}
|
||||
|
||||
public Insets getInsets()
|
||||
|
|
|
@ -42,9 +42,9 @@ import java.awt.AWTEvent;
|
|||
import java.awt.Component;
|
||||
import java.awt.Dialog;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.peer.DialogPeer;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.PaintEvent;
|
||||
import java.awt.peer.DialogPeer;
|
||||
|
||||
public class GtkDialogPeer extends GtkWindowPeer
|
||||
implements DialogPeer
|
||||
|
@ -75,11 +75,12 @@ public class GtkDialogPeer extends GtkWindowPeer
|
|||
|
||||
protected void postExposeEvent (int x, int y, int width, int height)
|
||||
{
|
||||
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
|
||||
new Rectangle (x + insets.left,
|
||||
y + insets.top,
|
||||
width, height)));
|
||||
}
|
||||
if (!isInRepaint)
|
||||
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
|
||||
new Rectangle (x + insets.left,
|
||||
y + insets.top,
|
||||
width, height)));
|
||||
}
|
||||
|
||||
void create ()
|
||||
{
|
||||
|
|
|
@ -45,8 +45,8 @@ import java.awt.Graphics;
|
|||
import java.awt.Window;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.peer.FileDialogPeer;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
|
||||
public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
|
||||
{
|
||||
|
@ -57,7 +57,6 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
|
|||
private FilenameFilter filter;
|
||||
|
||||
native void create (GtkContainerPeer parent);
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
native void nativeSetFile (String file);
|
||||
native public String nativeGetDirectory();
|
||||
|
@ -94,6 +93,7 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
|
|||
awtComponent.getY (),
|
||||
dims[0], dims[1]);
|
||||
}
|
||||
super.setComponentBounds ();
|
||||
}
|
||||
|
||||
public void setFile (String fileName)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* GtkFontPeer.java -- Implements FontPeer with GTK+
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
|
@ -37,20 +37,25 @@ exception statement from your version. */
|
|||
|
||||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
import java.awt.peer.FontPeer;
|
||||
import java.awt.*;
|
||||
import java.awt.geom.*;
|
||||
import java.awt.font.*;
|
||||
import java.util.Locale;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.MissingResourceException;
|
||||
import java.text.*;
|
||||
|
||||
import gnu.java.awt.peer.ClasspathFontPeer;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.font.FontRenderContext;
|
||||
import java.awt.font.GlyphVector;
|
||||
import java.awt.font.LineMetrics;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.peer.FontPeer;
|
||||
import java.text.CharacterIterator;
|
||||
import java.util.Locale;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
public class GtkFontPeer extends ClasspathFontPeer
|
||||
{
|
||||
private static ResourceBundle bundle;
|
||||
|
||||
|
||||
static
|
||||
{
|
||||
try
|
||||
|
|
|
@ -39,6 +39,7 @@ exception statement from your version. */
|
|||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Container;
|
||||
import java.awt.Frame;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
|
@ -57,51 +58,72 @@ public class GtkFramePeer extends GtkWindowPeer
|
|||
private int menuBarHeight;
|
||||
private MenuBarPeer menuBar;
|
||||
native int getMenuBarHeight (MenuBarPeer bar);
|
||||
|
||||
native void setMenuBarWidth (MenuBarPeer bar, int width);
|
||||
native void setMenuBarPeer (MenuBarPeer bar);
|
||||
native void removeMenuBarPeer ();
|
||||
native void moveLayout (int offset);
|
||||
native void gtkLayoutSetVisible (boolean vis);
|
||||
native void gtkFixedSetVisible (boolean visible);
|
||||
|
||||
int getMenuBarHeight ()
|
||||
{
|
||||
return menuBar == null ? 0 : getMenuBarHeight (menuBar);
|
||||
}
|
||||
|
||||
public void setMenuBar (MenuBar bar)
|
||||
{
|
||||
if (bar == null)
|
||||
{
|
||||
if (menuBar != null)
|
||||
if (bar == null && menuBar != null)
|
||||
{
|
||||
gtkLayoutSetVisible(false);
|
||||
removeMenuBarPeer();
|
||||
// We're removing the menubar.
|
||||
gtkFixedSetVisible (false);
|
||||
menuBar = null;
|
||||
moveLayout(menuBarHeight);
|
||||
removeMenuBarPeer ();
|
||||
insets.top -= menuBarHeight;
|
||||
menuBarHeight = 0;
|
||||
awtComponent.doLayout();
|
||||
gtkLayoutSetVisible(true);
|
||||
menuBarHeight = 0;
|
||||
awtComponent.validate ();
|
||||
gtkFixedSetVisible (true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gtkLayoutSetVisible(false);
|
||||
int oldHeight = 0;
|
||||
if (menuBar != null)
|
||||
else if (bar != null && menuBar == null)
|
||||
{
|
||||
removeMenuBarPeer();
|
||||
oldHeight = menuBarHeight;
|
||||
insets.top -= menuBarHeight;
|
||||
// We're adding a menubar where there was no menubar before.
|
||||
gtkFixedSetVisible (false);
|
||||
menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
|
||||
setMenuBarPeer (menuBar);
|
||||
int menuBarWidth =
|
||||
awtComponent.getWidth () - insets.left - insets.right;
|
||||
if (menuBarWidth > 0)
|
||||
setMenuBarWidth (menuBar, menuBarWidth);
|
||||
menuBarHeight = getMenuBarHeight ();
|
||||
insets.top += menuBarHeight;
|
||||
awtComponent.validate ();
|
||||
gtkFixedSetVisible (true);
|
||||
}
|
||||
else if (bar != null && menuBar != null)
|
||||
{
|
||||
// We're swapping the menubar.
|
||||
gtkFixedSetVisible (false);
|
||||
removeMenuBarPeer();
|
||||
int oldHeight = menuBarHeight;
|
||||
int menuBarWidth =
|
||||
awtComponent.getWidth () - insets.left - insets.right;
|
||||
menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer ();
|
||||
setMenuBarPeer (menuBar);
|
||||
if (menuBarWidth > 0)
|
||||
setMenuBarWidth (menuBar, menuBarWidth);
|
||||
menuBarHeight = getMenuBarHeight ();
|
||||
if (oldHeight != menuBarHeight)
|
||||
{
|
||||
insets.top += (menuBarHeight - oldHeight);
|
||||
awtComponent.validate ();
|
||||
}
|
||||
gtkFixedSetVisible (true);
|
||||
}
|
||||
menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
|
||||
setMenuBarPeer(menuBar);
|
||||
menuBarHeight = getMenuBarHeight (menuBar);
|
||||
if (oldHeight != menuBarHeight)
|
||||
moveLayout(oldHeight - menuBarHeight);
|
||||
insets.top += menuBarHeight;
|
||||
awtComponent.doLayout();
|
||||
gtkLayoutSetVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void setBounds (int x, int y, int width, int height)
|
||||
{
|
||||
int menuBarWidth = width - insets.left - insets.right;
|
||||
if (menuBar != null && menuBarWidth > 0)
|
||||
setMenuBarWidth (menuBar, menuBarWidth);
|
||||
|
||||
nativeSetBounds (x, y,
|
||||
width - insets.left - insets.right,
|
||||
height - insets.top - insets.bottom
|
||||
|
@ -151,7 +173,7 @@ public class GtkFramePeer extends GtkWindowPeer
|
|||
native void nativeSetIconImageFromData (int[] pixels, int width, int height);
|
||||
public void setIconImage (Image image)
|
||||
{
|
||||
if (image != null)
|
||||
if (image != null && image instanceof GtkImage)
|
||||
{
|
||||
GtkImage img = (GtkImage) image;
|
||||
// FIXME: Image should be loaded, but if not, do image loading here.
|
||||
|
@ -206,15 +228,20 @@ public class GtkFramePeer extends GtkWindowPeer
|
|||
|| frame_width != awtComponent.getWidth()
|
||||
|| frame_height != awtComponent.getHeight())
|
||||
{
|
||||
if (frame_width != awtComponent.getWidth() && menuBar != null
|
||||
&& width > 0)
|
||||
setMenuBarWidth (menuBar, width);
|
||||
|
||||
setBoundsCallback ((Window) awtComponent,
|
||||
frame_x,
|
||||
frame_y,
|
||||
frame_width,
|
||||
frame_height);
|
||||
}
|
||||
|
||||
awtComponent.validate();
|
||||
}
|
||||
|
||||
|
||||
protected void postMouseEvent(int id, long when, int mods, int x, int y,
|
||||
int clickCount, boolean popupTrigger)
|
||||
{
|
||||
|
@ -225,10 +252,11 @@ public class GtkFramePeer extends GtkWindowPeer
|
|||
|
||||
protected void postExposeEvent (int x, int y, int width, int height)
|
||||
{
|
||||
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
|
||||
new Rectangle (x + insets.left,
|
||||
y + insets.top,
|
||||
width, height)));
|
||||
if (!isInRepaint)
|
||||
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
|
||||
new Rectangle (x + insets.left,
|
||||
y + insets.top,
|
||||
width, height)));
|
||||
}
|
||||
|
||||
public int getState ()
|
||||
|
|
|
@ -82,4 +82,6 @@ public class GtkGenericPeer
|
|||
// Let's assume this will never wrap.
|
||||
return next_native_state++;
|
||||
}
|
||||
|
||||
native void gtkWidgetModifyFont (String name, int style, int size);
|
||||
}
|
||||
|
|
|
@ -230,7 +230,7 @@ public class GtkImage extends Image implements ImageConsumer
|
|||
int offset, int scansize)
|
||||
{
|
||||
setPixels (x, y, width, height, cm, convertPixels (pixels), offset,
|
||||
scansize);
|
||||
scansize);
|
||||
|
||||
if (observer != null)
|
||||
observer.imageUpdate (this,
|
||||
|
@ -255,7 +255,8 @@ public class GtkImage extends Image implements ImageConsumer
|
|||
|
||||
if (scansize == width && height == 1)
|
||||
{
|
||||
System.arraycopy (pixels, offset,
|
||||
// Copy contents of pixels array into pixel cache.
|
||||
System.arraycopy (pixels, offset,
|
||||
pixelCache, y * this.width + x,
|
||||
pixels.length - offset);
|
||||
}
|
||||
|
@ -274,7 +275,7 @@ public class GtkImage extends Image implements ImageConsumer
|
|||
if (status == ImageConsumer.STATICIMAGEDONE && isCacheable)
|
||||
isLoaded = true;
|
||||
|
||||
if (status == ImageConsumer.SINGLEFRAMEDONE)
|
||||
if (status == ImageConsumer.SINGLEFRAME)
|
||||
isCacheable = false;
|
||||
|
||||
if (observer != null)
|
||||
|
@ -289,7 +290,7 @@ public class GtkImage extends Image implements ImageConsumer
|
|||
-1, -1, -1, -1);
|
||||
}
|
||||
|
||||
if (source != null)
|
||||
if (source != null && status != ImageConsumer.SINGLEFRAME)
|
||||
source.removeConsumer (this);
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ import java.awt.Color;
|
|||
import java.awt.Rectangle;
|
||||
import java.awt.image.ColorModel;
|
||||
import java.awt.image.ImageConsumer;
|
||||
import java.awt.image.ImageObserver;
|
||||
import java.util.Hashtable;
|
||||
|
||||
public class GtkImagePainter implements Runnable, ImageConsumer
|
||||
|
@ -57,10 +58,11 @@ public class GtkImagePainter implements Runnable, ImageConsumer
|
|||
boolean flipX, flipY;
|
||||
Rectangle clip;
|
||||
int s_width, s_height;
|
||||
ImageObserver observer;
|
||||
|
||||
public
|
||||
GtkImagePainter (GtkImage image, GdkGraphics gc, int x, int y,
|
||||
int width, int height, Color bgcolor)
|
||||
int width, int height, Color bgcolor, ImageObserver o)
|
||||
{
|
||||
this.image = image;
|
||||
this.gc = (GdkGraphics) gc.create ();
|
||||
|
@ -74,15 +76,16 @@ public class GtkImagePainter implements Runnable, ImageConsumer
|
|||
flipX = flipY = false;
|
||||
s_width = s_height = 0;
|
||||
clip = null;
|
||||
observer = o;
|
||||
|
||||
new Thread (this).start ();
|
||||
run ();
|
||||
}
|
||||
|
||||
public
|
||||
GtkImagePainter (GtkImage image, GdkGraphics gc,
|
||||
int dx1, int dy1, int dx2, int dy2,
|
||||
int sx1, int sy1, int sx2, int sy2,
|
||||
Color bgcolor)
|
||||
Color bgcolor, ImageObserver o)
|
||||
{
|
||||
this.image = image;
|
||||
this.gc = (GdkGraphics) gc.create ();
|
||||
|
@ -91,6 +94,7 @@ public class GtkImagePainter implements Runnable, ImageConsumer
|
|||
redBG = bgcolor.getRed ();
|
||||
greenBG = bgcolor.getGreen ();
|
||||
blueBG = bgcolor.getBlue ();
|
||||
observer = o;
|
||||
|
||||
this.width = Math.abs (dx2 - dx1);
|
||||
this.height = Math.abs (dy2 - dy1);
|
||||
|
@ -105,7 +109,7 @@ public class GtkImagePainter implements Runnable, ImageConsumer
|
|||
s_height = Math.abs (sy2 - sy1);
|
||||
clip = new Rectangle (sx1, sy1, s_width, s_height);
|
||||
|
||||
new Thread (this).start ();
|
||||
run ();
|
||||
}
|
||||
|
||||
public void
|
||||
|
@ -126,7 +130,7 @@ public class GtkImagePainter implements Runnable, ImageConsumer
|
|||
|
||||
if (model.equals (ColorModel.getRGBdefault ()))
|
||||
return pixels;
|
||||
|
||||
|
||||
int ret[] = new int[pixels.length];
|
||||
|
||||
for (int i = 0; i < pixels.length; i++)
|
||||
|
@ -180,6 +184,11 @@ public class GtkImagePainter implements Runnable, ImageConsumer
|
|||
startX + x, startY + y,
|
||||
width, height, convertPixels (pixels, model), offset,
|
||||
scansize, affine);
|
||||
|
||||
if (observer != null)
|
||||
observer.imageUpdate (image,
|
||||
ImageObserver.SOMEBITS,
|
||||
x, y, width, height);
|
||||
}
|
||||
|
||||
public void
|
||||
|
@ -247,5 +256,17 @@ public class GtkImagePainter implements Runnable, ImageConsumer
|
|||
imageComplete (int status)
|
||||
{
|
||||
image.imageComplete(status);
|
||||
|
||||
if (observer != null)
|
||||
{
|
||||
if (status == ImageConsumer.IMAGEERROR)
|
||||
observer.imageUpdate (null,
|
||||
ImageObserver.ERROR,
|
||||
-1, -1, -1, -1);
|
||||
else
|
||||
observer.imageUpdate (null,
|
||||
ImageObserver.ALLBITS,
|
||||
-1, -1, -1, -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,10 +47,11 @@ public class GtkLabelPeer extends GtkComponentPeer
|
|||
implements LabelPeer
|
||||
{
|
||||
native void create (String text, float alignment);
|
||||
native void gtkSetFont (String name, int style, int size);
|
||||
native void gtkWidgetModifyFont (String name, int style, int size);
|
||||
native void nativeSetAlignment (float alignment);
|
||||
|
||||
native public void setText (String text);
|
||||
native void setNativeBounds (int x, int y, int width, int height);
|
||||
|
||||
void create ()
|
||||
{
|
||||
|
|
|
@ -41,8 +41,8 @@ package gnu.java.awt.peer.gtk;
|
|||
import java.awt.AWTEvent;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.List;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.peer.ListPeer;
|
||||
|
||||
public class GtkListPeer extends GtkComponentPeer
|
||||
|
@ -58,9 +58,8 @@ public class GtkListPeer extends GtkComponentPeer
|
|||
}
|
||||
|
||||
native void create (int rows);
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
native void gtkSetFont (String name, int style, int size);
|
||||
native void gtkWidgetModifyFont (String name, int style, int size);
|
||||
native void gtkWidgetRequestFocus ();
|
||||
|
||||
native void getSize (int rows, int visibleRows, int dims[]);
|
||||
|
|
|
@ -38,8 +38,10 @@ exception statement from your version. */
|
|||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.Menu;
|
||||
import java.awt.MenuBar;
|
||||
import java.awt.MenuComponent;
|
||||
import java.awt.peer.MenuBarPeer;
|
||||
import java.awt.peer.MenuPeer;
|
||||
|
||||
|
@ -53,15 +55,25 @@ public class GtkMenuBarPeer extends GtkMenuComponentPeer
|
|||
public GtkMenuBarPeer (MenuBar target)
|
||||
{
|
||||
super (target);
|
||||
create ();
|
||||
}
|
||||
|
||||
void setFont ()
|
||||
{
|
||||
MenuComponent mc = (MenuComponent) awtWidget;
|
||||
Font f = mc.getFont ();
|
||||
|
||||
if (f == null)
|
||||
mc.setFont (new Font ("Dialog", Font.PLAIN, 12));
|
||||
}
|
||||
|
||||
// FIXME: remove this method or replace it with one that does
|
||||
// something useful.
|
||||
/* In Gnome, help menus are no longer right flushed. */
|
||||
native void nativeSetHelpMenu(MenuPeer menuPeer);
|
||||
|
||||
/* In Gnome, help menus are no longer right flushed. */
|
||||
public void addHelpMenu (Menu menu)
|
||||
{
|
||||
nativeSetHelpMenu((MenuPeer) menu.getPeer());
|
||||
// nativeSetHelpMenu((MenuPeer) menu.getPeer());
|
||||
}
|
||||
|
||||
native public void delMenu (int index);
|
||||
|
|
|
@ -38,15 +38,28 @@ exception statement from your version. */
|
|||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.MenuComponent;
|
||||
import java.awt.peer.MenuComponentPeer;
|
||||
|
||||
public class GtkMenuComponentPeer extends GtkGenericPeer
|
||||
implements MenuComponentPeer
|
||||
{
|
||||
void create ()
|
||||
{
|
||||
throw new RuntimeException ();
|
||||
}
|
||||
|
||||
void setFont ()
|
||||
{
|
||||
}
|
||||
|
||||
public GtkMenuComponentPeer (Object awtWidget)
|
||||
{
|
||||
super (awtWidget);
|
||||
create ();
|
||||
setFont ();
|
||||
}
|
||||
|
||||
|
||||
public native void dispose();
|
||||
}
|
||||
|
|
|
@ -38,24 +38,31 @@ exception statement from your version. */
|
|||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.Menu;
|
||||
import java.awt.MenuComponent;
|
||||
import java.awt.MenuBar;
|
||||
import java.awt.MenuItem;
|
||||
import java.awt.peer.MenuItemPeer;
|
||||
import java.awt.peer.MenuComponentPeer;
|
||||
import java.awt.peer.MenuBarPeer;
|
||||
import java.awt.peer.MenuComponentPeer;
|
||||
import java.awt.peer.MenuItemPeer;
|
||||
import java.awt.peer.MenuPeer;
|
||||
|
||||
public class GtkMenuItemPeer extends GtkMenuComponentPeer
|
||||
implements MenuItemPeer
|
||||
{
|
||||
native void create (String label);
|
||||
public native void connectSignals ();
|
||||
native void connectSignals ();
|
||||
native void gtkWidgetModifyFont (String name, int style, int size);
|
||||
|
||||
void create ()
|
||||
{
|
||||
create (((MenuItem) awtWidget).getLabel());
|
||||
}
|
||||
|
||||
public GtkMenuItemPeer (MenuItem item)
|
||||
{
|
||||
super (item);
|
||||
create (item.getLabel ());
|
||||
setEnabled (item.isEnabled ());
|
||||
setParent (item);
|
||||
|
||||
|
@ -63,6 +70,21 @@ public class GtkMenuItemPeer extends GtkMenuComponentPeer
|
|||
connectSignals();
|
||||
}
|
||||
|
||||
void setFont ()
|
||||
{
|
||||
MenuComponent mc = ((MenuComponent) awtWidget);
|
||||
Font f = mc.getFont ();
|
||||
|
||||
if (f == null)
|
||||
{
|
||||
MenuComponent parent = (MenuComponent) mc.getParent ();
|
||||
Font pf = parent.getFont ();
|
||||
gtkWidgetModifyFont (pf.getName (), pf.getStyle (), pf.getSize ());
|
||||
}
|
||||
else
|
||||
gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
|
||||
}
|
||||
|
||||
void setParent (MenuItem item)
|
||||
{
|
||||
// add ourself differently, based on what type of parent we have
|
||||
|
|
|
@ -47,7 +47,6 @@ public class GtkPanelPeer extends GtkContainerPeer
|
|||
implements PanelPeer
|
||||
{
|
||||
native void create ();
|
||||
native void connectJObject ();
|
||||
|
||||
public GtkPanelPeer (Panel p)
|
||||
{
|
||||
|
|
|
@ -54,7 +54,7 @@ public class GtkScrollPanePeer extends GtkContainerPeer
|
|||
create (awtComponent.getWidth (), awtComponent.getHeight ());
|
||||
}
|
||||
|
||||
native void gtkScrolledWindowSetScrollPosition(int x, int y);
|
||||
// native void gtkScrolledWindowSetScrollPosition(int x, int y);
|
||||
native void gtkScrolledWindowSetHScrollIncrement (int u);
|
||||
native void gtkScrolledWindowSetVScrollIncrement (int u);
|
||||
|
||||
|
|
|
@ -60,7 +60,6 @@ public class GtkScrollbarPeer extends GtkComponentPeer
|
|||
int min, int max, int stepIncr, int pageIncr,
|
||||
int visibleAmount);
|
||||
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
|
||||
public GtkScrollbarPeer (Scrollbar s)
|
||||
|
|
|
@ -52,7 +52,7 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
|
|||
|
||||
native void create (int width, int height, int scrollbarVisibility);
|
||||
|
||||
native void gtkSetFont (String name, int style, int size);
|
||||
native void gtkWidgetModifyFont (String name, int style, int size);
|
||||
native void gtkWidgetRequestFocus ();
|
||||
|
||||
void create ()
|
||||
|
@ -68,11 +68,7 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
|
|||
awtComponent.setFont (f);
|
||||
}
|
||||
|
||||
FontMetrics fm;
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
fm = new GdkClasspathFontPeerMetrics (f);
|
||||
else
|
||||
fm = new GdkFontMetrics (f);
|
||||
FontMetrics fm = getFontMetrics (f);
|
||||
|
||||
TextArea ta = ((TextArea) awtComponent);
|
||||
int sizeRows = ta.getRows ();
|
||||
|
@ -130,11 +126,7 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
|
|||
if (f == null)
|
||||
return new Dimension (width, height);
|
||||
|
||||
FontMetrics fm;
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
fm = new GdkClasspathFontPeerMetrics (f);
|
||||
else
|
||||
fm = new GdkFontMetrics (f);
|
||||
FontMetrics fm = getFontMetrics (f);
|
||||
|
||||
int sizeRows = rows == 0 ? DEFAULT_ROWS : rows;
|
||||
int sizeCols = cols == 0 ? DEFAULT_COLS : cols;
|
||||
|
@ -163,11 +155,7 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer
|
|||
if (f == null)
|
||||
return new Dimension (width, height);
|
||||
|
||||
FontMetrics fm;
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
fm = new GdkClasspathFontPeerMetrics (f);
|
||||
else
|
||||
fm = new GdkFontMetrics (f);
|
||||
FontMetrics fm = getFontMetrics (f);
|
||||
|
||||
int sizeRows = rows == 0 ? DEFAULT_ROWS : rows;
|
||||
int sizeCols = cols == 0 ? DEFAULT_COLS : cols;
|
||||
|
|
|
@ -66,11 +66,7 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer
|
|||
awtComponent.setFont (f);
|
||||
}
|
||||
|
||||
FontMetrics fm;
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
fm = new GdkClasspathFontPeerMetrics (f);
|
||||
else
|
||||
fm = new GdkFontMetrics (f);
|
||||
FontMetrics fm = getFontMetrics (f);
|
||||
|
||||
TextField tf = ((TextField) awtComponent);
|
||||
int cols = tf.getColumns ();
|
||||
|
@ -84,7 +80,7 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer
|
|||
|
||||
native int gtkEntryGetBorderWidth ();
|
||||
|
||||
native void gtkSetFont (String name, int style, int size);
|
||||
native void gtkWidgetModifyFont (String name, int style, int size);
|
||||
|
||||
public GtkTextFieldPeer (TextField tf)
|
||||
{
|
||||
|
@ -117,11 +113,7 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer
|
|||
if (f == null)
|
||||
return new Dimension (2 * gtkEntryGetBorderWidth (), dim[1]);
|
||||
|
||||
FontMetrics fm;
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
fm = new GdkClasspathFontPeerMetrics (f);
|
||||
else
|
||||
fm = new GdkFontMetrics (f);
|
||||
FontMetrics fm = getFontMetrics (f);
|
||||
|
||||
int text_width = cols * fm.getMaxAdvance ();
|
||||
|
||||
|
@ -140,11 +132,7 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer
|
|||
if (f == null)
|
||||
return new Dimension (2 * gtkEntryGetBorderWidth (), dim[1]);
|
||||
|
||||
FontMetrics fm;
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
fm = new GdkClasspathFontPeerMetrics (f);
|
||||
else
|
||||
fm = new GdkFontMetrics (f);
|
||||
FontMetrics fm = getFontMetrics (f);
|
||||
|
||||
int text_width = cols * fm.getMaxAdvance ();
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* GtkToolkit.java -- Implements an AWT Toolkit using GTK for peers
|
||||
Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
|
@ -38,36 +38,40 @@ exception statement from your version. */
|
|||
|
||||
package gnu.java.awt.peer.gtk;
|
||||
|
||||
import gnu.classpath.Configuration;
|
||||
import gnu.java.awt.EmbeddedWindow;
|
||||
import gnu.java.awt.EmbeddedWindowSupport;
|
||||
import gnu.java.awt.peer.ClasspathFontPeer;
|
||||
import gnu.java.awt.peer.ClasspathTextLayoutPeer;
|
||||
import gnu.java.awt.peer.EmbeddedWindowPeer;
|
||||
import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.datatransfer.Clipboard;
|
||||
import java.awt.dnd.DragGestureEvent;
|
||||
import java.awt.dnd.peer.DragSourceContextPeer;
|
||||
import java.awt.font.FontRenderContext;
|
||||
import java.awt.font.TextAttribute;
|
||||
import java.awt.im.InputMethodHighlight;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.ColorModel;
|
||||
import java.awt.image.ImageObserver;
|
||||
import java.awt.image.ImageConsumer;
|
||||
import java.awt.image.ImageObserver;
|
||||
import java.awt.image.ImageProducer;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.awt.peer.*;
|
||||
import java.net.URL;
|
||||
import java.text.AttributedString;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.Properties;
|
||||
import gnu.java.awt.EmbeddedWindow;
|
||||
import gnu.java.awt.EmbeddedWindowSupport;
|
||||
import gnu.java.awt.peer.EmbeddedWindowPeer;
|
||||
import gnu.java.awt.peer.ClasspathFontPeer;
|
||||
import gnu.classpath.Configuration;
|
||||
import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
|
||||
|
||||
/* This class uses a deprecated method java.awt.peer.ComponentPeer.getPeer().
|
||||
This merits comment. We are basically calling Sun's bluff on this one.
|
||||
We think Sun has deprecated it simply to discourage its use as it is
|
||||
We think Sun has deprecated it simply to discourage its use as it is
|
||||
bad programming style. However, we need to get at a component's peer in
|
||||
this class. If getPeer() ever goes away, we can implement a hash table
|
||||
that will keep up with every window's peer, but for now this is faster. */
|
||||
|
@ -79,7 +83,6 @@ import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
|
|||
* drawing contexts. Any other value will cause the older GdkGraphics
|
||||
* object to be used.
|
||||
*/
|
||||
|
||||
public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
|
||||
implements EmbeddedWindowSupport
|
||||
{
|
||||
|
@ -87,7 +90,6 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
|
|||
Hashtable containers = new Hashtable();
|
||||
static EventQueue q = new EventQueue();
|
||||
static Clipboard systemClipboard;
|
||||
|
||||
static boolean useGraphics2dSet;
|
||||
static boolean useGraphics2d;
|
||||
|
||||
|
@ -120,14 +122,21 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
|
|||
public int checkImage (Image image, int width, int height,
|
||||
ImageObserver observer)
|
||||
{
|
||||
int status = ((GtkImage) image).checkImage ();
|
||||
int status = ImageObserver.ALLBITS
|
||||
| ImageObserver.WIDTH
|
||||
| ImageObserver.HEIGHT;
|
||||
|
||||
if (image instanceof GtkImage)
|
||||
{
|
||||
status = ((GtkImage) image).checkImage ();
|
||||
}
|
||||
|
||||
if (observer != null)
|
||||
observer.imageUpdate (image, status,
|
||||
-1, -1,
|
||||
image.getWidth (observer),
|
||||
image.getHeight (observer));
|
||||
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -304,22 +313,59 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
|
|||
"SansSerif" });
|
||||
}
|
||||
|
||||
private class LRUCache extends java.util.LinkedHashMap
|
||||
{
|
||||
int max_entries;
|
||||
public LRUCache(int max)
|
||||
{
|
||||
super(max, 0.75f, true);
|
||||
max_entries = max;
|
||||
}
|
||||
protected boolean removeEldestEntry(Map.Entry eldest)
|
||||
{
|
||||
return size() > max_entries;
|
||||
}
|
||||
}
|
||||
|
||||
private LRUCache fontCache = new LRUCache(50);
|
||||
private LRUCache metricsCache = new LRUCache(50);
|
||||
private LRUCache imageCache = new LRUCache(50);
|
||||
|
||||
public FontMetrics getFontMetrics (Font font)
|
||||
{
|
||||
if (useGraphics2D())
|
||||
return new GdkClasspathFontPeerMetrics (font);
|
||||
if (metricsCache.containsKey(font))
|
||||
return (FontMetrics) metricsCache.get(font);
|
||||
else
|
||||
return new GdkFontMetrics (font);
|
||||
{
|
||||
FontMetrics m;
|
||||
m = new GdkFontMetrics (font);
|
||||
metricsCache.put(font, m);
|
||||
return m;
|
||||
}
|
||||
}
|
||||
|
||||
public Image getImage (String filename)
|
||||
{
|
||||
return createImage (filename);
|
||||
if (imageCache.containsKey(filename))
|
||||
return (Image) imageCache.get(filename);
|
||||
else
|
||||
{
|
||||
Image im = createImage(filename);
|
||||
imageCache.put(filename, im);
|
||||
return im;
|
||||
}
|
||||
}
|
||||
|
||||
public Image getImage (URL url)
|
||||
{
|
||||
return createImage (url);
|
||||
if (imageCache.containsKey(url))
|
||||
return (Image) imageCache.get(url);
|
||||
else
|
||||
{
|
||||
Image im = createImage(url);
|
||||
imageCache.put(url, im);
|
||||
return im;
|
||||
}
|
||||
}
|
||||
|
||||
public PrintJob getPrintJob (Frame frame, String jobtitle, Properties props)
|
||||
|
@ -510,8 +556,10 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
|
|||
*/
|
||||
private FontPeer getFontPeer (String name, int style, int size)
|
||||
{
|
||||
GtkFontPeer fp = new GtkFontPeer (name, style, size);
|
||||
return fp;
|
||||
Map attrs = new HashMap ();
|
||||
ClasspathFontPeer.copyStyleToAttrs (style, attrs);
|
||||
ClasspathFontPeer.copySizeToAttrs (size, attrs);
|
||||
return getClasspathFontPeer (name, attrs);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -522,40 +570,28 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
|
|||
|
||||
public ClasspathFontPeer getClasspathFontPeer (String name, Map attrs)
|
||||
{
|
||||
if (useGraphics2D())
|
||||
return new GdkClasspathFontPeer (name, attrs);
|
||||
Map keyMap = new HashMap (attrs);
|
||||
// We don't know what kind of "name" the user requested (logical, face,
|
||||
// family), and we don't actually *need* to know here. The worst case
|
||||
// involves failure to consolidate fonts with the same backend in our
|
||||
// cache. This is harmless.
|
||||
keyMap.put ("GtkToolkit.RequestedFontName", name);
|
||||
if (fontCache.containsKey (keyMap))
|
||||
return (ClasspathFontPeer) fontCache.get (keyMap);
|
||||
else
|
||||
{
|
||||
// Default values
|
||||
int size = 12;
|
||||
int style = Font.PLAIN;
|
||||
if (name == null)
|
||||
name = "Default";
|
||||
|
||||
if (attrs.containsKey (TextAttribute.WEIGHT))
|
||||
{
|
||||
Float weight = (Float) attrs.get (TextAttribute.WEIGHT);
|
||||
if (weight.floatValue () >= TextAttribute.WEIGHT_BOLD.floatValue ())
|
||||
style += Font.BOLD;
|
||||
}
|
||||
|
||||
if (attrs.containsKey (TextAttribute.POSTURE))
|
||||
{
|
||||
Float posture = (Float) attrs.get (TextAttribute.POSTURE);
|
||||
if (posture.floatValue () >= TextAttribute.POSTURE_OBLIQUE.floatValue ())
|
||||
style += Font.ITALIC;
|
||||
}
|
||||
|
||||
if (attrs.containsKey (TextAttribute.SIZE))
|
||||
{
|
||||
Float fsize = (Float) attrs.get (TextAttribute.SIZE);
|
||||
size = fsize.intValue();
|
||||
}
|
||||
|
||||
return (ClasspathFontPeer) this.getFontPeer (name, style, size);
|
||||
ClasspathFontPeer newPeer = new GdkFontPeer (name, attrs);
|
||||
fontCache.put (keyMap, newPeer);
|
||||
return newPeer;
|
||||
}
|
||||
}
|
||||
|
||||
public ClasspathTextLayoutPeer getClasspathTextLayoutPeer (AttributedString str,
|
||||
FontRenderContext frc)
|
||||
{
|
||||
return new GdkTextLayout(str, frc);
|
||||
}
|
||||
|
||||
protected EventQueue getSystemEventQueueImpl()
|
||||
{
|
||||
return q;
|
||||
|
|
|
@ -40,8 +40,8 @@ package gnu.java.awt.peer.gtk;
|
|||
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Window;
|
||||
import java.awt.Frame;
|
||||
import java.awt.Window;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.peer.WindowPeer;
|
||||
|
||||
|
@ -106,7 +106,6 @@ public class GtkWindowPeer extends GtkContainerPeer
|
|||
{
|
||||
}
|
||||
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
|
||||
public GtkWindowPeer (Window window)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue