I discovered another problem with the SizeRequirements. The method calculateAlignedPositions handled the minimumSize incorrectly, this is fixed. Mauve testcase following soon.
2005-10-13 Roman Kennke <[EMAIL PROTECTED]> * javax/swing/SizeRequirements.java (calculateAlignedPositions): Determine baseline using the total requirements argument. (adjustFromRight): Use float instead of int for baseline argument. Don't handle the <minimum case. (adjustFromLeft): Likewise. /Roman
Index: javax/swing/SizeRequirements.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/SizeRequirements.java,v retrieving revision 1.18 diff -u -r1.18 SizeRequirements.java --- javax/swing/SizeRequirements.java 4 Oct 2005 14:50:31 -0000 1.18 +++ javax/swing/SizeRequirements.java 13 Oct 2005 20:01:46 -0000 @@ -424,16 +424,8 @@ boolean forward) { // First we compute the position of the baseline. - float left = 0; - float right = 0; - for (int i = 0; i < children.length; i++) - { - float myLeft = children[i].preferred * children[i].alignment; - float myRight = children[i].preferred - myLeft; - left = Math.max(myLeft, left); - right = Math.max(myRight, right); - } - int baseline = (int) ((left / (left + right)) * allocated); + float baseline = allocated * total.alignment; + // Now we can layout the components along the baseline. for (int i = 0; i < children.length; i++) { @@ -457,7 +449,7 @@ * @param allocated * @param spanAndOffset */ - private static void adjustFromRight(SizeRequirements reqs, int baseline, + private static void adjustFromRight(SizeRequirements reqs, float baseline, int allocated, int[] spanAndOffset) { float right = allocated - baseline; @@ -470,14 +462,9 @@ if (right / (1.F - reqs.alignment) * reqs.alignment > allocated - baseline) right = ((float) (allocated - baseline)) / reqs.alignment * (1.F - reqs.alignment); - // If we are below the minimum, then adjust upwards. - float minRight = ((float) reqs.minimum) * (1.F - reqs.alignment); - if (right / (1.F - reqs.alignment) < reqs.minimum) - right = Math.max(minRight, maxRight); spanAndOffset[0] = (int) (right / (1.F - reqs.alignment)); - spanAndOffset[1] = baseline - - (int) (((float) spanAndOffset[0]) * reqs.alignment); + spanAndOffset[1] = (int) (baseline - spanAndOffset[0] * reqs.alignment); } /** @@ -488,7 +475,7 @@ * @param allocated * @param spanAndOffset */ - private static void adjustFromLeft(SizeRequirements reqs, int baseline, + private static void adjustFromLeft(SizeRequirements reqs, float baseline, int allocated, int[] spanAndOffset) { float left = baseline; @@ -502,14 +489,8 @@ left = ((float) (allocated - baseline)) / (1.F - reqs.alignment) * reqs.alignment; - // If we are below the minimum, then adjust upwards. - float minLeft = ((float) reqs.minimum) * reqs.alignment; - if (left / reqs.alignment < reqs.minimum) - left = Math.max(minLeft, maxLeft); - spanAndOffset[0] = (int) (left / reqs.alignment); - spanAndOffset[1] = baseline - - (int) (((float) spanAndOffset[0]) * reqs.alignment); + spanAndOffset[1] = (int) (baseline - spanAndOffset[0] * reqs.alignment); } /**
_______________________________________________ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches