Author: jeremias
Date: Thu Apr 24 09:08:53 2008
New Revision: 651302

URL: http://svn.apache.org/viewvc?rev=651302&view=rev
Log:
Fixed regression causing bad positioning of block-containers if used as 
descendant of a table-cell. This was not caught because of the lack of a test 
case that would have shown the problem in visual testing with BatchDiffer.
See also: 
http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-users/200804.mbox/[EMAIL
 PROTECTED]

Added:
    
xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/table-cell_bc-child.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/AbstractRenderer.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/src/java/org/apache/fop/render/xml/XMLRenderer.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=651302&r1=651301&r2=651302&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 Apr 24 09:08:53 2008
@@ -521,6 +521,41 @@
         }
     }
 
+    /** [EMAIL PROTECTED] */
+    protected void renderReferenceArea(Block block) {
+        // save position and offset
+        int saveIP = currentIPPosition;
+        int saveBP = currentBPPosition;
+
+        //Establish a new coordinate system
+        AffineTransform at = new AffineTransform();
+        at.translate(currentIPPosition, currentBPPosition);
+        at.translate(block.getXOffset(), block.getYOffset());
+        at.translate(0, block.getSpaceBefore());
+        
+        if (!at.isIdentity()) {
+            saveGraphicsState();
+            concatenateTransformationMatrix(mptToPt(at));
+        }
+
+        currentIPPosition = 0;
+        currentBPPosition = 0;
+        handleBlockTraits(block);
+
+        List children = block.getChildAreas();
+        if (children != null) {
+            renderBlocks(block, children);
+        }
+
+        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/AbstractRenderer.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/AbstractRenderer.java?rev=651302&r1=651301&r2=651302&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/AbstractRenderer.java
 (original)
+++ 
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/AbstractRenderer.java
 Thu Apr 24 09:08:53 2008
@@ -482,6 +482,13 @@
     }
 
     /**
+     * Renders a block area that represents a reference area. The reference 
area establishes
+     * a new coordinate system.
+     * @param block the block area
+     */
+    protected abstract void renderReferenceArea(Block block);
+    
+    /**
      * Renders a list of block areas.
      *
      * @param parent  the parent block if the parent is a block, otherwise
@@ -549,6 +556,8 @@
                 // simply move position
                 currentBPPosition += block.getAllocBPD();
             }
+        } else if 
(Boolean.TRUE.equals(block.getTrait(Trait.IS_REFERENCE_AREA))) {
+            renderReferenceArea(block);
         } else {
             // save position and offset
             int saveIP = currentIPPosition;

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=651302&r1=651301&r2=651302&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 Apr 24 09:08:53 2008
@@ -588,6 +588,45 @@
     }
 
     /** [EMAIL PROTECTED] */
+    protected void renderReferenceArea(Block block) {
+        //TODO Remove this method once concatenateTransformationMatrix() is 
implemented 
+        
+        // save position and offset
+        int saveIP = currentIPPosition;
+        int saveBP = currentBPPosition;
+
+        //Establish a new coordinate system
+        AffineTransform at = new AffineTransform();
+        at.translate(currentIPPosition, currentBPPosition);
+        at.translate(block.getXOffset(), block.getYOffset());
+        at.translate(0, block.getSpaceBefore());
+        
+        if (!at.isIdentity()) {
+            Rectangle2D contentRect
+                = new Rectangle2D.Double(at.getTranslateX(), 
at.getTranslateY(),
+                        block.getAllocIPD(), block.getAllocBPD());
+            pushViewPortPos(new ViewPortPos(contentRect, new CTM(at)));
+        }
+
+        currentIPPosition = 0;
+        currentBPPosition = 0;
+        handleBlockTraits(block);
+
+        List children = block.getChildAreas();
+        if (children != null) {
+            renderBlocks(block, children);
+        }
+
+        if (!at.isIdentity()) {
+            popViewPortPos();
+        }
+        
+        // stacked and relative blocks effect stacking
+        currentIPPosition = saveIP;
+        currentBPPosition = saveBP;
+    }
+    
+    /** [EMAIL PROTECTED] */
     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=651302&r1=651301&r2=651302&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 Apr 24 09:08:53 2008
