summaryrefslogtreecommitdiff
path: root/libjava/classpath/javax/swing/Spring.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/javax/swing/Spring.java')
-rw-r--r--libjava/classpath/javax/swing/Spring.java160
1 files changed, 94 insertions, 66 deletions
diff --git a/libjava/classpath/javax/swing/Spring.java b/libjava/classpath/javax/swing/Spring.java
index b9890c7147f..477525960a2 100644
--- a/libjava/classpath/javax/swing/Spring.java
+++ b/libjava/classpath/javax/swing/Spring.java
@@ -60,7 +60,7 @@ public abstract class Spring
{
/** Indicates a not-set value. **/
- public static final int UNSET = -2147483648;
+ public static final int UNSET = Integer.MIN_VALUE;
/**
* Creates a new Spring object. This constructor is used by the static
@@ -156,6 +156,33 @@ public abstract class Spring
*/
public abstract void setValue(int value);
+ private int getShrinkRange()
+ {
+ return (getPreferredValue() - getMinimumValue());
+ }
+
+ private int getExpandRange()
+ {
+ return (getMaximumValue() - getPreferredValue());
+ }
+
+ double getStrain()
+ {
+ int v = getValue();
+ int p = getPreferredValue();
+ int r = (v < p) ? getShrinkRange() : getExpandRange();
+ if (r == 0)
+ r = 1;
+ return (double)(v - p) / r;
+ }
+
+ void setStrain(double strain)
+ {
+ int r = (strain < 0) ? getShrinkRange() : getExpandRange();
+ int v = (getPreferredValue() + (int)(strain * r));
+ setValue(v);
+ }
+
/**
* Creates and returns a Spring, which is always the sum of s1 and s2.
* min_sum = min_s1 + min_s2, pref_sum = pref_s1 + pref_s2, max_sum =
@@ -323,6 +350,11 @@ public abstract class Spring
/** The actual value of the spring. */
private int value;
+ public String toString()
+ {
+ return "SimpleSpring of " + value;
+ }
+
/**
* Creates a new SimpleSpring object.
*
@@ -335,7 +367,7 @@ public abstract class Spring
min = newMin;
pref = newPref;
max = newMax;
- value = Spring.UNSET;
+ value = newPref;
}
/**
@@ -375,12 +407,8 @@ public abstract class Spring
*/
public int getValue()
{
-
if (value == Spring.UNSET)
- {
- value = pref;
- }
-
+ return pref;
return value;
}
@@ -391,21 +419,8 @@ public abstract class Spring
*/
public void setValue(int val)
{
-
- if (val > max)
- {
- value = max;
- }
- else if (val < min)
- {
- value = min;
- }
- else
- {
- value = val;
- }
+ value = val;
}
-
}
@@ -424,6 +439,11 @@ public abstract class Spring
/** The current value for this Spring. */
private int value;
+ public String toString()
+ {
+ return "AddSpring of " + s1 + " and " + s2;
+ }
+
/**
* Creates a new AddSpring object.
*
@@ -497,20 +517,24 @@ public abstract class Spring
*/
public void setValue(int val)
{
-
- if (val > getMaximumValue())
- {
- value = getMaximumValue();
- }
- else if (val < getMinimumValue())
- {
- value = getMinimumValue();
- }
- else
+ if (val == Spring.UNSET)
+ {
+ if (value != Spring.UNSET)
{
- value = val;
+ s1.setValue(Spring.UNSET);
+ s2.setValue(Spring.UNSET);
}
+ value = Spring.UNSET;
+ return;
+ }
+
+ value = val;
+ //Spead the value over the two components
+ double fStrain = getStrain();
+ s1.setStrain(fStrain);
+ int remainder = val - s1.getValue();
+ s2.setValue(remainder);
}
}
@@ -527,8 +551,10 @@ public abstract class Spring
/** The Spring from which to calculate the negation. */
private final Spring s;
- /** The current value of this Spring. */
- private int value;
+ public String toString()
+ {
+ return "MinusSpring of " + s;
+ }
/**
* Creates a new MinusSpring object.
@@ -538,7 +564,6 @@ public abstract class Spring
{
super();
this.s = s;
- value = Spring.UNSET;
}
/** Returns the maximum value of this Spring.
@@ -577,11 +602,7 @@ public abstract class Spring
*/
public int getValue()
{
- if (value == Spring.UNSET)
- {
- value = -s.getValue();
- }
- return value;
+ return -s.getValue();
}
/**
@@ -591,22 +612,11 @@ public abstract class Spring
*/
public void setValue(int val)
{
-
- if (val > getMaximumValue())
- {
- value = getMaximumValue();
- }
- else if (val < getMinimumValue())
- {
- value = getMinimumValue();
- }
+ if (val == Spring.UNSET)
+ s.setValue(Spring.UNSET);
else
- {
- value = val;
- }
-
+ s.setValue(-val);
}
-
}
@@ -622,6 +632,11 @@ public abstract class Spring
private final Spring s1;
private final Spring s2;
+ public String toString()
+ {
+ return "MaxSpring of " + s1 + " and " + s2;
+ }
+
/** The current value of this Spring. */
private int value;
@@ -684,7 +699,7 @@ public abstract class Spring
public int getValue()
{
if (value == Spring.UNSET)
- {
+ {
int val1 = s1.getValue();
int val2 = s2.getValue();
value = Math.max(val1, val2);
@@ -699,19 +714,32 @@ public abstract class Spring
*/
public void setValue(int val)
{
-
- if (val > getMaximumValue())
- {
- value = getMaximumValue();
- }
- else if (val < getMinimumValue())
- {
- value = getMinimumValue();
- }
- else
+ if (val == Spring.UNSET)
+ {
+ if (value != Spring.UNSET)
{
- value = val;
+ s1.setValue(Spring.UNSET);
+ s2.setValue(Spring.UNSET);
}
+ value = Spring.UNSET;
+ return;
+ }
+
+ value = val;
+
+ int p1 = s1.getPreferredValue();
+ int p2 = s2.getPreferredValue();
+
+ if (p1 < p2)
+ {
+ s1.setValue(Math.min(val, p1));
+ s2.setValue(val);
+ }
+ else
+ {
+ s1.setValue(val);
+ s2.setValue(Math.min(val, p2));
+ }
}
}
}