Author: jeremias
Date: Thu Dec  8 07:55:19 2005
New Revision: 355131

URL: http://svn.apache.org/viewcvs?rev=355131&view=rev
Log:
Better approach for enforcing the overflow property on block-containers.
Fixed a bug in the PDF and PS renderers concerning the clipping of viewport 
areas. The order of clipping and establishing the new coordinate system was 
wrong. Removed an unnecessary save/restoreGraphicsState() pair.

Added:
    
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block-container_overflow_1.xml
   (with props)
Modified:
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
URL: 
http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java?rev=355131&r1=355130&r2=355131&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
 Thu Dec  8 07:55:19 2005
@@ -48,7 +48,6 @@
     private CommonAbsolutePosition abProps;
     private FODimension relDims;
     private CTM absoluteCTM;
-    private boolean clip = false;
     private Length width;
     private Length height;
     //private int vpContentIPD;
@@ -139,6 +138,11 @@
                 .getOptimum(this).getLength().getValue(this);
     }
 
+    private boolean needClip() {
+        int overflow = getBlockContainerFO().getOverflow();
+        return (overflow == EN_HIDDEN || overflow == EN_ERROR_IF_OVERFLOW);
+    }
+    
     private int getSpaceBefore() {
         return foBlockSpaceBefore.opt;
     }
@@ -351,11 +355,8 @@
 
             if (contentOverflows) {
                 log.warn("Contents overflow block-container viewport: 
clipping");
-                if (getBlockContainerFO().getOverflow() == EN_HIDDEN) {
-                    clip = true;
-                } else if (getBlockContainerFO().getOverflow() == 
EN_ERROR_IF_OVERFLOW) {
+                if (getBlockContainerFO().getOverflow() == 
EN_ERROR_IF_OVERFLOW) {
                     //TODO Throw layout exception
-                    clip = true;
                 }
             }
         }
@@ -497,11 +498,8 @@
             //TODO Maybe check for page overflow when autoHeight=true
             if (!autoHeight & (contentOverflows/*usedBPD > relDims.bpd*/)) {
                 log.warn("Contents overflow block-container viewport: 
clipping");
-                if (getBlockContainerFO().getOverflow() == EN_HIDDEN) {
-                    clip = true;
-                } else if (getBlockContainerFO().getOverflow() == 
EN_ERROR_IF_OVERFLOW) {
+                if (getBlockContainerFO().getOverflow() == 
EN_ERROR_IF_OVERFLOW) {
                     //TODO Throw layout exception
-                    clip = true;
                 }
             }
         }
@@ -867,7 +865,7 @@
                     this);
             
             viewportBlockArea.setCTM(absoluteCTM);
-            viewportBlockArea.setClip(clip);
+            viewportBlockArea.setClip(needClip());
             /*
             if (getSpaceBefore() != 0) {
                 viewportBlockArea.addTrait(Trait.SPACE_BEFORE, new 
Integer(getSpaceBefore()));

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java
URL: 
http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java?rev=355131&r1=355130&r2=355131&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java
 Thu Dec  8 07:55:19 2005
@@ -509,26 +509,21 @@
             x += borderPaddingStart / 1000f;
             y += borderPaddingBefore / 1000f;
 
+            if (ctm != null) {
+                startVParea(ctm);
+                currentIPPosition = 0;
+                currentBPPosition = 0;
+            }
             // clip if necessary
             if (bv.getClip()) {
-                saveGraphicsState();
                 float width = (float)bv.getIPD() / 1000f;
                 float height = (float)bv.getBPD() / 1000f;
                 clipRect(x, y, width, height);
             }
 
-            if (ctm != null) {
-                startVParea(ctm);
-                currentIPPosition = 0;
-                currentBPPosition = 0;
-            }
             renderBlocks(bv, children);
             if (ctm != null) {
                 endVParea();
-            }
-
-            if (bv.getClip()) {
-                restoreGraphicsState();
             }
 
             currentIPPosition = saveIP;

Added: 
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block-container_overflow_1.xml
URL: 
http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block-container_overflow_1.xml?rev=355131&view=auto
==============================================================================
--- 
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block-container_overflow_1.xml
 (added)
+++ 
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block-container_overflow_1.xml
 Thu Dec  8 07:55:19 2005
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2005 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 overflowing content on block-containers.
+    </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="5in" margin="20pt">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" text-align="justify">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block-container id="auto" background-color="lightgray" 
space-after="5pt">
+             <fo:block start-indent="-5pt" end-indent="-5pt">Lorem ipsum dolor 
sit amet, consectetuer adipiscing elit. Pellentesque hendrerit euismod velit. 
Nulla facilisi. Etiam et risus at neque ultrices facilisis. Donec lectus est, 
nonummy quis, rhoncus bibendum, porta at, nisl.</fo:block>
+          </fo:block-container>
+          <fo:block-container id="visible" background-color="lightgray" 
space-after="5pt" overflow="visible">
+             <fo:block start-indent="-5pt" end-indent="-5pt">Lorem ipsum dolor 
sit amet, consectetuer adipiscing elit. Pellentesque hendrerit euismod velit. 
Nulla facilisi. Etiam et risus at neque ultrices facilisis. Donec lectus est, 
nonummy quis, rhoncus bibendum, porta at, nisl.</fo:block>
+          </fo:block-container>
+          <fo:block-container id="hidden" background-color="lightgray" 
space-after="5pt" overflow="hidden">
+             <fo:block start-indent="-5pt" end-indent="-5pt">Lorem ipsum dolor 
sit amet, consectetuer adipiscing elit. Pellentesque hendrerit euismod velit. 
Nulla facilisi. Etiam et risus at neque ultrices facilisis. Donec lectus est, 
nonummy quis, rhoncus bibendum, porta at, nisl.</fo:block>
+          </fo:block-container>
+          <fo:block-container id="scroll" background-color="lightgray" 
space-after="5pt" overflow="scroll">
+             <fo:block start-indent="-5pt" end-indent="-5pt">Lorem ipsum dolor 
sit amet, consectetuer adipiscing elit. Pellentesque hendrerit euismod velit. 
Nulla facilisi. Etiam et risus at neque ultrices facilisis. Donec lectus est, 
nonummy quis, rhoncus bibendum, porta at, nisl.</fo:block>
+          </fo:block-container>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <true xpath="not(//[EMAIL PROTECTED]'auto' and 
@is-viewport-area='true']/@clipped)"/>
+    <true xpath="not(//[EMAIL PROTECTED]'visible' and 
@is-viewport-area='true']/@clipped)"/>
+    <true xpath="//[EMAIL PROTECTED]'hidden' and 
@is-viewport-area='true']/@clipped"/>
+    <true xpath="not(//[EMAIL PROTECTED]'scroll' and 
@is-viewport-area='true']/@clipped)"/>
+  </checks>
+</testcase>

Propchange: 
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block-container_overflow_1.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block-container_overflow_1.xml
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to