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]