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/03/10 23:39:42 UTC

svn commit: r635741 - in /xmlgraphics/fop/trunk: src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java test/layoutengine/standard-testcases/table_backgrounds_2.xml

Author: jeremias
Date: Mon Mar 10 15:39:38 2008
New Revision: 635741

URL: http://svn.apache.org/viewvc?rev=635741&view=rev
Log:
Bugfix for row/body/col background painting when padding is used in the table-cells.

Added:
    xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/table_backgrounds_2.xml   (with props)
Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java?rev=635741&r1=635740&r2=635741&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java Mon Mar 10 15:39:38 2008
@@ -354,11 +354,12 @@
 
         CommonBorderPaddingBackground padding = primaryGridUnit.getCell()
                 .getCommonBorderPaddingBackground();
-        int cellBPD = totalHeight - borderBeforeWidth - borderAfterWidth;
+        int paddingRectBPD = totalHeight - borderBeforeWidth - borderAfterWidth; 
+        int cellBPD = paddingRectBPD;
         cellBPD -= padding.getPaddingBefore(borderBeforeWhich == ConditionalBorder.REST, this);
         cellBPD -= padding.getPaddingAfter(borderAfterWhich == ConditionalBorder.REST, this);
 
-        addBackgroundAreas(painter, firstRowHeight, borderBeforeWidth, cellBPD);
+        addBackgroundAreas(painter, firstRowHeight, borderBeforeWidth, paddingRectBPD);
 
         if (isSeparateBorderModel()) {
             if (!emptyCell || getTableCell().showEmptyCells()) {
@@ -488,22 +489,23 @@
 
     /** Adds background areas for the column, body and row, if any. */
     private void addBackgroundAreas(RowPainter painter, int firstRowHeight, int borderBeforeWidth,
-            int cellBPD) {
+            int paddingRectBPD) {
         TableColumn column = getTable().getColumn(primaryGridUnit.getColIndex());
         if (column.getCommonBorderPaddingBackground().hasBackground()) {
-            Block colBackgroundArea = getBackgroundArea(cellBPD, borderBeforeWidth);
+            Block colBackgroundArea = getBackgroundArea(paddingRectBPD, borderBeforeWidth);
             ((TableLayoutManager) parentLM).registerColumnBackgroundArea(column, colBackgroundArea,
                     -startIndent);
         }
 
         TableBody body = primaryGridUnit.getTableBody();
         if (body.getCommonBorderPaddingBackground().hasBackground()) {
-            painter.registerPartBackgroundArea(getBackgroundArea(cellBPD, borderBeforeWidth));
+            painter.registerPartBackgroundArea(
+                    getBackgroundArea(paddingRectBPD, borderBeforeWidth));
         }
 
         TableRow row = primaryGridUnit.getRow();
         if (row != null && row.getCommonBorderPaddingBackground().hasBackground()) {
-            Block rowBackgroundArea = getBackgroundArea(cellBPD, borderBeforeWidth);
+            Block rowBackgroundArea = getBackgroundArea(paddingRectBPD, borderBeforeWidth);
             ((TableLayoutManager) parentLM).addBackgroundArea(rowBackgroundArea);
             TraitSetter.addBackground(rowBackgroundArea, row.getCommonBorderPaddingBackground(),
                     (TableLayoutManager) parentLM,
@@ -541,12 +543,16 @@
     }
 
     private Block getBackgroundArea(int bpd, int borderBeforeWidth) {
+        CommonBorderPaddingBackground padding = getTableCell().getCommonBorderPaddingBackground();
+        int paddingStart = padding.getPaddingStart(false, this);
+        int paddingEnd = padding.getPaddingStart(false, this);
+        
         Block block = new Block();
         TraitSetter.setProducerID(block, getTable().getId());
         block.setPositioning(Block.ABSOLUTE);
-        block.setIPD(cellIPD);
+        block.setIPD(cellIPD + paddingStart + paddingEnd);
         block.setBPD(bpd);
-        block.setXOffset(xoffset + startIndent);
+        block.setXOffset(xoffset + startIndent - paddingStart);
         block.setYOffset(yoffset + borderBeforeWidth);
         return block;
     }

Added: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/table_backgrounds_2.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/table_backgrounds_2.xml?rev=635741&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/table_backgrounds_2.xml (added)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/table_backgrounds_2.xml Mon Mar 10 15:39:38 2008
@@ -0,0 +1,113 @@
+<?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 background painting for fo:table-row, fo:table-body and fo:table-column
+      when the cells use padding.
+    </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">
+          <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="100%">
+            <fo:table-column column-width="proportional-column-width(1)" number-columns-repeated="2"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell id="bg-cell" padding="2pt 4pt" border="solid 2pt" background-color="lightgray">
+                  <fo:block>background on cell</fo:block>
+                </fo:table-cell>
+                <fo:table-cell padding="2pt 4pt" border="solid 2pt" background-color="lightgray">
+                  <fo:block>background on cell</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+              <fo:table-row background-color="yellow">
+                <fo:table-cell id="bg-row" padding="2pt 4pt" border="solid 2pt">
+                  <fo:block>background on row</fo:block>
+                </fo:table-cell>
+                <fo:table-cell padding="2pt 4pt" border="solid 2pt">
+                  <fo:block>background on row</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+            <fo:table-body background-color="orange">
+              <fo:table-row>
+                <fo:table-cell id="bg-body" padding="2pt 4pt" border="solid 2pt">
+                  <fo:block>background on body</fo:block>
+                </fo:table-cell>
+                <fo:table-cell padding="2pt 4pt" border="solid 2pt">
+                  <fo:block>background on body</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+          <fo:table table-layout="fixed" width="100%">
+            <fo:table-column column-width="proportional-column-width(1)" number-columns-repeated="2"
+              background-color="violet"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell id="bg-col" padding="2pt 4pt" border="solid 2pt">
+                  <fo:block>background on column</fo:block>
+                </fo:table-cell>
+                <fo:table-cell padding="2pt 4pt" border="solid 2pt">
+                  <fo:block>background on column</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+          <fo:table table-layout="fixed" width="100%" background-color="red">
+            <fo:table-column column-width="proportional-column-width(1)" number-columns-repeated="2"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell id="bg-table" padding="2pt 4pt" border="solid 2pt">
+                  <fo:block>background on table</fo:block>
+                </fo:table-cell>
+                <fo:table-cell padding="2pt 4pt" border="solid 2pt">
+                  <fo:block>background on table</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <eval expected="18400" xpath="//block[@prod-id='bg-row']/preceding-sibling::block[1]/@bpd"/>
+    <eval expected="178000" xpath="//block[@prod-id='bg-row']/preceding-sibling::block[1]/@ipd"/>
+    <eval expected="21400" xpath="//block[@prod-id='bg-row']/preceding-sibling::block[1]/@top-offset"/>
+    <eval expected="1000" xpath="//block[@prod-id='bg-row']/preceding-sibling::block[1]/@left-offset"/>
+    
+    <eval expected="18400" xpath="//block[@prod-id='bg-body']/preceding-sibling::block[1]/@bpd"/>
+    <eval expected="178000" xpath="//block[@prod-id='bg-body']/preceding-sibling::block[1]/@ipd"/>
+    <eval expected="41800" xpath="//block[@prod-id='bg-body']/preceding-sibling::block[1]/@top-offset"/>
+    <eval expected="1000" xpath="//block[@prod-id='bg-body']/preceding-sibling::block[1]/@left-offset"/>
+
+    <eval expected="18400" xpath="//block[@prod-id='bg-col']/preceding-sibling::block[1]/@bpd"/>
+    <eval expected="178000" xpath="//block[@prod-id='bg-col']/preceding-sibling::block[1]/@ipd"/>
+    <eval expected="1000" xpath="//block[@prod-id='bg-col']/preceding-sibling::block[1]/@top-offset"/>
+    <eval expected="1000" xpath="//block[@prod-id='bg-col']/preceding-sibling::block[1]/@left-offset"/>
+  </checks>
+</testcase>

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

Propchange: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/table_backgrounds_2.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