jeremias    2005/02/08 02:10:00

  Modified:    src/java/org/apache/fop/layoutmgr/table Row.java Cell.java
  Log:
  Correct cell-borders when border-collapse="separate" and initial support for 
horizontal border-separation.
  This is WIP, just a save-point while I'm investigating other issues 
surrounding tables.
  
  Revision  Changes    Path
  1.18      +19 -0     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.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- Row.java  7 Feb 2005 11:01:37 -0000       1.17
  +++ Row.java  8 Feb 2005 10:10:00 -0000       1.18
  @@ -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.TableRow;
   import org.apache.fop.fo.properties.LengthRangeProperty;
   import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
  @@ -74,6 +76,17 @@
       }
   
       /**
  +     * @return the table owning this row
  +     */
  +    public Table getTable() {
  +        FONode node = fobj.getParent();
  +        while (!(node instanceof Table)) {
  +            node = node.getParent();
  +        }
  +        return (Table)node;
  +    }
  +    
  +    /**
        * Set the columns from the table.
        *
        * @param cols the list of columns for this table
  @@ -337,6 +350,12 @@
                       childLM.addAreas(breakPosIter, lc);
                   }
                   x += col.getWidth().getValue();
  +                
  +                //Handle border-separation
  +                Table table = getTable();
  +                if (table.getBorderCollapse() == EN_SEPARATE) {
  +                    x += 
table.getBorderSeparation().getIPD().getLength().getValue();
  +                }
               }
           }
   
  
  
  
  1.15      +25 -8     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.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Cell.java 7 Feb 2005 11:01:37 -0000       1.14
  +++ Cell.java 8 Feb 2005 10:10:00 -0000       1.15
  @@ -53,8 +53,9 @@
       private int xoffset;
       private int yoffset;
       private int cellIPD;
  -    private int allocBPD;
  +    private int rowHeight;
       private int usedBPD;
  +    private int borderAndPaddingBPD;
   
       /**
        * Create a new Cell layout manager.
  @@ -64,6 +65,12 @@
           fobj = node;
       }
   
  +    private int getIPIndents() {
  +        int iIndents = 0;
  +        iIndents += 
fobj.getCommonBorderPaddingBackground().getIPPaddingAndBorder(false);
  +        return iIndents;
  +    }
  +    
       /**
        * Get the next break possibility for this cell.
        * A cell contains blocks so there are breaks around the blocks
  @@ -75,12 +82,16 @@
       public BreakPoss getNextBreakPoss(LayoutContext context) {
           LayoutManager curLM; // currently active LM
   
  +        borderAndPaddingBPD = fobj.getCommonBorderPaddingBackground()
  +                .getBPPaddingAndBorder(false);
  +        
           MinOptMax stackSize = new MinOptMax();
           // if starting add space before
           // stackSize.add(spaceBefore);
           BreakPoss lastPos = null;
   
           cellIPD = context.getRefIPD();
  +        cellIPD -= getIPIndents();
   
           while ((curLM = getChildLM()) != null) {
               if (curLM.generatesInlineAreas()) {
  @@ -139,6 +150,7 @@
                   }
                   MinOptMaxUtil.restrict(stackSize, specifiedBPD);
               }
  +            stackSize = MinOptMax.add(stackSize, new 
MinOptMax(borderAndPaddingBPD));
   
               BreakPoss breakPoss = new BreakPoss(
                                       new LeafPosition(this, 
childBreaks.size() - 1));
  @@ -173,12 +185,13 @@
       }
   
       /**
  -     * Set the row height that contains this cell.
  +     * Set the row height that contains this cell. This method is used during
  +     * addAreas() stage.
        *
        * @param h the height of the row
        */
       public void setRowHeight(int h) {
  -        allocBPD = h;
  +        rowHeight = h;
       }
   
       /**
  @@ -200,14 +213,14 @@
           }
   
           //Handle display-align
  -        if (usedBPD < allocBPD) {
  +        if (usedBPD < rowHeight) {
               if (fobj.getDisplayAlign() == EN_CENTER) {
                   Block space = new Block();
  -                space.setBPD((allocBPD - usedBPD) / 2);
  +                space.setBPD((rowHeight - usedBPD) / 2);
                   curBlockArea.addBlock(space);
               } else if (fobj.getDisplayAlign() == EN_AFTER) {
                   Block space = new Block();
  -                space.setBPD((allocBPD - usedBPD));
  +                space.setBPD((rowHeight - usedBPD));
                   curBlockArea.addBlock(space);
               }
           }
  @@ -230,7 +243,9 @@
           TraitSetter.addBorders(curBlockArea, 
fobj.getCommonBorderPaddingBackground());
           TraitSetter.addBackground(curBlockArea, 
fobj.getCommonBorderPaddingBackground());
           
  -        curBlockArea.setBPD(allocBPD);
  +        int contentBPD = rowHeight;
  +        contentBPD -= borderAndPaddingBPD;
  +        curBlockArea.setBPD(contentBPD);
   
           flush();
   
  @@ -257,7 +272,9 @@
               curBlockArea.addTrait(Trait.IS_REFERENCE_AREA, Boolean.TRUE);
               curBlockArea.setPositioning(Block.ABSOLUTE);
               // set position
  -            curBlockArea.setXOffset(xoffset);
  +            int x = xoffset; //mimic start-indent
  +            x += 
fobj.getCommonBorderPaddingBackground().getBorderStartWidth(false);
  +            curBlockArea.setXOffset(x);
               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