jdk/src/share/classes/javax/swing/text/ParagraphView.java
changeset 9212 2123bfe0b40b
parent 5506 202f599c92aa
child 20103 f640c22218a3
--- a/jdk/src/share/classes/javax/swing/text/ParagraphView.java	Mon Apr 04 21:37:10 2011 +0400
+++ b/jdk/src/share/classes/javax/swing/text/ParagraphView.java	Wed Apr 06 11:51:39 2011 +0400
@@ -721,7 +721,34 @@
     @Override
     protected SizeRequirements calculateMinorAxisRequirements(int axis,
                                                         SizeRequirements r) {
-        return super.calculateMinorAxisRequirements(axis, r);
+        r = super.calculateMinorAxisRequirements(axis, r);
+
+        float min = 0;
+        float glue = 0;
+        int n = getLayoutViewCount();
+        for (int i = 0; i < n; i++) {
+            View v = getLayoutView(i);
+            float span = v.getMinimumSpan(axis);
+            if (v.getBreakWeight(axis, 0, v.getMaximumSpan(axis)) > View.BadBreakWeight) {
+                // find the longest non-breakable fragments at the view edges
+                int p0 = v.getStartOffset();
+                int p1 = v.getEndOffset();
+                float start = findEdgeSpan(v, axis, p0, p0, p1);
+                float end = findEdgeSpan(v, axis, p1, p0, p1);
+                glue += start;
+                min = Math.max(min, Math.max(span, glue));
+                glue = end;
+            } else {
+                // non-breakable view
+                glue += span;
+                min = Math.max(min, glue);
+            }
+        }
+        r.minimum = Math.max(r.minimum, (int) min);
+        r.preferred = Math.max(r.minimum, r.preferred);
+        r.maximum = Math.max(r.preferred, r.maximum);
+
+        return r;
     }
 
     /**