]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #38102:
authorJeremias Maerki <jeremias@apache.org>
Wed, 4 Jan 2006 15:52:07 +0000 (15:52 +0000)
committerJeremias Maerki <jeremias@apache.org>
Wed, 4 Jan 2006 15:52:07 +0000 (15:52 +0000)
Bugfix: Space was not adjusted if the space was on a nested block. This could lead to content overflowing the bottom of a page.

I guess I will need to check if other addArea() methods suffer from the same defect.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@365928 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
status.xml
test/layoutengine/standard-testcases/block_space-before_space-after_bug38102.xml [new file with mode: 0644]

index 631aacf3265c49b147064d20153da9269a6046c2..0db92b30f2885ad5eedae7fab03251640b7e98e6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2005 The Apache Software Foundation.
+ * Copyright 1999-2006 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-/* $Id: BlockLayoutManager.java,v 1.19 2004/05/26 04:22:39 gmazza Exp $ */
+/* $Id$ */
 
 package org.apache.fop.layoutmgr;
 
@@ -242,6 +242,7 @@ public class BlockLayoutManager extends BlockStackingLayoutManager
         LayoutManager childLM = null;
         LayoutManager lastLM = null;
         LayoutContext lc = new LayoutContext(0);
+        lc.setSpaceAdjust(layoutContext.getSpaceAdjust());
         // set space after in the LayoutContext for children
         if (layoutContext.getSpaceAfter() > 0) {
             lc.setSpaceAfter(layoutContext.getSpaceAfter());
index 2c9bad19a6bc80f357e67240909608a56e102c96..403c91bc246b1d3af35fab666f320ba02a1aa37f 100644 (file)
 
   <changes>
     <release version="FOP Trunk">
+      <action context="Code" dev="JM" type="fix" fixes-bug="38102">
+        Bugfix: Space was not adjusted if the space was on a nested block. This could
+        lead to content overflowing the bottom of a page.
+      </action>
       <action context="Code" dev="JM" type="fix">
         Bugfix: TableCell did not properly report that it generates reference-areas
         which could lead to wrong inherited values for start-indent and end-indent.
diff --git a/test/layoutengine/standard-testcases/block_space-before_space-after_bug38102.xml b/test/layoutengine/standard-testcases/block_space-before_space-after_bug38102.xml
new file mode 100644 (file)
index 0000000..12f829a
--- /dev/null
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2006 The Apache Software Foundation
+
+  Licensed 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>
+      This test checks if the element list is generated correctly if space-before.optimum is used
+      instead of space-before directly in the case where a nested block needs to shrink.
+      This tests bug #38102.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="1.5in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block>
+            <fo:block>line1</fo:block>
+            <fo:block space-before="16pt">line2</fo:block>
+            <fo:block space-before.optimum="16pt">line3</fo:block>
+            <fo:block>line4</fo:block>
+            <fo:block>line5</fo:block>
+          <fo:block>line6</fo:block>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker">
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="16000" y="0" z="0"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="16000" y="0" z="16000"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <eval expected="1" xpath="count(//pageViewport)"/>
+    <eval expected="16000" xpath="//flow/block[1]/block[2]/@space-before"/>
+    <!-- The breaker needs to shrink the optimal 1600mpt to 5600mpt to fit everything into the one page -->
+    <eval expected="5600" xpath="//flow/block[1]/block[3]/@space-before"/>
+    <true xpath="//flow/@bpd = //regionBody/@bpd"/>
+  </checks>
+</testcase>