Procházet zdrojové kódy

Bugzilla #54167: Disable the overflow recovery mechanism when the flow IPD changes


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1411306 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-2_0
Vincent Hennebert před 11 roky
rodič
revize
ff6508e118

+ 4
- 0
src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java Zobrazit soubor

@@ -460,6 +460,10 @@ public abstract class BreakingAlgorithm {
return this.partOverflowRecoveryActivated;
}

protected KnuthNode getLastTooLong() {
return lastTooLong;
}

/**
* Empty method, hook for subclasses. Called before determining the optimal
* breakpoints corresponding to a given active node.

+ 13
- 0
src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java Zobrazit soubor

@@ -1108,6 +1108,19 @@ class PageBreakingAlgorithm extends BreakingAlgorithm {

}

@Override
protected KnuthNode recoverFromOverflow() {
if (compareIPDs(getLastTooLong().line - 1) != 0) {
/**
* If the IPD of the next page changes, disable the recovery mechanism as the
* inline content has to be re-laid out according to the new IPD anyway.
*/
return getLastTooLong();
} else {
return super.recoverFromOverflow();
}
}

/** {@inheritDoc} */
@Override
protected int getIPDdifference() {

+ 58
- 0
test/layoutengine/standard-testcases/flow_changing-ipd_overflow.xml Zobrazit soubor

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- $Id$ -->
<testcase>
<info>
<p>
The overflow recovery mechanism must be disabled when the flow IPD changes.
</p>
</info>
<fo>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="first-page"
page-height="120pt" page-width="220pt" margin="10pt">
<fo:region-body/>
</fo:simple-page-master>
<fo:simple-page-master master-name="page"
page-height="120pt" page-width="120pt" margin="10pt">
<fo:region-body/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="pages">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference page-position="first" master-reference="first-page"/>
<fo:conditional-page-master-reference master-reference="page"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="pages">
<fo:flow flow-name="xsl-region-body">
<fo:block-container height="110pt" background-color="#F0F0F0">
<fo:block>This block-container overflows the page.</fo:block>
</fo:block-container>
<fo:block>After the big block-container.</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>
<eval expected="2" xpath="count(//pageViewport)"/>
<eval expected="This block-container overflows the" xpath="//pageViewport[1]//lineArea[1]"/>
<eval expected="After the big" xpath="//pageViewport[2]//lineArea[1]"/>
</checks>
</testcase>

Načítá se…
Zrušit
Uložit