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 2005/01/28 17:59:28 UTC

cvs commit: xml-fop/src/java/org/apache/fop/layoutmgr/list ListItemLayoutManager.java ListBlockLayoutManager.java

jeremias    2005/01/28 08:59:28

  Modified:    src/java/org/apache/fop/layoutmgr/list
                        ListItemLayoutManager.java
                        ListBlockLayoutManager.java
  Log:
  Added border, padding and spacing for list-blocks and list-items.
  
  Revision  Changes    Path
  1.18      +63 -11    xml-fop/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
  
  Index: ListItemLayoutManager.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- ListItemLayoutManager.java	28 Jan 2005 11:05:35 -0000	1.17
  +++ ListItemLayoutManager.java	28 Jan 2005 16:59:28 -0000	1.18
  @@ -29,9 +29,11 @@
   import org.apache.fop.layoutmgr.PositionIterator;
   import org.apache.fop.layoutmgr.BreakPossPosIter;
   import org.apache.fop.layoutmgr.Position;
  +import org.apache.fop.layoutmgr.TraitSetter;
   import org.apache.fop.area.Area;
   import org.apache.fop.area.Block;
   import org.apache.fop.traits.MinOptMax;
  +import org.apache.fop.traits.SpaceVal;
   
   import java.util.Iterator;
   import java.util.ArrayList;
  @@ -47,11 +49,17 @@
       private Item label;
       private Item body;
   
  +    private int referenceIPD = 0;
  +
       private Block curBlockArea = null;
   
  -    private List cellList = null;
  +    //private List cellList = null;
       private int listItemHeight;
   
  +    //TODO space-before|after: handle space-resolution rules
  +    private MinOptMax spaceBefore;
  +    private MinOptMax spaceAfter;
  +    
       private class ItemPosition extends LeafPosition {
           protected List cellBreaks;
           protected ItemPosition(LayoutManager lm, int pos, List l) {
  @@ -62,7 +70,7 @@
   
       /**
        * Create a new list item layout manager.
  -     *
  +     * @param node list-item to create the layout manager for
        */
       public ListItemLayoutManager(ListItem node) {
           super(node);
  @@ -89,6 +97,20 @@
           body.setParent(this);
       }
   
  +    /** @see org.apache.fop.layoutmgr.AbstractLayoutManager#initProperties() */
  +    protected void initProperties() {
  +        super.initProperties();
  +        spaceBefore = new SpaceVal(fobj.getCommonMarginBlock().spaceBefore).getSpace();
  +        spaceAfter = new SpaceVal(fobj.getCommonMarginBlock().spaceAfter).getSpace();
  +    }
  +
  +    private int getIPIndents() {
  +        int iIndents = 0;
  +        iIndents += fobj.getCommonMarginBlock().startIndent.getValue();
  +        iIndents += fobj.getCommonMarginBlock().endIndent.getValue();
  +        return iIndents;
  +    }
  +    
       /**
        * Get the next break possibility.
        *
  @@ -99,6 +121,9 @@
           // currently active LM
           Item curLM;
   
  +        //int allocBPD = context.
  +        referenceIPD = context.getRefIPD();
  +
           BreakPoss lastPos = null;
           List breakList = new ArrayList();
   
  @@ -121,14 +146,14 @@
   
               // Set up a LayoutContext
               // the ipd is from the current column
  -            int ipd = context.getRefIPD();
  +            //int ipd = context.getRefIPD();
               BreakPoss bp;
   
               LayoutContext childLC = new LayoutContext(0);
               childLC.setStackLimit(
                     MinOptMax.subtract(context.getStackLimit(),
                                        stackSize));
  -            childLC.setRefIPD(context.getRefIPD());
  +            childLC.setRefIPD(referenceIPD);
               
               stage++;
               while (!curLM.isFinished()) {
  @@ -178,12 +203,20 @@
           }
           listItemHeight = opt;
   
  -        MinOptMax itemSize = new MinOptMax(min, opt, max);
  -
           if (label.isFinished() && body.isFinished()) {
               setFinished(true);
           }
   
  +        MinOptMax itemSize = new MinOptMax(min, opt, max);
  +        
  +        //Add spacing
  +        if (spaceAfter != null) {
  +            itemSize.add(spaceAfter);
  +        }
  +        if (spaceBefore != null) {
  +            itemSize.add(spaceBefore);
  +        }
  +        
           ItemPosition rp = new ItemPosition(this, breakList.size() - 1, breakList);
           BreakPoss breakPoss = new BreakPoss(rp);
           if (over) {
  @@ -203,6 +236,12 @@
       public void addAreas(PositionIterator parentIter,
                            LayoutContext layoutContext) {
           getParentArea(null);
  +
  +        // if adjusted space before
  +        double adjust = layoutContext.getSpaceAdjust();
  +        addBlockSpacing(adjust, spaceBefore);
  +        spaceBefore = null;
  +
           addID(fobj.getId());
   
           Item childLM;
  @@ -226,6 +265,9 @@
   
           flush();
   
  +        // if adjusted space after
  +        addBlockSpacing(adjust, spaceAfter);
  +        
           curBlockArea = null;
       }
   
  @@ -257,11 +299,21 @@
               curBlockArea = new Block();
   
               // Set up dimensions
  -            Area parentArea = parentLM.getParentArea(curBlockArea);
  -            int referenceIPD = parentArea.getIPD();
  -            curBlockArea.setIPD(referenceIPD);
  -            // Get reference IPD from parentArea
  -            setCurrentArea(curBlockArea); // ??? for generic operations
  +            /*Area parentArea =*/ parentLM.getParentArea(curBlockArea);
  +            
  +            // set traits
  +            TraitSetter.addBorders(curBlockArea, fobj.getCommonBorderPaddingBackground());
  +            TraitSetter.addBackground(curBlockArea, fobj.getCommonBorderPaddingBackground());
  +            TraitSetter.addMargins(curBlockArea,
  +                    fobj.getCommonBorderPaddingBackground(), 
  +                    fobj.getCommonMarginBlock());
  +            TraitSetter.addBreaks(curBlockArea, 
  +                    fobj.getBreakBefore(), fobj.getBreakAfter());
  +            
  +            int contentIPD = referenceIPD - getIPIndents();
  +            curBlockArea.setIPD(contentIPD);
  +
  +            setCurrentArea(curBlockArea);
           }
           return curBlockArea;
       }
  
  
  
  1.10      +66 -18    xml-fop/src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java
  
  Index: ListBlockLayoutManager.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ListBlockLayoutManager.java	20 Oct 2004 13:19:25 -0000	1.9
  +++ ListBlockLayoutManager.java	28 Jan 2005 16:59:28 -0000	1.10
  @@ -31,6 +31,7 @@
   import org.apache.fop.area.Area;
   import org.apache.fop.area.Block;
   import org.apache.fop.traits.MinOptMax;
  +import org.apache.fop.traits.SpaceVal;
   
   import java.util.ArrayList;
   import java.util.List;
  @@ -45,25 +46,46 @@
       
       private Block curBlockArea;
   
  +    private int referenceIPD = 0;
  +
       private List bodyBreaks = new ArrayList();
   
  +    //TODO space-before|after: handle space-resolution rules
  +    private MinOptMax spaceBefore;
  +    private MinOptMax spaceAfter;
  +
  +    /*
       private class SectionPosition extends LeafPosition {
           protected List list;
           protected SectionPosition(LayoutManager lm, int pos, List l) {
               super(lm, pos);
               list = l;
           }
  -    }
  +    }*/
   
       /**
        * Create a new table layout manager.
  -     *
  +     * @param node list-block to create the layout manager for
        */
       public ListBlockLayoutManager(ListBlock node) {
           super(node);
           fobj = node;
       }
   
  +    /** @see org.apache.fop.layoutmgr.AbstractLayoutManager#initProperties() */
  +    protected void initProperties() {
  +        super.initProperties();
  +        spaceBefore = new SpaceVal(fobj.getCommonMarginBlock().spaceBefore).getSpace();
  +        spaceAfter = new SpaceVal(fobj.getCommonMarginBlock().spaceAfter).getSpace();
  +    }
  +
  +    private int getIPIndents() {
  +        int iIndents = 0;
  +        iIndents += fobj.getCommonMarginBlock().startIndent.getValue();
  +        iIndents += fobj.getCommonMarginBlock().endIndent.getValue();
  +        return iIndents;
  +    }
  +    
       /**
        * Get the next break possibility.
        * The break possibility depends on the height of the header and footer
  @@ -76,22 +98,31 @@
           // currently active LM
           LayoutManager curLM;
   
  +        referenceIPD = context.getRefIPD();
  +
           MinOptMax stackSize = new MinOptMax();
  -        // if starting add space before
  -        // stackSize.add(spaceBefore);
  +        
  +        //Add spacing
  +        if (spaceAfter != null) {
  +            stackSize.add(spaceAfter);
  +        }
  +        if (spaceBefore != null) {
  +            stackSize.add(spaceBefore);
  +        }
  +
           BreakPoss lastPos = null;
   
           while ((curLM = (LayoutManager)getChildLM()) != null) {
               // Make break positions
               // Set up a LayoutContext
  -            int ipd = context.getRefIPD();
  +            //int ipd = context.getRefIPD();
               BreakPoss bp;
   
               LayoutContext childLC = new LayoutContext(0);
               childLC.setStackLimit(
                     MinOptMax.subtract(context.getStackLimit(),
                                        stackSize));
  -            childLC.setRefIPD(ipd);
  +            childLC.setRefIPD(referenceIPD);
   
               boolean over = false;
               while (!curLM.isFinished()) {
  @@ -145,11 +176,17 @@
       public void addAreas(PositionIterator parentIter,
                            LayoutContext layoutContext) {
           getParentArea(null);
  +        
  +        // if adjusted space before
  +        double adjust = layoutContext.getSpaceAdjust();
  +        addBlockSpacing(adjust, spaceBefore);
  +        spaceBefore = null;
  +        
           addID(fobj.getId());
   
           // the list block contains areas stacked from each list item
   
  -        int listHeight = 0;
  +        //int listHeight = 0;
   
           LayoutManager childLM;
           int iStartPos = 0;
  @@ -157,20 +194,20 @@
           while (parentIter.hasNext()) {
               LeafPosition lfp = (LeafPosition) parentIter.next();
               // Add the block areas to Area
  -            PositionIterator breakPosIter =
  -              new BreakPossPosIter(bodyBreaks, iStartPos,
  -                                   lfp.getLeafPos() + 1);
  +            PositionIterator breakPosIter = new BreakPossPosIter(
  +                    bodyBreaks, iStartPos, lfp.getLeafPos() + 1);
               iStartPos = lfp.getLeafPos() + 1;
               while ((childLM = (LayoutManager)breakPosIter.getNextChildLM()) != null) {
                   childLM.addAreas(breakPosIter, lc);
               }
           }
   
  -        TraitSetter.addBorders(curBlockArea, fobj.getCommonBorderPaddingBackground());
  -        TraitSetter.addBackground(curBlockArea, fobj.getCommonBorderPaddingBackground());
   
           flush();
   
  +        // if adjusted space after
  +        addBlockSpacing(adjust, spaceAfter);
  +        
           bodyBreaks.clear();
           curBlockArea = null;
       }
  @@ -191,13 +228,24 @@
       public Area getParentArea(Area childArea) {
           if (curBlockArea == null) {
               curBlockArea = new Block();
  +            
               // Set up dimensions
               // Must get dimensions from parent area
  -            Area parentArea = parentLM.getParentArea(curBlockArea);
  -            int referenceIPD = parentArea.getIPD();
  -            curBlockArea.setIPD(referenceIPD);
  -            // Get reference IPD from parentArea
  -            setCurrentArea(curBlockArea); // ??? for generic operations
  +            /*Area parentArea =*/ parentLM.getParentArea(curBlockArea);
  +
  +            // set traits
  +            TraitSetter.addBorders(curBlockArea, fobj.getCommonBorderPaddingBackground());
  +            TraitSetter.addBackground(curBlockArea, fobj.getCommonBorderPaddingBackground());
  +            TraitSetter.addMargins(curBlockArea,
  +                    fobj.getCommonBorderPaddingBackground(), 
  +                    fobj.getCommonMarginBlock());
  +            TraitSetter.addBreaks(curBlockArea, 
  +                    fobj.getBreakBefore(), fobj.getBreakAfter());
  +            
  +            int contentIPD = referenceIPD - getIPIndents();
  +            curBlockArea.setIPD(contentIPD);
  +            
  +            setCurrentArea(curBlockArea);
           }
           return curBlockArea;
       }
  @@ -223,7 +271,7 @@
               bodyBreaks.clear();
               reset(null);
           } else {
  -
  +            //TODO Something to put here?
           }
       }
   }
  
  
  

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