You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by kl...@apache.org on 2002/02/17 22:59:30 UTC
cvs commit: xml-fop/src/org/apache/fop/fo/pagination Region.java RegionAfter.java RegionBefore.java RegionBody.java RegionEnd.java RegionStart.java SimplePageMaster.java
klease 02/02/17 13:59:30
Modified: src/codegen foproperties.xml
src/org/apache/fop/area BodyRegion.java RegionReference.java
src/org/apache/fop/fo PropertyManager.java
src/org/apache/fop/fo/pagination Region.java
RegionAfter.java RegionBefore.java RegionBody.java
RegionEnd.java RegionStart.java
SimplePageMaster.java
Added: src/org/apache/fop/area CTM.java
src/org/apache/fop/datatypes FODimension.java
Log:
Initial implementation of CTM (coordinate transformation matrix) to handle reference-orienation and writing-mode issues
Revision Changes Path
1.29 +2 -2 xml-fop/src/codegen/foproperties.xml
Index: foproperties.xml
===================================================================
RCS file: /home/cvs/xml-fop/src/codegen/foproperties.xml,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- foproperties.xml 22 Nov 2001 07:15:38 -0000 1.28
+++ foproperties.xml 17 Feb 2002 21:59:29 -0000 1.29
@@ -1384,7 +1384,7 @@
<property>
<name>reference-orientation</name>
<inherited>true</inherited>
- <datatype>ToBeImplemented</datatype>
+ <datatype>Number</datatype>
<default>0</default>
</property>
<property>
@@ -1655,7 +1655,7 @@
<property>
<name>column-count</name>
<inherited>false</inherited>
- <datatype>String</datatype>
+ <datatype>Number</datatype>
<default>1</default>
</property>
<property>
1.4 +13 -1 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- BodyRegion.java 9 Nov 2001 22:02:34 -0000 1.3
+++ BodyRegion.java 17 Feb 2002 21:59:29 -0000 1.4
@@ -1,5 +1,5 @@
/*
- * $Id: BodyRegion.java,v 1.3 2001/11/09 22:02:34 klease Exp $
+ * $Id: BodyRegion.java,v 1.4 2002/02/17 21:59:29 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.
@@ -13,6 +13,8 @@
BeforeFloat beforeFloat;
MainReference mainReference;
Footnote footnote;
+ private int columnGap;
+ private int columnCount;
/** Maximum block progression dimension. Note: min=opt=max */
private MinOptMax maxBPD;
@@ -22,6 +24,16 @@
public BodyRegion() {
super(BODY);
+ }
+
+ // Number of columns when not spanning
+ public void setColumnCount(int colCount) {
+ this.columnCount = colCount;
+ }
+
+ // A length (mpoints)
+ public void setColumnGap(int colGap) {
+ this.columnGap = colGap;
}
public void setParent(Area area) {
1.2 +13 -1 xml-fop/src/org/apache/fop/area/RegionReference.java
Index: RegionReference.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/RegionReference.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- RegionReference.java 9 Nov 2001 22:00:04 -0000 1.1
+++ RegionReference.java 17 Feb 2002 21:59:29 -0000 1.2
@@ -1,5 +1,5 @@
/*
- * $Id: RegionReference.java,v 1.1 2001/11/09 22:00:04 klease Exp $
+ * $Id: RegionReference.java,v 1.2 2002/02/17 21:59:29 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,9 +18,21 @@
public static final int END = 3;
public static final int AFTER = 4;
int regionClass = BEFORE;
+ private CTM ctm;
public RegionReference(int type) {
regionClass = type;
+ }
+
+ /**
+ * Set the Coordinate Transformation Matrix which transforms content
+ * coordinates in this region reference area which are specified in
+ * terms of "start" and "before" into coordinates in a system which
+ * is positioned in "absolute" directions (with origin at lower left of
+ * the region reference area.
+ */
+ public void setCTM(CTM ctm) {
+ this.ctm = ctm;
}
// the list of block areas from the static flow
1.1 xml-fop/src/org/apache/fop/area/CTM.java
Index: CTM.java
===================================================================
/*
* $Id: CTM.java,v 1.1 2002/02/17 21:59:29 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.
*/
package org.apache.fop.area;
import java.awt.geom.Rectangle2D;
import java.awt.Rectangle;
import java.io.Serializable;
import org.apache.fop.fo.properties.WritingMode;
/**
* Describe a PDF or PostScript style coordinate transformation matrix (CTM).
* The matrix encodes translations, scaling and rotations of the coordinate
* system used to render pages.
*/
public class CTM implements Serializable {
private double a,b,c,d,e,f;
private static CTM s_CTM_lrtb = new CTM(1,0,0,-1,0,0);
private static CTM s_CTM_rltb = new CTM(-1,0,0,-1,0,0);
private static CTM s_CTM_tbrl = new CTM(0,-1,-1,0,0,0);
/**
* Create the identity matrix
*/
public CTM() {
a=1;
b=0;
c=0;
d=1;
e=0;
f=0;
}
/**
* Initialize a CTM from the passed arguments.
*/
public CTM(double a, double b, double c, double d, double e, double f) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.e = e;
this.f = f;
}
/**
* Initialize a CTM to the identity matrix with a translation
* specified by x and y.
*/
public CTM(double x, double y) {
this.a = 1;
this.b = 0;
this.c = 0;
this.d = 1;
this.e = x;
this.f = y;
}
/**
* Return a CTM which will transform coordinates for a particular writing-mode
* into normalized first quandrant coordinates.
* @param wm A writing mode constant from fo.properties.WritingMode, ie.
* one of LR_TB, RL_TB, TB_RL.
* @param ipd The inline-progression dimension of the reference area whose
* CTM is being set..
* @param bpd The block-progression dimension of the reference area whose
* CTM is being set.
*/
static public CTM getWMctm(int wm, int ipd, int bpd) {
switch (wm) {
case WritingMode.LR_TB:
return s_CTM_lrtb.translate(0,bpd);
case WritingMode.RL_TB:
return s_CTM_rltb.translate(ipd, bpd);
case WritingMode.TB_RL: // CJK
return s_CTM_tbrl.translate(bpd, ipd);
default:
return null;
}
}
/**
* Multiply new passed CTM with this one and generate a new result CTM.
* @param premult The CTM to multiply with this one. The new one will be
* the first multiplicand.
* @return CTM The result of multiplying premult * this.
*/
public CTM multiply(CTM premult) {
CTM rslt= new CTM (
(premult.a * a) + (premult.b * c),
(premult.a * b) + (premult.b * d),
(premult.c * a) + (premult.d * c),
(premult.c * b) + (premult.d * d),
(premult.e * a) + (premult.f * c) + e,
(premult.e * b) + (premult.f * d) + f
);
return rslt;
}
/**
* Rotate this CTM by "angle" radians and return a new result CTM.
* This is used to account for reference-orientation.
* @param angle The angle in radians. Positive angles are measured counter-
* clockwise.
* @return CTM The result of rotating this CTM.
*/
public CTM rotate(double angle) {
double rad = Math.toRadians(angle);
double cos = Math.cos(rad);
double sin = Math.sin(rad);
CTM rotate= new CTM(cos, sin, -sin, cos, 0, 0);
return multiply(rotate);
}
/**
* Translate this CTM by the passed x and y values and return a new result CTM.
* @param x The amount to translate along the x axis.
* @param y The amount to translate along the y axis.
* @return CTM The result of translating this CTM.
*/
public CTM translate(double x, double y) {
CTM translate= new CTM(1,0,0,1,x,y);
return multiply(translate);
}
/**
* Scale this CTM by the passed x and y values and return a new result CTM.
* @param x The amount to scale along the x axis.
* @param y The amount to scale along the y axis.
* @return CTM The result of scaling this CTM.
*/
public CTM scale(double x, double y) {
CTM scale= new CTM(x,0,0,y,0,0);
return multiply(scale);
}
/**
* Transform a rectangle by the CTM to produce a rectangle in the transformed
* coordinate system.
* @param inRect The rectangle in the original coordinate system
* @return Rectangle2D The rectangle in the transformed coordinate system.
*/
public Rectangle2D transform(Rectangle2D inRect) {
// Store as 2 sets of 2 points and transform those, then
// recalculate the width and height
int x1t = (int)(inRect.getX()*a + inRect.getY()*c + e);
int y1t = (int)(inRect.getX()*b + inRect.getY()*d + f);
int x2t = (int)((inRect.getX()+inRect.getWidth())*a +
(inRect.getY()+inRect.getHeight())*c + e);
int y2t = (int)((inRect.getX()+inRect.getWidth())*b +
(inRect.getY()+inRect.getHeight())*d + f);
// Normalize with x1 < x2
if (x1t > x2t) {
int tmp = x2t;
x2t = x1t;
x1t = tmp;
}
if (y1t > y2t) {
int tmp = y2t;
y2t = y1t;
y1t = tmp;
}
return new Rectangle(x1t, y1t, x2t-x1t, y2t-y1t);
}
}
1.1 xml-fop/src/org/apache/fop/datatypes/FODimension.java
Index: FODimension.java
===================================================================
/*
* $Id: FODimension.java,v 1.1 2002/02/17 21:59:30 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.
*/
package org.apache.fop.datatypes;
/**
* This datatype hold a pair of resolved lengths,
* specifiying the dimensions in
* both inline and block-progression-directions.
*/
public class FODimension {
public int ipd;
public int bpd;
public FODimension(int ipd, int bpd) {
this.ipd = ipd;
this.bpd = bpd;
}
}
1.8 +81 -8 xml-fop/src/org/apache/fop/fo/PropertyManager.java
Index: PropertyManager.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/PropertyManager.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- PropertyManager.java 6 Aug 2001 09:12:58 -0000 1.7
+++ PropertyManager.java 17 Feb 2002 21:59:30 -0000 1.8
@@ -1,5 +1,5 @@
/*
- * $Id: PropertyManager.java,v 1.7 2001/08/06 09:12:58 keiron Exp $
+ * $Id: PropertyManager.java,v 1.8 2002/02/17 21:59:30 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,6 +7,10 @@
package org.apache.fop.fo;
+
+import java.awt.geom.Rectangle2D;
+import org.apache.fop.area.CTM;
+import org.apache.fop.datatypes.FODimension;
import org.apache.fop.layout.FontState;
import org.apache.fop.layout.FontInfo;
import org.apache.fop.layout.BorderAndPadding;
@@ -20,6 +24,7 @@
import org.apache.fop.fo.properties.BreakAfter;
import org.apache.fop.fo.properties.BreakBefore;
import org.apache.fop.fo.properties.Constants;
+import org.apache.fop.fo.properties.WritingMode;
import org.apache.fop.layout.HyphenationProps;
import org.apache.fop.apps.FOPException;
import java.text.MessageFormat;
@@ -187,6 +192,7 @@
}
}
+
public MarginProps getMarginProps() {
MarginProps props = new MarginProps();
@@ -199,13 +205,15 @@
this.properties.get("margin-left").getLength().mvalue();
props.marginRight =
this.properties.get("margin-right").getLength().mvalue();
- /*
- * // need to get opt, min and max
- * props.spaceBefore = this.properties.get("space-before").getLength().mvalue();
- * props.spaceAfter = this.properties.get("space-after").getLength().mvalue();
- * props.startIndent = this.properties.get("start-indent").getLength().mvalue();
- * props.endIndent = this.properties.get("end-indent").getLength().mvalue();
- */
+
+ // For now, we only get the optimum value for space-before and after
+ props.spaceBefore = this.properties.get("space-before").getSpace().
+ getOptimum().getLength().mvalue();
+ props.spaceAfter = this.properties.get("space-after").getSpace().
+ getOptimum().getLength().mvalue();
+ props.startIndent = this.properties.get("start-indent").getLength().mvalue();
+ props.endIndent = this.properties.get("end-indent").getLength().mvalue();
+
return props;
}
@@ -246,5 +254,70 @@
public AbsolutePositionProps getAbsolutePositionProps() {
AbsolutePositionProps props = new AbsolutePositionProps();
return props;
+ }
+
+ public CTM getCTMandRelDims(Rectangle2D absVPrect, FODimension reldims) {
+ int width, height;
+ // We will use the absolute reference-orientation to set up the CTM.
+ // The value here is relative to its ancestor reference area.
+ int absRefOrient =
+ getAbsRefOrient(this.properties.get("reference-orientation").
+ getNumber().intValue());
+ if (absRefOrient % 180 == 0) {
+ width = (int)absVPrect.getWidth();
+ height = (int)absVPrect.getHeight();
+ }
+ else {
+ // invert width and height since top left are rotated by 90 (cl or ccl)
+ height = (int)absVPrect.getWidth();
+ width = (int)absVPrect.getHeight();
+ }
+ /* Set up the CTM for the content of this reference area. This will transform
+ * region content coordinates in writing-mode relative into absolute page-relative
+ * which will then be translated based on the position of the region viewport
+ * (Note: scrolling between region vp and ref area when doing online content!)
+ */
+ CTM ctm = new CTM(absVPrect.getX(), absVPrect.getY());
+ // First transform for rotation
+ if (absRefOrient != 0) {
+ // Rotation implies translation to keep the drawing area in the
+ // first quadrant. Note: rotation is counter-clockwise
+ switch (absRefOrient) {
+ case 90:
+ ctm = ctm.translate(height, 0); // height = absVPrect.width
+ break;
+ case 180:
+ ctm = ctm.translate(width, height);
+ break;
+ case 270:
+ ctm = ctm.translate(0, width); // width = absVPrect.height
+ break;
+ }
+ ctm = ctm.rotate(absRefOrient);
+ }
+ int wm = this.properties.get("writing-mode").getEnum();
+ /* Since we've already put adjusted width and height values for the
+ * top and left positions implied by the reference-orientation, we
+ * can set ipd and bpd appropriately based on the writing mode.
+ */
+
+ if (wm == WritingMode.LR_TB || wm == WritingMode.RL_TB) {
+ reldims.ipd = width;
+ reldims.bpd = height;
+ }
+ else {
+ reldims.ipd=height;
+ reldims.bpd=width;
+ }
+ // Set a rectangle to be the writing-mode relative version???
+ // Now transform for writing mode
+ return ctm.multiply(CTM.getWMctm(wm, reldims.ipd, reldims.bpd));
+ }
+
+ /**
+ * Calculate absolute reference-orientation relative to media orientation.
+ */
+ private int getAbsRefOrient(int myRefOrient) {
+ return myRefOrient;
}
}
1.10 +24 -11 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Region.java 15 Nov 2001 12:40:31 -0000 1.9
+++ Region.java 17 Feb 2002 21:59:30 -0000 1.10
@@ -1,5 +1,5 @@
/*
- * $Id: Region.java,v 1.9 2001/11/15 12:40:31 keiron Exp $
+ * $Id: Region.java,v 1.10 2002/02/17 21:59:30 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,14 +8,18 @@
package org.apache.fop.fo.pagination;
import java.awt.Rectangle;
+import java.awt.geom.Rectangle2D;
// FOP
+
+import org.apache.fop.datatypes.FODimension;
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.layout.BorderAndPadding;
import org.apache.fop.layout.BackgroundProps;
import org.apache.fop.apps.FOPException;
+import org.apache.fop.area.CTM;
import org.apache.fop.area.RegionViewport;
import org.apache.fop.area.RegionReference;
@@ -75,21 +79,30 @@
/**
* Creates a RegionViewport Area object for this pagination Region.
*/
- public RegionViewport makeRegionViewport(Rectangle pageRefRect) {
- return new RegionViewport(getViewportRectangle(pageRefRect));
+ public RegionViewport makeRegionViewport(FODimension reldims, CTM pageCTM) {
+ Rectangle2D relRegionRect = getViewportRectangle(reldims);
+ Rectangle2D absRegionRect = pageCTM.transform(relRegionRect);
+ // Get the region viewport rectangle in absolute coords by
+ // transforming it using the page CTM
+ return new RegionViewport(absRegionRect);
}
- abstract protected Rectangle getViewportRectangle(Rectangle pageRefRect);
-
+ abstract protected Rectangle getViewportRectangle(FODimension pageRefRect);
- public RegionReference makeRegionReferenceArea() {
+ /**
+ * Create the region reference area for this region master.
+ * @param absRegVPRect The region viewport rectangle is "absolute" coordinates
+ * where x=distance from left, y=distance from bottom, width=right-left
+ * height=top-bottom
+ */
+ public RegionReference makeRegionReferenceArea(Rectangle2D absRegVPRect) {
RegionReference r = new RegionReference(getRegionAreaClass());
- setRegionTraits(r);
+ setRegionTraits(r, absRegVPRect);
return r;
}
- protected void setRegionTraits(RegionReference r) {
+ protected void setRegionTraits(RegionReference r, Rectangle2D absRegVPRect) {
// Common Border, Padding, and Background Properties
BorderAndPadding bap = propMgr.getBorderAndPadding();
BackgroundProps bProps = propMgr.getBackgroundProps();
@@ -99,9 +112,9 @@
// this.properties.get("clip");
// this.properties.get("display-align");
this.overflow = this.properties.get("overflow").getEnum();
- // this.properties.get("reference-orientation");
- // this.properties.get("writing-mode");
-
+ FODimension reldims = new FODimension(0,0);
+ r.setCTM(propMgr.getCTMandRelDims(absRegVPRect, reldims));
+
//r.setBackground(bProps);
}
1.13 +5 -6 xml-fop/src/org/apache/fop/fo/pagination/RegionAfter.java
Index: RegionAfter.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/RegionAfter.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- RegionAfter.java 9 Nov 2001 22:31:50 -0000 1.12
+++ RegionAfter.java 17 Feb 2002 21:59:30 -0000 1.13
@@ -1,5 +1,5 @@
/*
- * $Id: RegionAfter.java,v 1.12 2001/11/09 22:31:50 klease Exp $
+ * $Id: RegionAfter.java,v 1.13 2002/02/17 21:59:30 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.
@@ -9,6 +9,7 @@
// FOP
import org.apache.fop.fo.*;
+import org.apache.fop.datatypes.FODimension;
import org.apache.fop.apps.FOPException;
import org.apache.fop.area.RegionReference;
@@ -23,13 +24,11 @@
}
- protected Rectangle getViewportRectangle (Rectangle pageRefRect) {
+ protected Rectangle getViewportRectangle (FODimension reldims) {
// Depends on extent and precedence
Rectangle vpRect =
- new Rectangle((int)pageRefRect.getX(),
- (int)pageRefRect.getY() - (int)pageRefRect.getHeight() +
- getExtent(),
- (int)pageRefRect.getWidth(), getExtent());
+ new Rectangle(0, reldims.bpd - getExtent(),
+ reldims.ipd, getExtent());
if (getPrecedence() == false) {
adjustIPD(vpRect);
}
1.14 +10 -4 xml-fop/src/org/apache/fop/fo/pagination/RegionBefore.java
Index: RegionBefore.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/RegionBefore.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- RegionBefore.java 11 Nov 2001 22:09:37 -0000 1.13
+++ RegionBefore.java 17 Feb 2002 21:59:30 -0000 1.14
@@ -1,5 +1,5 @@
/*
- * $Id: RegionBefore.java,v 1.13 2001/11/11 22:09:37 klease Exp $
+ * $Id: RegionBefore.java,v 1.14 2002/02/17 21:59:30 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,8 @@
package org.apache.fop.fo.pagination;
// FOP
+
+import org.apache.fop.datatypes.FODimension;
import org.apache.fop.fo.*;
import org.apache.fop.apps.FOPException;
import org.apache.fop.area.RegionReference;
@@ -40,10 +42,14 @@
}
- protected Rectangle getViewportRectangle (Rectangle pageRefRect) {
+ protected Rectangle getViewportRectangle (FODimension reldims) {
// Depends on extent and precedence
- Rectangle vpRect = new Rectangle(pageRefRect);
- vpRect.height = getExtent();
+ // This should return rectangle in writing-mode coordinates relative
+ // to the page-reference area rectangle
+ // This means the origin is (start, before) and the dimensions are (ipd,bpd)
+ // Before is always 0, start depends on extent
+ // ipd depends on precedence, bpd=extent
+ Rectangle vpRect = new Rectangle(0, 0, reldims.ipd, getExtent());
if (getPrecedence() == false) {
adjustIPD(vpRect);
}
1.15 +30 -36 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.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- RegionBody.java 9 Nov 2001 22:31:50 -0000 1.14
+++ RegionBody.java 17 Feb 2002 21:59:30 -0000 1.15
@@ -1,5 +1,5 @@
/*
- * $Id: RegionBody.java,v 1.14 2001/11/09 22:31:50 klease Exp $
+ * $Id: RegionBody.java,v 1.15 2002/02/17 21:59:30 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,12 +8,15 @@
package org.apache.fop.fo.pagination;
import java.awt.Rectangle;
+import java.awt.geom.Rectangle2D;
// FOP
+
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.properties.Overflow;
import org.apache.fop.datatypes.ColorType;
+import org.apache.fop.datatypes.FODimension;
import org.apache.fop.apps.FOPException;
import org.apache.fop.area.RegionReference;
import org.apache.fop.area.BodyRegion;
@@ -27,43 +30,19 @@
super(parent);
}
- protected Rectangle getViewportRectangle (Rectangle pageRefRect)
+ protected Rectangle getViewportRectangle (FODimension reldims)
{
// Common Margin Properties-Block
+ // Need these in writing-mode relative coordinates
+ // Or shall we get absolute and transform to relative using writing mode?
MarginProps mProps = propMgr.getMarginProps();
- return
- new Rectangle((int)pageRefRect.getX() + mProps.marginLeft,
- (int)pageRefRect.getY() - mProps.marginTop,
- (int)pageRefRect.getWidth() - mProps.marginLeft -
- mProps.marginRight,
- (int)pageRefRect.getHeight() - mProps.marginTop -
- mProps.marginBottom);
- }
-
- protected void setRegionTraits(RegionReference r) {
- super.setRegionTraits(r);
-
- String columnCountAsString =
- this.properties.get("column-count").getString();
- int columnCount = 1;
- try {
- columnCount = Integer.parseInt(columnCountAsString);
- } catch (NumberFormatException nfe) {
- log.error("Bad value on region body 'column-count'");
- columnCount = 1;
- }
- if ((columnCount > 1) && (overflow == Overflow.SCROLL)) {
- // recover by setting 'column-count' to 1. This is allowed but
- // not required by the spec.
- log.error("Setting 'column-count' to 1 because "
- + "'overflow' is set to 'scroll'");
- columnCount = 1;
- }
-// r.setColumnCount(columnCount);
+ return new Rectangle( mProps.startIndent, mProps.spaceBefore,
+ reldims.ipd - mProps.startIndent - mProps.endIndent,
+ reldims.bpd - mProps.spaceBefore - mProps.spaceAfter);
+ }
-// int columnGap =
-// this.properties.get("column-gap").getLength().mvalue();
-// r.setColumnGap(columnGap);
+ protected void setRegionTraits(RegionReference r, Rectangle2D absRegVPRect) {
+ super.setRegionTraits(r, absRegVPRect);
// r.setBackgroundColor(backgroundColor);
}
@@ -84,9 +63,24 @@
/**
* Override the inherited method.
*/
- public RegionReference makeRegionReferenceArea() {
+ public RegionReference makeRegionReferenceArea(Rectangle2D absRegVPRect) {
// Should set some column stuff here I think, or put it elsewhere
- return new BodyRegion();
+ BodyRegion body = new BodyRegion();
+ int columnCount=
+ this.properties.get("column-count").getNumber().intValue();
+ if ((columnCount > 1) && (overflow == Overflow.SCROLL)) {
+ // recover by setting 'column-count' to 1. This is allowed but
+ // not required by the spec.
+ log.error("Setting 'column-count' to 1 because "
+ + "'overflow' is set to 'scroll'");
+ columnCount = 1;
+ }
+ body.setColumnCount(columnCount);
+
+ int columnGap =
+ this.properties.get("column-gap").getLength().mvalue();
+ body.setColumnGap(columnGap);
+ return body;
}
}
1.7 +5 -7 xml-fop/src/org/apache/fop/fo/pagination/RegionEnd.java
Index: RegionEnd.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/RegionEnd.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- RegionEnd.java 9 Nov 2001 22:31:50 -0000 1.6
+++ RegionEnd.java 17 Feb 2002 21:59:30 -0000 1.7
@@ -1,5 +1,5 @@
/*
- * $Id: RegionEnd.java,v 1.6 2001/11/09 22:31:50 klease Exp $
+ * $Id: RegionEnd.java,v 1.7 2002/02/17 21:59:30 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,6 +11,7 @@
// FOP
import org.apache.fop.fo.*;
+import org.apache.fop.datatypes.FODimension;
import org.apache.fop.apps.FOPException;
import org.apache.fop.area.RegionReference;
@@ -24,17 +25,14 @@
}
- protected Rectangle getViewportRectangle (Rectangle pageRefRect) {
+ protected Rectangle getViewportRectangle (FODimension reldims) {
// Depends on extent and precedence
Rectangle vpRect =
- new Rectangle((int)pageRefRect.getX() + (int)pageRefRect.getWidth() -
- getExtent(),
- (int)pageRefRect.getY(),
- getExtent(), (int)pageRefRect.getHeight());
+ new Rectangle(reldims.ipd - getExtent(), 0,
+ getExtent(), reldims.bpd);
adjustIPD(vpRect);
return vpRect;
}
-
protected String getDefaultRegionName() {
return "xsl-region-end";
1.7 +6 -5 xml-fop/src/org/apache/fop/fo/pagination/RegionStart.java
Index: RegionStart.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/RegionStart.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- RegionStart.java 9 Nov 2001 22:31:50 -0000 1.6
+++ RegionStart.java 17 Feb 2002 21:59:30 -0000 1.7
@@ -1,5 +1,5 @@
/*
- * $Id: RegionStart.java,v 1.6 2001/11/09 22:31:50 klease Exp $
+ * $Id: RegionStart.java,v 1.7 2002/02/17 21:59:30 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,6 +12,7 @@
// FOP
import org.apache.fop.fo.*;
+import org.apache.fop.datatypes.FODimension;
import org.apache.fop.apps.FOPException;
import org.apache.fop.area.RegionReference;
@@ -24,12 +25,12 @@
}
- protected Rectangle getViewportRectangle (Rectangle pageRefRect) {
+ protected Rectangle getViewportRectangle (FODimension reldims) {
// Depends on extent and precedence
+ // This is the rectangle relative to the page-reference area in
+ // writing-mode relative coordinates
Rectangle vpRect =
- new Rectangle((int)pageRefRect.getX(),
- (int)pageRefRect.getY(),
- getExtent(), (int)pageRefRect.getHeight());
+ new Rectangle(0, 0, getExtent(), reldims.bpd);
adjustIPD(vpRect);
return vpRect;
}
1.22 +13 -5 xml-fop/src/org/apache/fop/fo/pagination/SimplePageMaster.java
Index: SimplePageMaster.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/SimplePageMaster.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- SimplePageMaster.java 21 Nov 2001 22:13:36 -0000 1.21
+++ SimplePageMaster.java 17 Feb 2002 21:59:30 -0000 1.22
@@ -1,5 +1,5 @@
/*
- * $Id: SimplePageMaster.java,v 1.21 2001/11/21 22:13:36 klease Exp $
+ * $Id: SimplePageMaster.java,v 1.22 2002/02/17 21:59:30 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,6 +10,8 @@
// FOP
import org.apache.fop.fo.*;
import org.apache.fop.fo.properties.*;
+import org.apache.fop.area.CTM;
+import org.apache.fop.datatypes.FODimension;
import org.apache.fop.area.PageViewport;
import org.apache.fop.area.Page;
import org.apache.fop.area.RegionViewport;
@@ -19,6 +21,7 @@
import org.apache.fop.apps.FOPException;
import java.awt.Rectangle;
+import java.awt.geom.Rectangle2D;
import java.util.HashMap;
import java.util.Iterator;
import org.xml.sax.Attributes;
@@ -73,7 +76,7 @@
// this.properties.get("reference-orientation");
// this.properties.get("writing-mode");
- // Common Margin Properties-Block
+ // Get absolute margin properties (top, left, bottom, right)
MarginProps mProps = propMgr.getMarginProps();
/* Create the page reference area rectangle in first quadrant coordinates
@@ -82,13 +85,18 @@
* The media rectangle itself is (0,0,pageWidth,pageHeight).
*/
Rectangle pageRefRect =
- new Rectangle(mProps.marginLeft, pageHeight - mProps.marginTop,
+ new Rectangle(mProps.marginLeft, mProps.marginBottom,
pageWidth - mProps.marginLeft - mProps.marginRight,
pageHeight - mProps.marginTop - mProps.marginBottom);
// ??? KL shouldn't this take the viewport too???
Page page = new Page(); // page reference area
+ // Set up the CTM on the page reference area based on writing-mode
+ // and reference-orientation
+ FODimension reldims=new FODimension(0,0);
+ CTM pageCTM = propMgr.getCTMandRelDims(pageRefRect, reldims);
+
// Create a RegionViewport/ reference area pair for each page region
boolean bHasBody=false;
@@ -96,8 +104,8 @@
for (Iterator regenum = _regions.values().iterator();
regenum.hasNext(); ) {
Region r = (Region)regenum.next();
- RegionViewport rvp = r.makeRegionViewport(pageRefRect);
- rvp.setRegion(r.makeRegionReferenceArea());
+ RegionViewport rvp = r.makeRegionViewport(reldims, pageCTM);
+ rvp.setRegion(r.makeRegionReferenceArea(rvp.getViewArea()));
page.setRegion(r.getRegionAreaClass(), rvp);
if (r.getRegionAreaClass() == RegionReference.BODY) {
bHasBody = true;
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org