+2004-02-09 Graydon Hoare <graydon@redhat.com>
+
+ * javax/swing/ToggleButtonModel.java: Remove dead class.
+ * javax/swing/plaf/basic/BasicDefaults.java: Remove dead class.
+ * javax/swing/plaf/basic/BasicButtonListener.java: New class.
+ * javax/swing/plaf/basic/BasicRootPaneUI.java: New class.
+ * Makefile.am: Update for new and removed files.
+ * Makefile.in: Regenerate.
+
+ * gnu/java/awt/peer/gtk/GdkGraphics2D.java: Initialize default hints.
+ * javax/swing/AbstractButton.java
+ (AbstractButton): Initialize fields correctly in ctor.
+ * javax/swing/JCheckbox.java
+ (JCheckBox): Override painting flags.
+ * javax/swing/DefaultButtonModel.java: Conform to sun.
+ * javax/swing/JComponent.java (paint): Fill with background color
+ if available.
+ (processComponentKeyEvent)
+ (processFocusEvent)
+ (processKeyEvent)
+ (processMouseMotionEvent): Remove event-consuming empty methods.
+ (getUIClassID): Return "ComponentUI" not "JComponent"
+ * javax/swing/JFrame.java: Remove some debugging chatter.
+ (JFrame): Subscribe to window events.
+ * javax/swing/JRadioButton.java
+ (JRadioButton): Override painting flags.
+ * javax/swing/JRootPane.java
+ (JRootPane): Set background from UIDefaults.
+ * javax/swing/JToggleButton.java
+ (ToggleButtonModel): New inner class.
+ (JToggleButton): Override layout alighment.
+ * javax/swing/SwingUtilities.java:
+ (getLocalBounds): Return width and height, not x and y.
+ (calculateInnerArea): Use local bounds, not bounds.
+ (layoutCompoundLabel): Provide overridden form.
+ (layoutCompoundLabel): Correct bugs.
+ * javax/swing/UIDefaults.java: Correct comment.
+ * javax/swing/plaf/basic/BasicButtonUI.java:
+ Move most logic into defaults, external listener.
+ (paintIcon): Implement icon painting.
+ (paint): Fix state painting to conform to changes in model.
+ * javax/swing/plaf/basic/BasicCheckBoxUI.java:
+ Remove most dead/wrong methods.
+ (getDefaultIcon): Return defaults.getIcon("CheckBox.icon").
+ * javax/swing/plaf/basic/BasicIconFactory.java:
+ (DummyIcon): New class.
+ (getMenuItemCheckIcon)
+ (getMenuItemArrowIcon)
+ (getMenuArrowIcon)
+ (getCheckBoxMenuItemIcon)
+ (getRadioButtonMenuItemIcon)
+ (createEmptyFrameIcon): Return DummyIcons, not null.
+ (getCheckBoxIcon): Implement an icon that looks like sun's.
+ (getRadioButtonIcon): Implement an icon that looks like sun's.
+ * javax/swing/plaf/basic/BasicLookAndFeel.java
+ (initComponentDefaults): Fix impossible values, add some missing.
+ * javax/swing/plaf/basic/BasicPanelUI.java (gap): Remove field.
+ * javax/swing/plaf/basic/BasicRadioButtonUI.java:
+ Remove most dead/wrong methods.
+ (icon): New field.
+ (getDefaultIcon): New method.
+ * javax/swing/plaf/basic/BasicToggleButtonUI.java:
+ Remove most dead/wrong methods.
+ * javax/swing/plaf/metal/MetalLookAndFeel.java
+ (getDefaults): Return super.getDefaults(), not BasicDefaults.
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ (Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect):
+ Implement "clearing" as drawing, when on pixmap drawables.
+
+ * javax/swing/JButton.java (getUIClassID):
+ * javax/swing/JCheckBox.java (getUIClassID):
+ * javax/swing/JEditorPane.java (getUIClassID):
+ * javax/swing/JLabel.java (getUIClassID):
+ * javax/swing/JList.java (getUIClassID):
+ * javax/swing/JOptionPane.java (getUIClassID):
+ * javax/swing/JPanel.java (getUIClassID):
+ * javax/swing/JPasswordField.java (uiClassID):
+ * javax/swing/JRadioButton.java (getUIClassID):
+ * javax/swing/JRootPane.java (getUIClassID):
+ * javax/swing/JScrollPane.java (getUIClassID):
+ * javax/swing/JTabbedPane.java (getUIClassID):
+ * javax/swing/JToggleButton.java (getUIClassID):
+ * javax/swing/JTree.java (getUIClassID):
+ * javax/swing/JViewport.java (getUIClassID):
+ * javax/swing/text/JTextComponent.java (getUIClassID):
+ Return "fooUI" not "Jfoo"
+
2004-02-11 Michael Koch <konqueror@gmx.de>
* java/net/DatagramSocket.java
javax/swing/GrayFilter.java \
javax/swing/AbstractAction.java \
javax/swing/AbstractButton.java \
+javax/swing/plaf/basic/BasicButtonListener.java \
javax/swing/plaf/basic/BasicButtonUI.java \
javax/swing/plaf/basic/BasicCheckBoxUI.java \
-javax/swing/plaf/basic/BasicDefaults.java \
javax/swing/plaf/basic/BasicGraphicsUtils.java \
javax/swing/plaf/basic/BasicLabelUI.java \
javax/swing/plaf/basic/BasicListUI.java \
javax/swing/plaf/basic/BasicOptionPaneUI.java \
javax/swing/plaf/basic/BasicPanelUI.java \
+javax/swing/plaf/basic/BasicRootPaneUI.java \
javax/swing/plaf/basic/BasicRadioButtonUI.java \
javax/swing/plaf/basic/BasicScrollPaneUI.java \
+javax/swing/plaf/basic/BasicSliderUI.java \
javax/swing/plaf/basic/BasicSplitPaneDivider.java \
javax/swing/plaf/basic/BasicSplitPaneUI.java \
javax/swing/plaf/basic/BasicTabbedPaneUI.java \
javax/swing/SwingConstants.java \
javax/swing/SwingUtilities.java \
javax/swing/Timer.java \
-javax/swing/ToggleButtonModel.java \
javax/swing/UIDefaults.java \
javax/swing/UIManager.java \
javax/swing/UnsupportedLookAndFeelException.java \
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
javax/swing/GrayFilter.java \
javax/swing/AbstractAction.java \
javax/swing/AbstractButton.java \
+javax/swing/plaf/basic/BasicButtonListener.java \
javax/swing/plaf/basic/BasicButtonUI.java \
javax/swing/plaf/basic/BasicCheckBoxUI.java \
-javax/swing/plaf/basic/BasicDefaults.java \
javax/swing/plaf/basic/BasicGraphicsUtils.java \
javax/swing/plaf/basic/BasicLabelUI.java \
javax/swing/plaf/basic/BasicListUI.java \
javax/swing/plaf/basic/BasicOptionPaneUI.java \
javax/swing/plaf/basic/BasicPanelUI.java \
+javax/swing/plaf/basic/BasicRootPaneUI.java \
javax/swing/plaf/basic/BasicRadioButtonUI.java \
javax/swing/plaf/basic/BasicScrollPaneUI.java \
+javax/swing/plaf/basic/BasicSliderUI.java \
javax/swing/plaf/basic/BasicSplitPaneDivider.java \
javax/swing/plaf/basic/BasicSplitPaneUI.java \
javax/swing/plaf/basic/BasicTabbedPaneUI.java \
javax/swing/SwingConstants.java \
javax/swing/SwingUtilities.java \
javax/swing/Timer.java \
-javax/swing/ToggleButtonModel.java \
javax/swing/UIDefaults.java \
javax/swing/UIManager.java \
javax/swing/UnsupportedLookAndFeelException.java \
org/w3c/dom/traversal/NodeIterator.lo \
org/w3c/dom/traversal/TreeWalker.lo
lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES =
-@GTK_CAIRO_FALSE@lib_gnu_java_awt_peer_gtk_la_OBJECTS = \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkClasspathFontPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkFontMetrics.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkGlyphVector.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkGraphics.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkGraphics2D.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkPixbufDecoder.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkArg.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkArgList.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkButtonPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCanvasPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCheckboxPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkChoicePeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkClipboard.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkComponentPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkContainerPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkDialogPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkFileDialogPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkFontPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkFramePeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkGenericPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkImage.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkImagePainter.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkLabelPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkListPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMainThread.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuBarPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuComponentPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuItemPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkOffScreenImage.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkPanelPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkPopupMenuPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkScrollPanePeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkScrollbarPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkTextAreaPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkTextComponentPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkTextFieldPeer.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkToolkit.lo \
-@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkWindowPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.lo \
-@GTK_CAIRO_FALSE@jni/gtk-peer/gthread-jni.lo jni/classpath/jcl.lo \
-@GTK_CAIRO_FALSE@jni/classpath/jnilink.lo jni/classpath/native_state.lo \
-@GTK_CAIRO_FALSE@jni/classpath/primlib.lo
@GTK_CAIRO_TRUE@lib_gnu_java_awt_peer_gtk_la_OBJECTS = \
@GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GdkClasspathFontPeer.lo \
@GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.lo \
@GTK_CAIRO_TRUE@jni/gtk-peer/gthread-jni.lo jni/classpath/jcl.lo \
@GTK_CAIRO_TRUE@jni/classpath/jnilink.lo jni/classpath/native_state.lo \
@GTK_CAIRO_TRUE@jni/classpath/primlib.lo
+@GTK_CAIRO_FALSE@lib_gnu_java_awt_peer_gtk_la_OBJECTS = \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkClasspathFontPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkFontMetrics.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkGlyphVector.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkGraphics.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkGraphics2D.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkPixbufDecoder.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkArg.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkArgList.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkButtonPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCanvasPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCheckboxPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkChoicePeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkClipboard.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkComponentPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkContainerPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkDialogPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkFileDialogPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkFontPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkFramePeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkGenericPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkImage.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkImagePainter.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkLabelPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkListPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMainThread.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuBarPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuComponentPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuItemPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkOffScreenImage.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkPanelPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkPopupMenuPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkScrollPanePeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkScrollbarPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkTextAreaPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkTextComponentPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkTextFieldPeer.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkToolkit.lo \
+@GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkWindowPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.lo \
+@GTK_CAIRO_FALSE@jni/gtk-peer/gthread-jni.lo jni/classpath/jcl.lo \
+@GTK_CAIRO_FALSE@jni/classpath/jnilink.lo jni/classpath/native_state.lo \
+@GTK_CAIRO_FALSE@jni/classpath/primlib.lo
lib_gnu_awt_xlib_la_OBJECTS = gnu/gcj/xlib/natClip.lo \
gnu/gcj/xlib/natColormap.lo gnu/gcj/xlib/natDisplay.lo \
gnu/gcj/xlib/natDrawable.lo gnu/gcj/xlib/natFont.lo \
.deps/javax/swing/SingleSelectionModel.P \
.deps/javax/swing/SizeRequirements.P .deps/javax/swing/SizeSequence.P \
.deps/javax/swing/SwingConstants.P .deps/javax/swing/SwingUtilities.P \
-.deps/javax/swing/Timer.P .deps/javax/swing/ToggleButtonModel.P \
-.deps/javax/swing/ToolTipManager.P .deps/javax/swing/UIDefaults.P \
-.deps/javax/swing/UIManager.P \
+.deps/javax/swing/Timer.P .deps/javax/swing/ToolTipManager.P \
+.deps/javax/swing/UIDefaults.P .deps/javax/swing/UIManager.P \
.deps/javax/swing/UnsupportedLookAndFeelException.P \
.deps/javax/swing/ViewportLayout.P .deps/javax/swing/WindowConstants.P \
.deps/javax/swing/border/AbstractBorder.P \
.deps/javax/swing/plaf/ToolTipUI.P .deps/javax/swing/plaf/TreeUI.P \
.deps/javax/swing/plaf/UIResource.P .deps/javax/swing/plaf/ViewportUI.P \
.deps/javax/swing/plaf/basic/BasicBorders.P \
+.deps/javax/swing/plaf/basic/BasicButtonListener.P \
.deps/javax/swing/plaf/basic/BasicButtonUI.P \
.deps/javax/swing/plaf/basic/BasicCheckBoxUI.P \
-.deps/javax/swing/plaf/basic/BasicDefaults.P \
.deps/javax/swing/plaf/basic/BasicGraphicsUtils.P \
.deps/javax/swing/plaf/basic/BasicIconFactory.P \
.deps/javax/swing/plaf/basic/BasicLabelUI.P \
.deps/javax/swing/plaf/basic/BasicOptionPaneUI.P \
.deps/javax/swing/plaf/basic/BasicPanelUI.P \
.deps/javax/swing/plaf/basic/BasicRadioButtonUI.P \
+.deps/javax/swing/plaf/basic/BasicRootPaneUI.P \
.deps/javax/swing/plaf/basic/BasicScrollPaneUI.P \
+.deps/javax/swing/plaf/basic/BasicSliderUI.P \
.deps/javax/swing/plaf/basic/BasicSplitPaneDivider.P \
.deps/javax/swing/plaf/basic/BasicSplitPaneUI.P \
.deps/javax/swing/plaf/basic/BasicTabbedPaneUI.P \
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 \
- ./acinclude.m4 ./aclocal.m4 ./glib-2.0.m4 ./gtk-2.0.m4 \
- ./libart.m4
+ ./acinclude.m4 ./aclocal.m4 ./pkg.m4
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
all-recursive install-data-recursive install-exec-recursive \
installdirs-recursive install-recursive uninstall-recursive \
check-recursive installcheck-recursive info-recursive dvi-recursive:
- @set fnord $(MAKEFLAGS); amf=$$2; \
+ @set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
- @set fnord $(MAKEFLAGS); amf=$$2; \
+ @set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
rev="$$subdir $$rev"; \
- test "$$subdir" = "." && dot_seen=yes; \
+ test "$$subdir" != "." || dot_seen=yes; \
done; \
test "$$dot_seen" = "no" && rev=". $$rev"; \
target=`echo $@ | sed s/-recursive//`; \
setFont (new Font("SansSerif", Font.PLAIN, 12));
setTransform (new AffineTransform ());
setStroke (new BasicStroke ());
- setRenderingHints (new HashMap ());
+ setRenderingHints (getDefaultHints());
stateStack = new Stack();
}
setFont (new Font("SansSerif", Font.PLAIN, 12));
setTransform (new AffineTransform ());
setStroke (new BasicStroke ());
- setRenderingHints (new HashMap ());
+ setRenderingHints (getDefaultHints());
stateStack = new Stack ();
}
String text;
/** The vertical alignment of the button's text and icon. */
- int vert_align = CENTER;
+ int vert_align;
/** The horizontal alignment of the button's text and icon. */
- int hori_align = CENTER;
+ int hori_align;
/** The horizontal position of the button's text relative to its icon. */
- int hori_text_pos = CENTER;
+ int hori_text_pos;
/** The vertical position of the button's text relative to its icon. */
- int vert_text_pos = CENTER;
+ int vert_text_pos;
/** Whether or not the button paints its border. */
- boolean paint_border = true;
+ boolean paint_border;
/** Whether or not the button paints its focus state. */
boolean paint_focus;
model.addChangeListener(changeListener);
model.addItemListener(itemListener);
+ hori_align = CENTER;
+ hori_text_pos = TRAILING;
+ vert_align = CENTER;
+ vert_text_pos = CENTER;
+ paint_border = true;
+ content_area_filled = true;
+
setAlignmentX(LEFT_ALIGNMENT);
setAlignmentY(CENTER_ALIGNMENT);
+
addFocusListener(new ButtonFocusListener());
updateUI();
}
* button. The concrete button type holding this state may be a a "toggle"
* button (checkbox, radio button) or a "push" button (menu button, button).
*
- * Any change to the model's properties will trigger the firing of a
- * ChangeEvent.
+ * If the model is disabled, only the "selected" property can be changed.
+ * An attempt to change the "armed", "rollover" or "pressed" properties
+ * while the model is disabled will be blocked.
*
- * Any change to the "pressed" property will trigger the firing of an
- * ItemEvent in addition to ChangeEvent.
+ * Any successful (non-blocked) change to the model's properties will
+ * trigger the firing of a ChangeEvent.
*
- * Any change which causes the enabled, armed and pressed properties to
- * simultaneously become <code>true</code> will trigger the firing of an
- * ActionEvent in addition to the ChangeEvent.
+ * Any change to the "selected" property will trigger the firing of an
+ * ItemEvent in addition to ChangeEvent. This is true whether the model is
+ * enabled or not.
+ *
+ * One other state change is special: the transition from "enabled, armed
+ * and pressd" to "enabled, armed and not-pressed". This is considered the
+ * "trailing edge" of a successful mouse click, and therefore fires an
+ * ActionEvent in addition to a ChangeEvent.
+ *
+ * In all other respects this class is just a container of boolean flags.
*
* @author Graydon Hoare (graydon&064;redhat.com)
*/
be pressed or selected unless they are enabled. */
static int ENABLED = 2;
- /** State constant indicating that the button has been fully
- pressed. This usually happens when a user has released the mouse over a
- previously "armed" button. */
+ /** State constant indicating that the user is holding down the button.
+ When this transitions from true to false, an ActionEvent may be fired,
+ depending on the value of the "armed" property.*/
static int PRESSED = 4;
/** State constant indicating that the mouse is currently positioned over
/** The group this model belongs to. Only one button in a group may be
selected at any given time. */
- ButtonGroup group;
-
+ ButtonGroup group;
+
/** The key code (one of {@link java.awt.event.KeyEvent} VK_*) used to
press this button via a keyboard interface. */
int mnemonic;
public DefaultButtonModel()
{
- stateMask = 0;
+ stateMask = ENABLED;
+ mnemonic = java.awt.event.KeyEvent.VK_UNDEFINED;
listenerList = new EventListenerList();
changeEvent = new ChangeEvent(this);
}
* @param l The listener to add
*/
public void addActionListener(ActionListener l)
- {
+ {
listenerList.add(ActionListener.class, l);
- }
-
+ }
+
/**
* Remove an ActionListener to the model. Usually only called to
* unsubscribe an AbstractButton's listener to the model.
if (oldstate == newstate)
return;
+ if ((stateflag != SELECTED)
+ && (stateflag != ENABLED)
+ && (stateMask & ENABLED) == 0)
+ return;
+
stateMask = newstate;
fireStateChanged(changeEvent);
- if ((newstate & ENABLED) == 0)
- return;
-
if ((oldstate & SELECTED) == 0
&& (newstate & SELECTED) == SELECTED)
fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
&& (newstate & SELECTED) == 0)
fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
null, ItemEvent.DESELECTED));
-
- else if ((newstate & ARMED) == ARMED
- && (newstate & PRESSED) == PRESSED)
- {
+
+ else if (((oldstate & ARMED) == ARMED && (oldstate & PRESSED) == PRESSED)
+ &&
+ ((newstate & ARMED) == ARMED && (newstate & PRESSED) == 0))
+ {
fireActionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
actionCommand));
- stateMask = stateMask & ~(PRESSED | ARMED);
- }
-
+ }
}
-
+
/**
* Get the value of the model's "armed" property.
*
* @return The current "armed" property
*/
public boolean isArmed()
- {
+ {
return (stateMask & ARMED) == ARMED;
- }
-
+ }
+
/**
* Set the value of the model's "armed" property.
*
* @return The current "mnemonic" property
*/
public int getMnemonic()
- {
+ {
return mnemonic;
}
* @param key The new "mnemonic" property
*/
public void setMnemonic(int key)
- {
+ {
if (mnemonic != key)
- {
+ {
mnemonic = key;
fireStateChanged(changeEvent);
- }
+ }
}
-
+
/**
* Set the value of the model's "actionCommand" property. This property
* is used as the "command" property of the {@link ActionEvent} fired
* @param s The new "actionCommand" property.
*/
public void setActionCommand(String s)
- {
+ {
if (actionCommand != s)
{
actionCommand = s;
fireStateChanged(changeEvent);
- }
- }
-
+ }
+ }
+
/**
* Set the value of the model's "actionCommand" property. This property
* is used as the "command" property of the {@link ActionEvent} fired
* @return The current "actionCommand" property
*/
public String getActionCommand()
- {
+ {
return actionCommand;
}
{
group = g;
fireStateChanged(changeEvent);
- }
- }
+ }
+ }
}
public String getUIClassID()
{
//Returns a string that specifies the name of the L&F class that renders this component.
- return "JButton";
+ return "ButtonUI";
}
public boolean isDefaultButton()
public JCheckBox(String text, Icon icon)
{
super(text, icon);
+ paint_border = false;
+ content_area_filled = false;
}
public String getUIClassID()
{
//Returns a string that specifies the name of the L&F class that renders this component.
- return "JCheckBox";
+ return "CheckBoxUI";
}
protected String paramString()
if (use_double_buffer)
{
- im = createImage (r.width, r.height);
- g2 = im.getGraphics ();
- g2.clearRect (0, 0, r.width, r.height);
+ im = createImage (r.width, r.height);
+ g2 = im.getGraphics ();
+ if (this.getBackground() != null)
+ {
+ Color save = g2.getColor();
+ g2.setColor(this.getBackground());
+ g2.fillRect (0, 0, r.width, r.height);
+ g2.setColor(save);
+ }
+ else
+ g2.clearRect(0, 0, r.width, r.height);
}
paintBorder(g2);
// Returns a string representation of this JComponent.
return "JComponent";
}
- protected void processComponentKeyEvent(KeyEvent e)
- {
- // Process any key events that the component itself recognizes.
- //System.out.println("COMP_KEY-EVENT: " + e);
- }
- protected void processFocusEvent(FocusEvent e)
- {
- // Processes focus events occurring on this component by dispatching them to any registered FocusListener objects.
- //System.out.println("FOCUS_EVENT: " + e);
- }
-
- protected void processKeyEvent(KeyEvent e)
- {
- // Override processKeyEvent to process events protected
- //System.out.println("KEY-EVENT: " + e);
- }
-
- public void processMouseMotionEvent(MouseEvent e)
- {
- // Processes mouse motion events occurring on this component by dispatching them to any registered MouseMotionListener objects.
- //System.out.println("COMP_MOUSE-EVENT: " + e + ", MEMORY = " + Runtime.getRuntime().freeMemory());
- }
public void registerKeyboardAction(ActionListener anAction,
KeyStroke aKeyStroke,
public String getUIClassID()
{
/// Return the UIDefaults key used to look up the name of the swing.
- return "JComponent";
+ return "ComponentUI";
}
protected void setUI(ComponentUI newUI)
{ return super.getText(); }
public String getUIClassID()
- { return "JEditorPane"; }
+ { return "EditorPaneUI"; }
public boolean isFocusCycleRoot()
{ return focus_root; }
package javax.swing;
+import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
protected void frameInit()
{
super.setLayout(new BorderLayout(1, 1));
+ enableEvents(AWTEvent.WINDOW_EVENT_MASK);
getRootPane(); // will do set/create
}
protected void processWindowEvent(WindowEvent e)
{
- // System.out.println("PROCESS_WIN_EV-1: " + e);
super.processWindowEvent(e);
- // System.out.println("PROCESS_WIN_EV-2: " + e);
switch (e.getID())
{
case WindowEvent.WINDOW_CLOSING:
{
case EXIT_ON_CLOSE:
{
- System.out.println("user requested exit on close");
System.exit(1);
break;
}
case DISPOSE_ON_CLOSE:
{
- System.out.println("user requested dispose on close");
dispose();
break;
}
{ return text; }
public String getUIClassID()
- { return "JLabel"; }
+ { return "LabelUI"; }
public int getVerticalAlignment()
{
public String getUIClassID()
{
- return "JList";
+ return "ListUI";
}
{ return val; }
public String getUIClassID()
- { return "JOptionPane"; }
+ { return "OptionPaneUI"; }
public void setUI(OptionPaneUI ui) {
}
public String getUIClassID()
- { return "JPanel"; }
+ { return "PanelUI"; }
public void setUI(PanelUI ui) {
/**
* uiClassID
*/
- private static final String uiClassID = "PasswordFIeldUI";
+ private static final String uiClassID = "PasswordFieldUI";
/**
* echoChar. Default is 0
public JRadioButton(String text, Icon icon)
{
super(text, icon);
+ paint_border = false;
+ content_area_filled = false;
}
public String getUIClassID()
{
//Returns a string that specifies the name of the L&F class that renders this component.
- return "JRadioButton";
+ return "RadioButtonUI";
}
protected String paramString()
public Dimension preferredLayoutSize ( Container c )
{
Dimension p = super.preferredLayoutSize(c);
- System.out.println(" PREF-SIZE from RootLayout = " + p);
return p;
}
}
/********************************************************/
public String getUIClassID()
- { return "JPanel"; }
+ { return "RootPaneUI"; }
void setJMenuBar(JMenuBar m)
JRootPane()
{
setLayout(createRootLayout());
-
+ setBackground(UIManager.getColor("control"));
getGlassPane();
getLayeredPane();
getContentPane();
public String getUIClassID()
{
//Returns a string that specifies the name of the L&F class that renders this component.
- return "JScrollPane";
+ return "ScrollPaneUI";
}
public JViewport getViewport()
}
public String getUIClassID()
- { return "JTabbedPane"; }
+ { return "TabbedPaneUI"; }
public void setUI(TabbedPaneUI ui) {
public class JToggleButton extends AbstractButton implements Accessible
{
- public JToggleButton()
- {
- this(null, null);
- }
- public JToggleButton(Action a)
- {
- this();
- setAction(a);
- }
- public JToggleButton(Icon icon)
- {
- this(null, icon);
- }
-
- public JToggleButton(String text)
+ public class ToggleButtonModel extends DefaultButtonModel
+ {
+ public void setPressed(boolean b)
{
- this(text, null);
- }
+ if (! isEnabled())
+ return;
- public JToggleButton(String text, Icon icon)
- {
- this(text, icon, false);
+ super.setPressed(b);
+
+ // setPressed(false) == mouse release on us,
+ // if we were armed, we flip the selected state.
+ if (!b && isArmed())
+ setSelected(! isSelected());
}
+ }
+
+
+ public JToggleButton()
+ {
+ this(null, null);
+ }
+ public JToggleButton(Action a)
+ {
+ this();
+ setAction(a);
+ }
+
+ public JToggleButton(Icon icon)
+ {
+ this(null, icon);
+ }
+
+ public JToggleButton(String text)
+ {
+ this(text, null);
+ }
+
+ public JToggleButton(String text, Icon icon)
+ {
+ this(text, icon, false);
+ }
- public JToggleButton (String text, Icon icon, boolean selected)
- {
- super(text, icon);
+ public JToggleButton (String text, Icon icon, boolean selected)
+ {
+ super(text, icon);
- // Create the model
- setModel(new ToggleButtonModel());
-
- model.setSelected(selected);
- }
+ hori_align = LEADING;
+ setModel(new ToggleButtonModel());
+ model.setSelected(selected);
+ }
- public AccessibleContext getAccessibleContext()
- {
- //Gets the AccessibleContext associated with this JToggleButton.
- return null;
- }
+ public AccessibleContext getAccessibleContext()
+ {
+ //Gets the AccessibleContext associated with this JToggleButton.
+ return null;
+ }
- public String getUIClassID()
- {
- //Returns a string that specifies the name of the L&F class that renders this component.
- return "JToggleButton";
- }
+ public String getUIClassID()
+ {
+ //Returns a string that specifies the name of the L&F class that renders this component.
+ return "ToggleButtonUI";
+ }
- protected String paramString()
- {
- return "JToggleButton";
- }
+ protected String paramString()
+ {
+ return "JToggleButton";
+ }
- public void updateUI()
- {
- ButtonUI b = (ButtonUI)UIManager.getUI(this);
- setUI(b);
- }
+ public void updateUI()
+ {
+ ButtonUI b = (ButtonUI)UIManager.getUI(this);
+ setUI(b);
+ }
}
public String getUIClassID()
{
- return "JTree";
+ return "TreeUI";
}
public String getUIClassID()
{
- return "JViewport";
+ return "ViewportUI";
}
public void updateUI()
/**
* Calculates the portion of the component's bounds which is inside the
* component's border insets. This area is usually the area a component
- * should confine its painting to.
+ * should confine its painting to. The coordinates are returned in terms
+ * of the <em>component's</em> coordinate system, where (0,0) is the
+ * upper left corner of the component's bounds.
*
* @param c The component to measure the bounds of
* @param r A Rectangle to store the return value in, or
*/
public static Rectangle calculateInnerArea(JComponent c, Rectangle r)
{
- return calculateInsetArea(c.getBounds(), c.getInsets(), r);
+ Rectangle b = getLocalBounds(c);
+ return calculateInsetArea(b, c.getInsets(), r);
}
/**
public static Rectangle getLocalBounds(Component aComponent)
{
Rectangle bounds = aComponent.getBounds();
- return new Rectangle(0, 0, bounds.x, bounds.y);
+ return new Rectangle(0, 0, bounds.width, bounds.height);
}
/**
((JComponent)comp).updateUI();
}
+
/**
* <p>Layout a "compound label" consisting of a text string and an icon
* which is to be placed near the rendered text. Once the text and icon
*
* <p>The position values control where the text is placed relative to
* the icon. The horizontal position value should be one of the constants
- * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>. The
- * vertical position value should be one fo the constants
- * <code>TOP</code>, <code>BOTTOM</code>, <code>CENTER</code>.</p>
+ * <code>LEADING</code>, <code>TRAILING</code>, <code>LEFT</code>,
+ * <code>RIGHT</code> or <code>CENTER</code>. The vertical position value
+ * should be one fo the constants <code>TOP</code>, <code>BOTTOM</code>
+ * or <code>CENTER</code>.</p>
*
* <p>The text-icon gap value controls the number of pixels between the
* icon and the text.</p>
* <code>CENTER</code>.</p>
*
* <p>If the <code>LEADING</code> or <code>TRAILING</code> constants are
- * given for horizontal alignment, they are interpreted relative to the
- * provided component's orientation property, a constant in the {@link
- * java.awt.ComponentOrientation} class. For example, if the component's
- * orientation is <code>LEFT_TO_RIGHT</code>, then the
- * <code>LEADING</code> alignment is a synonym for <code>LEFT</code> and
- * the <code>TRAILING</code> alignment is a synonym for
+ * given for horizontal alignment or horizontal text position, they are
+ * interpreted relative to the provided component's orientation property,
+ * a constant in the {@link java.awt.ComponentOrientation} class. For
+ * example, if the component's orientation is <code>LEFT_TO_RIGHT</code>,
+ * then the <code>LEADING</code> value is a synonym for <code>LEFT</code>
+ * and the <code>TRAILING</code> value is a synonym for
* <code>RIGHT</code></p>
*
* <p>If the text and icon are equal to or larger than the view
* @return The string of characters, possibly truncated with an elipsis,
* which is laid out in this label
*/
+
public static String layoutCompoundLabel(JComponent c,
FontMetrics fm,
String text,
int textIconGap)
{
+ // Fix up the orientation-based horizontal positions.
+
+ if (horizontalTextPosition == LEADING)
+ {
+ if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
+ horizontalTextPosition = RIGHT;
+ else
+ horizontalTextPosition = LEFT;
+ }
+ else if (horizontalTextPosition == TRAILING)
+ {
+ if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
+ horizontalTextPosition = LEFT;
+ else
+ horizontalTextPosition = RIGHT;
+ }
+
+ // Fix up the orientation-based alignments.
+
+ if (horizontalAlignment == LEADING)
+ {
+ if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
+ horizontalAlignment = RIGHT;
+ else
+ horizontalAlignment = LEFT;
+ }
+ else if (horizontalAlignment == TRAILING)
+ {
+ if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
+ horizontalAlignment = LEFT;
+ else
+ horizontalAlignment = RIGHT;
+ }
+
+ return layoutCompoundLabel(fm, text, icon,
+ verticalAlignment,
+ horizontalAlignment,
+ verticalTextPosition,
+ horizontalTextPosition,
+ viewR, iconR, textR, textIconGap);
+ }
+
+ /**
+ * <p>Layout a "compound label" consisting of a text string and an icon
+ * which is to be placed near the rendered text. Once the text and icon
+ * are laid out, the text rectangle and icon rectangle parameters are
+ * altered to store the calculated positions.</p>
+ *
+ * <p>The size of the text is calculated from the provided font metrics
+ * object. This object should be the metrics of the font you intend to
+ * paint the label with.</p>
+ *
+ * <p>The position values control where the text is placed relative to
+ * the icon. The horizontal position value should be one of the constants
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>. The
+ * vertical position value should be one fo the constants
+ * <code>TOP</code>, <code>BOTTOM</code> or <code>CENTER</code>.</p>
+ *
+ * <p>The text-icon gap value controls the number of pixels between the
+ * icon and the text.</p>
+ *
+ * <p>The alignment values control where the text and icon are placed, as
+ * a combined unit, within the view rectangle. The horizontal alignment
+ * value should be one of the constants <code>LEFT</code>, <code>RIGHT</code> or
+ * <code>CENTER</code>. The vertical alignment valus should be one of the
+ * constants <code>TOP</code>, <code>BOTTOM</code> or
+ * <code>CENTER</code>.</p>
+ *
+ * <p>If the text and icon are equal to or larger than the view
+ * rectangle, the horizontal and vertical alignment values have no
+ * affect.</p>
+ *
+ * <p>Note that this method does <em>not</em> know how to deal with
+ * horizontal alignments or positions given as <code>LEADING</code> or
+ * <code>TRAILING</code> values. Use the other overloaded variant of this
+ * method if you wish to use such values.
+ *
+ * @param fm The font metrics used to measure the text
+ * @param text The text to place in the compound label
+ * @param icon The icon to place next to the text
+ * @param verticalAlignment The vertical alignment of the label relative
+ * to its component
+ * @param horizontalAlignment The horizontal alignment of the label
+ * relative to its component
+ * @param verticalTextPosition The vertical position of the label's text
+ * relative to its icon
+ * @param horizontalTextPosition The horizontal position of the label's
+ * text relative to its icon
+ * @param viewR The view rectangle, specifying the area which layout is
+ * constrained to
+ * @param iconR A rectangle which is modified to hold the laid-out
+ * position of the icon
+ * @param textR A rectangle which is modified to hold the laid-out
+ * position of the text
+ * @param textIconGap The distance between text and icon
+ *
+ * @return The string of characters, possibly truncated with an elipsis,
+ * which is laid out in this label
+ */
+
+ public static String layoutCompoundLabel(FontMetrics fm,
+ String text,
+ Icon icon,
+ int verticalAlignment,
+ int horizontalAlignment,
+ int verticalTextPosition,
+ int horizontalTextPosition,
+ Rectangle viewR,
+ Rectangle iconR,
+ Rectangle textR,
+ int textIconGap)
+ {
+
// Work out basic height and width.
if (icon == null)
iconR.width = 0;
iconR.height = 0;
}
- else
+ else
{
iconR.width = icon.getIconWidth();
iconR.height = icon.getIconWidth();
break;
}
- // Fix up the orientation-based alignments.
-
- if (horizontalAlignment == LEADING)
- {
- if (c.getComponentOrientation() == ComponentOrientation.LEFT_TO_RIGHT)
- horizontalAlignment = LEFT;
- else if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
- horizontalAlignment = RIGHT;
- }
- else if (horizontalAlignment == TRAILING)
- {
- if (c.getComponentOrientation() == ComponentOrientation.LEFT_TO_RIGHT)
- horizontalAlignment = RIGHT;
- else if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
- horizontalAlignment = LEFT;
- }
-
// The two rectangles are laid out correctly now, but only assuming
// that their upper left corner is at (0,0). If we have any alignment other
// than TOP and LEFT, we need to adjust them.
/**
* UIDefaults is a database where all settings and interface bindings are
* stored into. An PLAF implementation fills one of these (see for example
- * plaf/basic/BasicDefaults.java) with "JButton" -> new BasicButtonUI().
+ * plaf/basic/BasicLookAndFeel.java) with "ButtonUI" -> new BasicButtonUI().
*
* @author Ronald Veldema (rveldema@cs.vu.nl)
*/
import java.awt.Stroke;
import java.awt.Insets;
import java.awt.Rectangle;
+import java.awt.event.FocusListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractButton;
+import javax.swing.ButtonModel;
+import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
+import javax.swing.UIDefaults;
+import javax.swing.UIManager;
+import javax.swing.event.MouseInputListener;
import javax.swing.plaf.ButtonUI;
import javax.swing.plaf.ComponentUI;
{
/** A constant used to pad out elements in the button's layout and
preferred size calculations. */
- int gap = 3;
+ int defaultTextIconGap = 3;
- /** The color that text will be painted when the button is enabled */
- Color textColor;
-
- /** The color that text will be painted when the button is disabled */
- Color disabledTextColor;
-
- /** The color that the button's background will be painted when the
- button is pressed. */
- Color pressedBackgroundColor;
-
- /** The color that the button's background will be painted when the
- button is not pressed. */
- Color normalBackgroundColor;
+ /** A constant added to the defaultTextIconGap to adjust the text
+ within this particular button. */
+ int defaultTextShiftOffset = 0;
/**
* Factory method to create an instance of BasicButtonUI for a given
*
* @return A new UI capable of drawing the component
*/
- public static ComponentUI createUI(final JComponent c)
- {
- return new BasicButtonUI();
- }
+ public static ComponentUI createUI(final JComponent c)
+ {
+ return new BasicButtonUI();
+ }
- /**
- * Helper class which listens to a button's focus events and disarms the
- * button's model when focus is lost.
- */
- private static class FocusUIListener extends FocusAdapter
+ public int getDefaultTextIconGap(AbstractButton b)
{
- /** Button to listen to focus events from */
- AbstractButton button;
-
- /**
- * Creates a new FocusUIListener object.
- *
- * @param b The button to listen to
- */
- FocusUIListener(AbstractButton b)
- {
- button = b;
- }
-
- /**
- * Called when the button loses focus.
- *
- * @param event The loss of focus event.
- */
- public void focusLost(FocusEvent event)
- {
- // System.err.println("ButtonUI :: lost focus -- disarming");
- button.getModel().setArmed(false);
- }
+ return defaultTextIconGap;
}
- /**
- * A helper class which interprets mouse events as
- * state changes to the button's underlying model.
- */
- private static class ButtonUIListener extends MouseAdapter
+ protected void installDefaults(AbstractButton b)
+ {
+ UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ b.setForeground(defaults.getColor("Button.foreground"));
+ b.setBackground(defaults.getColor("Button.background"));
+ b.setMargin(defaults.getInsets("Button.margin"));
+ b.setBorder(defaults.getBorder("Button.border"));
+ }
+
+ protected void uninstallDefaults(AbstractButton b)
+ {
+ b.setForeground(null);
+ b.setBackground(null);
+ b.setBorder(null);
+ b.setMargin(null);
+ }
+
+ protected BasicButtonListener listener;
+
+ protected BasicButtonListener createButtonListener(AbstractButton b)
+ {
+ return new BasicButtonListener();
+ }
+
+ public void installListeners(AbstractButton b)
+ {
+ listener = createButtonListener(b);
+ b.addChangeListener(listener);
+ b.addPropertyChangeListener(listener);
+ b.addFocusListener(listener);
+ b.addMouseListener(listener);
+ b.addMouseMotionListener(listener);
+ }
+
+ public void uninstallListeners(AbstractButton b)
+ {
+ b.removeChangeListener(listener);
+ b.removePropertyChangeListener(listener);
+ b.removeFocusListener(listener);
+ b.removeMouseListener(listener);
+ b.removeMouseMotionListener(listener);
+ }
+
+ protected void installKeyboardActions(AbstractButton b)
+ {
+ }
+
+ protected void uninstallKeyboardActions(AbstractButton b)
{
- /** The button to change the model of */
- AbstractButton button;
-
- /**
- * Creates a new ButtonUIListener object.
- *
- * @param b The button to change the model of
- */
- public ButtonUIListener(AbstractButton b)
- {
- button = b;
- }
-
- /**
- * Accept a mouse press event and arm the button's model.
- *
- * @param e The mouse press event to accept
- */
- public void mousePressed(MouseEvent e)
- {
- // System.err.println("ButtonUI :: mouse pressed");
- if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
- {
- // System.err.println("ButtonUI :: arming");
- button.getModel().setArmed(true);
- }
- }
-
- /**
- * Accept a mouse enter event and set the button's model's
- * "rollover" property to <code>true</code>. If the button's
- * model is currently armed and the mouse button is not held
- * down, this enter event will also disarm the model.
- *
- * @param e The mouse enter event to accept
- */
- public void mouseEntered(MouseEvent e)
- {
- // System.err.println("ButtonUI :: mouse entered");
- // System.err.println("ButtonUI :: rolling over");
- button.getModel().setRollover(true);
- if (button.getModel().isArmed()
- && (e.getModifiers() & InputEvent.BUTTON1_MASK) == 0)
- {
- // System.err.println("ButtonUI :: no button pressed -- disarming");
- button.getModel().setArmed(false);
- }
- }
-
- /**
- * Accept a mouse exit event and set the button's model's
- * "rollover" property to <code>false</code>.
- *
- * @param e The mouse exit event to accept
- */
- public void mouseExited(MouseEvent e)
- {
- // System.err.println("ButtonUI :: mouse exited");
- button.getModel().setRollover(false);
- }
-
- /**
- * Accept a mouse release event and set the button's model's
- * "pressed" property to <code>true</code>, if the model
- * is armed. If the model is not armed, ignore the event.
- *
- * @param e The mouse release event to accept
- */
- public void mouseReleased(MouseEvent e)
- {
- // System.err.println("ButtonUI :: mouse released");
- if (button.getModel().isArmed()
- && (e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
- {
- button.getModel().setPressed(true);
- }
- }
}
/**
*
* @param c The component to install the UI into
*/
- public void installUI(final JComponent c)
- {
- super.installUI(c);
-
- textColor = new Color(0,0,0);
- disabledTextColor = new Color(130, 130, 130);
- pressedBackgroundColor = new Color(150,150,150);
- pressedBackgroundColor = new Color(150,150,150);
- normalBackgroundColor = new Color(192,192,192);
-
- // this tells the border (if we have one) how to paint.
- c.setBackground(normalBackgroundColor);
- ((AbstractButton)c).setMargin (new Insets(10,10,10,10));
-
- c.addMouseListener(new ButtonUIListener((AbstractButton) c));
- c.addFocusListener(new FocusUIListener((AbstractButton) c));
+ public void installUI(final JComponent c)
+ {
+ super.installUI(c);
+ if (c instanceof AbstractButton)
+ {
+ AbstractButton b = (AbstractButton) c;
+ installDefaults(b);
+ installListeners(b);
+ installKeyboardActions(b);
+ }
}
/**
*
* @return The preferred dimensions of the component
*/
- public Dimension getPreferredSize(JComponent c)
- {
- AbstractButton b = (AbstractButton)c;
- Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, gap);
- return d;
- }
-
+ public Dimension getPreferredSize(JComponent c)
+ {
+ AbstractButton b = (AbstractButton)c;
+ Dimension d =
+ BasicGraphicsUtils.getPreferredButtonSize
+ (b, defaultTextIconGap + defaultTextShiftOffset);
+ return d;
+ }
+
+ static private Icon currentIcon(AbstractButton b)
+ {
+ Icon i = b.getIcon();
+ ButtonModel model = b.getModel();
+
+ if (model.isPressed() && b.getPressedIcon() != null)
+ i = b.getPressedIcon();
+
+ else if (model.isRollover())
+ {
+ if (b.isSelected() && b.getRolloverSelectedIcon() != null)
+ i = b.getRolloverSelectedIcon();
+ else if (b.getRolloverIcon() != null)
+ i = b.getRolloverIcon();
+ }
+
+ else if (b.isSelected())
+ {
+ if (b.isEnabled() && b.getSelectedIcon() != null)
+ i = b.getSelectedIcon();
+ else if (b.getDisabledSelectedIcon() != null)
+ i = b.getDisabledSelectedIcon();
+ }
+
+ else if (! b.isEnabled() && b.getDisabledIcon() != null)
+ i = b.getDisabledIcon();
+
+ return i;
+ }
+
/**
* Paint the component, which is an {@link AbstractButton}, according to
* its current state.
* @param g The graphics context to paint with
* @param c The component to paint the state of
*/
- public void paint(Graphics g, JComponent c)
- {
- AbstractButton b = (AbstractButton) c;
+ public void paint(Graphics g, JComponent c)
+ {
+ AbstractButton b = (AbstractButton) c;
- Rectangle tr = new Rectangle();
- Rectangle ir = new Rectangle();
- Rectangle vr = new Rectangle();
+ Rectangle tr = new Rectangle();
+ Rectangle ir = new Rectangle();
+ Rectangle vr = new Rectangle();
Rectangle br = new Rectangle();
- Font f = c.getFont();
-
- g.setFont(f);
-
- FontMetrics fm = g.getFontMetrics(f);
-
- Insets border = b.getInsets();
- Insets margin = b.getMargin();
-
- br.x = border.left;
- br.y = border.top;
- br.width = b.getWidth() - (border.right + border.left);
- br.height = b.getHeight() - (border.top + border.bottom);
-
- vr.x = br.x + margin.left;
- vr.y = br.y + margin.top;
- vr.width = br.width - (margin.right + margin.left);
- vr.height = br.height - (margin.top + margin.bottom);
-
- String text = SwingUtilities.layoutCompoundLabel(c, fm, b.getText(),
- b.getIcon(),
- b.getVerticalAlignment(),
- b.getHorizontalAlignment(),
- b.getVerticalTextPosition(),
- b.getHorizontalTextPosition(),
- vr, ir, tr, gap);
-
- if ((b.getModel().isRollover() && b.getModel().isArmed())
- || b.getModel().isSelected())
+ Font f = c.getFont();
+
+ g.setFont(f);
+
+ SwingUtilities.calculateInnerArea(b, br);
+ SwingUtilities.calculateInsetArea(br, b.getMargin(), vr);
+ String text = SwingUtilities.layoutCompoundLabel(c, g.getFontMetrics(f),
+ b.getText(),
+ currentIcon(b),
+ b.getVerticalAlignment(),
+ b.getHorizontalAlignment(),
+ b.getVerticalTextPosition(),
+ b.getHorizontalTextPosition(),
+ vr, ir, tr,
+ defaultTextIconGap
+ + defaultTextShiftOffset);
+
+ if ((b.getModel().isArmed() && b.getModel().isPressed())
+ || b.isSelected())
paintButtonPressed(g, br, c);
- else
+ else
paintButtonNormal(g, br, c);
- paintIcon(g, c, ir);
- paintText(g, c, tr, b.getText());
- paintFocus(g, c, vr, tr, ir);
- }
+ paintIcon(g, c, ir);
+ paintText(g, c, tr, b.getText());
+ paintFocus(g, c, vr, tr, ir);
+ }
/**
* Paint any focus decoration this {@link JComponent} might have. The
{
AbstractButton b = (AbstractButton) c;
if (b.hasFocus() && b.isFocusPainted())
- {
+ {
Graphics2D g2 = (Graphics2D) g;
Stroke saved_stroke = g2.getStroke();
Color saved_color = g2.getColor();
g2.setStroke(saved_stroke);
g2.setColor(saved_color);
}
- }
+ }
/**
* Paint the icon for this component. Depending on the state of the
* @param iconRect Rectangle in which the icon should be painted
*/
protected void paintIcon(Graphics g, JComponent c, Rectangle iconRect)
- {
- AbstractButton b = (AbstractButton) c;
- if (b.getIcon() != null)
- {
- int x = iconRect.x;
- int y = iconRect.y;
- b.getIcon().paintIcon(c, g, x, y);
- }
- }
+ {
+ AbstractButton b = (AbstractButton) c;
+ Icon i = currentIcon(b);
+
+ if (i != null)
+ {
+ int x = iconRect.x;
+ int y = iconRect.y;
+ i.paintIcon(c, g, x, y);
+ }
+ }
/**
* Paints the background area of an {@link AbstractButton} in the pressed
* @param b The component to paint the state of
*/
protected void paintButtonPressed(Graphics g, Rectangle area, JComponent b)
- {
- Dimension size = b.getSize();
-
- g.setColor(pressedBackgroundColor);
- g.fillRect(area.x, area.y, area.width, area.height);
- }
+ {
+ if (((AbstractButton)b).isContentAreaFilled())
+ {
+ g.setColor(b.getBackground().darker());
+ g.fillRect(area.x, area.y, area.width, area.height);
+ }
+ }
/**
* Paints the background area of an {@link AbstractButton} in the normal,
* @param b The component to paint the state of
*/
protected void paintButtonNormal(Graphics g, Rectangle area, JComponent b)
- {
- Dimension size = b.getSize();
- g.setColor(normalBackgroundColor);
- g.fillRect(area.x, area.y, area.width, area.height);
- }
+ {
+ if (((AbstractButton)b).isContentAreaFilled())
+ {
+ g.setColor(b.getBackground());
+ g.fillRect(area.x, area.y, area.width, area.height);
+ }
+ }
/**
* Paints the "text" property of an {@link AbstractButton}, using the
* @param text The text to paint
*/
protected void paintText(Graphics g, JComponent c, Rectangle textRect,
- String text)
- {
- Font f = c.getFont();
- g.setFont(f);
- FontMetrics fm = g.getFontMetrics(f);
- g.setColor(c.isEnabled() ? textColor : disabledTextColor);
- BasicGraphicsUtils.drawString(g, text,
- 0,
- textRect.x,
+ String text)
+ {
+ Font f = c.getFont();
+ g.setFont(f);
+ FontMetrics fm = g.getFontMetrics(f);
+ g.setColor(c.getForeground());
+ BasicGraphicsUtils.drawString(g, text, 0,
+ textRect.x,
textRect.y + fm.getAscent());
- }
+ }
}
package javax.swing.plaf.basic;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import javax.swing.AbstractButton;
+import javax.swing.Icon;
import javax.swing.JComponent;
+import javax.swing.UIDefaults;
+import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
public class BasicCheckBoxUI extends BasicRadioButtonUI
{
- public static ComponentUI createUI(final JComponent c) {
- return new BasicCheckBoxUI();
- }
-
-
- public void installUI(final JComponent c) {
- super.installUI(c);
- }
-
- public Dimension getPreferredSize(JComponent c)
- {
- AbstractButton b = (AbstractButton)c;
- Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, gap);
- //System.out.println("^^^^^^^^^^^^^^^^^^^^^^ BASIC-PREF="+d + ",T="+b.text);
- return d;
- }
-
- protected void paintFocus(Graphics g,
- JComponent c,
- Rectangle vr,
- Rectangle tr,
- Rectangle ir)
- {
- }
-
- protected void paintIcon(Graphics g,
- JComponent c,
- Rectangle iconRect)
- {
- }
-
- protected void paintButtonPressed(Graphics g,
- JComponent b)
- {
- Dimension size = b.getSize();
-
- g.setColor(pressedBackgroundColor);
- g.fillRect(1,1,size.width-2, size.height-2);
-
- }
-
- protected void paintButtonNormal(Graphics g,
- JComponent b)
- {
- Dimension size = b.getSize();
-
- g.setColor(normalBackgroundColor);
- g.fillRect(1,1,size.width-2, size.height-2);
-
- }
- protected void paintText(Graphics g,
- JComponent c,
- Rectangle textRect,
- String text)
- {
- // AbstractButton b = (AbstractButton) c;
-
- // System.out.println("drawing string: " + text + ", at:" + textRect);
-
- g.setColor(textColor);
- BasicGraphicsUtils.drawString(g,
- text,
- 0,
- textRect.x,
- textRect.y);
- }
+
+ public static ComponentUI createUI(final JComponent c) {
+ return new BasicCheckBoxUI();
+ }
+
+ public Icon getDefaultIcon()
+ {
+ UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ return defaults.getIcon("CheckBox.icon");
+ }
+
+ public void installUI(final JComponent c) {
+ super.installUI(c);
+ }
}
package javax.swing.plaf.basic;
import java.io.Serializable;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Polygon;
+import javax.swing.AbstractButton;
import javax.swing.Icon;
+import javax.swing.UIDefaults;
+import javax.swing.UIManager;
/**
* STUBBED
*/
{
static final long serialVersionUID = 5605588811185324383L;
+ static private class DummyIcon
+ implements Icon
+ {
+ public int getIconHeight() { return 10; }
+ public int getIconWidth() { return 10; }
+ public void paintIcon(Component c, Graphics g, int x, int y)
+ {
+ Color save = g.getColor();
+ g.setColor(c.getForeground());
+ g.drawRect(x, y, 10, 10);
+ g.setColor(save);
+ }
+ }
+
+
public BasicIconFactory()
{
}
public static Icon getMenuItemCheckIcon()
{
- return null;
+ return new DummyIcon();
}
public static Icon getMenuItemArrowIcon()
{
- return null;
+ return new DummyIcon();
}
public static Icon getMenuArrowIcon()
{
- return null;
+ return new DummyIcon();
}
+
public static Icon getCheckBoxIcon()
{
- return null;
+ return new Icon()
+ {
+ public int getIconHeight()
+ {
+ return 10;
+ }
+ public int getIconWidth()
+ {
+ return 10;
+ }
+ public void paintIcon(Component c, Graphics g, int x, int y)
+ {
+ if (c instanceof AbstractButton)
+ {
+ UIDefaults defaults;
+ defaults = UIManager.getLookAndFeelDefaults();
+ Color hi = defaults.getColor("CheckBox.highlight");
+ Color low = defaults.getColor("CheckBox.darkShadow");
+ Color sel = defaults.getColor("CheckBox.foreground");
+ Color dim = defaults.getColor("CheckBox.shadow");
+ Polygon check = new Polygon(new int[] {x+3, x+3, x+8},
+ new int[] {y+5, y+9, y+3}, 3);
+ AbstractButton b = (AbstractButton) c;
+ Color saved = g.getColor();
+ if (b.isEnabled())
+ {
+ g.setColor(low);
+ g.drawRect(x, y, 10, 10);
+ g.setColor(hi);
+ g.drawRect(x+1, y+1, 10, 10);
+ if (b.isSelected())
+ {
+ g.setColor(sel);
+ if (b.isSelected())
+ {
+ g.drawLine(x+3, y+5, x+3, y+8);
+ g.drawLine(x+4, y+5, x+4, y+8);
+ g.drawLine(x+3, y+8, x+8, y+3);
+ g.drawLine(x+4, y+8, x+8, y+3);
+ }
+ }
+ }
+ else
+ {
+ g.setColor(hi);
+ g.drawRect(x, y, 10, 10);
+ if (b.isSelected())
+ {
+ g.drawLine(x+3, y+5, x+3, y+9);
+ g.drawLine(x+3, y+9, x+8, y+3);
+ }
+ }
+ g.setColor(saved);
+ }
+ }
+ };
}
+
public static Icon getRadioButtonIcon()
{
- return null;
+ return new Icon()
+ {
+ public int getIconHeight()
+ {
+ return 12;
+ }
+ public int getIconWidth()
+ {
+ return 12;
+ }
+ public void paintIcon(Component c, Graphics g, int x, int y)
+ {
+ UIDefaults defaults;
+ defaults = UIManager.getLookAndFeelDefaults();
+ Color hi = defaults.getColor("RadioButton.highlight");
+ Color low = defaults.getColor("RadioButton.darkShadow");
+ Color sel = defaults.getColor("RadioButton.foreground");
+ Color dim = defaults.getColor("RadioButton.shadow");
+
+ if (c instanceof AbstractButton)
+ {
+ AbstractButton b = (AbstractButton) c;
+ Color saved = g.getColor();
+ if (b.isEnabled())
+ {
+ g.setColor(low);
+ g.drawOval(x, y, 12, 12);
+ g.setColor(hi);
+ g.drawOval(x+1, y+1, 12, 12);
+ if (b.isSelected())
+ {
+ g.setColor(sel);
+ g.fillOval(x+4, y+4, 6, 6);
+ }
+ }
+ else
+ {
+ g.setColor(hi);
+ g.drawOval(x, y, 12, 12);
+ if (b.isSelected())
+ g.fillOval(x+4, y+4, 6, 6);
+ }
+ g.setColor(saved);
+ }
+ }
+ };
}
public static Icon getCheckBoxMenuItemIcon()
{
- return null;
+ return new DummyIcon();
}
public static Icon getRadioButtonMenuItemIcon()
{
- return null;
+ return new DummyIcon();
}
public static Icon createEmptyFrameIcon()
{
- return null;
+ return new DummyIcon();
}
} // class BasicIconFactory
{
Object[] uiDefaults;
uiDefaults = new Object[] {
+
+ "AbstractUndoableEdit.undoText", "Undo",
+ "AbstractUndoableEdit.redoText", "Redo",
+
"Button.background", new ColorUIResource(Color.lightGray),
- "Button.border", new BorderUIResource.CompoundBorderUIResource(null,
- null),
+ "Button.border", BorderUIResource.getEtchedBorderUIResource(),
+ "Button.darkShadow", new ColorUIResource(Color.darkGray),
"Button.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
"SPACE", "pressed",
"released SPACE", "released"
}),
"Button.font", new FontUIResource("Dialog", Font.PLAIN, 12),
"Button.foreground", new ColorUIResource(Color.black),
+ "Button.highlight", new ColorUIResource(Color.white),
+ "Button.light", new ColorUIResource(Color.lightGray.brighter()),
"Button.margin", new InsetsUIResource(2, 14, 2, 14),
+ "Button.shadow", new ColorUIResource(Color.gray),
"Button.textIconGap", new Integer(4),
"Button.textShiftOffset", new Integer(0),
"CheckBox.background", new ColorUIResource(Color.lightGray),
"CheckBox.border", new BorderUIResource.CompoundBorderUIResource(null,
null),
+ "CheckBox.darkShadow", new ColorUIResource(Color.darkGray),
"CheckBox.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
"SPACE", "pressed",
"released SPACE", "released"
}),
"CheckBox.font", new FontUIResource("Dialog", Font.PLAIN, 12),
"CheckBox.foreground", new ColorUIResource(Color.black),
+ "CheckBox.highlight", new ColorUIResource(Color.white),
"CheckBox.icon", BasicIconFactory.getCheckBoxIcon(),
+ "CheckBox.light", new ColorUIResource(Color.lightGray.brighter()),
"CheckBox.margin",new InsetsUIResource(2, 2, 2, 2),
+ "CheckBox.shadow", new ColorUIResource(Color.gray),
"CheckBox.textIconGap", new Integer(4),
"CheckBox.textShiftOffset", new Integer(0),
"CheckBoxMenuItem.acceleratorFont", new FontUIResource("Dialog",
"PopupMenu.font", new FontUIResource("Dialog", Font.PLAIN, 12),
"PopupMenu.foreground", new ColorUIResource(Color.black),
"ProgressBar.background", new ColorUIResource(Color.lightGray),
- "ProgressBar.border", new BorderUIResource.LineBorderUIResource(null),
+ "ProgressBar.border", new BorderUIResource.LineBorderUIResource(Color.darkGray),
"ProgressBar.cellLength", new Integer(1),
"ProgressBar.cellSpacing", new Integer(0),
"ProgressBar.font", new FontUIResource("Dialog", Font.PLAIN, 12),
"RadioButton.background", new ColorUIResource(Color.lightGray),
"RadioButton.border", new BorderUIResource.CompoundBorderUIResource(null,
null),
+ "RadioButton.darkShadow", new ColorUIResource(Color.darkGray),
"RadioButton.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
"SPACE", "pressed",
"released SPACE", "released"
}),
"RadioButton.font", new FontUIResource("Dialog", Font.PLAIN, 12),
"RadioButton.foreground", new ColorUIResource(Color.black),
+ "RadioButton.highlight", new ColorUIResource(Color.white),
"RadioButton.icon", BasicIconFactory.getRadioButtonIcon(),
+ "RadioButton.light", new ColorUIResource(Color.lightGray.brighter()),
"RadioButton.margin", new InsetsUIResource(2, 2, 2, 2),
+ "RadioButton.shadow", new ColorUIResource(Color.gray),
"RadioButton.textIconGap", new Integer(4),
"RadioButton.textShiftOffset", new Integer(0),
"RadioButtonMenuItem.acceleratorFont", new FontUIResource("Dialog",
"Table.background", new ColorUIResource(Color.white),
"Table.focusCellBackground", new ColorUIResource(Color.white),
"Table.focusCellForeground", new ColorUIResource(Color.black),
- "Table.focusCellHighlightBorder", new BorderUIResource.LineBorderUIResource(null),
+ "Table.focusCellHighlightBorder", new BorderUIResource.LineBorderUIResource(Color.white),
"Table.font", new FontUIResource("Dialog", Font.PLAIN, 12),
"Table.foreground", new ColorUIResource(Color.black),
"Table.gridColor", new ColorUIResource(Color.gray),
"ToolBar.foreground", new ColorUIResource(Color.black),
"ToolBar.separatorSize", new DimensionUIResource(10, 10),
"ToolTip.background", new ColorUIResource(Color.white),
- "ToolTip.border", new BorderUIResource.LineBorderUIResource(null),
+ "ToolTip.border", new BorderUIResource.LineBorderUIResource(Color.lightGray),
"ToolTip.font", new FontUIResource("SansSerif", Font.PLAIN, 12),
"ToolTip.foreground", new ColorUIResource(Color.black),
"Tree.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
// XXX Don't use gif
"Tree.closedIcon", new IconUIResource(new ImageIcon("icons/TreeClosed.gif")),
"Tree.drawsFocusBorderAroundIcon", Boolean.FALSE,
- "Tree.editorBorder", new BorderUIResource.LineBorderUIResource(null),
+ "Tree.editorBorder", new BorderUIResource.LineBorderUIResource(Color.lightGray),
"Tree.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
"shift PAGE_DOWN", "scrollDownExtendSelection",
"PAGE_DOWN", "scrollDownChangeSelection",
public class BasicPanelUI extends PanelUI
{
- int gap = 3;
-
public static ComponentUI createUI(JComponent x)
{
return new BasicPanelUI();
public void installUI(JComponent c)
{
- super.installUI(c);
+ super.installUI(c);
}
}
package javax.swing.plaf.basic;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Rectangle;
import javax.swing.AbstractButton;
+import javax.swing.Icon;
import javax.swing.JComponent;
+import javax.swing.UIDefaults;
+import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
public class BasicRadioButtonUI extends BasicToggleButtonUI
{
- int large_circle_width = 20;
- int circle_width = large_circle_width - 8; // FIXME: sun == ?
-
- public static ComponentUI createUI(final JComponent c) {
- return new BasicRadioButtonUI();
- }
+ protected Icon icon;
+
+ public static ComponentUI createUI(final JComponent c) {
+ return new BasicRadioButtonUI();
+ }
+
+ public BasicRadioButtonUI()
+ {
+ icon = getDefaultIcon();
+ }
+
+ public void installUI(final JComponent c) {
+ super.installUI(c);
+ if (c instanceof AbstractButton)
+ {
+ AbstractButton b = (AbstractButton) c;
+ b.setIcon(icon);
+ }
+ }
+
+ public Icon getDefaultIcon()
+ {
+ UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ return defaults.getIcon("RadioButton.icon");
+ }
- public void installUI(final JComponent c) {
- super.installUI(c);
- }
-
- public Dimension getPreferredSize(JComponent c)
- {
- AbstractButton b = (AbstractButton)c;
- Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, gap);
-
- // and add a little something for the circles:
-
- d.width += large_circle_width;
- d.height = Math.max(large_circle_width, d.height);
-
- //System.out.println("^^^^^^^^^^^^^^^^^^^^^^ BASIC-PREF="+d + ",T="+b.text);
- return d;
- }
-
- protected void paintFocus(Graphics g,
- JComponent c,
- Rectangle vr,
- Rectangle tr,
- Rectangle ir)
- {
- }
-
- protected void paintIcon(Graphics g,
- JComponent c,
- Rectangle iconRect)
- {
- }
-
- protected void paintButtonPressed(Graphics g,
- JComponent b)
- {
- Dimension size = b.getSize();
-
- paintButtonNormal(g, b);
-
- int x = gap;
- int y = gap;
-
- int diffp = 2;
- int diff = 3;
-
- g.setColor(textColor);
- g.fillArc(x+diffp, y+diffp,
- circle_width-diff, circle_width-diff,
- 0, 360);
- }
-
- protected void paintButtonNormal(Graphics g,
- JComponent c)
- {
- AbstractButton b = (AbstractButton) c;
-
- Dimension size = b.getSize();
-
- g.setColor(normalBackgroundColor);
- g.fillRect(1,1,size.width-2, size.height-2);
-
- int x = gap;
- int y = gap;
-
- g.setColor(pressedBackgroundColor);
- g.drawArc(x, y,
- circle_width, circle_width,
- 0, 360);
-
- g.setColor(new Color(255,255,255));
- g.drawArc(x, y,
- circle_width+1, circle_width+1,
- 145, 160);
- }
-
- protected void paintText(Graphics g,
- JComponent c,
- Rectangle textRect,
- String text)
- {
- // AbstractButton b = (AbstractButton) c;
-
- //System.out.println("drawing string: " + text + ", " + c.isEnabled());
-
- g.setColor(c.isEnabled() ? textColor : disabledTextColor);
-
- BasicGraphicsUtils.drawString(g,
- text,
- 0,
- textRect.x + circle_width + gap,
- textRect.y);
- }
}
public static ComponentUI createUI(final JComponent c) {
return new BasicToggleButtonUI();
- }
-
-
- public void installUI(final JComponent c) {
- super.installUI(c);
- }
-
- public Dimension getPreferredSize(JComponent c)
- {
- AbstractButton b = (AbstractButton)c;
- Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, gap);
-
- //System.out.println("^^^^^^^^^^^^^^^^^^^^^^ BASIC-PREF="+d + ",T="+b.text);
- return d;
- }
-
- protected void paintFocus(Graphics g,
- JComponent c,
- Rectangle vr,
- Rectangle tr,
- Rectangle ir)
- {
- }
-
- protected void paintIcon(Graphics g,
- JComponent c,
- Rectangle iconRect)
- {
- }
-
- protected void paintButtonPressed(Graphics g,
- JComponent b)
- {
- Dimension size = b.getSize();
-
- g.setColor(pressedBackgroundColor);
- g.fillRect(1,1,size.width-2, size.height-2);
-
- }
-
- protected void paintButtonNormal(Graphics g,
- JComponent b)
- {
- Dimension size = b.getSize();
-
- g.setColor(normalBackgroundColor);
- g.fillRect(1,1,size.width-2, size.height-2);
-
- }
- protected void paintText(Graphics g,
- JComponent c,
- Rectangle textRect,
- String text)
- {
- // AbstractButton b = (AbstractButton) c;
-
- // System.out.println("drawing string: " + text + ", at:" + textRect);
-
- g.setColor(textColor);
-
- BasicGraphicsUtils.drawString(g,
- text,
- 0,
- textRect.x,
- textRect.y);
- }
+ }
}
package javax.swing.plaf.metal;
import javax.swing.UIDefaults;
-import javax.swing.plaf.basic.BasicDefaults;
import javax.swing.plaf.basic.BasicLookAndFeel;
public class MetalLookAndFeel extends BasicLookAndFeel
public UIDefaults getDefaults()
{
if (LAF_defaults == null)
- LAF_defaults = new BasicDefaults();
+ LAF_defaults = super.getDefaults();
// Returns the default values for this look and feel.
return LAF_defaults;
public String getUIClassID()
{
// Returns a string that specifies the name of the l&f class that renders this component.
- return "JTextComponent";
+ return "TextComponentUI";
}
public int getVerticalAlignment()
{
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
{
struct graphics *g;
+ GdkGCValues saved;
g = (struct graphics *) NSA_GET_PTR (env, obj);
gdk_threads_enter ();
- gdk_window_clear_area ((GdkWindow *)g->drawable,
- x + g->x_offset, y + g->y_offset, width, height);
+ if (GDK_IS_WINDOW (g->drawable))
+ {
+ gdk_window_clear_area ((GdkWindow *)g->drawable,
+ x + g->x_offset, y + g->y_offset, width, height);
+ }
+ else
+ {
+ gdk_gc_get_values (g->gc, &saved);
+ gdk_gc_set_foreground (g->gc, &(saved.background));
+ gdk_draw_rectangle (g->drawable, g->gc, TRUE,
+ x + g->x_offset, y + g->y_offset, width, height);
+ gdk_gc_set_foreground (g->gc, &(saved.foreground));
+ }
gdk_threads_leave ();
}