@@ -1005,6 +1005,46 @@
         //currentFontName = saveFontName;
     }
 
+    /** [EMAIL PROTECTED] */
+    protected void renderReferenceArea(Block block) {
+        //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);
+        at.translate(block.getXOffset(), block.getYOffset());
+        at.translate(0, block.getSpaceBefore());
+        
+        if (!at.isIdentity()) {
+            saveGraphicsState();
+            concatenateTransformationMatrix(mptToPt(at));
+        }
+
+        currentIPPosition = 0;
+        currentBPPosition = 0;
+        handleBlockTraits(block);
+
+        List children = block.getChildAreas();
+        if (children != null) {
+            renderBlocks(block, children);
+        }
+
+        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/xml/XMLRenderer.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/xml/XMLRenderer.java?rev=651302&r1=651301&r2=651302&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/xml/XMLRenderer.java
 (original)
+++ 
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/render/xml/XMLRenderer.java
 Thu Apr 24 09:08:53 2008
@@ -754,9 +754,17 @@
         endElement("flow");
     }
 
-    /**
-     * [EMAIL PROTECTED]
-     */
+    /** [EMAIL PROTECTED] */
+    protected void renderReferenceArea(Block block) {
+        handleBlockTraits(block);
+
+        List children = block.getChildAreas();
+        if (children != null) {
+            renderBlocks(block, children);
+        }
+    }
+    
+    /** [EMAIL PROTECTED] */
     protected void renderBlock(Block block) {
         atts.clear();
         addAreaAttributes(block);

Modified: xmlgraphics/fop/branches/fop-0_95/status.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/status.xml?rev=651302&r1=651301&r2=651302&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-0_95/status.xml (original)
+++ xmlgraphics/fop/branches/fop-0_95/status.xml Thu Apr 24 09:08:53 2008
@@ -60,6 +60,10 @@
       -->
     <!--/release-->
     <release version="0.95" date="TBD">
+      <action context="Renderers" dev="JM" type="fix">
+        Fixed regression causing bad positioning of block-containers if used 
as descendant
+        of a table-cell.
+      </action>
       <action context="Fonts" dev="JM" type="fix">
         Fixed text extraction problem with ZapfDingbats and Symbol font in PDF 
output.
       </action>

Added: 
xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/table-cell_bc-child.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/table-cell_bc-child.xml?rev=651302&view=auto
==============================================================================
--- 
xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/table-cell_bc-child.xml
 (added)
+++ 
xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/table-cell_bc-child.xml
 Thu Apr 24 09:08:53 2008
@@ -0,0 +1,65 @@
+<?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 visual="only">
+  <info>
+    <p>
+      This test checks the rendering of block viewports in reference areas 
generated
+      by table-cells. This does not test the layout engine, only the renderer.
+    </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="20pt">
+          <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:table table-layout="fixed" width="4in" 
background-color="lightgray"
+                space-before="2in" space-before.conditionality="retain">
+            <fo:table-column column-width="100%"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell background-color="rgb(230, 230, 255)">
+                  <fo:block-container absolute-position="absolute" 
width="100%" height="2em">
+                    <fo:block color="red">No red text should be 
visible!</fo:block>
+                  </fo:block-container>
+                  <fo:block color="green">No red text should be 
visible!</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+              <fo:table-row>
+                <fo:table-cell padding="10pt" background-color="rgb(230, 255, 
230)">
+                  <fo:block-container absolute-position="absolute" 
width="100%" height="2em" top="10pt">
+                    <fo:block color="red">No red text should be 
visible!</fo:block>
+                  </fo:block-container>
+                  <fo:block color="green">No red text should be 
visible!</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <!-- Dummy test. This test is only useful with BatchDiffer. -->
+    <eval expected="1" xpath="count(//pageViewport)"/>
+  </checks>
+</testcase>

Propchange: 
xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/table-cell_bc-child.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
xmlgraphics/fop/branches/fop-0_95/test/layoutengine/standard-testcases/table-cell_bc-child.xml
------------------------------------------------------------------------------
    svn:keywords = Id



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

Reply via email to