bckfnn      2004/01/29 11:45:48

  Modified:    src/java/org/apache/fop/render AbstractRenderer.java
               src/java/org/apache/fop/render/pdf PDFRenderer.java
               src/java/org/apache/fop/render/ps PSRenderer.java
  Log:
  Handle SPACE_START trait for block areas.
  
  PR: 25802.
  
  Revision  Changes    Path
  1.20      +20 -10    xml-fop/src/java/org/apache/fop/render/AbstractRenderer.java
  
  Index: AbstractRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/AbstractRenderer.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- AbstractRenderer.java     17 Jan 2004 19:29:46 -0000      1.19
  +++ AbstractRenderer.java     29 Jan 2004 19:45:48 -0000      1.20
  @@ -374,7 +374,7 @@
       protected void renderRegion(RegionReference region) {
           List blocks = region.getBlocks();
   
  -        renderBlocks(blocks);
  +        renderBlocks(null, blocks);
   
       }
   
  @@ -406,7 +406,7 @@
       protected void renderBeforeFloat(BeforeFloat bf) {
           List blocks = bf.getChildAreas();
           if (blocks != null) {
  -            renderBlocks(blocks);
  +            renderBlocks(null, blocks);
               Block sep = bf.getSeparator();
               if (sep != null) {
                   renderBlock(sep);
  @@ -426,7 +426,7 @@
               if (sep != null) {
                   renderBlock(sep);
               }
  -            renderBlocks(blocks);
  +            renderBlocks(null, blocks);
           }
       }
   
  @@ -471,7 +471,7 @@
           // the normal flow reference area contains stacked blocks
           List blocks = flow.getChildAreas();
           if (blocks != null) {
  -            renderBlocks(blocks);
  +            renderBlocks(null, blocks);
           }
       }
   
  @@ -506,7 +506,7 @@
   
               startVParea(ctm);
               handleBlockTraits(bv);
  -            renderBlocks(children);
  +            renderBlocks(bv, children);
               endVParea();
   
               // clip if necessary
  @@ -514,16 +514,26 @@
               currentIPPosition = saveIP;
               currentBPPosition = saveBP;
           } else {
  -            renderBlocks(children);
  +            // save position and offset
  +            int saveIP = currentIPPosition;
  +            int saveBP = currentBPPosition;
  +
  +            handleBlockTraits(bv);
  +            renderBlocks(bv, children);
  +
  +            currentIPPosition = saveIP;
  +            currentBPPosition = saveBP + bv.getHeight();
           }
       }
   
       /**
        * Renders a list of block areas.
        *
  +     * @param parent  the parent block if the parent is a block, otherwise
  +     *                a null value. 
        * @param blocks  The block areas
        */
  -    protected void renderBlocks(List blocks) {
  +    protected void renderBlocks(Block parent, List blocks) {
           // the position of the containing block is used for
           // absolutely positioned areas
           int contBP = currentBPPosition;
  @@ -575,7 +585,7 @@
   
                   handleBlockTraits(block);
   
  -                renderBlocks(children);
  +                renderBlocks(block, children);
   
                   // absolute blocks do not effect the layout
                   currentBPPosition = saveBP;
  @@ -586,7 +596,7 @@
   
                   handleBlockTraits(block);
   
  -                renderBlocks(children);
  +                renderBlocks(block, children);
   
                   // stacked and relative blocks effect stacking
                   currentBPPosition = saveBP + block.getHeight();
  @@ -649,7 +659,7 @@
           int saveBP = currentBPPosition;
   
           List blocks = cont.getBlocks();
  -        renderBlocks(blocks);
  +        renderBlocks(null, blocks);
           currentIPPosition = saveIP;
           currentBlockIPPosition = saveBlockIP;
           currentBPPosition = saveBP;
  
  
  
  1.30      +51 -20    xml-fop/src/java/org/apache/fop/render/pdf/PDFRenderer.java
  
  Index: PDFRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/pdf/PDFRenderer.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- PDFRenderer.java  25 Jan 2004 14:40:14 -0000      1.29
  +++ PDFRenderer.java  29 Jan 2004 19:45:48 -0000      1.30
  @@ -504,15 +504,39 @@
       }
   
       /**
  -     * @see org.apache.fop.render.AbstractRenderer#renderBlock(Block)
  +     * @see org.apache.fop.render.AbstractRenderer#renderBlocks(Block, List)
        */
  -    protected void renderBlock(Block block) {
  -        int marginOffset = IPMarginOffset;
  -        super.renderBlock(block);
  -        // super.renderBlock() may render child blocks (with their own offsets)
  -        // so need to restore (this parent's) IPMarginOffset when finished.
  -        IPMarginOffset = marginOffset;
  -     }
  +    protected void renderBlocks(Block block, List blocks) {
  +        int saveIPMargin = IPMarginOffset;
  +        int saveBPMargin = BPMarginOffset;
  +        if (block != null) {
  +            Integer spaceStart = (Integer) block.getTrait(Trait.SPACE_START); 
  +            if (spaceStart != null) {
  +                IPMarginOffset += spaceStart.intValue();
  +            }
  +
  +            Integer paddingStart = (Integer) block.getTrait(Trait.PADDING_START);
  +            if (paddingStart != null) {
  +                IPMarginOffset += paddingStart.intValue();
  +            }
  +            Integer paddingBefore= (Integer) block.getTrait(Trait.PADDING_BEFORE);
  +            if (paddingBefore != null) {
  +                BPMarginOffset += paddingBefore.intValue();
  +            }
  +
  +            BorderProps borderStartWidth = (BorderProps) 
block.getTrait(Trait.BORDER_START);
  +            if (borderStartWidth != null) {
  +                IPMarginOffset += borderStartWidth.width;
  +            }
  +            BorderProps borderBeforeWidth = (BorderProps) 
block.getTrait(Trait.BORDER_BEFORE);
  +            if (borderBeforeWidth != null) {
  +                BPMarginOffset += borderBeforeWidth.width;
  +            }
  +        }
  +        super.renderBlocks(block, blocks);
  +        IPMarginOffset = saveIPMargin;
  +        BPMarginOffset = saveBPMargin;
  +    }
   
       /**
        * Handle the traits for a region
  @@ -550,15 +574,23 @@
                /*  IPMarginOffset for a particular block = region border + 
            *  region padding + parent block padding + current block padding
            */
  -        Integer paddingStart = (Integer) block.getTrait(Trait.PADDING_START);
  -        if (paddingStart != null) {
  -            IPMarginOffset += paddingStart.intValue();
  -        }
   
           float startx = (currentIPPosition + IPMarginOffset) / 1000f;
           float starty = (currentBPPosition + BPMarginOffset) / 1000f;
  +        float width = block.getWidth() / 1000f;
  +
  +        Integer spaceStart = (Integer) block.getTrait(Trait.SPACE_START); 
  +        if (spaceStart != null) {
  +            startx += spaceStart.floatValue() / 1000;
  +            width -= spaceStart.floatValue() / 1000;
  +        }
  +        Integer spaceEnd = (Integer) block.getTrait(Trait.SPACE_END); 
  +        if (spaceEnd != null) {
  +            width -= spaceEnd.floatValue() / 1000;
  +        }
  +
           drawBackAndBorders(block, startx, starty,
  -            block.getWidth() / 1000f, block.getHeight() / 1000f);
  +            width, block.getHeight() / 1000f);
       }
   
       /**
  @@ -730,7 +762,7 @@
   
               startVParea(ctm);
               handleBlockTraits(bv);
  -            renderBlocks(children);
  +            renderBlocks(bv, children);
               endVParea();
   
               if (bv.getClip()) {
  @@ -780,7 +812,7 @@
                   startVParea(ctm);
               }
               handleBlockTraits(bv);
  -            renderBlocks(children);
  +            renderBlocks(bv, children);
               if (ctm != null) {
                   endVParea();
               }
  @@ -836,8 +868,8 @@
        * @param ip the inline parent area
        */
       public void renderInlineParent(InlineParent ip) {
  -        float start = currentBlockIPPosition / 1000f;
  -        float top = (ip.getOffset() + currentBPPosition) / 1000f;
  +        float start = (currentBlockIPPosition + IPMarginOffset) / 1000f;
  +        float top = (ip.getOffset() + currentBPPosition + BPMarginOffset) / 1000f;
           float width = ip.getWidth() / 1000f;
           float height = ip.getHeight() / 1000f;
           drawBackAndBorders(ip, start, top, width, height);
  @@ -1175,11 +1207,10 @@
           saveGraphicsState();
           currentStream.add(((float) w) + " 0 0 "
                             + ((float) -h) + " "
  -                          + (((float) currentBlockIPPosition) / 1000f + x) + " "
  -                          + (((float)(currentBPPosition + 1000 * h)) / 1000f
  +                          + (((float) currentBlockIPPosition + IPMarginOffset) / 
1000f + x) + " "
  +                          + (((float)(currentBPPosition + BPMarginOffset + 1000 * 
h)) / 1000f
                             + y) + " cm\n" + "/Im" + xobj + " Do\n");
           restoreGraphicsState();
  -
       }
   
       /**
  
  
  
  1.23      +2 -2      xml-fop/src/java/org/apache/fop/render/ps/PSRenderer.java
  
  Index: PSRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/ps/PSRenderer.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- PSRenderer.java   25 Jan 2004 14:40:14 -0000      1.22
  +++ PSRenderer.java   29 Jan 2004 19:45:48 -0000      1.23
  @@ -565,7 +565,7 @@
   
               startVParea(ctm);
               handleBlockTraits(bv);
  -            renderBlocks(children);
  +            renderBlocks(bv, children);
               endVParea();
   
               if (bv.getClip()) {
  @@ -615,7 +615,7 @@
                   startVParea(ctm);
               }
               handleBlockTraits(bv);
  -            renderBlocks(children);
  +            renderBlocks(bv, children);
               if (ctm != null) {
                   endVParea();
               }
  
  
  

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

Reply via email to