OSDN Git Service

* Makefile.in: Rebuilt.
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 3 Dec 2000 21:21:52 +0000 (21:21 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 3 Dec 2000 21:21:52 +0000 (21:21 +0000)
* Makefile.am (awt_java_source_files): Added new file.
* java/awt/geom/RoundRectangle2D.java: New file.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37980 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/Makefile.am
libjava/Makefile.in
libjava/java/awt/geom/RoundRectangle2D.java [new file with mode: 0644]

index e13b8ad..d144635 100644 (file)
@@ -2,6 +2,10 @@
 
        * Makefile.in: Rebuilt.
        * Makefile.am (awt_java_source_files): Added new file.
+       * java/awt/geom/RoundRectangle2D.java: New file.
+
+       * Makefile.in: Rebuilt.
+       * Makefile.am (awt_java_source_files): Added new file.
        * java/awt/FlowLayout.java: New file.
 
        * Makefile.in: Rebuilt.
index 6c2681f..c618f32 100644 (file)
@@ -674,6 +674,7 @@ java/awt/geom/PathIterator.java     \
 java/awt/geom/Point2D.java \
 java/awt/geom/Rectangle2D.java \
 java/awt/geom/RectangularShape.java \
+java/awt/geom/RoundRectangle2D.java \
 java/awt/image/BufferedImage.java \
 java/awt/image/ColorModel.java \
 java/awt/image/ComponentColorModel.java        \
index 46d8942..f2426fa 100644 (file)
@@ -445,6 +445,7 @@ java/awt/geom/PathIterator.java     \
 java/awt/geom/Point2D.java \
 java/awt/geom/Rectangle2D.java \
 java/awt/geom/RectangularShape.java \
+java/awt/geom/RoundRectangle2D.java \
 java/awt/image/BufferedImage.java \
 java/awt/image/ColorModel.java \
 java/awt/image/ComponentColorModel.java        \
@@ -1385,6 +1386,7 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/java/awt/geom/PathIterator.P .deps/java/awt/geom/Point2D.P \
 .deps/java/awt/geom/Rectangle2D.P \
 .deps/java/awt/geom/RectangularShape.P \
+.deps/java/awt/geom/RoundRectangle2D.P \
 .deps/java/awt/image/BufferedImage.P .deps/java/awt/image/ColorModel.P \
 .deps/java/awt/image/ComponentColorModel.P \
 .deps/java/awt/image/ComponentSampleModel.P \
diff --git a/libjava/java/awt/geom/RoundRectangle2D.java b/libjava/java/awt/geom/RoundRectangle2D.java
new file mode 100644 (file)
index 0000000..f90d342
--- /dev/null
@@ -0,0 +1,345 @@
+/* Copyright (C) 2000  Free Software Foundation
+
+   This file is part of libjava.
+
+This software is copyrighted work licensed under the terms of the
+Libjava License.  Please consult the file "LIBJAVA_LICENSE" for
+details.  */
+
+package java.awt.geom;
+
+/** This class implements a rectangle with rounded corners.
+ * @author Tom Tromey <tromey@cygnus.com>
+ * @date December 3, 2000
+ */
+public abstract class RoundRectangle2D extends RectangularShape
+{
+  /** Return the arc height of this round rectangle.  */
+  public abstract double getArcHeight ();
+
+  /** Return the arc width of this round rectangle.  */
+  public abstract double getArcWidth ();
+
+  /** Set the values of this round rectangle
+   * @param x The x coordinate
+   * @param y The y coordinate
+   * @param w The width
+   * @param h The height
+   * @param arcWidth The arc width
+   * @param arcHeight The arc height
+   */
+  public abstract void setRoundRect (double x, double y, double w, double h,
+                                    double arcWidth, double arcHeight);
+
+  /** Create a RoundRectangle2D.  This is protected because this class
+   * is abstract and cannot be instantiated.
+   */
+  protected  RoundRectangle2D ()
+  {
+  }
+
+  /** Return true if this object contains the specified point.
+   * @param x The x coordinate
+   * @param y The y coordinate
+   */
+  public boolean contains (double x, double y)
+  {
+    double mx = getX ();
+    double mw = getWidth ();
+    if (x < mx || x >= mx + mw)
+      return false;
+    double my = getY ();
+    double mh = getHeight ();
+    if (y < my || y >= my + mh)
+      return false;
+
+    // Now check to see if the point is in range of an arc.
+    double dy = Math.min (Math.abs (my - y), Math.abs (my + mh - y));
+    double dx = Math.min (Math.abs (mx - x), Math.abs (mx + mw - x));
+    double aw = getArcWidth ();
+    double ah = getArcHeight ();
+    if (dx > aw || dy > ah)
+      return true;
+
+    // At this point DX represents the distance from the nearest edge
+    // of the rectangle.  But we want to transform it to represent the
+    // scaled distance from the center of the ellipse that forms the
+    // arc.  Hence this code:
+    dy = (ah - dy) / ah;
+    dx = (aw - dx) / aw;
+
+    return dx * dx + dy * dy <= 1.0;
+  }
+
+  /** Return true if this object contains the specified rectangle
+   * @param x The x coordinate
+   * @param y The y coordinate
+   * @param w The width
+   * @param h The height
+   */
+  public boolean contains (double x, double y, double w, double h)
+  {
+    // We have to check all four points here (for ordinary rectangles
+    // we can just check opposing corners).
+    return (contains (x, y) && contains (x + w, h)
+           && contains (x, y + h) && contains (x + w, y + h));
+  }
+
+  /** Return a new path iterator which iterates over this rectangle.
+   * @param at An affine transform to apply to the object
+   */
+  public PathIterator getPathIterator (AffineTransform at)
+  {
+    // FIXME.
+    return null;
+  }
+
+  /** Return true if the given rectangle intersects this shape.
+   * @param x The x coordinate
+   * @param y The y coordinate
+   * @param w The width
+   * @param h The height
+   */
+  public boolean intersects (double x, double y, double w, double h)
+  {
+    // Here we can use the same code we use for an ordinary rectangle.
+    double mx = getX ();
+    double mw = getWidth ();
+    if (x < mx || x >= mx + mw || x + w < mx || x + w >= mx + mw)
+      return false;
+    double my = getY ();
+    double mh = getHeight ();
+    return y >= my && y < my + mh && y + h >= my && y + h < my + mh;
+  }
+
+  /** Set the boundary of this round rectangle.
+   * @param x The x coordinate
+   * @param y The y coordinate
+   * @param w The width
+   * @param h The height
+   */
+  public void setFrame (double x, double y, double w, double h)
+  {
+    // This is a bit lame.
+    setRoundRect (x, y, w, h, getArcWidth (), getArcHeight ());
+  }
+
+  /** Set the values of this round rectangle to be the same as those
+   * of the argument.
+   * @param rr The round rectangle to copy
+   */
+  public void setRoundRect (RoundRectangle2D rr)
+  {
+    setRoundRect (rr.getX (), rr.getY (), rr.getWidth (), rr.getHeight (),
+                 rr.getArcWidth (), rr.getArcHeight ());
+  }
+
+  /** A subclass of RoundRectangle which keeps its parameters as
+   * floats.  */
+  public static class Float extends RoundRectangle2D
+  {
+    /** The height of the corner arc.  */
+    public float archeight;
+
+    /** The width of the corner arc.  */
+    public float arcwidth;
+
+    /** The x coordinate of this object.  */
+    public float x;
+
+    /** The y coordinate of this object.  */
+    public float y;
+
+    /** The width of this object.  */
+    public float width;
+
+    /** The height of this object.  */
+    public float height;
+
+    /** Construct a new instance, with all parameters set to 0.  */
+    public Float ()
+    {
+      this (0, 0, 0, 0, 0, 0);
+    }
+
+    /** Construct a new instance with the given arguments.
+     * @param x The x coordinate
+     * @param y The y coordinate
+     * @param w The width
+     * @param h The height
+     * @param arcWidth The arc width
+     * @param arcHeight The arc height
+     */
+    public Float (float x, float y, float w, float h,
+                 float arcWidth, float arcHeight)
+    {
+      this.x = x;
+      this.y = y;
+      this.width = w;
+      this.height = h;
+      this.arcwidth = arcWidth;
+      this.archeight = arcHeight;
+    }
+
+    public double getArcHeight ()
+    {
+      return archeight;
+    }
+
+    public double getArcWidth ()
+    {
+      return arcwidth;
+    }
+
+    public Rectangle2D getBounds2D ()
+    {
+      return new Rectangle2D.Float (x, y, width, height);
+    }
+
+    public double getX ()
+    {
+      return x;
+    }
+
+    public double getY ()
+    {
+      return y;
+    }
+
+    public double getWidth ()
+    {
+      return width;
+    }
+
+    public double getHeight ()
+    {
+      return height;
+    }
+
+    public boolean isEmpty ()
+    {
+      return width <= 0 || height <= 0;
+    }
+
+    public void setRoundRect (float x, float y, float w, float h,
+                             float arcWidth, float arcHeight)
+    {
+      this.x = x;
+      this.y = y;
+      this.width = w;
+      this.height = h;
+      this.arcwidth = arcWidth;
+      this.archeight = arcHeight;
+    }
+
+    public void setRoundRect (double x, double y, double w, double h,
+                             double arcWidth, double arcHeight)
+    {
+      this.x = (float) x;
+      this.y = (float) y;
+      this.width = (float) w;
+      this.height = (float) h;
+      this.arcwidth = (float) arcWidth;
+      this.archeight = (float) arcHeight;
+    }
+  }
+
+  /** A subclass of RoundRectangle which keeps its parameters as
+   * doubles.  */
+  public static class Double extends RoundRectangle2D
+  {
+    /** The height of the corner arc.  */
+    public double archeight;
+
+    /** The width of the corner arc.  */
+    public double arcwidth;
+
+    /** The x coordinate of this object.  */
+    public double x;
+
+    /** The y coordinate of this object.  */
+    public double y;
+
+    /** The width of this object.  */
+    public double width;
+
+    /** The height of this object.  */
+    public double height;
+
+    /** Construct a new instance, with all parameters set to 0.  */
+    public Double ()
+    {
+      this (0, 0, 0, 0, 0, 0);
+    }
+
+    /** Construct a new instance with the given arguments.
+     * @param x The x coordinate
+     * @param y The y coordinate
+     * @param w The width
+     * @param h The height
+     * @param arcWidth The arc width
+     * @param arcHeight The arc height
+     */
+    public Double (double x, double y, double w, double h,
+                  double arcWidth, double arcHeight)
+    {
+      this.x = x;
+      this.y = y;
+      this.width = w;
+      this.height = h;
+      this.arcwidth = arcWidth;
+      this.archeight = arcHeight;
+    }
+
+    public double getArcHeight ()
+    {
+      return archeight;
+    }
+
+    public double getArcWidth ()
+    {
+      return arcwidth;
+    }
+
+    public Rectangle2D getBounds2D ()
+    {
+      return new Rectangle2D.Double (x, y, width, height);
+    }
+
+    public double getX ()
+    {
+      return x;
+    }
+
+    public double getY ()
+    {
+      return y;
+    }
+
+    public double getWidth ()
+    {
+      return width;
+    }
+
+    public double getHeight ()
+    {
+      return height;
+    }
+
+    public boolean isEmpty ()
+    {
+      return width <= 0 || height <= 0;
+    }
+
+    public void setRoundRect (double x, double y, double w, double h,
+                             double arcWidth, double arcHeight)
+    {
+      this.x = x;
+      this.y = y;
+      this.width = w;
+      this.height = h;
+      this.arcwidth = arcWidth;
+      this.archeight = arcHeight;
+    }
+  }
+}