keiron      2002/11/06 07:36:29

  Modified:    src/org/apache/fop/fo/pagination Region.java RegionBody.java
               src/org/apache/fop/layoutmgr AbstractLayoutManager.java
               src/org/apache/fop/render AbstractRenderer.java
               src/org/apache/fop/render/pdf PDFRenderer.java
  Log:
  background and borders for regions
  
  Revision  Changes    Path
  1.13      +33 -14    xml-fop/src/org/apache/fop/fo/pagination/Region.java
  
  Index: Region.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/Region.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Region.java       25 Oct 2002 09:29:43 -0000      1.12
  +++ Region.java       6 Nov 2002 15:36:28 -0000       1.13
  @@ -22,6 +22,7 @@
   import org.apache.fop.area.CTM;
   import org.apache.fop.area.RegionViewport;
   import org.apache.fop.area.RegionReference;
  +import org.apache.fop.layoutmgr.AbstractLayoutManager;
   
   import org.xml.sax.Attributes;
   
  @@ -82,9 +83,29 @@
           Rectangle2D absRegionRect = pageCTM.transform(relRegionRect);
           // Get the region viewport rectangle in absolute coords by
           // transforming it using the page CTM
  -        return new RegionViewport(absRegionRect);
  +        RegionViewport rv = new RegionViewport(absRegionRect);
  +        setRegionViewportTraits(rv);
  +        return rv;
       }
   
  +    /**
  +     * Set the region viewport traits.
  +     * The viewport has the border, background and
  +     * clipping overflow traits.
  +     *
  +     * @param r the region viewport
  +     */
  +    protected void setRegionViewportTraits(RegionViewport r) {
  +        // Common Border, Padding, and Background Properties
  +        BorderAndPadding bap = propMgr.getBorderAndPadding();
  +        BackgroundProps bProps = propMgr.getBackgroundProps();
  +        AbstractLayoutManager.addBorders(r, bap);
  +        AbstractLayoutManager.addBackground(r, bProps);
  +
  +        // this.properties.get("clip");
  +        // this.properties.get("display-align");
  +        this.overflow = this.properties.get("overflow").getEnum();
  +    }
   
       protected abstract Rectangle getViewportRectangle(FODimension pageRefRect);
   
  @@ -96,23 +117,21 @@
        */
       public RegionReference makeRegionReferenceArea(Rectangle2D absRegVPRect) {
           RegionReference r = new RegionReference(getRegionAreaClass());
  -        setRegionTraits(r, absRegVPRect);
  +        setRegionPosition(r, absRegVPRect);
           return r;
       }
   
  -    protected void setRegionTraits(RegionReference r, Rectangle2D absRegVPRect) {
  -        // Common Border, Padding, and Background Properties
  -        BorderAndPadding bap = propMgr.getBorderAndPadding();
  -        BackgroundProps bProps = propMgr.getBackgroundProps();
  -/*        backgroundColor = properties.get("background-color").getColorType();*/
  -
  -        // this.properties.get("clip");
  -        // this.properties.get("display-align");
  -        this.overflow = this.properties.get("overflow").getEnum();
  +    /**
  +     * Set the region position inside the region viewport.
  +     * This sets the trasnform that is used to place the contents of
  +     * the region.
  +     *
  +     * @param r the region reference area
  +     * @param absRegVPRect the rectangle to place the region contents
  +     */
  +    protected void setRegionPosition(RegionReference r, Rectangle2D absRegVPRect) {
           FODimension reldims = new FODimension(0,0);
           r.setCTM(propMgr.getCTMandRelDims(absRegVPRect, reldims));
  -
  -        //r.setBackground(bProps);
       }
   
       /**
  
  
  
  1.19      +2 -9      xml-fop/src/org/apache/fop/fo/pagination/RegionBody.java
  
  Index: RegionBody.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/RegionBody.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- RegionBody.java   7 Aug 2002 16:54:57 -0000       1.18
  +++ RegionBody.java   6 Nov 2002 15:36:28 -0000       1.19
  @@ -65,17 +65,10 @@
       return ((prop != null)? prop.getLength().mvalue() : 0);
       }
   
  -    protected void setRegionTraits(RegionReference r, Rectangle2D absRegVPRect) {
  -    super.setRegionTraits(r, absRegVPRect);
  -
  -//         r.setBackgroundColor(backgroundColor);
  -    }
  -
       protected String getDefaultRegionName() {
           return "xsl-region-body";
       }
   
  -
       public String getRegionClass() {
           return Region.BODY;
       }
  @@ -90,7 +83,7 @@
       public RegionReference makeRegionReferenceArea(Rectangle2D absRegVPRect) {
       // Should set some column stuff here I think, or put it elsewhere
       BodyRegion body = new BodyRegion();
  -    setRegionTraits(body, absRegVPRect);
  +    setRegionPosition(body, absRegVPRect);
           int columnCount=
               this.properties.get("column-count").getNumber().intValue();
           if ((columnCount > 1) && (overflow == Overflow.SCROLL)) {
  
  
  
  1.16      +4 -4      xml-fop/src/org/apache/fop/layoutmgr/AbstractLayoutManager.java
  
  Index: AbstractLayoutManager.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/AbstractLayoutManager.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- AbstractLayoutManager.java        1 Nov 2002 10:49:34 -0000       1.15
  +++ AbstractLayoutManager.java        6 Nov 2002 15:36:29 -0000       1.16
  @@ -320,7 +320,7 @@
        * Layout managers that create areas with borders can use this to
        * add the borders to the area.
        */
  -    public void addBorders(Area curBlock, BorderAndPadding bordProps) {
  +    public static void addBorders(Area curBlock, BorderAndPadding bordProps) {
           BorderProps bps = getBorderProps(bordProps, BorderAndPadding.TOP);
           if(bps.width != 0) {
               curBlock.addTrait(Trait.BORDER_BEFORE, bps);
  @@ -339,7 +339,7 @@
           }
       }
   
  -    private BorderProps getBorderProps(BorderAndPadding bordProps, int side) {
  +    private static BorderProps getBorderProps(BorderAndPadding bordProps, int side) 
{
           BorderProps bps;
           bps = new BorderProps(bordProps.getBorderStyle(side),
                                 bordProps.getBorderWidth(side, false),
  @@ -352,7 +352,7 @@
        * Layout managers that create areas with a background can use this to 
        * add the background to the area.
        */
  -    public void addBackground(Area curBlock, BackgroundProps backProps) {
  +    public static void addBackground(Area curBlock, BackgroundProps backProps) {
           Trait.Background back = new Trait.Background();
           back.color = backProps.backColor;
   
  
  
  
  1.28      +18 -3     xml-fop/src/org/apache/fop/render/AbstractRenderer.java
  
  Index: AbstractRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/AbstractRenderer.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- AbstractRenderer.java     1 Nov 2002 10:49:35 -0000       1.27
  +++ AbstractRenderer.java     6 Nov 2002 15:36:29 -0000       1.28
  @@ -216,12 +216,16 @@
               // The CTM will transform coordinates relative to
               // this region-reference area into page coords, so
               // set origin for the region to 0,0.
  -            currentBPPosition = 0;// (int) (view.getY() / 1000);
  -            currentIPPosition = 0;// (int) (view.getX() / 1000);
  +            currentBPPosition = 0;
  +            currentIPPosition = 0;
               currentBlockIPPosition = currentIPPosition;
   
               RegionReference region = port.getRegion();
  +            //  shouldn't the viewport have the CTM
               startVParea(region.getCTM());
  +
  +            // do after starting viewport area
  +            handleViewportTraits(port);
               if (region.getRegionClass() == RegionReference.BODY) {
                   renderBodyRegion((BodyRegion) region);
               } else {
  @@ -237,6 +241,17 @@
        * @param ctm  The coordinate transformation matrix to use
        */
       protected void startVParea(CTM ctm) { }
  +
  +    /**
  +     * Handle viewport traits.
  +     * This should be overridden to draw border and background
  +     * traits for the viewport area.
  +     *
  +     * @param vp the region viewport area
  +     */
  +    protected void handleViewportTraits(RegionViewport rv) {
  +        // draw border and background
  +    }
   
       /**
        * @todo Description of the Method
  
  
  
  1.128     +35 -10    xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java
  
  Index: PDFRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java,v
  retrieving revision 1.127
  retrieving revision 1.128
  diff -u -r1.127 -r1.128
  --- PDFRenderer.java  5 Nov 2002 11:09:55 -0000       1.127
  +++ PDFRenderer.java  6 Nov 2002 15:36:29 -0000       1.128
  @@ -37,7 +37,7 @@
   import org.apache.fop.area.Title;
   import org.apache.fop.area.PageViewport;
   import org.apache.fop.area.Page;
  -import org.apache.fop.area.RegionReference;
  +import org.apache.fop.area.RegionViewport;
   import org.apache.fop.area.Area;
   import org.apache.fop.area.Block;
   import org.apache.fop.area.BlockViewport;
  @@ -295,6 +295,14 @@
           }
       }
   
  +    /**
  +     * Start the next page sequence.
  +     * For the pdf renderer there is no concept of page sequences
  +     * but it uses the first available page sequence title to set
  +     * as the title of the pdf document.
  +     *
  +     * @param seqTitle the title of the page sequence
  +     */
       public void startPageSequence(Title seqTitle) {
           if (seqTitle != null) {
               String str = convertTitleToString(seqTitle);
  @@ -309,6 +317,8 @@
        * and then stored to add the contents later.
        * The page objects is stored using the area tree PageViewport
        * as a key.
  +     *
  +     * @param page the page to prepare
        */
       public void preparePage(PageViewport page) {
           this.pdfResources = this.pdfDoc.getResources();
  @@ -393,11 +403,22 @@
           currentState.pop();
       }
   
  -    protected void renderRegion(RegionReference region) {
  -        // Draw a rectangle so we can see it!
  -        // x=0,y=0,w=ipd,h=bpd
  +    /**
  +     * Handle the viewport traits.
  +     * This is used to draw the traits for a viewport.
  +     *
  +     * @param region the viewport region to handle
  +     */
  +    protected void handleViewportTraits(RegionViewport region) {
           currentFontName = "";
  -        super.renderRegion(region);
  +        float startx = 0;
  +        float starty = 0;
  +        Rectangle2D viewArea = region.getViewArea();
  +        float width = (float)(viewArea.getWidth() / 1000f);
  +        float height = (float)(viewArea.getHeight() / 1000f);
  +        Trait.Background back;
  +        back = (Trait.Background)region.getTrait(Trait.BACKGROUND);
  +        drawBackAndBorders(region, startx, starty, width, height);
       }
   
       /**
  @@ -1052,14 +1073,18 @@
        */
       public void renderViewport(Viewport viewport) {
           closeText();
  +
  +        float x = currentBlockIPPosition / 1000f;
  +        float y = (currentBPPosition + viewport.getOffset()) / 1000f;
  +        float width = viewport.getWidth() / 1000f;
  +        float height = viewport.getHeight() / 1000f;
  +        drawBackAndBorders(viewport, x, y, width, height);
  +
           currentStream.add("ET\n");
  +
           if (viewport.getClip()) {
               currentStream.add("q\n");
   
  -            float x = currentBlockIPPosition / 1000f;
  -            float y = (currentBPPosition + viewport.getOffset()) / 1000f;
  -            float width = viewport.getWidth() / 1000f;
  -            float height = viewport.getHeight() / 1000f;
               clip(x, y, width, height);
           }
           super.renderViewport(viewport);
  
  
  

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

Reply via email to