diff options
Diffstat (limited to 'src')
3 files changed, 24 insertions, 9 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java b/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java index ab153090b..3d9076efd 100644 --- a/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java @@ -355,10 +355,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager MinOptMax range = new MinOptMax(relDims.ipd); BlockContainerBreaker breaker = new BlockContainerBreaker(this, range); breaker.doLayout(relDims.bpd, autoHeight); - boolean contentOverflows = false; - if (!breaker.isEmpty()) { - contentOverflows = (breaker.deferredAlg.getPageBreaks().size() > 1); - } + boolean contentOverflows = breaker.isOverflow(); Position bcPosition = new BlockContainerPosition(this, breaker); returnList.add(new KnuthBox(vpContentBPD, notifyPos(bcPosition), false)); @@ -648,9 +645,9 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager } //Rendering all parts (not just the first) at once for the case where the parts that //overflow should be visible. - //TODO Check if this has any unwanted side-effects. Feels a bit like a hack. + this.deferredAlg.removeAllPageBreaks(); this.addAreas(this.deferredAlg, - /*1*/ this.deferredAlg.getPageBreaks().size(), + this.deferredAlg.getPageBreaks().size(), this.deferredOriginalList, this.deferredEffectiveList); } diff --git a/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java b/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java index 32c2b8d3b..57fc4600e 100644 --- a/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java +++ b/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java @@ -734,6 +734,20 @@ class PageBreakingAlgorithm extends BreakingAlgorithm { pageBreaks.addFirst(pageBreak); } + /** + * Removes all page breaks from the result list. This is used by block-containers and + * static-content when it is only desired to know where there is an overflow but later the + * whole content should be painted as one part. + */ + public void removeAllPageBreaks() { + if (pageBreaks == null) { + return; + } + while (pageBreaks.size() > 1) { + pageBreaks.removeFirst(); + } + } + private int getPartCount() { if (pageBreaks == null) { return 0; diff --git a/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java b/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java index 92437a452..c8b89e6af 100644 --- a/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java @@ -25,9 +25,10 @@ import java.util.ListIterator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.fop.area.RegionReference; + import org.apache.fop.area.Area; import org.apache.fop.area.Block; +import org.apache.fop.area.RegionReference; import org.apache.fop.fo.FONode; import org.apache.fop.fo.pagination.PageSequence; import org.apache.fop.fo.pagination.SideRegion; @@ -339,11 +340,14 @@ public class StaticContentLayoutManager extends BlockStackingLayoutManager { protected void doPhase3(PageBreakingAlgorithm alg, int partCount, BlockSequence originalList, BlockSequence effectiveList) { - //Directly add areas after finding the breaks - this.addAreas(alg, partCount, originalList, effectiveList); if (partCount > 1) { overflow = true; } + //Rendering all parts (not just the first) at once for the case where the parts that + //overflow should be visible. + alg.removeAllPageBreaks(); + //Directly add areas after finding the breaks + this.addAreas(alg, 1, originalList, effectiveList); } protected void finishPart(PageBreakingAlgorithm alg, PageBreakPosition pbp) { |