You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2008/06/05 09:06:37 UTC

svn commit: r663482 - in /xmlgraphics/fop/branches/fop-0_95: ./ src/java/org/apache/fop/render/ src/java/org/apache/fop/render/afp/ src/java/org/apache/fop/render/pcl/ test/layoutengine/standard-testcases/

Author: jeremias
Date: Thu Jun  5 00:06:37 2008
New Revision: 663482

URL: http://svn.apache.org/viewvc?rev=663482&view=rev
Log:
Fixed positioning of absolutely positioned block-containers in multi-column documents.

Added:
    xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/block-container_absolute-position_multi-column.xml   (with props)
Modified:
    xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java
    xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/afp/AFPRenderer.java
    xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/pcl/PCLRenderer.java
    xmlgraphics/fop/branches/fop-0_95/status.xml

Modified: xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java?rev=663482&r1=663481&r2=663482&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java (original)
+++ xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java Thu Jun  5 00:06:37 2008
@@ -36,6 +36,7 @@
 import org.apache.fop.area.Block;
 import org.apache.fop.area.BlockViewport;
 import org.apache.fop.area.CTM;
+import org.apache.fop.area.NormalFlow;
 import org.apache.fop.area.RegionViewport;
 import org.apache.fop.area.Trait;
 import org.apache.fop.area.inline.ForeignObject;
@@ -556,6 +557,34 @@
         currentBPPosition = saveBP;
     }
     
+    /** {@inheritDoc} */
+    protected void renderFlow(NormalFlow flow) {
+        // save position and offset
+        int saveIP = currentIPPosition;
+        int saveBP = currentBPPosition;
+
+        //Establish a new coordinate system
+        AffineTransform at = new AffineTransform();
+        at.translate(currentIPPosition, currentBPPosition);
+        
+        if (!at.isIdentity()) {
+            saveGraphicsState();
+            concatenateTransformationMatrix(mptToPt(at));
+        }
+
+        currentIPPosition = 0;
+        currentBPPosition = 0;
+        super.renderFlow(flow);
+        
+        if (!at.isIdentity()) {
+            restoreGraphicsState();
+        }
+        
+        // stacked and relative blocks effect stacking
+        currentIPPosition = saveIP;
+        currentBPPosition = saveBP;
+    }
+    
     /**
      * Concatenates the current transformation matrix with the given one, therefore establishing
      * a new coordinate system.

Modified: xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/afp/AFPRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/afp/AFPRenderer.java?rev=663482&r1=663481&r2=663482&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/afp/AFPRenderer.java (original)
+++ xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/afp/AFPRenderer.java Thu Jun  5 00:06:37 2008
@@ -59,6 +59,7 @@
 import org.apache.fop.area.BlockViewport;
 import org.apache.fop.area.BodyRegion;
 import org.apache.fop.area.CTM;
+import org.apache.fop.area.NormalFlow;
 import org.apache.fop.area.OffDocumentItem;
 import org.apache.fop.area.PageViewport;
 import org.apache.fop.area.RegionReference;
@@ -625,6 +626,37 @@
     }
     
     /** {@inheritDoc} */
+    protected void renderFlow(NormalFlow flow) {
+        // save position and offset
+        int saveIP = currentIPPosition;
+        int saveBP = currentBPPosition;
+
+        //Establish a new coordinate system
+        AffineTransform at = new AffineTransform();
+        at.translate(currentIPPosition, currentBPPosition);
+        
+        if (!at.isIdentity()) {
+            Rectangle2D contentRect
+                = new Rectangle2D.Double(at.getTranslateX(), at.getTranslateY(),
+                        flow.getAllocIPD(), flow.getAllocBPD());
+            pushViewPortPos(new ViewPortPos(contentRect, new CTM(at)));
+        }
+
+        currentIPPosition = 0;
+        currentBPPosition = 0;
+        super.renderFlow(flow);
+        
+        if (!at.isIdentity()) {
+            popViewPortPos();
+        }
+        
+        // stacked and relative blocks effect stacking
+        currentIPPosition = saveIP;
+        currentBPPosition = saveBP;
+    }
+    
+    
+    /** {@inheritDoc} */
     protected void concatenateTransformationMatrix(AffineTransform at) {
         //Not used here since AFPRenderer defines its own renderBlockViewport() method.
         throw new UnsupportedOperationException("NYI");

Modified: xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/pcl/PCLRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/pcl/PCLRenderer.java?rev=663482&r1=663481&r2=663482&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/pcl/PCLRenderer.java (original)
+++ xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/pcl/PCLRenderer.java Thu Jun  5 00:06:37 2008
@@ -65,6 +65,7 @@
 import org.apache.fop.area.Block;
 import org.apache.fop.area.BlockViewport;
 import org.apache.fop.area.CTM;
+import org.apache.fop.area.NormalFlow;
 import org.apache.fop.area.PageViewport;
 import org.apache.fop.area.RegionViewport;
 import org.apache.fop.area.Trait;
@@ -1045,6 +1046,39 @@
         currentBPPosition = saveBP;
     }
     
