diff options
Diffstat (limited to 'libjava/javax/swing/border')
-rw-r--r-- | libjava/javax/swing/border/AbstractBorder.java | 192 | ||||
-rw-r--r-- | libjava/javax/swing/border/BevelBorder.java | 568 | ||||
-rw-r--r-- | libjava/javax/swing/border/Border.java | 105 | ||||
-rw-r--r-- | libjava/javax/swing/border/CompoundBorder.java | 257 | ||||
-rw-r--r-- | libjava/javax/swing/border/EmptyBorder.java | 223 | ||||
-rw-r--r-- | libjava/javax/swing/border/EtchedBorder.java | 411 | ||||
-rw-r--r-- | libjava/javax/swing/border/LineBorder.java | 343 | ||||
-rw-r--r-- | libjava/javax/swing/border/MatteBorder.java | 404 | ||||
-rw-r--r-- | libjava/javax/swing/border/SoftBevelBorder.java | 329 | ||||
-rw-r--r-- | libjava/javax/swing/border/TitledBorder.java | 1155 |
10 files changed, 0 insertions, 3987 deletions
diff --git a/libjava/javax/swing/border/AbstractBorder.java b/libjava/javax/swing/border/AbstractBorder.java deleted file mode 100644 index d755b6779d8..00000000000 --- a/libjava/javax/swing/border/AbstractBorder.java +++ /dev/null @@ -1,192 +0,0 @@ -/* AbstractBorder.java -- - Copyright (C) 2003 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; -import java.io.Serializable; - - -/** - * An invisible zero-width border, serving as a base class for - * implementing more interesting borders. - * - * @author Sascha Brawer (brawer@dandelis.ch) - * @author Ronald Veldema (rveldema@cs.vu.nl) - */ -public abstract class AbstractBorder - implements Border, Serializable -{ - static final long serialVersionUID = -545885975315191844L; - - - /** - * Constructs a new AbstractBorder. - */ - public AbstractBorder () - { - } - - - /** - * Performs nothing, because the default implementation provided by - * this class is an invisible, zero-width border. Subclasses will - * likely want to override this method, but they are not required - * for doing so. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder (Component c, Graphics g, - int x, int y, int width, int height) - { - /* A previous version of Classpath had emitted a warning when - * this method was called. The warning was removed because it is - * perfectly legal for a subclass to not override the paintBorder - * method. An example would be EmptyBorder. - */ - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge, which is zero - * for the default implementation provided by AbstractButton. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets (Component c) - { - return new Insets (0, 0, 0, 0); - } - - - /** - * Determines the insets of this border. The implementation provided - * by AbstractButton sets the <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields of the passed - * <code>insets</code> parameter to zero. - * - * @param c the component whose border is to be measured. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets() - */ - public Insets getBorderInsets (Component c, Insets insets) - { - insets.left = insets.right = insets.top = insets.bottom = 0; - return insets; - } - - - /** - * Determines whether or not this border is opaque. An opaque border - * fills every pixel in its area when painting. Partially - * translucent borders must return <code>false</code>, or ugly - * artifacts can appear on screen. The default implementation - * provided by AbstractBorder always returns <code>false</code>. - * - * @return <code>false</code>. - */ - public boolean isBorderOpaque () - { - return false; - } - - - /** - * Returns a rectangle that covers the specified area minus this - * border. Components that wish to determine an area into which - * they can safely draw without intersecting with a border might - * want to use this helper method. - * - * @param c the component in the center of this border. - * @param x the horizontal position of the border. - * @param y the vertical position of the border. - * @param width the width of the available area for the border. - * @param height the height of the available area for the border. - */ - public Rectangle getInteriorRectangle (Component c, - int x, int y, int width, int height) - { - return getInteriorRectangle (c, this, x, y, width, height); - } - - - /** - * Returns a rectangle that covers the specified area minus a - * border. Components that wish to determine an area into which - * they can safely draw without intersecting with a border might - * want to use this helper method. - * - * @param c the component in the center of this border. - * @param x the horizontal position of the border. - * @param y the vertical position of the border. - * @param width the width of the available area for the border. - * @param height the height of the available area for the border. - */ - public static Rectangle getInteriorRectangle (Component c, Border b, - int x, int y, int width, int height) - { - Insets borderInsets; - - if (b != null) - { - borderInsets = b.getBorderInsets (c); - x += borderInsets.left; - y += borderInsets.top; - width -= borderInsets.left + borderInsets.right; - height -= borderInsets.top + borderInsets.bottom; - } - - return new Rectangle (x, y, width, height); - } -} diff --git a/libjava/javax/swing/border/BevelBorder.java b/libjava/javax/swing/border/BevelBorder.java deleted file mode 100644 index e755fdcc94c..00000000000 --- a/libjava/javax/swing/border/BevelBorder.java +++ /dev/null @@ -1,568 +0,0 @@ -/* BevelBorder.java -- - Copyright (C) 2003 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - - -/** - * A rectangular, two pixel thick border that causes the enclosed area - * to appear as if it was raising out of or lowered into the screen. Some - * LookAndFeels use this kind of border for rectangular buttons. - * - * <p>A BevelBorder has a highlight and a shadow color. In the raised - * variant, the highlight color is used for the top and left edges, - * and the shadow color is used for the bottom and right edge. For an - * image, see the documentation of the individual constructors. - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class BevelBorder - extends AbstractBorder -{ - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = -1034942243356299676L; - - - /** - * Indicates that the BevelBorder looks like if the enclosed area was - * raising out of the screen. - */ - public static final int RAISED = 0; - - - /** - * Indicates that the BevelBorder looks like if the enclosed area was - * pressed into the screen. - */ - public static final int LOWERED = 1; - - - /** - * The type of this BevelBorder, which is either {@link #RAISED} - * or {@link #LOWERED}. - */ - protected int bevelType; - - - /** - * The outer highlight color, or <code>null</code> to indicate that - * the color shall be derived from the background of the component - * whose border is being painted. - */ - protected Color highlightOuter; - - - /** - * The inner highlight color, or <code>null</code> to indicate that - * the color shall be derived from the background of the component - * whose border is being painted. - */ - protected Color highlightInner; - - - /** - * The outer shadow color, or <code>null</code> to indicate that the - * color shall be derived from the background of the component whose - * border is being painted. - */ - protected Color shadowOuter; - - - /** - * The inner shadow color, or <code>null</code> to indicate that the - * color shall be derived from the background of the component whose - * border is being painted. - */ - protected Color shadowInner; - - - /** - * Constructs a BevelBorder whose colors will be derived from the - * background of the enclosed component. The background color is - * retrieved each time the border is painted, so a BevelBorder - * constructed by this method will automatically reflect a change - * to the component’s background color. - * - * <p><img src="doc-files/BevelBorder-1.png" width="500" height="150" - * alt="[An illustration showing raised and lowered BevelBorders]" /> - * - * @param bevelType the desired appearance of the border. The value - * must be either {@link #RAISED} or {@link #LOWERED}. - * - * @throws IllegalArgumentException if <code>bevelType</code> has - * an unsupported value. - */ - public BevelBorder(int bevelType) - { - if ((bevelType != RAISED) && (bevelType != LOWERED)) - throw new IllegalArgumentException(); - - this.bevelType = bevelType; - } - - - /** - * Constructs a BevelBorder given its appearance type and two colors - * for its highlight and shadow. - * - * <p><img src="doc-files/BevelBorder-2.png" width="500" height="150" - * alt="[An illustration showing BevelBorders that were constructed - * with this method]" /> - * - * @param bevelType the desired appearance of the border. The value - * must be either {@link #RAISED} or {@link #LOWERED}. - * - * @param highlight the color that will be used for the inner - * side of the highlighted edges (top and left if - * if <code>bevelType</code> is {@link #RAISED}; bottom - * and right otherwise). The color for the outer side - * is a brightened version of this color. - * - * @param shadow the color that will be used for the outer - * side of the shadowed edges (bottom and right - * if <code>bevelType</code> is {@link #RAISED}; top - * and left otherwise). The color for the inner side - * is a brightened version of this color. - * - * @throws IllegalArgumentException if <code>bevelType</code> has - * an unsupported value. - * - * @throws NullPointerException if <code>highlight</code> or - * <code>shadow</code> is <code>null</code>. - * - * @see java.awt.Color.brighter() - */ - public BevelBorder(int bevelType, Color highlight, Color shadow) - { - this(bevelType, - /* highlightOuter */ highlight.brighter(), - /* highlightInner */ highlight, - /* shadowOuter */ shadow, - /* shadowInner */ shadow.brighter()); - } - - - /** - * Constructs a BevelBorder given its appearance type and all - * colors. - * - * <p><img src="doc-files/BevelBorder-3.png" width="500" height="150" - * alt="[An illustration showing BevelBorders that were constructed - * with this method]" /> - * - * @param bevelType the desired appearance of the border. The value - * must be either {@link #RAISED} or {@link #LOWERED}. - * - * @param highlightOuter the color that will be used for the outer - * side of the highlighted edges (top and left if - * <code>bevelType</code> is {@link #RAISED}; bottom and - * right otherwise). - * - * @param highlightInner the color that will be used for the inner - * side of the highlighted edges. - * - * @param shadowOuter the color that will be used for the outer - * side of the shadowed edges (bottom and right - * if <code>bevelType</code> is {@link #RAISED}; top - * and left otherwise). - * - * @param shadowInner the color that will be used for the inner - * side of the shadowed edges. - * - * @throws IllegalArgumentException if <code>bevelType</code> has - * an unsupported value. - * - * @throws NullPointerException if one of the passed colors - * is <code>null</code>. - */ - public BevelBorder(int bevelType, - Color highlightOuter, Color highlightInner, - Color shadowOuter, Color shadowInner) - { - this(bevelType); // checks the validity of bevelType - - if ((highlightOuter == null) || (highlightInner == null) - || (shadowOuter == null) || (shadowInner == null)) - throw new NullPointerException(); - - this.highlightOuter = highlightOuter; - this.highlightInner = highlightInner; - this.shadowOuter = shadowOuter; - this.shadowInner = shadowInner; - } - - - /** - * Paints the border for a given component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - switch (bevelType) - { - case RAISED: - paintRaisedBevel(c, g, x, y, width, height); - break; - - case LOWERED: - paintLoweredBevel(c, g, x, y, width, height); - break; - } - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - return new Insets(2, 2, 2, 2); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets() - */ - public Insets getBorderInsets(Component c, Insets insets) - { - insets.left = insets.right = insets.top = insets.bottom = 2; - return insets; - } - - - /** - * Determines the color that will be used for the outer side of - * highlighted edges when painting the border. If a highlight color - * has been specified upon constructing the border, that color is - * returned. Otherwise, the inner highlight color is brightened. - * - * @param c the component enclosed by this border. - * - * @see #getHighlightInnerColor(java.awt.Component) - * @see java.awt.Color#brighter() - */ - public Color getHighlightOuterColor(Component c) - { - if (highlightOuter != null) - return highlightOuter; - else - return getHighlightInnerColor(c).brighter(); - } - - - /** - * Determines the color that will be used for the inner side of - * highlighted edges when painting the border. If a highlight color - * has been specified upon constructing the border, that color is - * returned. Otherwise, the background color of the enclosed - * component is brightened. - * - * @param c the component enclosed by this border. - * - * @see java.awt.Component#getBackground() - * @see java.awt.Color#brighter() - */ - public Color getHighlightInnerColor(Component c) - { - if (highlightInner != null) - return highlightInner; - else - return c.getBackground().brighter(); - } - - - /** - * Determines the color that will be used for the inner side of - * shadowed edges when painting the border. If a shadow color has - * been specified upon constructing the border, that color is - * returned. Otherwise, the background color of the enclosed - * component is darkened. - * - * @param c the component enclosed by this border. - * - * @see java.awt.Component#getBackground() - * @see java.awt.Color#darker() - */ - public Color getShadowInnerColor(Component c) - { - if (shadowInner != null) - return shadowInner; - else - return c.getBackground().darker(); - } - - - /** - * Determines the color that will be used for the outer side of - * shadowed edges when painting the border. If a shadow color - * has been specified upon constructing the border, that color is - * returned. Otherwise, the inner shadow color is darkened. - * - * @param c the component enclosed by this border. - * - * @see #getShadowInnerColor(java.awt.Component) - * @see java.awt.Color#darker() - */ - public Color getShadowOuterColor(Component c) - { - if (shadowOuter != null) - return shadowOuter; - else - return getShadowInnerColor(c).darker(); - } - - - /** - * Returns the color that will be used for the outer side of - * highlighted edges when painting the border, or <code>null</code> - * if that color will be derived from the background of the enclosed - * Component. - */ - public Color getHighlightOuterColor() - { - return highlightOuter; - } - - - /** - * Returns the color that will be used for the inner side of - * highlighted edges when painting the border, or <code>null</code> - * if that color will be derived from the background of the enclosed - * Component. - */ - public Color getHighlightInnerColor() - { - return highlightInner; - } - - - /** - * Returns the color that will be used for the inner side of - * shadowed edges when painting the border, or <code>null</code> if - * that color will be derived from the background of the enclosed - * Component. - */ - public Color getShadowInnerColor() - { - return shadowInner; - } - - - /** - * Returns the color that will be used for the outer side of - * shadowed edges when painting the border, or <code>null</code> if - * that color will be derived from the background of the enclosed - * Component. - */ - public Color getShadowOuterColor() - { - return shadowOuter; - } - - - /** - * Returns the appearance of this border, which is either {@link - * #RAISED} or {@link #LOWERED}. - */ - public int getBevelType() - { - return bevelType; - } - - - /** - * Determines whether this border fills every pixel in its area - * when painting. - * - * <p>If the border colors are derived from the background color of - * the enclosed component, the result is <code>true</code> because - * the derivation method always returns opaque colors. Otherwise, - * the result depends on the opacity of the individual colors. - * - * @return <code>true</code> if the border is fully opaque, or - * <code>false</code> if some pixels of the background - * can shine through the border. - */ - public boolean isBorderOpaque() - { - /* If the colors are to be drived from the enclosed Component's - * background color, the border is guaranteed to be fully opaque - * because Color.brighten() and Color.darken() always return an - * opaque color. - */ - return - ((highlightOuter == null) || (highlightOuter.getAlpha() == 255)) - && ((highlightInner == null) || (highlightInner.getAlpha() == 255)) - && ((shadowInner == null) || (shadowInner.getAlpha() == 255)) - && ((shadowOuter == null) ||(shadowOuter.getAlpha() == 255)); - } - - - /** - * Paints a raised bevel border around a component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - protected void paintRaisedBevel(Component c, Graphics g, - int x, int y, int width, int height) - { - paintBevel(g, x, y, width, height, - getHighlightOuterColor(c), getHighlightInnerColor(c), - getShadowInnerColor(c), getShadowOuterColor(c)); - } - - - /** - * Paints a lowered bevel border around a component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - protected void paintLoweredBevel(Component c, Graphics g, - int x, int y, int width, int height) - { - paintBevel(g, x, y, width, height, - getShadowInnerColor(c), getShadowOuterColor(c), - getHighlightInnerColor(c), getHighlightOuterColor(c)); - } - - - /** - * Paints a two-pixel bevel in four colors. - * - * <pre> - * @@@@@@@@@@@@ - * @..........# @ = color a - * @. X# . = color b - * @. X# X = color c - * @.XXXXXXXXX# # = color d - * ############</pre> - * - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - * @param a the color for the outer side of the top and left edges. - * @param b the color for the inner side of the top and left edges. - * @param c the color for the inner side of the bottom and right edges. - * @param d the color for the outer side of the bottom and right edges. - */ - private static void paintBevel(Graphics g, - int x, int y, int width, int height, - Color a, Color b, Color c, Color d) - { - Color oldColor; - - oldColor = g.getColor(); - g.translate(x, y); - width = width - 1; - height = height - 1; - - try - { - /* To understand this code, it might be helpful to look at the - * images that are included with the JavaDoc. They are located - * in the "doc-files" subdirectory. - */ - g.setColor(a); - g.drawLine(0, 0, width, 0); // a, horizontal - g.drawLine(0, 1, 0, height); // a, vertical - - g.setColor(b); - g.drawLine(1, 1, width - 1, 1); // b, horizontal - g.drawLine(1, 2, 1, height - 1); // b, vertical - - g.setColor(c); - g.drawLine(2, height - 1, width - 1, height - 1); // c, horizontal - g.drawLine(width - 1, 2, width - 1, height - 2); // c, vertical - - g.setColor(d); - g.drawLine(1, height, width, height); // d, horizontal - g.drawLine(width, 1, width, height - 1); // d, vertical - } - finally - { - g.translate(-x, -y); - g.setColor(oldColor); - } - } -} - diff --git a/libjava/javax/swing/border/Border.java b/libjava/javax/swing/border/Border.java deleted file mode 100644 index 11bddfe78b3..00000000000 --- a/libjava/javax/swing/border/Border.java +++ /dev/null @@ -1,105 +0,0 @@ -/* Border.java -- - Copyright (C) 2003 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - - -/** - * An public interface for decorative or spacing borders around a Component. - * - * <p>To reduce memory consumption, several Components may share a - * single Border instance. {@link javax.swing.BorderFactory} is a - * factory class for producing commonly used shared borders. - * - * @see javax.swing.BorderFactory - * @see EmptyBorder - * @see CompoundBorder - * @see BevelBorder - * @see EtchedBorder - * @see LineBorder - * @see MatteBorder - * @see SoftBevelBorder - * @see TitledBorder - * @see AbstractBorder - * - * @author Ronald Veldema (rveldema@cs.vu.nl) - * @author Michael Koch (konqueror@gmx.de) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public interface Border -{ - /** - * Paints the border for a given component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - void paintBorder(Component c, Graphics g, - int x, int y, int width, int height); - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - */ - Insets getBorderInsets(Component c); - - - /** - * Determines whether this border fills every pixel in its area - * when painting. - * - * @return <code>true</code> if the border is fully opaque, or - * <code>false</code> if some pixels of the background - * can shine through the border. - */ - boolean isBorderOpaque(); -} diff --git a/libjava/javax/swing/border/CompoundBorder.java b/libjava/javax/swing/border/CompoundBorder.java deleted file mode 100644 index 2130a0e3447..00000000000 --- a/libjava/javax/swing/border/CompoundBorder.java +++ /dev/null @@ -1,257 +0,0 @@ -/* CompoundBorder.java -- - Copyright (C) 2003 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - -/** - * A Border that is composed of an interior and an exterior border, - * where the interior border is tightly nested into the exterior. - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class CompoundBorder - extends AbstractBorder -{ - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = 9054540377030555103L; - - - /** - * The inside border, which is painted between the bordered - * Component and the outside border. It is valid for - * <code>insideBorder</code> to be <code>null</code>. - */ - protected Border insideBorder; - - - /** - * The outside border, which is painted outside both the - * bordered Component and the inside border. It is valid for - * <code>outsideBorder</code> to be <code>null</code>. - */ - protected Border outsideBorder; - - - /** - * Constructs a CompoundBorder whose inside and outside borders - * are both <code>null</code>. While this does not really make - * any sense (there exists a class EmptyBorder as well, and not - * every Component needs to have a border at all), the API - * specification requires the existence of this constructor. - * - * @see EmptyBorder - */ - public CompoundBorder () - { - this (null, null); - } - - - /** - * Constructs a CompoundBorder with the specified inside and - * outside borders. - * - * @param outsideBorder the outside border, which is painted to the - * outside of both <code>insideBorder</code> and the enclosed - * component. It is acceptable to pass <code>null</code>, in - * which case no outside border is painted. - * - * @param insideBorder the inside border, which is painted to - * between <code>outsideBorder</code> and the enclosed - * component. It is acceptable to pass <code>null</code>, in - * which case no inside border is painted. - */ - public CompoundBorder (Border outsideBorder, Border insideBorder) - { - this.outsideBorder = outsideBorder; - this.insideBorder = insideBorder; - } - - - /** - * Determines whether or not this border is opaque. An opaque - * border fills every pixel in its area when painting. Partially - * translucent borders must return <code>false</code>, or ugly - * artifacts can appear on screen. - * - * @return <code>true</code> if both the inside and outside borders - * are opaque, or <code>false</code> otherwise. - */ - public boolean isBorderOpaque () - { - /* While it would be safe to assume true for the opacity of - * a null border, this behavior would not be according to - * the API specification. Also, it is pathological to have - * null borders anyway. - */ - if ((insideBorder == null) || (outsideBorder == null)) - return false; - - return insideBorder.isBorderOpaque() - && outsideBorder.isBorderOpaque(); - } - - - /** - * Paints the compound border by first painting the outside border, - * then painting the inside border tightly nested into the outside. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - /* If there is an outside border, paint it and reduce the - * bounding box by its insets. - */ - if (outsideBorder != null) - { - Insets outsideInsets; - - outsideBorder.paintBorder(c, g, x, y, width, height); - outsideInsets = outsideBorder.getBorderInsets(c); - - x += outsideInsets.left; - y += outsideInsets.top; - - /* Reduce width and height by the respective extent of the - * outside border. - */ - width -= outsideInsets.left + outsideInsets.right; - height -= outsideInsets.top + outsideInsets.bottom; - } - - if (insideBorder != null) - insideBorder.paintBorder(c, g, x, y, width, height); - } - - - /** - * Changes the specified insets to the insets of this border, - * which is the sum of the insets of the inside and the outside - * border. - * - * @param c the component in the center of this border. - * @param insets an Insets object for holding the added insets. - * - * @return the <code>insets</code> object. - */ - public Insets getBorderInsets(Component c, Insets insets) - { - Insets borderInsets; - - if (insets == null) - insets = new Insets (0,0,0,0); - else - insets.left = insets.right = insets.top = insets.bottom = 0; - - /* If there is an outside border, add it to insets. */ - if (outsideBorder != null) - { - borderInsets = outsideBorder.getBorderInsets(c); - insets.left += borderInsets.left; - insets.right += borderInsets.right; - insets.top += borderInsets.top; - insets.bottom += borderInsets.bottom; - } - - /* If there is an inside border, add it to insets. */ - if (insideBorder != null) - { - borderInsets = insideBorder.getBorderInsets(c); - insets.left += borderInsets.left; - insets.right += borderInsets.right; - insets.top += borderInsets.top; - insets.bottom += borderInsets.bottom; - } - - return insets; - } - - - /** - * Determines the insets of this border, which is the sum of the - * insets of the inside and the outside border. - * - * @param c the component in the center of this border. - */ - public Insets getBorderInsets (Component c) - { - /* It is not clear why CompoundBorder does not simply inherit - * the implementation from AbstractBorder. However, we want - * to be compatible with the API specification, which overrides - * the getBorderInsets(Component) method. - */ - return getBorderInsets (c, null); - } - - - /** - * Returns the outside border, which is painted outside both the - * bordered Component and the inside border. It is valid for the - * result to be <code>null</code>. - */ - public Border getOutsideBorder () - { - return outsideBorder; - } - - - /** - * Returns the inside border, which is painted between the bordered - * Component and the outside border. It is valid for the result to - * be <code>null</code>. - */ - public Border getInsideBorder () - { - return insideBorder; - } -} - diff --git a/libjava/javax/swing/border/EmptyBorder.java b/libjava/javax/swing/border/EmptyBorder.java deleted file mode 100644 index 0f3b7b6931c..00000000000 --- a/libjava/javax/swing/border/EmptyBorder.java +++ /dev/null @@ -1,223 +0,0 @@ -/* EmptyBorder.java -- - Copyright (C) 2003 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - - -/** - * A border for leaving a specifiable number of pixels empty around - * the enclosed component. An EmptyBorder requires some space on each - * edge, but does not perform any drawing. - * - * <p><img src="EmptyBorder-1.png" width="290" height="200" - * alt="[An illustration of EmptyBorder]" /> - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class EmptyBorder - extends AbstractBorder -{ - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = -8116076291731988694L; - - - /** - * The number of pixels required at the left edge. - */ - protected int left; - - - /** - * The number of pixels required at the right edge. - */ - protected int right; - - - /** - * The number of pixels required at the top edge. - */ - protected int top; - - - /** - * The number of pixels required at the bottom edge. - */ - protected int bottom; - - - /** - * Constructs an empty border given the number of pixels required - * on each side. - * - * @param top the number of pixels that the border will need - * for its top edge. - * - * @param left the number of pixels that the border will need - * for its left edge. - * - * @param bottom the number of pixels that the border will need - * for its bottom edge. - * - * @param right the number of pixels that the border will need - * for its right edge. - */ - public EmptyBorder(int top, int left, int bottom, int right) - { - this.top = top; - this.left = left; - this.bottom = bottom; - this.right = right; - } - - - /** - * Constructs an empty border given the number of pixels required - * on each side, passed in an Insets object. - * - * @param borderInsets the Insets for the new border. - */ - public EmptyBorder(Insets borderInsets) - { - this(borderInsets.top, borderInsets.left, - borderInsets.bottom, borderInsets.right); - } - - - /** - * Performs nothing because an EmptyBorder does not paint any - * pixels. While the inherited implementation provided by - * {@link AbstractBorder#paintBorder} is a no-op as well, - * it is overwritten in order to match the API of the Sun - * reference implementation. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, null); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets() - */ - public Insets getBorderInsets(Component c, Insets insets) - { - if (insets == null) - insets = new Insets(0, 0, 0, 0); - - insets.left = left; - insets.right = right; - insets.top = top; - insets.bottom = bottom; - return insets; - } - - - /** - * Measures the width of this border. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets() - { - return getBorderInsets(null, null); - } - - - /** - * Determines whether this border fills every pixel in its area - * when painting. Since an empty border does not paint any pixels - * whatsoever, the result is <code>false</code>. - * - * @return <code>false</code>. - */ - public boolean isBorderOpaque() - { - /* The inherited implementation of AbstractBorder.isBorderOpaque() - * would also return false. It is not clear why this is overriden - * in the Sun implementation, at least not from just reading the - * JavaDoc. - */ - return false; - } -} diff --git a/libjava/javax/swing/border/EtchedBorder.java b/libjava/javax/swing/border/EtchedBorder.java deleted file mode 100644 index ea2a61d9e67..00000000000 --- a/libjava/javax/swing/border/EtchedBorder.java +++ /dev/null @@ -1,411 +0,0 @@ -/* EtchedBorder.java -- - Copyright (C) 2003 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - - -/** - * A border that looks like an engraving etched into the background - * surface, or (in its raised variant) coming out of the surface - * plane. Using different constructors, it is possible to either - * explicitly specify the border colors, or to let the colors derive - * from the background color of the enclosed Component. - * - * <p><img src="doc-files/EtchedBorder-1.png" width="500" height="200" - * alt="[An illustration of the two EtchedBorder variants]" /> - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class EtchedBorder - extends AbstractBorder -{ - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = 4001244046866360638L; - - - /** - * Indicates that the border appears as coming out of the - * background. - */ - public static final int RAISED = 0; - - - /** - * Indicates that the border appears as engraved into the - * background. - */ - public static final int LOWERED = 1; - - - /** - * The type of this EtchedBorder, which is either {@link #RAISED} - * or {@link #LOWERED}. - */ - protected int etchType; - - - /** - * The highlight color, or <code>null</code> to indicate that the - * color shall be derived from the background of the enclosed - * component. - */ - protected Color highlight; - - - /** - * The shadow color, or <code>null</code> to indicate that the - * color shall be derived from the background of the enclosed - * component. - */ - protected Color shadow; - - - /** - * Constructs a lowered EtchedBorder. The colors will be derived - * from the background color of the enclosed Component when the - * border gets painted. - */ - public EtchedBorder() - { - this(LOWERED); - } - - - /** - * Constructs an EtchedBorder with the specified appearance. The - * colors will be derived from the background color of the enclosed - * Component when the border gets painted. - * - * <p><img src="doc-files/EtchedBorder-1.png" width="500" height="200" - * alt="[An illustration of the two EtchedBorder variants]" /> - * - * @param etchType the desired appearance of the border. The value - * must be either {@link #RAISED} or {@link #LOWERED}. - * - * @throws IllegalArgumentException if <code>etchType</code> has - * an unsupported value. - */ - public EtchedBorder(int etchType) - { - if ((etchType != RAISED) && (etchType != LOWERED)) - throw new IllegalArgumentException(); - - this.etchType = etchType; - - /* The highlight and shadow fields already have a null value - * when the constructor gets called, so there is no need to - * assign a value here. - */ - } - - - /** - * Constructs a lowered EtchedBorder, explicitly selecting the - * colors that will be used for highlight and shadow. - * - * @param highlight the color that will be used for painting - * the highlight part of the border. - * - * @param shadow the color that will be used for painting - * the shadow part of the border. - * - * @see #EtchedBorder(int, Color, Color) - */ - public EtchedBorder(Color highlight, Color shadow) - { - this(LOWERED, highlight, shadow); - } - - - /** - * Constructs an EtchedBorder with the specified appearance, - * explicitly selecting the colors that will be used for - * highlight and shadow. - * - * <p><img src="doc-files/EtchedBorder-2.png" width="500" height="200" - * alt="[An illustration that shows which pixels get painted - * in what color]" /> - * - * @param etchType the desired appearance of the border. The value - * must be either {@link #RAISED} or {@link #LOWERED}. - * - * @param highlight the color that will be used for painting - * the highlight part of the border. - * - * @param shadow the color that will be used for painting - * the shadow part of the border. - * - * @throws IllegalArgumentException if <code>etchType</code> has - * an unsupported value. - */ - public EtchedBorder(int etchType, Color highlight, Color shadow) - { - this(etchType); // Checks the validity of the value. - this.highlight = highlight; - this.shadow = shadow; - } - - - /** - * Paints the border for a given component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - switch (etchType) - { - case RAISED: - paintEtchedBorder(g, x, y, width, height, - getHighlightColor(c), getShadowColor(c)); - break; - - case LOWERED: - paintEtchedBorder(g, x, y, width, height, - getShadowColor(c), getHighlightColor(c)); - break; - } - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - return new Insets(2, 2, 2, 2); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets() - */ - public Insets getBorderInsets(Component c, Insets insets) - { - insets.left = insets.right = insets.top = insets.bottom = 2; - return insets; - } - - - /** - * Determines whether this border fills every pixel in its area - * when painting. - * - * <p>If the border colors are derived from the background color of - * the enclosed component, the result is <code>true</code> because - * the derivation method always returns opaque colors. Otherwise, - * the result depends on the opacity of the individual colors. - * - * @return <code>true</code> if the border is fully opaque, or - * <code>false</code> if some pixels of the background - * can shine through the border. - */ - public boolean isBorderOpaque() - { - /* If the colors are to be drived from the enclosed Component's - * background color, the border is guaranteed to be fully opaque - * because Color.brighten() and Color.darken() always return an - * opaque color. - */ - return - ((highlight == null) || (highlight.getAlpha() == 255)) - && ((shadow == null) || (shadow.getAlpha() == 255)); - } - - - /** - * Returns the appearance of this EtchedBorder, which is either - * {@link #RAISED} or {@link #LOWERED}. - */ - public int getEtchType() - { - return etchType; - } - - - /** - * Determines the color that will be used for highlighted parts when - * painting the border around a given component. If a highlight - * color has been specified upon constructing the border, that color - * is returned. Otherwise, the background color of the enclosed - * component is brightened. - * - * @param c the component enclosed by this border. - * - * @see java.awt.Component#getBackground() - * @see java.awt.Color#brighter() - */ - public Color getHighlightColor(Component c) - { - if (highlight != null) - return highlight; - else - return c.getBackground().brighter(); - } - - - /** - * Returns the color that will be used for highlighted parts when - * painting the border, or <code>null</code> if that color will be - * derived from the background of the enclosed Component. - */ - public Color getHighlightColor() - { - return highlight; - } - - - /** - * Determines the color that will be used for shadowed parts when - * painting the border around a given component. If a shadow color - * has been specified upon constructing the border, that color is - * returned. Otherwise, the background color of the enclosed - * component is darkened. - * - * @param c the component enclosed by this border. - * - * @see java.awt.Component#getBackground() - * @see java.awt.Color#darker() - */ - public Color getShadowColor(Component c) - { - if (shadow != null) - return shadow; - else - return c.getBackground().darker(); - } - - - /** - * Returns the color that will be used for shadowed parts when - * painting the border, or <code>null</code> if that color will be - * derived from the background of the enclosed Component. - */ - public Color getShadowColor() - { - return shadow; - } - - - /** - * Paints a two-pixel etching in two colors. - * - * <pre> - * @@@@@@@@@@@. - * @.........@. @ = color a - * @. @. . = color b - * @. @. - * @@@@@@@@@@@. - * ............</pre> - * - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - * @param a one of the two colors. - * @param b the second of the two colors. - */ - private static void paintEtchedBorder(Graphics g, - int x, int y, int width, int height, - Color a, Color b) - { - Color oldColor; - - oldColor = g.getColor(); - g.translate(x, y); - width = width - 1; - height = height - 1; - - try - { - /* To understand this code, it might be helpful to look at the - * images that are included with the JavaDoc. They are located - * in the "doc-files" subdirectory. EtchedBorder-2.png might - * be especially informative. - */ - g.setColor(a); - g.drawRect(0, 0, width - 1, height - 1); - - g.setColor(b); - g.drawLine(1, 1, width - 2, 1); // top edge - g.drawLine(1, 2, 1, height - 2); // left edge - g.drawLine(0, height, width, height); // bottom edge - g.drawLine(width, 0, width, height - 1); // right edge - } - finally - { - g.translate(-x, -y); - g.setColor(oldColor); - } - } -} - diff --git a/libjava/javax/swing/border/LineBorder.java b/libjava/javax/swing/border/LineBorder.java deleted file mode 100644 index 00c16342c96..00000000000 --- a/libjava/javax/swing/border/LineBorder.java +++ /dev/null @@ -1,343 +0,0 @@ -/* LineBorder.java -- - Copyright (C) 2003 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - - -/** - * A border that consists of a line whose thickness and color can be - * specified. There also is a variant with rounded corners. - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class LineBorder - extends AbstractBorder -{ - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = -787563427772288970L; - - - /** - * A shared instance of a black, one pixel thick, plain LineBorder. - * The singleton object is lazily created by {@link - * #createBlackLineBorder()} upon its first invocation. - */ - private static LineBorder blackLineBorder; - - - /** - * A shared instance of a gray, one pixel thick, plain LineBorder. - * The singleton object is lazily created by {@link - * #createBlackGrayBorder()} upon its first invocation. - */ - private static LineBorder grayLineBorder; - - - /** - * The width of the line in pixels. - */ - protected int thickness; - - - /** - * The color of the line. - */ - protected Color lineColor; - - - /** - * Indicates whether the line is drawn with rounded corners - * (<code>true</code>) or not ((<code>false</code>). - */ - protected boolean roundedCorners; - - - /** - * Constructs a LineBorder given its color. The border will be one - * pixel thick and have plain corners. - * - * @param color the color for drawing the border. - * - * @see #LineBorder(java.awt.Color, int, boolean) - */ - public LineBorder(Color color) - { - this(color, /* thickness */ 1, /* roundedCorners */ false); - } - - - /** - * Constructs a LineBorder given its color and thickness. The - * border will have plain corners. - * - * @param color the color for drawing the border. - * @param thickness the width of the line in pixels. - * - * @see #LineBorder(java.awt.Color, int, boolean) - */ - public LineBorder(Color color, int thickness) - { - this (color, thickness, /* roundedCorners */ false); - } - - - /** - * Constructs a LineBorder given its color, thickness, and whether - * it has rounded corners. - * - * <p><img src="doc-files/LineBorder-1.png" width="500" height="200" - * alt="[An illustration of two LineBorders]" /> - * - * <p>Note that the enlarged view in the right-hand picture shows - * that the implementation draws one more pixel than specified, - * provided that <code>roundedCorders</code> is <code>true</code> - * and anti-aliasing is turned on while painting. While this might - * be considered a bug, the Sun reference implementation (at least - * JDK 1.3.1 on Apple MacOS X 10.1.5) can be observed to fill - * exactly the same pixels as shown above. The GNU Classpath - * LineBorder replicates the observed behavior of the Sun - * implementation. - * - * @param color the color for drawing the border. - * @param thickness the width of the line in pixels. - * @param roundedCorners <code>true</code> for rounded corners, - * <code>false</code> for plain corners. - * - * @since 1.3 - */ - // For the bug mentioned in the JavaDoc, please see also the comment - // in the paintBorder method below. - // - public LineBorder(Color color, int thickness, boolean roundedCorners) - { - if ((color == null) || (thickness < 0)) - throw new IllegalArgumentException(); - - this.lineColor = color; - this.thickness = thickness; - this.roundedCorners = roundedCorners; - } - - - /** - * Returns a black, one pixel thick, plain LineBorder. The method - * may always return the same (singleton) LineBorder instance. - */ - public static Border createBlackLineBorder() - { - /* Swing is not designed to be thread-safe, so there is no - * need to synchronize the access to the global variable. - */ - if (blackLineBorder == null) - blackLineBorder = new LineBorder(Color.black); - - return blackLineBorder; - } - - - /** - * Returns a gray, one pixel thick, plain LineBorder. The method - * may always return the same (singleton) LineBorder instance. - */ - public static Border createGrayLineBorder() - { - /* Swing is not designed to be thread-safe, so there is no - * need to synchronize the access to the global variable. - */ - if (grayLineBorder == null) - grayLineBorder = new LineBorder(Color.gray); - - return grayLineBorder; - } - - - /** - * Paints the line border around a given Component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - Color oldColor = g.getColor(); - - try - { - g.setColor(lineColor); - - /* If width and height were not adjusted, the border would - * appear one pixel too large in both directions. - */ - width -= 1; - height -= 1; - - /* Blurred, too large appearance - * ----------------------------- - * While Java 2D has introduced line strokes of arbitrary width, - * it seems desirable to keep this code independent of Java 2D. - * Therefore, multiple nested rectangles (or rounded rectangles) - * are drawn in order to simulate a line whose thickness is - * greater than one pixel. - * - * This hack causes a blurred appearance when anti-aliasing is - * on. Interestingly enough, though, the Sun JDK 1.3.1 (at least - * on MacOS X 10.1.5) shows exactly the same appearance under - * this condition. It thus seems likely that Sun does the same - * hack for simulating thick lines. For this reason, the - * blurred appearance seems acceptable -- especially since GNU - * Classpath tries to be compatible with the Sun reference - * implementation. - */ - for (int i = 0; i < thickness; i++) - { - if (roundedCorners) - g.drawRoundRect(x, y, width, height, thickness, thickness); - else - g.drawRect(x, y, width, height); - - x += 1; - y += 1; - width -= 2; - height -= 2; - } - } - finally - { - g.setColor(oldColor); - } - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge, which is the - * thickness of the line. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - return new Insets(thickness, thickness, thickness, thickness); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge, which is the thickness - * of the line. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets() - */ - public Insets getBorderInsets(Component c, Insets insets) - { - insets.left = insets.right = insets.top = insets.bottom = thickness; - return insets; - } - - - /** - * Returns the color of the line. - */ - public Color getLineColor() - { - return lineColor; - } - - - /** - * Returns the thickness of the line in pixels. - */ - public int getThickness() - { - return thickness; - } - - - /** - * Returns whether this LineBorder os drawm with rounded - * or with plain corners. - * - * @return <code>true</code> if the corners are rounded, - * <code>false</code> if the corners are plain. - */ - public boolean getRoundedCorners() - { - return roundedCorners; - } - - - /** - * Determines whether this border fills every pixel in its area - * when painting. - * - * @return <code>true</code> if the corners are plain and the line - * color is fully opaque; <code>false</code> if the corners - * are rounded or the line color is partially transparent. - */ - public boolean isBorderOpaque() - { - return (!roundedCorners) && (lineColor.getAlpha() == 255); - } -} - diff --git a/libjava/javax/swing/border/MatteBorder.java b/libjava/javax/swing/border/MatteBorder.java deleted file mode 100644 index f7ff1ca01c3..00000000000 --- a/libjava/javax/swing/border/MatteBorder.java +++ /dev/null @@ -1,404 +0,0 @@ -/* MatteBorder.java -- - Copyright (C) 2003, 2004 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - -import javax.swing.Icon; - -/** - * A border that is filled with either a solid color or with repeated - * icon tiles. - * - * <p><img src="doc-files/MatteBorder-1.png" width="500" height="150" - * alt="[Two MatteBorders]" /> - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class MatteBorder - extends EmptyBorder -{ - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = 4422248989617298224L; - - - /** - * The color that is used for filling the border, or - * <code>null</code> if the border is filled with repetitions of a - * tile icon. - * - * @see #tileIcon - */ - protected Color color; - - - /** - * The icon is used for filling the border with a tile, or - * <code>null</code> if the border is filled with a solid - * color. - * - * @see #color - */ - protected Icon tileIcon; - - - /** - * Constructs a MatteBorder given the width on each side - * and a fill color. - * - * <p><img src="doc-files/MatteBorder-2.png" width="500" height="150" - * alt="[A picture of a MatteBorder made by this constructor]" /> - * - * @param top the width of the border at its top edge. - * @param left the width of the border at its left edge. - * @param bottom the width of the border at its bottom edge. - * @param right the width of the border at its right edge. - * @param matteColor the color for filling the border. - */ - public MatteBorder(int top, int left, int bottom, int right, - Color matteColor) - { - super(top, left, bottom, right); - - if (matteColor == null) - throw new IllegalArgumentException(); - - this.color = matteColor; - } - - - /** - * Constructs a MatteBorder given its insets and fill color. - * - * <p><img src="doc-files/MatteBorder-3.png" width="500" height="150" - * alt="[A picture of a MatteBorder made by this constructor]" /> - * - * @param borderInsets an Insets object whose <code>top</code>, - * <code>left</code>, <code>bottom</code> and <code>right</code> - * fields indicate the with of the border at the respective - * edge. - * - * @param matteColor the color for filling the border. - */ - public MatteBorder(Insets borderInsets, Color matteColor) - { - this(borderInsets.top, borderInsets.left, - borderInsets.bottom, borderInsets.right, - matteColor); - } - - - /** - * Constructs a MatteBorder given the width on each side - * and an icon for tiling the border area. - * - * <p><img src="doc-files/MatteBorder-4.png" width="500" height="150" - * alt="[A picture of a MatteBorder made by this constructor]" /> - * - * @param top the width of the border at its top edge. - * @param left the width of the border at its left edge. - * @param bottom the width of the border at its bottom edge. - * @param right the width of the border at its right edge. - * @param tileIcon an icon for tiling the border area. - */ - public MatteBorder(int top, int left, int bottom, int right, - Icon tileIcon) - { - super(top, left, bottom, right); - - if (tileIcon == null) - throw new IllegalArgumentException(); - - this.tileIcon = tileIcon; - } - - - /** - * Constructs a MatteBorder given its insets and an icon - * for tiling the border area. - * - * <p><img src="doc-files/MatteBorder-5.png" width="500" height="150" - * alt="[A picture of a MatteBorder made by this constructor]" /> - * - * @param borderInsets an Insets object whose <code>top</code>, - * <code>left</code>, <code>bottom</code> and <code>right</code> - * fields indicate the with of the border at the respective - * edge. - * - * @param tileIcon an icon for tiling the border area. - */ - public MatteBorder(Insets borderInsets, Icon tileIcon) - { - this(borderInsets.top, borderInsets.left, - borderInsets.bottom, borderInsets.right, - tileIcon); - } - - - /** - * Constructs a MatteBorder given an icon for tiling the - * border area. The icon width is used for the border insets - * at the left and right edge, the icon height for the top and - * bottom edge. - * - * <p><img src="doc-files/MatteBorder-6.png" width="379" height="150" - * alt="[A picture of a MatteBorder made by this constructor]" /> - * - * @param tileIcon an icon for tiling the border area. - */ - public MatteBorder(Icon tileIcon) - { - this(-1, -1, -1, -1, tileIcon); - } - - - /** - * Paints the border for a given component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - Insets i = getBorderInsets(); - paintEdge(c, g, x, y, width, i.top, 0, 0); // top edge - paintEdge(c, g, x, y + height - i.bottom, // bottom edge - width, i.bottom, - 0, height - i.bottom); - paintEdge(c, g, x, y + i.top, // left edge - i.left, height - i.top, - 0, i.top); - paintEdge(c, g, x + width - i.right, y + i.top, // right edge - i.right, height - i.bottom, - width - i.right, i.top); - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - /* There is no obvious reason for overriding this method, but we - * try to have exactly the same API as the Sun reference - * implementation. - */ - return this.getBorderInsets(c, null); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets() - */ - public Insets getBorderInsets(Component c, Insets insets) - { - if (insets == null) - insets = new Insets(0, 0, 0, 0); - - if ((tileIcon != null) - && (top < 0) && (left < 0) - && (right < 0) && (bottom < 0)) - { - insets.left = insets.right = tileIcon.getIconWidth(); - insets.top = insets.bottom = tileIcon.getIconHeight(); - return insets; - } - - /* Copy top, left, bottom and right into the respective - * field of insets. - */ - return super.getBorderInsets(c, insets); - } - - - /** - * Measures the width of this border. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets() - { - /* The inherited implementation of EmptyBorder.isBorderOpaque() - * would do the same. It is not clear why this is overriden in the - * Sun implementation, at least not from just reading the JavaDoc. - */ - return this.getBorderInsets(null, null); - } - - - /** - * Returns the color that is used for filling the border, or - * <code>null</code> if the border is filled with repetitions of a - * tile icon. - */ - public Color getMatteColor() - { - return color; - } - - - /** - * Returns the icon is used for tiling the border, or - * <code>null</code> if the border is filled with a color instead of - * an icon. - */ - public Icon getTileIcon() - { - return tileIcon; - } - - - /** - * Determines whether this border fills every pixel in its area - * when painting. - * - * @return <code>true</code> if the border is filled with an - * opaque color; <code>false</code> if it is filled with - * a semi-transparent color or with an icon. - */ - public boolean isBorderOpaque() - { - return (color != null) && (color.getAlpha() == 255); - } - - - /** - * Paints a rectangular area of the border. This private helper - * method is called once for each of the border edges - * by {@link #paintBorder}. - * - * @param c the component whose border is being painted. - * @param g the graphics for painting. - * @param x the horizontal position of the rectangular area. - * @param y the vertical position of the rectangular area. - * @param width the width of the rectangular area. - * @param height the height of the rectangular area. - * @param dx the x displacement for repeating the tile. - * @param dy the y displacement for repeating the tile. - */ - private void paintEdge(Component c, Graphics g, - int x, int y, int width, int height, - int dx, int dy) - { - Color oldColor; - int iconWidth, iconHeight; - Graphics clipped; - - if ((width <= 0) || (height <= 0)) - return; - - /* Paint a colored rectangle if desired. */ - if (color != null) - { - oldColor = g.getColor(); - try - { - g.setColor(color); - g.fillRect(x, y, width, height); - } - finally - { - g.setColor(oldColor); - } - return; - } - - /* Determine the width and height of the icon. Some icons return - * -1 if it is an image whose dimensions have not yet been - * retrieved. There is not much we can do about this, but we - * should at least avoid entering the paint loop below - * with negative increments. - */ - iconWidth = tileIcon.getIconWidth(); - iconHeight = tileIcon.getIconHeight(); - if ((iconWidth <= 0) || (iconHeight <= 0)) - return; - - dx = dx % iconWidth; - dy = dy % iconHeight; - - clipped = g.create(); - try - { - clipped.setClip(x, y, width, height); - for (int ty = y - dy; ty < y + height; ty += iconHeight) - for (int tx = x - dx; tx < x + width; tx += iconWidth) - tileIcon.paintIcon(c, clipped, tx, ty); - } - finally - { - clipped.dispose(); - } - } -} - diff --git a/libjava/javax/swing/border/SoftBevelBorder.java b/libjava/javax/swing/border/SoftBevelBorder.java deleted file mode 100644 index fa718e35bac..00000000000 --- a/libjava/javax/swing/border/SoftBevelBorder.java +++ /dev/null @@ -1,329 +0,0 @@ -/* SoftBevelBorder.java -- - Copyright (C) 2003 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - - -/** - * A rectangular, three pixel thick border that looks like a BevelBorder - * with slightly softened corners. - * - * <p>Like BevelBorder, SoftBevelBorder has a highlight and a shadow - * color. In the raised variant, the highlight color is used for the - * top and left edges, and the shadow color is used for the bottom and - * right edge. In the lowered variant, color usage is reversed. For - * an image, see the documentation of the individual constructors. - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class SoftBevelBorder - extends BevelBorder -{ - /** - * Determined using the <code>serialver</code> tool - * of Sun JDK 1.4.1_01 on GNU/Linux 2.4.20. Interestingly, - * the Apple/Sun JDK 1.3.1 on MacOS X 10.1.5 gives a different - * value, namely -6658357140774549493L. - */ - static final long serialVersionUID = 5248789787305979975L; - - - /** - * Constructs a SoftBevelBorder whose colors will be derived from the - * background of the enclosed component. The background color is - * retrieved each time the border is painted, so a SoftBevelBorder - * constructed by this method will automatically reflect a change - * to the component’s background color. - * - * <p><img src="doc-files/SoftBevelBorder-1.png" width="500" height="200" - * alt="[An illustration showing raised and lowered SoftBevelBorders]" /> - * - * @param bevelType the desired appearance of the border. The value - * must be either {@link BevelBorder#RAISED} - * or {@link BevelBorder#LOWERED}. - * - * @throws IllegalArgumentException if <code>bevelType</code> has - * an unsupported value. - */ - public SoftBevelBorder(int bevelType) - { - super(bevelType); - } - - - /** - * Constructs a SoftBevelBorder given its appearance type and two - * colors for its highlight and shadow. - * - * <p><img src="doc-files/SoftBevelBorder-2.png" width="500" height="150" - * alt="[An illustration showing SoftBevelBorders that were - * constructed with this method]" /> - * - * @param bevelType the desired appearance of the border. The value - * must be either {@link BevelBorder#RAISED} or {@link - * BevelBorder#LOWERED}. - * - * @param highlight the color that will be used for the inner side - * of the highlighted edges (top and left if if - * <code>bevelType</code> is {@link BevelBorder#RAISED}; - * bottom and right otherwise). The color for the outer side - * is a brightened version of this color. - * - * @param shadow the color that will be used for the outer side of - * the shadowed edges (bottom and right if - * <code>bevelType</code> is {@link BevelBorder#RAISED}; top - * and left otherwise). The color for the inner side is a - * brightened version of this color. - * - * @throws IllegalArgumentException if <code>bevelType</code> has an - * unsupported value. - * - * @throws NullPointerException if <code>highlight</code> or - * <code>shadow</code> is <code>null</code>. - * - * @see java.awt.Color.brighter() - */ - public SoftBevelBorder(int bevelType, Color highlight, Color shadow) - { - this(bevelType, - /* highlightOuter */ highlight.brighter(), - /* highlightInner */ highlight, - /* shadowOuter */ shadow, - /* shadowInner */ shadow.brighter()); - } - - - /** - * Constructs a SoftBevelBorder given its appearance type and all - * colors. - * - * <p><img src="doc-files/SoftBevelBorder-3.png" width="500" height="150" - * alt="[An illustration showing SoftBevelBorders that were - * constructed with this method]" /> - * - * @param bevelType the desired appearance of the border. The value - * must be either {@link BevelBorder#RAISED} or {@link - * BevelBorder#LOWERED}. - * - * @param highlightOuter the color that will be used for the outer - * side of the highlighted edges (top and left if - * <code>bevelType</code> is {@link BevelBorder#RAISED}; - * bottom and right otherwise). - * - * @param highlightInner the color that will be used for the inner - * side of the highlighted edges. - * - * @param shadowOuter the color that will be used for the outer side - * of the shadowed edges (bottom and right if - * <code>bevelType</code> is {@link BevelBorder#RAISED}; top - * and left otherwise). - * - * @param shadowInner the color that will be used for the inner - * side of the shadowed edges. - * - * @throws IllegalArgumentException if <code>bevelType</code> has - * an unsupported value. - * - * @throws NullPointerException if one of the passed colors - * is <code>null</code>. - */ - public SoftBevelBorder(int bevelType, - Color highlightOuter, Color highlightInner, - Color shadowOuter, Color shadowInner) - { - super(bevelType, - highlightOuter, highlightInner, - shadowOuter, shadowInner); - } - - - /** - * Paints the border for a given component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - switch (bevelType) - { - case RAISED: - paintSoftBevel(g, x, y, width, height, - getHighlightOuterColor(c), getHighlightInnerColor(c), - getShadowInnerColor(c), getShadowOuterColor(c)); - break; - - case LOWERED: - paintSoftBevel(g, x, y, width, height, - getShadowOuterColor(c), getShadowInnerColor(c), - getHighlightInnerColor(c), getHighlightOuterColor(c)); - break; - } - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - return new Insets(3, 3, 3, 3); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets() - */ - public Insets getBorderInsets(Component c, Insets insets) - { - insets.left = insets.right = insets.top = insets.bottom = 3; - return insets; - } - - - /** - * Determines whether this border fills every pixel in its area - * when painting. - * - * <p>The enlarged view (see documentation for constructors) shows - * that a SoftBevelBorder does not paint all pixels. Therefore, - * this method always returns <code>false</code>. - * - * @return <code>false</code>. - */ - public boolean isBorderOpaque() - { - return false; - } - - - /** - * Paints a soft bevel in four colors. - * - * <pre> - * @@@@@@@@@@@. - * @@.........# @ = color a - * @.. # . = color b - * @. # X = color c - * .. X# # = color d - * . ##########</pre> - * - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - * @param a the color for the outer side of the top and left edges. - * @param b the color for the inner side of the top and left edges. - * @param c the color for the inner side of the bottom and right edges. - * @param d the color for the outer side of the bottom and right edges. - */ - private static void paintSoftBevel(Graphics g, - int x, int y, int width, int height, - Color a, Color b, Color c, Color d) - { - Color oldColor; - - oldColor = g.getColor(); - g.translate(x, y); - width = width - 1; - height = height - 1; - - try - { - /* To understand this code, it might be helpful to look at the - * images that are included with the JavaDoc, especially - * SoftBevelBorder-3.png. They are located in the "doc-files" - * subdirectory. - */ - g.setColor(a); - g.drawLine(0, 0, width - 1, 0); // a, horizontal - g.drawLine(0, 1, 2, 1); // a, horizontal - g.drawLine(0, 2, 0, height - 1); // a, vertical - - g.setColor(b); - g.drawLine(width, 0, width, 0); // b, horizontal - g.drawLine(2, 1, width - 1, 1); // b, horizontal - g.drawLine(1, 2, 2, 2); // b, horizontal - g.drawLine(1, 3, 1, height - 1); // b, vertical - g.drawLine(0, height - 1, 0, height); // b, vertical - - g.setColor(c); - g.drawLine(width - 1, height - 1, // c, one pixel - width - 1, height - 1); - - g.setColor(d); - g.drawLine(2, height, width, height); // d, horizontal - g.drawLine(width, 2, width, height - 1); // d, vertical - } - finally - { - g.translate(-x, -y); - g.setColor(oldColor); - } - } -} - diff --git a/libjava/javax/swing/border/TitledBorder.java b/libjava/javax/swing/border/TitledBorder.java deleted file mode 100644 index 30e4bcd6947..00000000000 --- a/libjava/javax/swing/border/TitledBorder.java +++ /dev/null @@ -1,1155 +0,0 @@ -/* TitledBorder.java -- - Copyright (C) 2003, 2004 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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.border; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Shape; - -import javax.swing.UIManager; - - -/** - * A border that paints a title on top of another border. - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class TitledBorder - extends AbstractBorder -{ - /** - * A value for the <code>titlePosition</code> property that vertically - * positions the title text at the default vertical position, which - * is in the middle of the top line of the border. - * - * @see #getTitlePosition() - * @see #setTitlePosition(int) - */ - public static final int DEFAULT_POSITION = 0; - - - /** - * A value for the <code>titlePosition</code> property that vertically - * positions the title text above the top line of the border. - * - * @see #getTitlePosition() - * @see #setTitlePosition(int) - */ - public static final int ABOVE_TOP = 1; - - - /** - * A value for the <code>titlePosition</code> property that vertically - * positions the title text at the middle of the top line - * of the border. - * - * @see #getTitlePosition() - * @see #setTitlePosition(int) - */ - public static final int TOP = 2; - - - /** - * A value for the <code>titlePosition</code> property that vertically - * positions the title text below the top line of the border. - * - * @see #getTitlePosition() - * @see #setTitlePosition(int) - */ - public static final int BELOW_TOP = 3; - - - /** - * A value for the <code>titlePosition</code> property that vertically - * positions the title text above the bottom line of the border. - * - * @see #getTitlePosition() - * @see #setTitlePosition(int) - */ - public static final int ABOVE_BOTTOM = 4; - - - /** - * A value for the <code>titlePosition</code> property that vertically - * positions the title text at the center of the bottom line - * of the border. - * - * @see #getTitlePosition() - * @see #setTitlePosition(int) - */ - public static final int BOTTOM = 5; - - - /** - * A value for the <code>titlePosition</code> property that vertically - * positions the title text below the bottom line of the border. - * - * @see #getTitlePosition() - * @see #setTitlePosition(int) - */ - public static final int BELOW_BOTTOM = 6; - - - /** - * A value for the <code>titleJustification</code> property that - * horizontally aligns the title text with either the left or the - * right edge of the border, depending on the orientation of the - * component nested into the border. If the component orientation - * is left-to-right, the title text is aligned with the left edge; - * otherwise, it is aligned with the right edge. This is the same - * behavior as with {@link #LEADING}. - * - * @see #getTitleJustification() - * @see #setTitleJustification(int) - * @see java.awt.ComponentOrientation#isLeftToRight() - */ - public static final int DEFAULT_JUSTIFICATION = 0; - - - /** - * A value for the <code>titleJustification</code> property that - * horizontally aligns the title text with the left-hand edge of - * the border. - * - * @see #getTitleJustification() - * @see #setTitleJustification(int) - */ - public static final int LEFT = 1; - - - /** - * A value for the <code>titleJustification</code> property that - * horizontally aligns the title text with the center of the border. - * - * @see #getTitleJustification() - * @see #setTitleJustification(int) - */ - public static final int CENTER = 2; - - - /** - * A value for the <code>titleJustification</code> property that - * horizontally aligns the title text with the right-hand edge of - * the border. - * - * @see #getTitleJustification() - * @see #setTitleJustification(int) - */ - public static final int RIGHT = 3; - - - /** - * A value for the <code>titleJustification</code> property that - * horizontally aligns the title text with either the left or the - * right edge of the border, depending on the orientation of the - * component nested into the border. If the component orientation - * is left-to-right, the title text is aligned with the left edge; - * otherwise, it is aligned with the right edge. This is the same - * behavior as with {@link #DEFAULT_JUSTIFICATION}. - * - * @see #getTitleJustification() - * @see #setTitleJustification(int) - * @see java.awt.ComponentOrientation#isLeftToRight() - */ - public static final int LEADING = 4; - - - /** - * A value for the <code>titleJustification</code> property that - * horizontally aligns the title text with either the right or the - * left edge of the border, depending on the orientation of the - * component nested into the border. If the component orientation - * is left-to-right, the title text is aligned with the right edge; - * otherwise, it is aligned with the left edge. - * - * @see #getTitleJustification() - * @see #setTitleJustification(int) - * @see java.awt.ComponentOrientation#isLeftToRight() - */ - public static final int TRAILING = 5; - - - /** - * The number of pixels between the inside of {@link #border} - * and the bordered component. - */ - protected static final int EDGE_SPACING = 2; - - - /** - * The number of pixels between the outside of this TitledBorder - * and the beginning (if left-aligned) or end (if right-aligned) - * of the title text. - */ - protected static final int TEXT_INSET_H = 5; - - - /** - * The number of pixels between the title text and {@link #border}. - * This value is only relevant if the title text does not intersect - * {@link #border}. No intersection occurs if {@link #titlePosition} - * is one of {@link #ABOVE_TOP}, {@link #BELOW_TOP}, {@link #ABOVE_BOTTOM}, - * or {@link #BELOW_BOTTOM}. - */ - protected static final int TEXT_SPACING = 2; - - - /** - * Determined using the <code>serialver</code> tool of Apple/Sun JDK 1.3.1 - * on MacOS X 10.1.5. - */ - static final long serialVersionUID = 8012999415147721601L; - - - /** - * The title, or <code>null</code> to display no title. - */ - protected String title; - - - /** - * The border underneath the title. If this value is - * <code>null</code>, the border will be retrieved from the {@link - * javax.swing.UIManager}’s defaults table using the key - * <code>TitledBorder.border</code>. - */ - protected Border border; - - - /** - * The vertical position of the title text relative to the border, - * which is one of {@link #ABOVE_TOP}, {@link #TOP}, {@link - * #BELOW_TOP}, {@link #ABOVE_BOTTOM}, {@link #BOTTOM}, {@link - * #BELOW_BOTTOM}, or {@link #DEFAULT_POSITION}. - */ - protected int titlePosition; - - - /** - * The horizontal alignment of the title text in relation to the - * border, which is one of {@link #LEFT}, {@link #CENTER}, {@link - * #RIGHT}, {@link #LEADING}, {@link #TRAILING}, or {@link - * #DEFAULT_JUSTIFICATION}. - */ - protected int titleJustification; - - - /** - * The font for displaying the title text. If this value is - * <code>null</code>, the font will be retrieved from the {@link - * javax.swing.UIManager}’s defaults table using the key - * <code>TitledBorder.font</code>. - */ - protected Font titleFont; - - - /** - * The color for displaying the title text. If this value is - * <code>null</code>, the color will be retrieved from the {@link - * javax.swing.UIManager}’s defaults table using the key - * <code>TitledBorder.titleColor</code>. - */ - protected Color titleColor; - - - /** - * Constructs a TitledBorder given the text of its title. - * - * @param title the title text, or <code>null</code> to use no title text. - */ - public TitledBorder(String title) - { - this(/* border */ null, - title, DEFAULT_JUSTIFICATION, DEFAULT_POSITION, - /* titleFont */ null, /* titleColor */ null); - } - - - /** - * Constructs an initially untitled TitledBorder given another border. - * - * @param border the border underneath the title, or <code>null</code> - * to use a default from the current look and feel. - */ - public TitledBorder(Border border) - { - this(border, /* title */ "", DEFAULT_JUSTIFICATION, DEFAULT_POSITION, - /* titleFont */ null, /* titleColor */ null); - } - - - /** - * Constructs a TitledBorder given its border and title text. - * - * @param border the border underneath the title, or <code>null</code> - * to use a default from the current look and feel. - * - * @param title the title text, or <code>null</code> to use no title - * text. - */ - public TitledBorder(Border border, String title) - { - this(border, title, DEFAULT_JUSTIFICATION, DEFAULT_POSITION, - /* titleFont */ null, /* titleColor */ null); - } - - - /** - * Constructs a TitledBorder given its border, title text, horizontal - * alignment, and vertical position. - * - * @param border the border underneath the title, or <code>null</code> - * to use a default from the current look and feel. - * - * @param title the title text, or <code>null</code> to use no title - * text. - * - * @param titleJustification the horizontal alignment of the title - * text in relation to the border. The value must be one of - * {@link #LEFT}, {@link #CENTER}, {@link #RIGHT}, {@link #LEADING}, - * {@link #TRAILING}, or {@link #DEFAULT_JUSTIFICATION}. - - * @param titlePosition the vertical position of the title text - * in relation to the border. The value must be one of - * {@link #ABOVE_TOP}, {@link #TOP}, {@link #BELOW_TOP}, - * {@link #ABOVE_BOTTOM}, {@link #BOTTOM}, {@link #BELOW_BOTTOM}, - * or {@link #DEFAULT_POSITION}. - * - * @throws IllegalArgumentException if <code>titleJustification</code> - * or <code>titlePosition</code> have an unsupported value. - */ - public TitledBorder(Border border, String title, int titleJustification, - int titlePosition) - { - this(border, title, titleJustification, titlePosition, - /* titleFont */ null, /* titleColor */ null); - } - - - /** - * Constructs a TitledBorder given its border, title text, horizontal - * alignment, vertical position, and font. - * - * @param border the border underneath the title, or <code>null</code> - * to use a default from the current look and feel. - * - * @param title the title text, or <code>null</code> to use no title - * text. - * - * @param titleJustification the horizontal alignment of the title - * text in relation to the border. The value must be one of - * {@link #LEFT}, {@link #CENTER}, {@link #RIGHT}, {@link #LEADING}, - * {@link #TRAILING}, or {@link #DEFAULT_JUSTIFICATION}. - * - * @param titlePosition the vertical position of the title text - * in relation to the border. The value must be one of - * {@link #ABOVE_TOP}, {@link #TOP}, {@link #BELOW_TOP}, - * {@link #ABOVE_BOTTOM}, {@link #BOTTOM}, {@link #BELOW_BOTTOM}, - * or {@link #DEFAULT_POSITION}. - * - * @param titleFont the font for the title text, or <code>null</code> - * to use a default from the current look and feel. - * - * @throws IllegalArgumentException if <code>titleJustification</code> - * or <code>titlePosition</code> have an unsupported value. - */ - public TitledBorder(Border border, String title, int titleJustification, - int titlePosition, Font titleFont) - { - this(border, title, titleJustification, titlePosition, titleFont, - /* titleColor */ null); - } - - - /** - * Constructs a TitledBorder given its border, title text, horizontal - * alignment, vertical position, font, and color. - * - * @param border the border underneath the title, or <code>null</code> - * to use a default from the current look and feel. - * - * @param title the title text, or <code>null</code> to use no title - * text. - * - * @param titleJustification the horizontal alignment of the title - * text in relation to the border. The value must be one of - * {@link #LEFT}, {@link #CENTER}, {@link #RIGHT}, {@link #LEADING}, - * {@link #TRAILING}, or {@link #DEFAULT_JUSTIFICATION}. - * - * @param titlePosition the vertical position of the title text - * in relation to the border. The value must be one of - * {@link #ABOVE_TOP}, {@link #TOP}, {@link #BELOW_TOP}, - * {@link #ABOVE_BOTTOM}, {@link #BOTTOM}, {@link #BELOW_BOTTOM}, - * or {@link #DEFAULT_POSITION}. - * - * @param titleFont the font for the title text, or <code>null</code> - * to use a default from the current look and feel. - * - * @param titleColor the color for the title text, or <code>null</code> - * to use a default from the current look and feel. - * - * @throws IllegalArgumentException if <code>titleJustification</code> - * or <code>titlePosition</code> have an unsupported value. - */ - public TitledBorder(Border border, String title, int titleJustification, - int titlePosition, Font titleFont, Color titleColor) - { - this.border = border; - this.title = title; - - /* Invoking the setter methods ensures that the newly constructed - * TitledBorder has valid property values. - */ - setTitleJustification(titleJustification); - setTitlePosition(titlePosition); - - this.titleFont = titleFont; - this.titleColor = titleColor; - } - - - /** - * Paints the border and the title text. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - Measurements mes = getMeasurements(c); - Font oldFont = g.getFont(); - Color oldColor = g.getColor(); - - /** - * A local helper class for painting the border without changing - * any pixels inside the rectangle of the title text. - */ - class BorderPainter - { - private Component c; - private Border b; - private int x, y, width, height; - - /** - * Constructs a BorderPainter. - * - * @param c the component whose border is being painted. - * @param b the border object. - * @param x the x coordinate of the rectangle delimiting the border. - * @param y the y coordinate of the rectangle delimiting the border. - * @param width the width of the rectangle delimiting the border. - * @param height the width of the rectangle delimiting the border. - */ - public BorderPainter(Component c, Border b, - int x, int y, int width, int height) - { - this.c = c; - this.b = b; - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } - - - /** - * Paints the entire border. - */ - public void paint(Graphics g) - { - if (b != null) - b.paintBorder(c, g, x, y, width - 1, height - 1); - } - - - /** - * Paints the border, clipping the drawing operation to a - * given rectangular area. - */ - private void paint(Graphics g, - int clipX, int clipY, int clipWidth, int clipHeight) - { - Shape oldClip = g.getClip(); - try - { - g.clipRect(clipX, clipY, clipWidth, clipHeight); - paint(g); - } - finally - { - g.setClip(oldClip); - } - } - - - /** - * Paints the border without affecting a given rectangular area. - * This is used for painting the border without drawing anything - * underneath the title text. - * - * <p>Since we do not want to introduce unnecessary dependencies - * on Java 2D, we perform the clipping without constructive geometry - * (provided by java.awt.geom.Area). Instead, the border’s - * bounding rectangle is split into smaller parts, which are then - * clipped and painted individually.: - * - * <p><pre> - * +--------------------+ +--------------------+ - * | | | 1 | - * | +--------+ | +---+--------+-------+ - * | | hole | | |====> | 2 | hole | 3 | - * | +--------+ | |---+--------+-------+ - * | | | 4 | - * +--------------------+ +--------------------+</pre> - * - */ - public void paintExcept(Graphics g, - int holeX, int holeY, int holeWidth, int holeHeight) - { - int stripeHeight; - - stripeHeight = holeY - y; - if (stripeHeight > 0) - paint(g, x, y, width, stripeHeight); // patch #1 in the image above - - stripeHeight = holeHeight; - if (stripeHeight > 0) - { - paint(g, x, holeY, holeX - x, stripeHeight); // patches #2 and #3 - paint(g, holeX + holeWidth, holeY, width - (holeX + holeWidth), stripeHeight); - } - - stripeHeight = height - (holeY - y + holeHeight); - if (stripeHeight > 0) - paint(g, x, y + height - stripeHeight, width, stripeHeight); // #4 - } - }; - - BorderPainter bp; - int textX, textY, borderWidth, borderHeight; - - borderWidth = width - (mes.borderSpacing.left + mes.borderSpacing.right); - borderHeight = height - (mes.borderSpacing.top + mes.borderSpacing.bottom); - bp = new BorderPainter(c, getBorder(), - x + mes.borderSpacing.left, y + mes.borderSpacing.top, - borderWidth, borderHeight); - - switch (getRealTitleJustification(c)) - { - case LEFT: - textX = x + TEXT_INSET_H; - break; - - case CENTER: - textX = x + (borderWidth - mes.textWidth) / 2; - break; - - case RIGHT: - textX = x + borderWidth - (mes.textWidth + TEXT_INSET_H); - break; - - default: - throw new IllegalStateException(); - } - - switch (titlePosition) - { - case ABOVE_TOP: - textY = y; - break; - - case TOP: - case DEFAULT_POSITION: - default: - textY = y + mes.borderSpacing.top + mes.borderInsets.top - mes.textAscent; - break; - - case BELOW_TOP: - textY = y + mes.borderSpacing.top + mes.borderInsets.top + TEXT_SPACING; - break; - - case ABOVE_BOTTOM: - textY = y + height - mes.borderSpacing.bottom - mes.borderInsets.bottom - - TEXT_SPACING - (mes.textAscent + mes.textDescent); - break; - - case BOTTOM: - case BELOW_BOTTOM: - textY = y + height - (mes.textAscent + mes.textDescent); - break; - } - - if (mes.trimmedText == null) - bp.paint(g); - else - { - try - { - g.setFont(mes.font); - g.setColor(getTitleColor()); - g.drawString(mes.trimmedText, textX, textY + mes.textAscent); - } - finally - { - g.setFont(oldFont); - g.setColor(oldColor); - } - bp.paintExcept(g, textX - 2, textY, - mes.textWidth + 2, mes.textAscent + mes.textDescent); - } - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, new Insets(0, 0, 0, 0)); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets() - */ - public Insets getBorderInsets(Component c, Insets insets) - { - return getMeasurements(c).getContentInsets(insets); - } - - - /** - * Returns <code>false</code>, indicating that there are pixels inside - * the area of this border where the background shines through. - * - * @return <code>false</code>. - */ - public boolean isBorderOpaque() - { - /* Note that the AbstractBorder.isBorderOpaque would also return - * false, so there is actually no need to override the inherited - * implementation. However, GNU Classpath strives for exact - * compatibility with the Sun reference implementation, which - * overrides isBorderOpaque for unknown reasons. - */ - return false; - } - - - /** - * Returns the text of the title. - * - * @return the title text, or <code>null</code> if no title is - * displayed. - */ - public String getTitle() - { - return title; - } - - - /** - * Retrieves the border underneath the title. If no border has been - * set, or if it has been set to<code>null</code>, the current - * {@link javax.swing.LookAndFeel} will be asked for a border - * using the key <code>TitledBorder.border</code>. - * - * @return a border, or <code>null</code> if the current LookAndFeel - * does not provide a border for the key - * <code>TitledBorder.border</code>. - * - * @see javax.swing.UIManager#getBorder(Object) - */ - public Border getBorder() - { - if (border != null) - return border; - - return UIManager.getBorder("TitledBorder.border"); - } - - - /** - * Returns the vertical position of the title text in relation - * to the border. - * - * @return one of the values {@link #ABOVE_TOP}, {@link #TOP}, - * {@link #BELOW_TOP}, {@link #ABOVE_BOTTOM}, {@link #BOTTOM}, - * {@link #BELOW_BOTTOM}, or {@link #DEFAULT_POSITION}. - */ - public int getTitlePosition() - { - return titlePosition; - } - - - /** - * Returns the horizontal alignment of the title text in relation to - * the border. - * - * @return one of the values {@link #LEFT}, {@link #CENTER}, {@link - * #RIGHT}, {@link #LEADING}, {@link #TRAILING}, or {@link - * #DEFAULT_JUSTIFICATION}. - */ - public int getTitleJustification() - { - return titleJustification; - } - - - /** - * Retrieves the font for displaying the title text. If no font has - * been set, or if it has been set to<code>null</code>, the current - * {@link javax.swing.LookAndFeel} will be asked for a font - * using the key <code>TitledBorder.font</code>. - * - * @return a font, or <code>null</code> if the current LookAndFeel - * does not provide a font for the key - * <code>TitledBorder.font</code>. - * - * @see javax.swing.UIManager#getFont(Object) - */ - public Font getTitleFont() - { - if (titleFont != null) - return titleFont; - - return UIManager.getFont("TitledBorder.font"); - } - - - /** - * Retrieves the color for displaying the title text. If no color has - * been set, or if it has been set to<code>null</code>, the current - * {@link javax.swing.LookAndFeel} will be asked for a color - * using the key <code>TitledBorder.titleColor</code>. - * - * @return a color, or <code>null</code> if the current LookAndFeel - * does not provide a color for the key - * <code>TitledBorder.titleColor</code>. - * - * @see javax.swing.UIManager#getColor(Object) - */ - public Color getTitleColor() - { - if (titleColor != null) - return titleColor; - - return UIManager.getColor("TitledBorder.titleColor"); - } - - - /** - * Sets the text of the title. - * - * @param title the new title text, or <code>null</code> for displaying - * no text at all. - */ - public void setTitle(String title) - { - // Swing borders are not JavaBeans, thus no need to fire an event. - this.title = title; - } - - - /** - * Sets the border underneath the title. - * - * @param border a border, or <code>null</code> to use the - * border that is supplied by the current LookAndFeel. - * - * @see #getBorder() - */ - public void setBorder(Border border) - { - // Swing borders are not JavaBeans, thus no need to fire an event. - this.border = border; - } - - - /** - * Sets the vertical position of the title text in relation - * to the border. - * - * @param titlePosition one of the values {@link #ABOVE_TOP}, - * {@link #TOP}, {@link #BELOW_TOP}, {@link #ABOVE_BOTTOM}, - * {@link #BOTTOM}, {@link #BELOW_BOTTOM}, - * or {@link #DEFAULT_POSITION}. - * - * @throws IllegalArgumentException if an unsupported value is passed - * for <code>titlePosition</code>. - */ - public void setTitlePosition(int titlePosition) - { - if ((titlePosition < DEFAULT_POSITION) || (titlePosition > BELOW_BOTTOM)) - throw new IllegalArgumentException(); - - // Swing borders are not JavaBeans, thus no need to fire an event. - this.titlePosition = titlePosition; - } - - - /** - * Sets the horizontal alignment of the title text in relation to the border. - * - * @param titleJustification the new alignment, which must be one of - * {@link #LEFT}, {@link #CENTER}, {@link #RIGHT}, {@link #LEADING}, - * {@link #TRAILING}, or {@link #DEFAULT_JUSTIFICATION}. - * - * @throws IllegalArgumentException if an unsupported value is passed - * for <code>titleJustification</code>. - */ - public void setTitleJustification(int titleJustification) - { - if ((titleJustification < DEFAULT_JUSTIFICATION) - || (titleJustification > TRAILING)) - throw new IllegalArgumentException(); - - // Swing borders are not JavaBeans, thus no need to fire an event. - this.titleJustification = titleJustification; - } - - - /** - * Sets the font for displaying the title text. - * - * @param titleFont the font, or <code>null</code> to use the font - * provided by the current {@link javax.swing.LookAndFeel}. - * - * @see #getTitleFont() - */ - public void setTitleFont(Font titleFont) - { - // Swing borders are not JavaBeans, thus no need to fire an event. - this.titleFont = titleFont; - } - - - /** - * Sets the color for displaying the title text. - * - * @param titleColor the color, or <code>null</code> to use the color - * provided by the current {@link javax.swing.LookAndFeel}. - * - * @see #getTitleColor() - */ - public void setTitleColor(Color titleColor) - { - // Swing borders are not JavaBeans, thus no need to fire an event. - this.titleColor = titleColor; - } - - - /** - * Calculates the minimum size needed for displaying the border - * and its title. - * - * @param c the Component for which this TitledBorder consitutes - * a border. - */ - public Dimension getMinimumSize(Component c) - { - return getMeasurements(c).getMinimumSize(); - } - - - /** - * Returns the font that is used for displaying the title text for - * a given Component. - * - * @param c the Component for which this TitledBorder is the border. - * - * @return The font returned by {@link #getTitleFont()}, or a fallback - * if {@link #getTitleFont()} returned <code>null</code>. - */ - protected Font getFont(Component c) - { - Font f; - - f = getTitleFont(); - if (f != null) - return f; - - return new Font("Dialog", Font.PLAIN, 12); - } - - - /** - * Returns the horizontal alignment of the title text in relation to - * the border, mapping the component-dependent alignment constants - * {@link #LEADING}, {@link #TRAILING} and {@link #DEFAULT_JUSTIFICATION} - * to the correct value according to the embedded component’s - * orientation. - * - * @param c the Component for which this TitledBorder is the border. - * - * @return one of the values {@link #LEFT}, {@link #CENTER}, or {@link - * #RIGHT}. - */ - private int getRealTitleJustification(Component c) - { - switch (titleJustification) - { - case DEFAULT_JUSTIFICATION: - case LEADING: - if ((c == null) || c.getComponentOrientation().isLeftToRight()) - return LEFT; - else - return RIGHT; - - case TRAILING: - if ((c == null) || c.getComponentOrientation().isLeftToRight()) - return RIGHT; - else - return LEFT; - - default: - return titleJustification; - } - } - - - /** - * Performs various measurements for the current state of this TitledBorder - * and the given Component. - */ - private Measurements getMeasurements(Component c) - { - Measurements m = new Measurements(); - FontMetrics fmet; - - m.font = getFont(c); - fmet = c.getFontMetrics(m.font); - m.border = getBorder(); - if (m.border != null) - m.borderInsets = m.border.getBorderInsets(c); - else - m.borderInsets = new Insets(0, 0, 0, 0); - - if (title != null) - { - m.trimmedText = title.trim(); - if (m.trimmedText.length() == 0) - m.trimmedText = null; - } - - m.textAscent = fmet.getAscent(); - m.textDescent = fmet.getDescent(); - if (m.trimmedText != null) - m.textWidth = fmet.stringWidth(m.trimmedText) + 3; - - m.edgeSpacing = new Insets(EDGE_SPACING, EDGE_SPACING, EDGE_SPACING, EDGE_SPACING); - m.borderSpacing = new Insets(0, 0, 0, 0); - - switch (titlePosition) - { - case ABOVE_TOP: - m.borderSpacing.top += m.textAscent + m.textDescent + TEXT_SPACING; - break; - - case BELOW_TOP: - m.edgeSpacing.top += m.textAscent + m.textDescent + TEXT_SPACING; - break; - - case ABOVE_BOTTOM: - m.edgeSpacing.bottom += m.textAscent + m.textDescent + TEXT_SPACING; - break; - - case BOTTOM: - m.edgeSpacing.bottom += Math.max(m.textAscent - m.borderInsets.bottom, 0); - m.borderSpacing.bottom += m.textDescent; - break; - - case BELOW_BOTTOM: - m.borderSpacing.bottom += m.textAscent + m.textDescent + TEXT_SPACING; - break; - - default: - m.borderSpacing.top += m.textAscent; - } - - return m; - } - - - /** - * A private helper class for holding the result of measuring the - * distances of a TitledBorder. While it would be possible to cache - * these objects, it does not seem to be worth the effort. Note that - * invalidating the cache would be tricky, especially since there is - * no notification mechanism that would inform the cache when - * border has changed, so it would return different insets. - */ - private static class Measurements - { - /** - * The font used for displaying the title text. Note that it can - * well be that the TitledBorder’s font is <code>null</code>, - * which means that the font is to be retrieved from the current - * LookAndFeel. In this case, this <code>font</code> field will - * contain the result of the retrieval. Therefore, it is safe - * to assume that his <code>font</code> field will never have - * a <code>null</code> value. - */ - Font font; - - - /** - * The number of pixels between the base line and the top of the - * text box. - */ - int textAscent; - - - /** - * The number of pixels between the base line and the bottom of - * the text box. - */ - int textDescent; - - - /** - * The title text after removing leading and trailing white space - * characters. If the title consists only of white space, the - * value of <code>trimmedText</code> will be <code>null</code>. - */ - String trimmedText; - - - /** - * The width of the trimmed title text in pixels. - */ - int textWidth; - - - /** - * The border that constitues the interior border - * underneath the title text. - */ - Border border; - - - /** - * The distance between the TitledBorder and the interior border. - */ - Insets borderSpacing; - - - /** - * The width of the interior border, as returned by - * <code>border.getBorderInsets()</code>. - */ - Insets borderInsets; - - - /** - * The distance between the interior border and the nested - * Component for which this TitledBorder is a border. - */ - Insets edgeSpacing; - - - /** - * Determines the insets of the nested component when it has a - * TitledBorder as its border. Used by {@link - * TitledBorder#getBorderInsets()}. - * - * @param i an Insets object for storing the results into, or - * <code>null</code> to cause the creation of a - * new instance. - * - * @return the <code>i</code> object, or a new Insets object - * if <code>null</code> was passed for <code>i</code>. - */ - public Insets getContentInsets(Insets i) - { - if (i == null) - i = new Insets(0, 0, 0, 0); - i.left = borderSpacing.left + borderInsets.left + edgeSpacing.left; - i.right = borderSpacing.right + borderInsets.right + edgeSpacing.right; - i.top = borderSpacing.top + borderInsets.top + edgeSpacing.top; - i.bottom = borderSpacing.bottom + borderInsets.bottom + edgeSpacing.bottom; - return i; - } - - - /** - * Calculates the minimum size needed for displaying the border - * and its title. Used by {@link TitledBorder#getMiminumSize()}. - */ - public Dimension getMinimumSize() - { - int width; - Insets insets; - - insets = getContentInsets(null); - width = Math.max(insets.left + insets.right, textWidth + 2 * TEXT_INSET_H); - return new Dimension(width, insets.top + insets.bottom); - } - } -} |