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]