+    /** {@inheritDoc} */
+    protected void renderFlow(NormalFlow flow) {
+        //TODO This is the same code as in AbstractPathOrientedRenderer
+        //So there's some optimization potential but not otherwise PCLRenderer is a little
+        //difficult to derive from AbstractPathOrientedRenderer. Maybe an additional layer
+        //between PrintRenderer and AbstractPathOrientedRenderer is necessary.
+
+        // save position and offset
+        int saveIP = currentIPPosition;
+        int saveBP = currentBPPosition;
+
+        //Establish a new coordinate system
+        AffineTransform at = new AffineTransform();
+        at.translate(currentIPPosition, currentBPPosition);
+        
+        if (!at.isIdentity()) {
+            saveGraphicsState();
+            concatenateTransformationMatrix(mptToPt(at));
+        }
+
+        currentIPPosition = 0;
+        currentBPPosition = 0;
+        super.renderFlow(flow);
+        
+        if (!at.isIdentity()) {
+            restoreGraphicsState();
+        }
+        
+        // stacked and relative blocks effect stacking
+        currentIPPosition = saveIP;
+        currentBPPosition = saveBP;
+    }
+    
     /**
      * Concatenates the current transformation matrix with the given one, therefore establishing
      * a new coordinate system.

Modified: xmlgraphics/fop/branches/fop-0_95/status.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/status.xml?rev=663482&r1=663481&r2=663482&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-0_95/status.xml (original)
+++ xmlgraphics/fop/branches/fop-0_95/status.xml Thu Jun  5 00:06:37 2008
@@ -61,6 +61,9 @@
     <!--/release-->
     <release version="0.95" date="TBD">
       <action context="Renderers" dev="JM" type="fix">
+        Fixed positioning of absolutely positioned block-containers in multi-column documents.
+      </action>
+      <action context="Renderers" dev="JM" type="fix">
         Fixed rendering of fixed block-containers in AFP output.
       </action>
       <action context="Renderers" dev="JM" type="fix">

Added: xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/block-container_absolute-position_multi-column.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/block-container_absolute-position_multi-column.xml?rev=663482&view=auto
==============================================================================
--- xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/block-container_absolute-position_multi-column.xml (added)
+++ xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/block-container_absolute-position_multi-column.xml Thu Jun  5 00:06:37 2008
@@ -0,0 +1,71 @@
+<?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>
+      This test checks absolutely positioned block-containers in multi-column documents.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in" margin="0.1in">
+          <fo:region-body column-count="2" column-gap="0.2in"/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal">
+        <fo:flow flow-name="xsl-region-body" text-align="justify">
+          <fo:block background-color="yellow">
+            This should not have any line floating over it! This should not have any
+            line floating over it! This should not have any line floating over it! This
+            should not have any line floating over it!
+          </fo:block>
+          <fo:block span="all" background-color="orange">
+            <fo:block padding-top="0.5em" padding-bottom="0.5em">
+              This should not have any line floating over it! This should not have any
+              line floating over it! This should not have any line floating over
+              it!<fo:block />
+            </fo:block> 
+          </fo:block>
+          <fo:block background-color="yellow">
+            This should not have any line floating over it! This should not have any
+            line floating over it! This should not have any line floating over it! This
+            should not have any line floating over it!
+          </fo:block>
+          <fo:block-container absolute-position="absolute"
+            left="2.5in - 0.1in - 0.025in" top="auto" width="0.05in" height="100%" background-color="red">
+            <fo:block/>
+          </fo:block-container>
+          <fo:block-container absolute-position="absolute" left="2.5in - 0.1in" top="auto"
+            reference-orientation="90">
+            <fo:block width="100%" line-height="1pt" background-color="black"
+              height="1pt">&#xA0;</fo:block>
+          </fo:block-container>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <!--
+      This test is only visually interesting! Visually check that the block container begins
+      directly under the spanned block!
+    -->
+    <eval expected="1" xpath="count(//pageViewport)"/>
+  </checks>
+</testcase>

Propchange: xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/block-container_absolute-position_multi-column.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/block-container_absolute-position_multi-column.xml
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org