Index: javax/swing/SizeRequirements.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/SizeRequirements.java,v retrieving revision 1.19 diff -u -r1.19 SizeRequirements.java --- javax/swing/SizeRequirements.java 13 Oct 2005 20:02:29 -0000 1.19 +++ javax/swing/SizeRequirements.java 4 Nov 2005 11:23:48 -0000 @@ -142,13 +142,26 @@ public static SizeRequirements getTiledSizeRequirements(SizeRequirements[] children) { - SizeRequirements result = new SizeRequirements(); - for (int i = 0; i < children.length; i++) - { - result.minimum += children[i].minimum; - result.preferred += children[i].preferred; - result.maximum += children[i].maximum; - } + long minimum = 0; + long preferred = 0; + long maximum = 0; + for (int i = 0; i < children.length; i++) + { + minimum += children[i].minimum; + preferred += children[i].preferred; + maximum += children[i].maximum; + } + // Overflow check. + if (minimum > Integer.MAX_VALUE) + minimum = Integer.MAX_VALUE; + if (preferred > Integer.MAX_VALUE) + preferred = Integer.MAX_VALUE; + if (maximum > Integer.MAX_VALUE) + maximum = Integer.MAX_VALUE; + SizeRequirements result = new SizeRequirements((int) minimum, + (int) preferred, + (int) maximum, + 0.5F); return result; } @@ -338,12 +351,10 @@ int[] spans, int span) { // Sum up (maxSize - prefSize) over all children - int sumDelta = 0; + long sumDelta = 0; for (int i = 0; i < children.length; i++) { sumDelta += children[i].maximum - children[i].preferred; - if (sumDelta < 0) - sumDelta = Integer.MAX_VALUE; } // If we have sumDelta == 0, then all components have prefSize == maxSize @@ -356,7 +367,7 @@ { double factor = ((double) (children[i].maximum - children[i].preferred)) / ((double) sumDelta); - spans[i] -= factor * (span - allocated); + spans[i] += factor * (allocated - span); } }