Index: gnu/java/awt/peer/gtk/GdkGraphics2D.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java,v retrieving revision 1.7 diff -u -b -B -r1.7 GdkGraphics2D.java --- gnu/java/awt/peer/gtk/GdkGraphics2D.java 27 Jan 2004 09:46:25 -0000 1.7 +++ gnu/java/awt/peer/gtk/GdkGraphics2D.java 14 Feb 2004 21:41:58 -0000 @@ -158,7 +158,7 @@ setFont (new Font("SansSerif", Font.PLAIN, 12)); setTransform (new AffineTransform ()); setStroke (new BasicStroke ()); - setRenderingHints (new HashMap ()); + setRenderingHints (getDefaultHints()); stateStack = new Stack(); } @@ -174,7 +174,7 @@ setFont (new Font("SansSerif", Font.PLAIN, 12)); setTransform (new AffineTransform ()); setStroke (new BasicStroke ()); - setRenderingHints (new HashMap ()); + setRenderingHints (getDefaultHints()); stateStack = new Stack (); } Index: javax/swing/AbstractButton.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/AbstractButton.java,v retrieving revision 1.9 diff -u -b -B -r1.9 AbstractButton.java --- javax/swing/AbstractButton.java 27 Jan 2004 09:46:25 -0000 1.9 +++ javax/swing/AbstractButton.java 14 Feb 2004 21:41:59 -0000 @@ -186,19 +186,19 @@ 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; @@ -487,8 +487,16 @@ 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(); } Index: javax/swing/DefaultButtonModel.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/DefaultButtonModel.java,v retrieving revision 1.6 diff -u -b -B -r1.6 DefaultButtonModel.java --- javax/swing/DefaultButtonModel.java 27 Jan 2004 09:46:25 -0000 1.6 +++ javax/swing/DefaultButtonModel.java 14 Feb 2004 21:41:59 -0000 @@ -55,15 +55,23 @@ * 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 successful (non-blocked) change to the model's properties will + * trigger the firing of a 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. * - * Any change to the "pressed" property will trigger the firing of an - * ItemEvent in addition to ChangeEvent. - * - * Any change which causes the enabled, armed and pressed properties to - * simultaneously become true will trigger the firing of an - * ActionEvent in addition to the ChangeEvent. + * In all other respects this class is just a container of boolean flags. * * @author Graydon Hoare (graydon&064;redhat.com) */ @@ -80,9 +88,9 @@ 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 @@ -120,7 +128,8 @@ public DefaultButtonModel() { - stateMask = 0; + stateMask = ENABLED; + mnemonic = java.awt.event.KeyEvent.VK_UNDEFINED; listenerList = new EventListenerList(); changeEvent = new ChangeEvent(this); } @@ -262,13 +271,15 @@ 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, @@ -279,14 +290,13 @@ 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); } - } /** Index: javax/swing/JButton.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JButton.java,v retrieving revision 1.6 diff -u -b -B -r1.6 JButton.java --- javax/swing/JButton.java 9 Jan 2004 10:19:16 -0000 1.6 +++ javax/swing/JButton.java 14 Feb 2004 21:41:59 -0000 @@ -98,7 +98,7 @@ 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() Index: javax/swing/JCheckBox.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JCheckBox.java,v retrieving revision 1.5 diff -u -b -B -r1.5 JCheckBox.java --- javax/swing/JCheckBox.java 8 Jun 2003 11:20:06 -0000 1.5 +++ javax/swing/JCheckBox.java 14 Feb 2004 21:41:59 -0000 @@ -70,6 +70,8 @@ public JCheckBox(String text, Icon icon) { super(text, icon); + paint_border = false; + content_area_filled = false; } @@ -82,7 +84,7 @@ 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() Index: javax/swing/JComponent.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JComponent.java,v retrieving revision 1.11 diff -u -b -B -r1.11 JComponent.java --- javax/swing/JComponent.java 28 Jan 2004 19:10:07 -0000 1.11 +++ javax/swing/JComponent.java 14 Feb 2004 21:42:00 -0000 @@ -765,7 +765,15 @@ { im = createImage (r.width, r.height); g2 = im.getGraphics (); - g2.clearRect (0, 0, r.width, r.height); + 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); @@ -837,28 +845,6 @@ // 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, @@ -1044,7 +1030,7 @@ 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) Index: javax/swing/JEditorPane.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JEditorPane.java,v retrieving revision 1.8 diff -u -b -B -r1.8 JEditorPane.java --- javax/swing/JEditorPane.java 5 Feb 2004 18:50:30 -0000 1.8 +++ javax/swing/JEditorPane.java 14 Feb 2004 21:42:00 -0000 @@ -137,7 +137,7 @@ { return super.getText(); } public String getUIClassID() - { return "JEditorPane"; } + { return "EditorPaneUI"; } public boolean isFocusCycleRoot() { return focus_root; } Index: javax/swing/JFrame.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JFrame.java,v retrieving revision 1.7 diff -u -b -B -r1.7 JFrame.java --- javax/swing/JFrame.java 21 Nov 2003 22:38:40 -0000 1.7 +++ javax/swing/JFrame.java 14 Feb 2004 21:42:00 -0000 @@ -38,6 +38,7 @@ package javax.swing; +import java.awt.AWTEvent; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; @@ -105,6 +106,7 @@ protected void frameInit() { super.setLayout(new BorderLayout(1, 1)); + enableEvents(AWTEvent.WINDOW_EVENT_MASK); getRootPane(); // will do set/create } @@ -201,9 +203,7 @@ 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: @@ -212,13 +212,11 @@ { 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; } Index: javax/swing/JLabel.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JLabel.java,v retrieving revision 1.8 diff -u -b -B -r1.8 JLabel.java --- javax/swing/JLabel.java 5 Feb 2004 18:50:30 -0000 1.8 +++ javax/swing/JLabel.java 14 Feb 2004 21:42:00 -0000 @@ -148,7 +148,7 @@ { return text; } public String getUIClassID() - { return "JLabel"; } + { return "LabelUI"; } public int getVerticalAlignment() { Index: javax/swing/JList.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JList.java,v retrieving revision 1.10 diff -u -b -B -r1.10 JList.java --- javax/swing/JList.java 5 Feb 2004 18:50:30 -0000 1.10 +++ javax/swing/JList.java 14 Feb 2004 21:42:00 -0000 @@ -212,7 +212,7 @@ public String getUIClassID() { - return "JList"; + return "ListUI"; } Index: javax/swing/JOptionPane.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JOptionPane.java,v retrieving revision 1.5 diff -u -b -B -r1.5 JOptionPane.java --- javax/swing/JOptionPane.java 8 Jun 2003 11:20:07 -0000 1.5 +++ javax/swing/JOptionPane.java 14 Feb 2004 21:42:00 -0000 @@ -161,7 +161,7 @@ { return val; } public String getUIClassID() - { return "JOptionPane"; } + { return "OptionPaneUI"; } public void setUI(OptionPaneUI ui) { Index: javax/swing/JPanel.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JPanel.java,v retrieving revision 1.7 diff -u -b -B -r1.7 JPanel.java --- javax/swing/JPanel.java 9 Jan 2004 10:19:16 -0000 1.7 +++ javax/swing/JPanel.java 14 Feb 2004 21:42:00 -0000 @@ -85,7 +85,7 @@ } public String getUIClassID() - { return "JPanel"; } + { return "PanelUI"; } public void setUI(PanelUI ui) { Index: javax/swing/JPasswordField.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JPasswordField.java,v retrieving revision 1.3 diff -u -b -B -r1.3 JPasswordField.java --- javax/swing/JPasswordField.java 9 Jan 2004 10:19:16 -0000 1.3 +++ javax/swing/JPasswordField.java 14 Feb 2004 21:42:00 -0000 @@ -102,7 +102,7 @@ /** * uiClassID */ - private static final String uiClassID = "PasswordFIeldUI"; + private static final String uiClassID = "PasswordFieldUI"; /** * echoChar. Default is 0 Index: javax/swing/JRadioButton.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JRadioButton.java,v retrieving revision 1.5 diff -u -b -B -r1.5 JRadioButton.java --- javax/swing/JRadioButton.java 8 Jun 2003 11:20:07 -0000 1.5 +++ javax/swing/JRadioButton.java 14 Feb 2004 21:42:00 -0000 @@ -65,6 +65,8 @@ public JRadioButton(String text, Icon icon) { super(text, icon); + paint_border = false; + content_area_filled = false; } @@ -77,7 +79,7 @@ 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() Index: javax/swing/JRootPane.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JRootPane.java,v retrieving revision 1.6 diff -u -b -B -r1.6 JRootPane.java --- javax/swing/JRootPane.java 21 Nov 2003 22:38:41 -0000 1.6 +++ javax/swing/JRootPane.java 14 Feb 2004 21:42:00 -0000 @@ -75,7 +75,6 @@ public Dimension preferredLayoutSize ( Container c ) { Dimension p = super.preferredLayoutSize(c); - System.out.println(" PREF-SIZE from RootLayout = " + p); return p; } } @@ -97,7 +96,7 @@ /********************************************************/ public String getUIClassID() - { return "JPanel"; } + { return "RootPaneUI"; } void setJMenuBar(JMenuBar m) @@ -169,7 +168,7 @@ JRootPane() { setLayout(createRootLayout()); - + setBackground(UIManager.getColor("control")); getGlassPane(); getLayeredPane(); getContentPane(); Index: javax/swing/JScrollPane.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JScrollPane.java,v retrieving revision 1.4 diff -u -b -B -r1.4 JScrollPane.java --- javax/swing/JScrollPane.java 8 Jun 2003 14:14:50 -0000 1.4 +++ javax/swing/JScrollPane.java 14 Feb 2004 21:42:00 -0000 @@ -86,7 +86,7 @@ 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() Index: javax/swing/JTabbedPane.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JTabbedPane.java,v retrieving revision 1.6 diff -u -b -B -r1.6 JTabbedPane.java --- javax/swing/JTabbedPane.java 8 Jun 2003 11:43:14 -0000 1.6 +++ javax/swing/JTabbedPane.java 14 Feb 2004 21:42:00 -0000 @@ -66,6 +66,8 @@ } } + private static final long serialVersionUID = 1614381073220130939L; + private Vector tabs = new Vector(); public JTabbedPane() @@ -102,7 +104,7 @@ } public String getUIClassID() - { return "JTabbedPane"; } + { return "TabbedPaneUI"; } public void setUI(TabbedPaneUI ui) { Index: javax/swing/JToggleButton.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JToggleButton.java,v retrieving revision 1.7 diff -u -b -B -r1.7 JToggleButton.java --- javax/swing/JToggleButton.java 27 Jan 2004 09:46:25 -0000 1.7 +++ javax/swing/JToggleButton.java 14 Feb 2004 21:42:00 -0000 @@ -44,6 +44,24 @@ public class JToggleButton extends AbstractButton implements Accessible { + + public class ToggleButtonModel extends DefaultButtonModel + { + public void setPressed(boolean b) + { + if (! isEnabled()) + return; + + 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); @@ -73,9 +91,8 @@ { super(text, icon); - // Create the model + hori_align = LEADING; setModel(new ToggleButtonModel()); - model.setSelected(selected); } @@ -90,7 +107,7 @@ public String getUIClassID() { //Returns a string that specifies the name of the L&F class that renders this component. - return "JToggleButton"; + return "ToggleButtonUI"; } protected String paramString() Index: javax/swing/JTree.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JTree.java,v retrieving revision 1.4 diff -u -b -B -r1.4 JTree.java --- javax/swing/JTree.java 8 Jun 2003 11:20:07 -0000 1.4 +++ javax/swing/JTree.java 14 Feb 2004 21:42:00 -0000 @@ -83,7 +83,7 @@ public String getUIClassID() { - return "JTree"; + return "TreeUI"; } Index: javax/swing/JViewport.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JViewport.java,v retrieving revision 1.3 diff -u -b -B -r1.3 JViewport.java --- javax/swing/JViewport.java 8 Jun 2003 14:14:50 -0000 1.3 +++ javax/swing/JViewport.java 14 Feb 2004 21:42:00 -0000 @@ -69,7 +69,7 @@ public String getUIClassID() { - return "JViewport"; + return "ViewportUI"; } public void updateUI() Index: javax/swing/SwingUtilities.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/SwingUtilities.java,v retrieving revision 1.7 diff -u -b -B -r1.7 SwingUtilities.java --- javax/swing/SwingUtilities.java 6 Feb 2004 12:55:51 -0000 1.7 +++ javax/swing/SwingUtilities.java 14 Feb 2004 21:42:01 -0000 @@ -95,7 +95,9 @@ /** * 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 component's 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 @@ -108,7 +110,8 @@ */ 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); } /** @@ -123,7 +126,7 @@ 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); } /** @@ -472,9 +476,10 @@ * *

The position values control where the text is placed relative to * the icon. The horizontal position value should be one of the constants - * LEFT, RIGHT or CENTER. The - * vertical position value should be one fo the constants - * TOP, BOTTOM, CENTER.

+ * LEADING, TRAILING, LEFT, + * RIGHT or CENTER. The vertical position value + * should be one fo the constants TOP, BOTTOM + * or CENTER.

* *

The text-icon gap value controls the number of pixels between the * icon and the text.

@@ -488,12 +493,12 @@ * CENTER.

* *

If the LEADING or TRAILING constants are - * given for horizontal alignment, they are interpreted relative to the - * provided component's orientation property, a constant in the address@hidden - * java.awt.ComponentOrientation} class. For example, if the component's - * orientation is LEFT_TO_RIGHT, then the - * LEADING alignment is a synonym for LEFT and - * the TRAILING 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 address@hidden java.awt.ComponentOrientation} class. For + * example, if the component's orientation is LEFT_TO_RIGHT, + * then the LEADING value is a synonym for LEFT + * and the TRAILING value is a synonym for * RIGHT

* *

If the text and icon are equal to or larger than the view @@ -537,6 +543,119 @@ 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); + } + + /** + *

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.

+ * + *

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.

+ * + *

The position values control where the text is placed relative to + * the icon. The horizontal position value should be one of the constants + * LEFT, RIGHT or CENTER. The + * vertical position value should be one fo the constants + * TOP, BOTTOM or CENTER.

+ * + *

The text-icon gap value controls the number of pixels between the + * icon and the text.

+ * + *

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 LEFT, RIGHT or + * CENTER. The vertical alignment valus should be one of the + * constants TOP, BOTTOM or + * CENTER.

+ * + *

If the text and icon are equal to or larger than the view + * rectangle, the horizontal and vertical alignment values have no + * affect.

+ * + *

Note that this method does not know how to deal with + * horizontal alignments or positions given as LEADING or + * TRAILING 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) @@ -589,23 +708,6 @@ textR.y = centerLine - textR.height/2; iconR.y = centerLine - iconR.height/2; 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 Index: javax/swing/ToggleButtonModel.java =================================================================== RCS file: javax/swing/ToggleButtonModel.java diff -N javax/swing/ToggleButtonModel.java --- javax/swing/ToggleButtonModel.java 27 Jan 2004 09:46:25 -0000 1.4 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,55 +0,0 @@ -/* ToggleButtonModel.java -- - Copyright (C) 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 javax.swing; - -public class ToggleButtonModel extends DefaultButtonModel -{ - public void setPressed(boolean b) - { - if (! isEnabled()) - return; - - if (! b) - { - return; - } - - setSelected(b); - } -} Index: javax/swing/UIDefaults.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/UIDefaults.java,v retrieving revision 1.7 diff -u -b -B -r1.7 UIDefaults.java --- javax/swing/UIDefaults.java 17 Nov 2003 23:20:11 -0000 1.7 +++ javax/swing/UIDefaults.java 14 Feb 2004 21:42:01 -0000 @@ -61,7 +61,7 @@ /** * 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 (address@hidden) */ Index: javax/swing/plaf/basic/BasicButtonListener.java =================================================================== RCS file: javax/swing/plaf/basic/BasicButtonListener.java diff -N javax/swing/plaf/basic/BasicButtonListener.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/swing/plaf/basic/BasicButtonListener.java 14 Feb 2004 21:42:01 -0000 @@ -0,0 +1,188 @@ +/* BasicButtonListener.java + Copyright (C) 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 javax.swing.plaf.basic; + +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import javax.swing.AbstractButton; +import javax.swing.ButtonModel; +import javax.swing.UIDefaults; +import javax.swing.UIManager; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.JComponent; + +public class BasicButtonListener + implements MouseListener, MouseMotionListener, FocusListener, + ChangeListener, PropertyChangeListener +{ + public void propertyChange(PropertyChangeEvent e) + { + } + protected void checkOpacity(AbstractButton b) + { + } + public void focusGained(FocusEvent e) + { + } + + public void focusLost(FocusEvent e) + { + if (e.getSource() instanceof AbstractButton) + { + AbstractButton button = (AbstractButton) e.getSource(); + ButtonModel model = button.getModel(); + model.setArmed(false); + } + } + public void installKeyboardActions(JComponent c) + { + } + public void uninstallKeyboardActions(JComponent c) + { + } + public void stateChanged(ChangeEvent e) + { + } + public void mouseMoved(MouseEvent e) + { + System.err.println("button got mouse move"); + } + public void mouseDragged(MouseEvent e) + { + System.err.println("button got mouse drag"); + } + public void mouseClicked(MouseEvent e) + { + System.err.println("button got mouse click"); + } + + /** + * Accept a mouse press event and arm the button. + * + * @param e The mouse press event to accept + */ + public void mousePressed(MouseEvent e) + { + if (e.getSource() instanceof AbstractButton) + { + AbstractButton button = (AbstractButton) e.getSource(); + ButtonModel model = button.getModel(); + if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) + { + // It is important that these transitions happen in this order. + model.setArmed(true); + model.setPressed(true); + } + } + } + + + /** + * Accept a mouse release event and set the button's + * "pressed" property to true, 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) + { + if (e.getSource() instanceof AbstractButton) + { + AbstractButton button = (AbstractButton) e.getSource(); + ButtonModel model = button.getModel(); + if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) + { + // It is important that these transitions happen in this order. + model.setPressed(false); + model.setArmed(false); + } + } + } + + + /** + * Accept a mouse enter event and set the button's "rollover" property to + * true, if the button's "rolloverEnabled" property is + * true. If the button 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) + { + if (e.getSource() instanceof AbstractButton) + { + AbstractButton button = (AbstractButton) e.getSource(); + ButtonModel model = button.getModel(); + if (button.isRolloverEnabled()) + model.setRollover(true); + + if (model.isPressed() + && (e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) + model.setArmed(true); + else + model.setArmed(false); + } + } + + /** + * Accept a mouse exit event and set the button's model's "rollover" + * property to false, if it's "rolloverEnabled" property is + * true. Also disarm the button. + * + * @param e The mouse exit event to accept + */ + public void mouseExited(MouseEvent e) + { + if (e.getSource() instanceof AbstractButton) + { + AbstractButton button = (AbstractButton) e.getSource(); + ButtonModel model = button.getModel(); + if (button.isRolloverEnabled()) + model.setRollover(false); + model.setArmed(false); + } + } +} Index: javax/swing/plaf/basic/BasicButtonUI.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicButtonUI.java,v retrieving revision 1.6 diff -u -b -B -r1.6 BasicButtonUI.java --- javax/swing/plaf/basic/BasicButtonUI.java 27 Jan 2004 09:46:25 -0000 1.6 +++ javax/swing/plaf/basic/BasicButtonUI.java 14 Feb 2004 21:42:01 -0000 @@ -47,14 +47,20 @@ 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; @@ -62,21 +68,11 @@ { /** 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 @@ -91,120 +87,60 @@ 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; + return defaultTextIconGap; + } - /** - * Creates a new FocusUIListener object. - * - * @param b The button to listen to - */ - FocusUIListener(AbstractButton b) + protected void installDefaults(AbstractButton b) { - button = 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")); } - /** - * Called when the button loses focus. - * - * @param event The loss of focus event. - */ - public void focusLost(FocusEvent event) + protected void uninstallDefaults(AbstractButton b) { - // System.err.println("ButtonUI :: lost focus -- disarming"); - button.getModel().setArmed(false); - } + b.setForeground(null); + b.setBackground(null); + b.setBorder(null); + b.setMargin(null); } - /** - * A helper class which interprets mouse events as - * state changes to the button's underlying model. - */ - private static class ButtonUIListener extends MouseAdapter - { - /** The button to change the model of */ - AbstractButton button; + protected BasicButtonListener listener; - /** - * Creates a new ButtonUIListener object. - * - * @param b The button to change the model of - */ - public ButtonUIListener(AbstractButton b) + protected BasicButtonListener createButtonListener(AbstractButton b) { - button = b; + return new BasicButtonListener(); } - /** - * 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) + public void installListeners(AbstractButton b) { - // System.err.println("ButtonUI :: arming"); - button.getModel().setArmed(true); - } + listener = createButtonListener(b); + b.addChangeListener(listener); + b.addPropertyChangeListener(listener); + b.addFocusListener(listener); + b.addMouseListener(listener); + b.addMouseMotionListener(listener); } - /** - * Accept a mouse enter event and set the button's model's - * "rollover" property to true. 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) + public void uninstallListeners(AbstractButton b) { - // 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); - } + b.removeChangeListener(listener); + b.removePropertyChangeListener(listener); + b.removeFocusListener(listener); + b.removeMouseListener(listener); + b.removeMouseMotionListener(listener); } - /** - * Accept a mouse exit event and set the button's model's - * "rollover" property to false. - * - * @param e The mouse exit event to accept - */ - public void mouseExited(MouseEvent e) + protected void installKeyboardActions(AbstractButton b) { - // 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 true, 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) + protected void uninstallKeyboardActions(AbstractButton b) { - // System.err.println("ButtonUI :: mouse released"); - if (button.getModel().isArmed() - && (e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) - { - button.getModel().setPressed(true); - } - } } /** @@ -218,19 +154,13 @@ 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)); + if (c instanceof AbstractButton) + { + AbstractButton b = (AbstractButton) c; + installDefaults(b); + installListeners(b); + installKeyboardActions(b); + } } /** @@ -244,10 +174,42 @@ public Dimension getPreferredSize(JComponent c) { AbstractButton b = (AbstractButton)c; - Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, gap); + 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 address@hidden AbstractButton}, according to * its current state. @@ -268,31 +230,21 @@ 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(), + 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, gap); + vr, ir, tr, + defaultTextIconGap + + defaultTextShiftOffset); - if ((b.getModel().isRollover() && b.getModel().isArmed()) - || b.getModel().isSelected()) + if ((b.getModel().isArmed() && b.getModel().isPressed()) + || b.isSelected()) paintButtonPressed(g, br, c); else paintButtonNormal(g, br, c); @@ -354,11 +306,13 @@ protected void paintIcon(Graphics g, JComponent c, Rectangle iconRect) { AbstractButton b = (AbstractButton) c; - if (b.getIcon() != null) + Icon i = currentIcon(b); + + if (i != null) { int x = iconRect.x; int y = iconRect.y; - b.getIcon().paintIcon(c, g, x, y); + i.paintIcon(c, g, x, y); } } @@ -373,11 +327,12 @@ */ protected void paintButtonPressed(Graphics g, Rectangle area, JComponent b) { - Dimension size = b.getSize(); - - g.setColor(pressedBackgroundColor); + 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 address@hidden AbstractButton} in the normal, @@ -390,10 +345,12 @@ */ protected void paintButtonNormal(Graphics g, Rectangle area, JComponent b) { - Dimension size = b.getSize(); - g.setColor(normalBackgroundColor); + if (((AbstractButton)b).isContentAreaFilled()) + { + g.setColor(b.getBackground()); g.fillRect(area.x, area.y, area.width, area.height); } + } /** * Paints the "text" property of an address@hidden AbstractButton}, using the @@ -410,9 +367,8 @@ Font f = c.getFont(); g.setFont(f); FontMetrics fm = g.getFontMetrics(f); - g.setColor(c.isEnabled() ? textColor : disabledTextColor); - BasicGraphicsUtils.drawString(g, text, - 0, + g.setColor(c.getForeground()); + BasicGraphicsUtils.drawString(g, text, 0, textRect.x, textRect.y + fm.getAscent()); } Index: javax/swing/plaf/basic/BasicCheckBoxUI.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicCheckBoxUI.java,v retrieving revision 1.5 diff -u -b -B -r1.5 BasicCheckBoxUI.java --- javax/swing/plaf/basic/BasicCheckBoxUI.java 10 Jan 2004 21:59:46 -0000 1.5 +++ javax/swing/plaf/basic/BasicCheckBoxUI.java 14 Feb 2004 21:42:01 -0000 @@ -38,81 +38,27 @@ 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) + public Icon getDefaultIcon() { - Dimension size = b.getSize(); - - g.setColor(pressedBackgroundColor); - g.fillRect(1,1,size.width-2, size.height-2); - + UIDefaults defaults = UIManager.getLookAndFeelDefaults(); + return defaults.getIcon("CheckBox.icon"); } - 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 void installUI(final JComponent c) { + super.installUI(c); } } Index: javax/swing/plaf/basic/BasicDefaults.java =================================================================== RCS file: javax/swing/plaf/basic/BasicDefaults.java diff -N javax/swing/plaf/basic/BasicDefaults.java --- javax/swing/plaf/basic/BasicDefaults.java 21 Nov 2003 01:53:18 -0000 1.7 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,126 +0,0 @@ -/* BasicDefaults.java - Copyright (C) 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 javax.swing.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; -import javax.swing.UIDefaults; -import javax.swing.border.MatteBorder; - -class BasicBorder extends MatteBorder -{ - static Color BtnPointClr = new Color( 180, 180, 180); - - BasicBorder() - { - super(5,5,5,5, Color.black); - } - - public void paintBorder(Component c, - Graphics g, - int x, - int y, - int width, - int height) - { - // System.out.println("PAINT-------------------------------------------BORDER"); - - if (g != null) - { - g.setColor( BtnPointClr); - g.draw3DRect( 0, 0, width-1, height-1, true); - } - } - } - -class PanelBorder extends MatteBorder -{ - PanelBorder() - { - super(5,5,5,5, Color.black); - } - - public void paintBorder(Component c, - Graphics g, - int x, - int y, - int width, - int height) - { - // System.out.println("PAINT-------------------------------------------BORDER"); - super.paintBorder(c, g, x, y, width, height); - } - } - -public class BasicDefaults extends UIDefaults -{ - public BasicDefaults() - { - // System.out.println("BasicDefaults !!!!!!!!!!!!!!!!!!!!!!!!!"); - put("JButton", "javax.swing.plaf.basic.BasicButtonUI"); - put("JLabel", "javax.swing.plaf.basic.BasicLabelUI"); - - put("JPanel", "javax.swing.plaf.basic.BasicPanelUI"); - put("JCheckBox", "javax.swing.plaf.basic.BasicCheckBoxUI"); - put("JRadioButton", "javax.swing.plaf.basic.BasicRadioButtonUI"); - put("JToggleButton", "javax.swing.plaf.basic.BasicToggleButtonUI"); - put("JOptionPane", "javax.swing.plaf.basic.BasicOptionPaneUI"); - put("JList", "javax.swing.plaf.basic.BasicListUI"); - put("JTree", "javax.swing.plaf.basic.BasicTreeUI"); - put("JTextComponent", "javax.swing.plaf.basic.BasicTextUI"); - put("JTabbedPane", "javax.swing.plaf.basic.BasicTabbedPaneUI"); - put("JScrollPane", "javax.swing.plaf.basic.BasicScrollPaneUI"); - put("JViewport", "javax.swing.plaf.basic.BasicViewportUI"); - - put("JButton.border", "javax.swing.plaf.basic.BasicBorder"); - put("JPanel.border", "javax.swing.plaf.basic.PanelBorder"); - - put("JToggleButton.border", "javax.swing.plaf.basic.PanelBorder"); - put("JCheckBox.border", "javax.swing.plaf.basic.PanelBorder"); - put("JRadioButton.border", "javax.swing.plaf.basic.PanelBorder"); - - put("AbstractUndoableEdit.undoText", "Undo"); - put("AbstractUndoableEdit.redoText", "Redo"); - } - -} - - Index: javax/swing/plaf/basic/BasicIconFactory.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicIconFactory.java,v retrieving revision 1.3 diff -u -b -B -r1.3 BasicIconFactory.java --- javax/swing/plaf/basic/BasicIconFactory.java 2 Oct 2002 12:58:40 -0000 1.3 +++ javax/swing/plaf/basic/BasicIconFactory.java 14 Feb 2004 21:42:01 -0000 @@ -39,7 +39,14 @@ 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 */ @@ -47,39 +54,156 @@ { 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 Index: javax/swing/plaf/basic/BasicLookAndFeel.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java,v retrieving revision 1.4 diff -u -b -B -r1.4 BasicLookAndFeel.java --- javax/swing/plaf/basic/BasicLookAndFeel.java 2 Jul 2003 05:21:52 -0000 1.4 +++ javax/swing/plaf/basic/BasicLookAndFeel.java 14 Feb 2004 21:42:01 -0000 @@ -227,29 +227,40 @@ { 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", @@ -540,7 +551,7 @@ "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), @@ -550,14 +561,18 @@ "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", @@ -742,7 +757,7 @@ "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), @@ -849,7 +864,7 @@ "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[] { @@ -860,7 +875,7 @@ // 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", Index: javax/swing/plaf/basic/BasicPanelUI.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicPanelUI.java,v retrieving revision 1.3 diff -u -b -B -r1.3 BasicPanelUI.java --- javax/swing/plaf/basic/BasicPanelUI.java 10 Jan 2004 21:59:46 -0000 1.3 +++ javax/swing/plaf/basic/BasicPanelUI.java 14 Feb 2004 21:42:01 -0000 @@ -44,8 +44,6 @@ public class BasicPanelUI extends PanelUI { - int gap = 3; - public static ComponentUI createUI(JComponent x) { return new BasicPanelUI(); Index: javax/swing/plaf/basic/BasicRadioButtonUI.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java,v retrieving revision 1.5 diff -u -b -B -r1.5 BasicRadioButtonUI.java --- javax/swing/plaf/basic/BasicRadioButtonUI.java 10 Jan 2004 21:59:46 -0000 1.5 +++ javax/swing/plaf/basic/BasicRadioButtonUI.java 14 Feb 2004 21:42:01 -0000 @@ -38,116 +38,42 @@ 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 == ? + + 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); - } - - public Dimension getPreferredSize(JComponent c) + if (c instanceof AbstractButton) { - 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; + AbstractButton b = (AbstractButton) c; + b.setIcon(icon); } - - protected void paintFocus(Graphics g, - JComponent c, - Rectangle vr, - Rectangle tr, - Rectangle ir) - { } - protected void paintIcon(Graphics g, - JComponent c, - Rectangle iconRect) + public Icon getDefaultIcon() { + UIDefaults defaults = UIManager.getLookAndFeelDefaults(); + return defaults.getIcon("RadioButton.icon"); } - 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); - } } Index: javax/swing/plaf/basic/BasicRootPaneUI.java =================================================================== RCS file: javax/swing/plaf/basic/BasicRootPaneUI.java diff -N javax/swing/plaf/basic/BasicRootPaneUI.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/swing/plaf/basic/BasicRootPaneUI.java 14 Feb 2004 21:42:01 -0000 @@ -0,0 +1,57 @@ +/* BasicPanelUI.java + Copyright (C) 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 javax.swing.plaf.basic; + +import javax.swing.*; +import javax.swing.plaf.*; +import java.awt.*; + + +public class BasicRootPaneUI extends RootPaneUI +{ + public static ComponentUI createUI(JComponent x) + { + return new BasicRootPaneUI(); + } + + public void installUI(JComponent c) + { + super.installUI(c); + } +} Index: javax/swing/plaf/basic/BasicToggleButtonUI.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicToggleButtonUI.java,v retrieving revision 1.5 diff -u -b -B -r1.5 BasicToggleButtonUI.java --- javax/swing/plaf/basic/BasicToggleButtonUI.java 10 Jan 2004 21:59:46 -0000 1.5 +++ javax/swing/plaf/basic/BasicToggleButtonUI.java 14 Feb 2004 21:42:01 -0000 @@ -51,71 +51,6 @@ 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); - } } Index: javax/swing/plaf/metal/MetalLookAndFeel.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java,v retrieving revision 1.5 diff -u -b -B -r1.5 MetalLookAndFeel.java --- javax/swing/plaf/metal/MetalLookAndFeel.java 12 Oct 2003 16:44:40 -0000 1.5 +++ javax/swing/plaf/metal/MetalLookAndFeel.java 14 Feb 2004 21:42:01 -0000 @@ -40,7 +40,6 @@ 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 @@ -61,7 +60,7 @@ 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; Index: javax/swing/text/JTextComponent.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/text/JTextComponent.java,v retrieving revision 1.8 diff -u -b -B -r1.8 JTextComponent.java --- javax/swing/text/JTextComponent.java 23 Jun 2003 06:42:10 -0000 1.8 +++ javax/swing/text/JTextComponent.java 14 Feb 2004 21:42:01 -0000 @@ -406,7 +406,7 @@ 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() {