jeremias    2005/02/09 03:51:30

  Modified:    src/java/org/apache/fop/layoutmgr/table Row.java Cell.java
  Log:
  Fix for handling of horizontal border-separation. My first interpretation was 
wrong.
  
  Revision  Changes    Path
  1.22      +2 -12     xml-fop/src/java/org/apache/fop/layoutmgr/table/Row.java
  
  Index: Row.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/table/Row.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- Row.java  8 Feb 2005 16:37:23 -0000       1.21
  +++ Row.java  9 Feb 2005 11:51:30 -0000       1.22
  @@ -229,16 +229,10 @@
               //Determine which columns this cell will occupy
               getColumnsForCell(cellLM, startColumn, spannedColumns);
               int childRefIPD = 0;
  -            Iterator i = spannedColumns.iterator();
  -            while (i.hasNext()) {
  -                Column col = (Column)i.next();
  +            for (int i = 0; i < spannedColumns.size(); i++) {
  +                Column col = (Column)spannedColumns.get(i);
                   childRefIPD += col.getWidth().getValue();
               }
  -            //Handle border-separation when border-collapse="separate"
  -            if (getTable().getBorderCollapse() == EN_SEPARATE) {
  -                childRefIPD += (spannedColumns.size() - 1) 
  -                    * 
getTable().getBorderSeparation().getIPD().getLength().getValue();
  -            }
               childLC.setRefIPD(childRefIPD);
   
               if (cellLM != null) {
  @@ -280,11 +274,7 @@
               }
               
               //Adjust in-row x offset for individual cells
  -            //TODO Probably needs more work to support writing modes
               ipdOffset += childRefIPD;
  -            if (getTable().getBorderCollapse() == EN_SEPARATE) {
  -                ipdOffset += 
getTable().getBorderSeparation().getIPD().getLength().getValue();
  -            }
               
               
               // the min is the maximum min of all cells
  
  
  
  1.19      +24 -1     xml-fop/src/java/org/apache/fop/layoutmgr/table/Cell.java
  
  Index: Cell.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/table/Cell.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- Cell.java 8 Feb 2005 17:41:23 -0000       1.18
  +++ Cell.java 9 Feb 2005 11:51:30 -0000       1.19
  @@ -18,6 +18,8 @@
    
   package org.apache.fop.layoutmgr.table;
   
  +import org.apache.fop.fo.FONode;
  +import org.apache.fop.fo.flow.Table;
   import org.apache.fop.fo.flow.TableCell;
   import org.apache.fop.fo.properties.LengthRangeProperty;
   import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
  @@ -74,6 +76,17 @@
           return this.fobj;
       }
       
  +    /**
  +     * @return the table owning this cell
  +     */
  +    public Table getTable() {
  +        FONode node = fobj.getParent();
  +        while (!(node instanceof Table)) {
  +            node = node.getParent();
  +        }
  +        return (Table)node;
  +    }
  +    
       private int getIPIndents() {
           int iIndents = 0;
           iIndents += 
fobj.getCommonBorderPaddingBackground().getIPPaddingAndBorder(false);
  @@ -102,6 +115,11 @@
           referenceIPD = context.getRefIPD(); 
           cellIPD = referenceIPD;
           cellIPD -= getIPIndents();
  +        if (getTable().getBorderCollapse() == EN_SEPARATE) {
  +            int borderSep = getTable().getBorderSeparation().getLengthPair()
  +                    .getIPD().getLength().getValue();
  +            cellIPD -= borderSep;
  +        }
   
           while ((curLM = getChildLM()) != null) {
               if (curLM.generatesInlineAreas()) {
  @@ -294,7 +312,12 @@
               indent += 
fobj.getCommonBorderPaddingBackground().getBorderStartWidth(false);
               indent += 
fobj.getCommonBorderPaddingBackground().getPaddingStart(false);
               // set position
  -            curBlockArea.setXOffset(xoffset + inRowIPDOffset + indent);
  +            int halfBorderSep = 0;
  +            if (getTable().getBorderCollapse() == EN_SEPARATE) {
  +                halfBorderSep = 
getTable().getBorderSeparation().getLengthPair()
  +                        .getIPD().getLength().getValue() / 2;
  +            }
  +            curBlockArea.setXOffset(xoffset + inRowIPDOffset + halfBorderSep 
+ indent);
               curBlockArea.setYOffset(yoffset);
               curBlockArea.setIPD(cellIPD);
               //curBlockArea.setHeight();
  
  
  

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

Reply via email to