klease      01/11/09 14:02:35

  Modified:    src/org/apache/fop/area Area.java BeforeFloat.java
                        Block.java BodyRegion.java Flow.java Footnote.java
                        MainReference.java Page.java RegionViewport.java
                        Span.java
  Log:
  Add some methods needed by the LayoutManager classes (subject to discussion)
  
  Revision  Changes    Path
  1.4       +85 -1     xml-fop/src/org/apache/fop/area/Area.java
  
  Index: Area.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/Area.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Area.java 2001/11/09 11:32:36     1.3
  +++ Area.java 2001/11/09 22:02:34     1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Area.java,v 1.3 2001/11/09 11:32:36 keiron Exp $
  + * $Id: Area.java,v 1.4 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -8,6 +8,7 @@
   package org.apache.fop.area;
   
   import java.io.Serializable;
  +import org.apache.fop.fo.FObj;
   
   // If the area appears more than once in the output
   // or if the area has external data it is cached
  @@ -33,4 +34,87 @@
       public static final int ORIENT_180 = 2;
       public static final int ORIENT_270 = 3;
   
  +    // area class values
  +    public static final int CLASS_NORMAL = 0;
  +    public static final int CLASS_FIXED = 1;
  +    public static final int CLASS_ABSOLUTE = 2;
  +    public static final int CLASS_BEFORE_FLOAT = 3;
  +    public static final int CLASS_FOOTNOTE = 4;
  +    public static final int CLASS_SIDE_FLOAT = 5;
  +    // IMPORTANT: make sure this is the maximum + 1
  +    public static final int CLASS_MAX = CLASS_SIDE_FLOAT+1;
  +
  +    private int areaClass=CLASS_NORMAL;
  +    private FObj genFObj;
  +
  +    protected Area parent =null; // Doesn't need to be saved in serialization
  +
  +    public int getAreaClass() {
  +     return areaClass;
  +    }
  +
  +    public void setAreaClass(int areaClass) {
  +     this.areaClass = areaClass;
  +    }
  +
  +    /**
  +     * Return a length range describing the minimum, optimum and maximum
  +     * lengths available for content in the block-progression-direction.
  +     * This is calculated from the theoretical maximum size of the area
  +     * and its current content.
  +     */
  +    public MinOptMax getAvailBPD() {
  +     return MinOptMax.subtract(getMaxBPD(), getContentBPD());
  +    }
  +
  +    /**
  +     * Return a length range describing the theoretical maximum size of an
  +     * area in the block-progression-direction.
  +     * For areas holding normal flowing or floating content in paged media,
  +     * this depends on the size of the body. In general the answer is the
  +     * gotten from the parent. At the body level, the calculation accounts
  +     * for the sizes of the conditional areas.
  +     */
  +    public MinOptMax getMaxBPD() {
  +     if (parent != null) {
  +         return parent.getMaxBPD();
  +     }
  +     else return new MinOptMax();
  +    }
  +
  +    /**
  +     * Return a length range describing the minimum, optimum and maximum
  +     * lengths of all area content in the block-progression-direction.
  +     * This is based on the allocation rectangles of all content in
  +     * the area.
  +     */
  +    public MinOptMax getContentBPD() {
  +     return new MinOptMax();
  +    }
  +
  +    /**
  +     * Return a length range describing the minimum, optimum and maximum
  +     * lengths of the area's allocation rectangle
  +     * in the block-progression-direction.
  +     * This is based on the allocation rectangles of all content in
  +     * the area.
  +     * The default implementation simply returns the same as the content BPD.
  +     * If an Area has before or after border and padding, these contribute
  +     * to the allocation BPD, depending on conditionality.
  +     */
  +    public MinOptMax getAllocationBPD() {
  +     return getContentBPD();
  +    }
  +
  +    public void setParent(Area parent) {
  +     this.parent = parent;
  +    }
  +
  +    public void setGeneratingFObj(FObj fobj) {
  +     this.genFObj = fobj;
  +    }
  +
  +    public FObj getGeneratingFObj() {
  +     return this.genFObj;
  +    }
   }
  
  
  
  1.3       +16 -2     xml-fop/src/org/apache/fop/area/BeforeFloat.java
  
  Index: BeforeFloat.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/BeforeFloat.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BeforeFloat.java  2001/10/26 09:26:59     1.2
  +++ BeforeFloat.java  2001/11/09 22:02:34     1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: BeforeFloat.java,v 1.2 2001/10/26 09:26:59 keiron Exp $
  + * $Id: BeforeFloat.java,v 1.3 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -10,7 +10,7 @@
   import java.util.List;
   import java.util.ArrayList;
   
  -public class BeforeFloat extends Area {
  +public class BeforeFloat extends BlockParent {
       // this is an optional block area that will be rendered
       // as the separator only if there are float areas
       Block separator = null;
  @@ -47,4 +47,18 @@
           int h = 0;
           return h;
       }
  +
  +    public MinOptMax getMaxBPD() {
  +     MinOptMax maxbpd = parent.getMaxBPD();
  +     BodyRegion body = (BodyRegion)parent;
  +     Area a =  body.getMainReference();
  +     if (a != null) {
  +         maxbpd = MinOptMax.subtract(maxbpd, a.getContentBPD());
  +     }
  +     if ((a=body.getFootnote()) != null) {
  +         maxbpd = MinOptMax.subtract(maxbpd, a.getContentBPD());
  +     }
  +     return maxbpd;
  +    }
  +
   }
  
  
  
  1.3       +2 -14     xml-fop/src/org/apache/fop/area/Block.java
  
  Index: Block.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/Block.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Block.java        2001/10/26 09:26:59     1.2
  +++ Block.java        2001/11/09 22:02:34     1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Block.java,v 1.2 2001/10/26 09:26:59 keiron Exp $
  + * $Id: Block.java,v 1.3 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -18,7 +18,7 @@
   // or by relative to the parent for floats, tables and lists
   // cacheable object
   // has id information
  -public class Block extends Area implements Serializable {
  +public class Block extends BlockParent implements Serializable {
       // normally stacked with other blocks
       public static final int STACK = 0;
       // placed relative to the parent area
  @@ -26,11 +26,6 @@
       // placed relative to the page or viewport
       public static final int ABSOLUTE = 2;
   
  -    // this position is used for absolute position
  -    // or as an indent
  -    // this has the size in the block progression dimension
  -    Rectangle2D bounds = null;
  -
       int stacking = TB;
   
       // list of marker fo objects that are associated with this area
  @@ -38,7 +33,6 @@
       // available markers, markers are discarded once page complete
       private ArrayList markers = null;
   
  -    ArrayList children = null;
       boolean blocks = false;
       // a block with may contain the dominant styling info in
       // terms of most lines or blocks with info
  @@ -46,8 +40,6 @@
   
       int positioning = STACK;
   
  -    // orientation if reference area
  -    int orientation = ORIENT_0;
   
       public void addBlock(Block block) {
           if (children == null) {
  @@ -71,10 +63,6 @@
   
       public boolean isChildrenBlocks() {
           return blocks;
  -    }
  -
  -    public List getChildAreas() {
  -        return children;
       }
   
       public int getPositioning() {
  
  
  
  1.3       +25 -2     xml-fop/src/org/apache/fop/area/BodyRegion.java
  
  Index: BodyRegion.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/BodyRegion.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BodyRegion.java   2001/10/26 09:26:59     1.2
  +++ BodyRegion.java   2001/11/09 22:02:34     1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: BodyRegion.java,v 1.2 2001/10/26 09:26:59 keiron Exp $
  + * $Id: BodyRegion.java,v 1.3 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -7,25 +7,44 @@
   
   package org.apache.fop.area;
   
  -public class BodyRegion extends Region {
  +import java.awt.geom.Rectangle2D;
  +
  +public class BodyRegion extends RegionReference {
       BeforeFloat beforeFloat;
       MainReference mainReference;
       Footnote footnote;
   
  +    /** Maximum block progression dimension. Note: min=opt=max */
  +    private MinOptMax maxBPD;
  +
  +    /** Referenc inline progression dimension for the body. */
  +    private int refIPD;
  +
       public BodyRegion() {
           super(BODY);
       }
   
  +    public void setParent(Area area) {
  +     super.setParent(area);
  +     // Only if not scrolling or overflow !!!
  +     Rectangle2D refRect = ((RegionViewport)area).getViewArea();
  +     maxBPD = new MinOptMax((int)refRect.getHeight());
  +     refIPD = (int)refRect.getWidth();
  +    }
  +
       public void setBeforeFloat(BeforeFloat bf) {
           beforeFloat = bf;
  +     beforeFloat.setParent(this);
       }
   
       public void setMainReference(MainReference mr) {
           mainReference = mr;
  +     mainReference.setParent(this);
       }
   
       public void setFootnote(Footnote foot) {
           footnote = foot;
  +     footnote.setParent(this);
       }
   
   
  @@ -39,5 +58,9 @@
   
       public Footnote getFootnote() {
           return footnote;
  +    }
  +
  +    public MinOptMax getMaxBPD() {
  +     return maxBPD;
       }
   }
  
  
  
  1.3       +11 -2     xml-fop/src/org/apache/fop/area/Flow.java
  
  Index: Flow.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/Flow.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Flow.java 2001/10/26 09:26:59     1.2
  +++ Flow.java 2001/11/09 22:02:34     1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Flow.java,v 1.2 2001/10/26 09:26:59 keiron Exp $
  + * $Id: Flow.java,v 1.3 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -12,7 +12,7 @@
   
   // this is a normal flow reference area
   // it containts a list of block areas from the flow
  -public class Flow extends Area {
  +public class Flow extends BlockParent {
       // the list of blocks created from the flow
       ArrayList blocks = new ArrayList();
       int stacking = TB;
  @@ -25,5 +25,14 @@
       public List getBlocks() {
           return blocks;
       }
  +
  +    /**
  +     * Maximum block progression dimension for a Flow is
  +     * the same as that of its parent Span.
  +     */
  +    public MinOptMax getMaxBPD() {
  +     return parent.getMaxBPD();
  +    }
  +
   
   }
  
  
  
  1.4       +15 -2     xml-fop/src/org/apache/fop/area/Footnote.java
  
  Index: Footnote.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/Footnote.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Footnote.java     2001/11/02 07:45:17     1.3
  +++ Footnote.java     2001/11/09 22:02:34     1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Footnote.java,v 1.3 2001/11/02 07:45:17 keiron Exp $
  + * $Id: Footnote.java,v 1.4 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -12,7 +12,7 @@
   import java.util.ArrayList;
   
   // may combine with before float into a conditional area
  -public class Footnote implements Serializable {
  +public class Footnote extends BlockParent {
       Block separator = null;
   
       // footnote has an optional separator
  @@ -41,5 +41,18 @@
   
       public List getBlocks() {
           return blocks;
  +    }
  +
  +    public MinOptMax getMaxBPD() {
  +     MinOptMax maxbpd = parent.getMaxBPD();
  +     BodyRegion body = (BodyRegion)parent;
  +     Area a =  body.getMainReference();
  +     if (a != null) {
  +         maxbpd = MinOptMax.subtract(maxbpd, a.getContentBPD());
  +     }
  +     if ((a=body.getBeforeFloat()) != null) {
  +         maxbpd = MinOptMax.subtract(maxbpd, a.getContentBPD());
  +     }
  +     return maxbpd;
       }
   }
  
  
  
  1.3       +15 -2     xml-fop/src/org/apache/fop/area/MainReference.java
  
  Index: MainReference.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/MainReference.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MainReference.java        2001/10/26 09:26:59     1.2
  +++ MainReference.java        2001/11/09 22:02:34     1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: MainReference.java,v 1.2 2001/10/26 09:26:59 keiron Exp $
  + * $Id: MainReference.java,v 1.3 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -12,7 +12,7 @@
   import java.util.List;
   
   // the area that contains the flow via the span areas
  -public class MainReference implements Serializable {
  +public class MainReference extends Area implements Serializable {
       List spanAreas = new ArrayList();
       int columnGap;
       int width;
  @@ -31,5 +31,18 @@
   
       public int getWidth() {
           return width;
  +    }
  +
  +    public MinOptMax getMaxBPD() {
  +     MinOptMax maxbpd = parent.getMaxBPD();
  +     BodyRegion body = (BodyRegion)parent;
  +     Area a =  body.getBeforeFloat();
  +     if (a != null) {
  +         maxbpd = MinOptMax.subtract(maxbpd, a.getContentBPD());
  +     }
  +     if ((a=body.getFootnote()) != null) {
  +         maxbpd = MinOptMax.subtract(maxbpd, a.getContentBPD());
  +     }
  +     return maxbpd;
       }
   }
  
  
  
  1.3       +11 -11    xml-fop/src/org/apache/fop/area/Page.java
  
  Index: Page.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/Page.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Page.java 2001/10/26 09:26:59     1.2
  +++ Page.java 2001/11/09 22:02:34     1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Page.java,v 1.2 2001/10/26 09:26:59 keiron Exp $
  + * $Id: Page.java,v 1.3 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -18,29 +18,29 @@
       RegionViewport regionAfter = null;
   
       public void setRegion(int areaclass, RegionViewport port) {
  -        if (areaclass == Region.BEFORE) {
  +        if (areaclass == RegionReference.BEFORE) {
               regionBefore = port;
  -        } else if (areaclass == Region.START) {
  +        } else if (areaclass == RegionReference.START) {
               regionStart = port;
  -        } else if (areaclass == Region.BODY) {
  +        } else if (areaclass == RegionReference.BODY) {
               regionBody = port;
  -        } else if (areaclass == Region.END) {
  +        } else if (areaclass == RegionReference.END) {
               regionEnd = port;
  -        } else if (areaclass == Region.AFTER) {
  +        } else if (areaclass == RegionReference.AFTER) {
               regionAfter = port;
           }
       }
   
       public RegionViewport getRegion(int areaclass) {
  -        if (areaclass == Region.BEFORE) {
  +        if (areaclass == RegionReference.BEFORE) {
               return regionBefore;
  -        } else if (areaclass == Region.START) {
  +        } else if (areaclass == RegionReference.START) {
               return regionStart;
  -        } else if (areaclass == Region.BODY) {
  +        } else if (areaclass == RegionReference.BODY) {
               return regionBody;
  -        } else if (areaclass == Region.END) {
  +        } else if (areaclass == RegionReference.END) {
               return regionEnd;
  -        } else if (areaclass == Region.AFTER) {
  +        } else if (areaclass == RegionReference.AFTER) {
               return regionAfter;
           }
           return null;
  
  
  
  1.3       +23 -18    xml-fop/src/org/apache/fop/area/RegionViewport.java
  
  Index: RegionViewport.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/RegionViewport.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RegionViewport.java       2001/10/26 09:26:59     1.2
  +++ RegionViewport.java       2001/11/09 22:02:34     1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: RegionViewport.java,v 1.2 2001/10/26 09:26:59 keiron Exp $
  + * $Id: RegionViewport.java,v 1.3 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,45 +11,50 @@
   import java.io.Serializable;
   import java.io.IOException;
   
  -public class RegionViewport implements Serializable {
  +public class RegionViewport extends Area implements Serializable {
       // this rectangle is relative to the page
  -    Rectangle2D regionArea;
  +    RegionReference region;
  +    Rectangle2D viewArea;
       boolean clip = false;
   
  -    Region region;
   
  -    public RegionViewport(Rectangle2D area) {
  -        regionArea = area;
  +    public RegionViewport(Rectangle2D viewArea) {
  +        this.viewArea =viewArea;
       }
   
  -    public void setRegion(Region reg) {
  +    public void setRegion(RegionReference reg) {
           region = reg;
  +     region.setParent(this);
       }
   
  -    public Rectangle2D getViewArea() {
  -        return regionArea;
  +    public RegionReference getRegion() {
  +        return region;
       }
   
  -    public Region getRegion() {
  -        return region;
  +    public void setClip(boolean c) {
  +        clip = c;
  +    }
  +
  +    public Rectangle2D getViewArea() {
  +        return viewArea;
       }
   
       private void writeObject(java.io.ObjectOutputStream out)
       throws IOException {
  -        out.writeFloat((float) regionArea.getX());
  -        out.writeFloat((float) regionArea.getY());
  -        out.writeFloat((float) regionArea.getWidth());
  -        out.writeFloat((float) regionArea.getHeight());
  +        out.writeFloat((float) viewArea.getX());
  +        out.writeFloat((float) viewArea.getY());
  +        out.writeFloat((float) viewArea.getWidth());
  +        out.writeFloat((float) viewArea.getHeight());
           out.writeBoolean(clip);
           out.writeObject(region);
       }
   
       private void readObject(java.io.ObjectInputStream in)
       throws IOException, ClassNotFoundException {
  -        regionArea = new Rectangle2D.Float(in.readFloat(), in.readFloat(),
  -                                           in.readFloat(), in.readFloat());
  +        viewArea = new Rectangle2D.Float(in.readFloat(), in.readFloat(),
  +                                      in.readFloat(), in.readFloat());
           clip = in.readBoolean();
  -        region = (Region) in.readObject();
  +        setRegion( (RegionReference) in.readObject());
       }
   
   }
  
  
  
  1.3       +19 -1     xml-fop/src/org/apache/fop/area/Span.java
  
  Index: Span.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/Span.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Span.java 2001/10/26 09:26:59     1.2
  +++ Span.java 2001/11/09 22:02:34     1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Span.java,v 1.2 2001/10/26 09:26:59 keiron Exp $
  + * $Id: Span.java,v 1.3 2001/11/09 22:02:34 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -8,6 +8,7 @@
   package org.apache.fop.area;
   
   import java.util.ArrayList;
  +import java.util.Iterator;
   
   // this is a reference area block area with 0 border and padding
   public class Span extends Area {
  @@ -34,4 +35,21 @@
       public Flow getFlow(int count) {
           return (Flow) flowAreas.get(count);
       }
  +
  +    /**
  +     * Maximum available BPD for a Span is the maxBPD for its containing
  +     * MainReference less the content BPD of any previous spans
  +     */
  +    public MinOptMax getMaxBPD() {
  +     MinOptMax maxbpd = parent.getMaxBPD();
  +     MainReference mainref = (MainReference)parent;
  +     Iterator spanIter = mainref.getSpans().iterator();
  +     while (spanIter.hasNext()) {
  +         Span s = (Span)spanIter.next();
  +         if (s == this) break;
  +         maxbpd = MinOptMax.subtract(maxbpd, s.getContentBPD());
  +     }
  +     return maxbpd;
  +    }
  +
   }
  
  
  

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

Reply via email to