I'm checking this in.

This adds some new 1.5 methods to Spring, and also a new
SpringLayout.Constraints constructor.

Tom

2006-03-04  Tom Tromey  <[EMAIL PROTECTED]>

        * javax/swing/SpringLayout.java (Constraints): New constructor.
        * javax/swing/Spring.java (width): New method.
        (height): Likewise.
        (scale): Likewise.

Index: javax/swing/Spring.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/Spring.java,v
retrieving revision 1.4
diff -u -r1.4 Spring.java
--- javax/swing/Spring.java     19 Oct 2005 15:45:05 -0000      1.4
+++ javax/swing/Spring.java     4 Mar 2006 20:50:53 -0000
@@ -37,6 +37,9 @@
 
 package javax.swing;
 
+import java.awt.Component;
+import java.awt.Dimension;
+
 /**
  * Calculates the space between component edges, that are layed out by
  * [EMAIL PROTECTED] SpringLayout}.
@@ -168,6 +171,139 @@
   }
 
   /**
+   * Return a new Spring which computes its values by scaling
+   * the values of another spring by a constant factor.  If the
+   * factor is negative, the minimum and maximum values of
+   * the argument spring will be interchanged.
+   * @param spring the spring to track
+   * @param factor the factor by which to scale
+   * @return a new multiplicative Spring
+   * @since 1.5
+   */
+  public static Spring scale(final Spring spring, final float factor)
+  {
+    if (spring == null)
+      throw new NullPointerException("spring argument is null");
+    return new Spring()
+    {
+      public int getMaximumValue()
+      {
+        return (int) ((factor < 0 ? spring.getMinimumValue()
+                            : spring.getMaximumValue())
+                      * factor);
+      }
+
+      public int getMinimumValue()
+      {
+        return (int) ((factor < 0 ? spring.getMaximumValue()
+                                  : spring.getMinimumValue())
+                            * factor);
+      }
+
+      public int getPreferredValue()
+      {
+        return (int) (spring.getPreferredValue() * factor);
+      }
+
+      public int getValue()
+      {
+        return (int) (spring.getValue() * factor);
+      }
+
+      public void setValue(int value)
+      {
+        spring.setValue((int) (value / factor));
+      }
+    };
+  }
+
+  /**
+   * Return a new Spring which takes its values from the specified
+   * Component.  In particular, the maximum value is taken from
+   * the maximumSize, the minimum value is taken from the minimumSize,
+   * the preferred value is taken from the preferredSize, and the
+   * value is taken from the component's current size.  These values
+   * change as the component changes size.
+   * @param component the component
+   * @return a new Spring which tracks the component's width
+   * @since 1.5
+   */
+  public static Spring width(final Component component)
+  {
+    return new Spring()
+    {
+      public int getMaximumValue()
+      {
+        return component.getMaximumSize().width;
+      }
+
+      public int getMinimumValue()
+      {
+        return component.getMinimumSize().width;
+      }
+
+      public int getPreferredValue()
+      {
+        return component.getPreferredSize().width;
+      }
+
+      public int getValue()
+      {
+        return component.getSize().width;
+      }
+
+      public void setValue(int value)
+      {
+        Dimension d = component.getSize();
+        component.setSize(value, d.height);
+      }
+    };
+  }
+
+  /**
+   * Return a new Spring which takes its values from the specified
+   * Component.  In particular, the maximum value is taken from
+   * the maximumSize, the minimum value is taken from the minimumSize,
+   * the preferred value is taken from the preferredSize, and the
+   * value is taken from the component's current size.  These values
+   * change as the component changes size.
+   * @param component the component
+   * @return a new Spring which tracks the component's height
+   * @since 1.5
+   */
+  public static Spring height(final Component component)
+  {
+    return new Spring()
+    {
+      public int getMaximumValue()
+      {
+        return component.getMaximumSize().height;
+      }
+
+      public int getMinimumValue()
+      {
+        return component.getMinimumSize().height;
+      }
+
+      public int getPreferredValue()
+      {
+        return component.getPreferredSize().height;
+      }
+
+      public int getValue()
+      {
+        return component.getSize().height;
+      }
+
+      public void setValue(int value)
+      {
+        Dimension d = component.getSize();
+        component.setSize(d.width, value);
+      }
+    };
+  }
+
+  /**
    * A simple Spring, that holds constant values for min, pref and max.
    *
    * @author Roman Kennke ([EMAIL PROTECTED])
Index: javax/swing/SpringLayout.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/SpringLayout.java,v
retrieving revision 1.7
diff -u -r1.7 SpringLayout.java
--- javax/swing/SpringLayout.java       3 Mar 2006 17:13:06 -0000       1.7
+++ javax/swing/SpringLayout.java       4 Mar 2006 20:50:53 -0000
@@ -150,6 +150,25 @@
     }
 
     /**
+     * Create a new Constraints object which tracks the indicated
+     * component.  The x and y positions for this Constraints object
+     * are constant Springs created with the component's location at
+     * the time this constructor is called.  The width and height
+     * of this Constraints are Springs created using
+     * [EMAIL PROTECTED] Spring#width(Component)} and [EMAIL PROTECTED] 
Spring#height(Component)},
+     * respectively.
+     * @param component the component to track
+     * @since 1.5
+     */
+    public Constraints(Component component)
+    {
+      this(Spring.constant(component.getX()),
+           Spring.constant(component.getY()),
+           Spring.width(component),
+           Spring.height(component));
+    }
+
+    /**
      * Returns the constraint for the edge with the <code>edgeName</code>.
      * This is expected to be one of
      * [EMAIL PROTECTED] #EAST}, [EMAIL PROTECTED] #WEST}, [EMAIL PROTECTED] 
#NORTH} or [EMAIL PROTECTED] #SOUTH}.

Reply via email to