aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/org/apache/fop/area/CTM.java59
-rw-r--r--src/org/apache/fop/fo/PropertyManager.java5
-rw-r--r--src/org/apache/fop/fo/pagination/RegionBody.java10
-rw-r--r--src/org/apache/fop/fo/pagination/SimplePageMaster.java2
4 files changed, 63 insertions, 13 deletions
diff --git a/src/org/apache/fop/area/CTM.java b/src/org/apache/fop/area/CTM.java
index 6ed7ea726..9a4ee968c 100644
--- a/src/org/apache/fop/area/CTM.java
+++ b/src/org/apache/fop/area/CTM.java
@@ -21,9 +21,9 @@ import org.apache.fop.fo.properties.WritingMode;
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);
+ 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
*/
@@ -61,6 +61,15 @@ public class CTM implements Serializable {
this.f = y;
}
+ protected CTM(CTM ctm) {
+ this.a = ctm.a;
+ this.b = ctm.b;
+ this.c = ctm.c;
+ this.d = ctm.d;
+ this.e = ctm.e;
+ this.f = ctm.f;
+ }
+
/**
* Return a CTM which will transform coordinates for a particular writing-mode
* into normalized first quandrant coordinates.
@@ -72,13 +81,24 @@ public class CTM implements Serializable {
* CTM is being set.
*/
static public CTM getWMctm(int wm, int ipd, int bpd) {
+ CTM wmctm;
switch (wm) {
case WritingMode.LR_TB:
- return s_CTM_lrtb.translate(0,bpd);
+ return new CTM(s_CTM_lrtb);
case WritingMode.RL_TB:
- return s_CTM_rltb.translate(ipd, bpd);
+ {
+ wmctm = new CTM(s_CTM_rltb);
+ wmctm.e = ipd;
+ return wmctm;
+ }
+ //return s_CTM_rltb.translate(ipd, 0);
case WritingMode.TB_RL: // CJK
- return s_CTM_tbrl.translate(bpd, ipd);
+ {
+ wmctm = new CTM(s_CTM_tbrl);
+ wmctm.e = bpd;
+ return wmctm;
+ }
+ //return s_CTM_tbrl.translate(0, ipd);
default:
return null;
}
@@ -110,10 +130,25 @@ public class CTM implements Serializable {
* @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);
+ double cos, sin;
+ if (angle == 90.0) {
+ cos = 0.0;
+ sin = 1.0;
+ }
+ else if (angle == 270.0) {
+ cos = 0.0;
+ sin = -1.0;
+ }
+ else if (angle == 180.0) {
+ cos = -1.0;
+ sin = 0.0;
+ }
+ else {
+ double rad = Math.toRadians(angle);
+ cos = Math.cos(rad);
+ sin = Math.sin(rad);
+ }
+ CTM rotate= new CTM(cos,-sin, sin, cos, 0, 0);
return multiply(rotate);
}
@@ -167,4 +202,8 @@ public class CTM implements Serializable {
}
return new Rectangle(x1t, y1t, x2t-x1t, y2t-y1t);
}
+
+ public String toString() {
+ return "[" + a + " " + b + " " + c + " " + d + " " + e + " " + f + "]";
+ }
}
diff --git a/src/org/apache/fop/fo/PropertyManager.java b/src/org/apache/fop/fo/PropertyManager.java
index 6048d4937..9ea6b25fc 100644
--- a/src/org/apache/fop/fo/PropertyManager.java
+++ b/src/org/apache/fop/fo/PropertyManager.java
@@ -278,19 +278,20 @@ public class PropertyManager {
* (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
+ ctm = ctm.translate(0, width); // width = absVPrect.height
break;
case 180:
ctm = ctm.translate(width, height);
break;
case 270:
- ctm = ctm.translate(0, width); // width = absVPrect.height
+ ctm = ctm.translate(height,0); // height = absVPrect.width
break;
}
ctm = ctm.rotate(absRefOrient);
diff --git a/src/org/apache/fop/fo/pagination/RegionBody.java b/src/org/apache/fop/fo/pagination/RegionBody.java
index 181f6378a..5a6429ed2 100644
--- a/src/org/apache/fop/fo/pagination/RegionBody.java
+++ b/src/org/apache/fop/fo/pagination/RegionBody.java
@@ -36,9 +36,18 @@ public class RegionBody extends Region {
// Need these in writing-mode relative coordinates
// Or shall we get absolute and transform to relative using writing mode?
MarginProps mProps = propMgr.getMarginProps();
+ /**
+ System.err.println("BodyRegion margin props=" + mProps.startIndent + ","
+ + mProps.spaceBefore + "," + mProps.endIndent + ","
+ + mProps.spaceAfter);
+
return new Rectangle( mProps.startIndent, mProps.spaceBefore,
reldims.ipd - mProps.startIndent - mProps.endIndent,
reldims.bpd - mProps.spaceBefore - mProps.spaceAfter);
+ **/
+ return new Rectangle( mProps.marginLeft, mProps.marginTop,
+ reldims.ipd - mProps.marginLeft - mProps.marginRight,
+ reldims.bpd - mProps.marginTop - mProps.marginBottom);
}
protected void setRegionTraits(RegionReference r, Rectangle2D absRegVPRect) {
@@ -66,6 +75,7 @@ public class RegionBody extends Region {
public RegionReference makeRegionReferenceArea(Rectangle2D absRegVPRect) {
// Should set some column stuff here I think, or put it elsewhere
BodyRegion body = new BodyRegion();
+ setRegionTraits(body, absRegVPRect);
int columnCount=
this.properties.get("column-count").getNumber().intValue();
if ((columnCount > 1) && (overflow == Overflow.SCROLL)) {
diff --git a/src/org/apache/fop/fo/pagination/SimplePageMaster.java b/src/org/apache/fop/fo/pagination/SimplePageMaster.java
index 42b4c4f0e..9cd1dea09 100644
--- a/src/org/apache/fop/fo/pagination/SimplePageMaster.java
+++ b/src/org/apache/fop/fo/pagination/SimplePageMaster.java
@@ -85,7 +85,7 @@ public class SimplePageMaster extends FObj {
* The media rectangle itself is (0,0,pageWidth,pageHeight).
*/
Rectangle pageRefRect =
- new Rectangle(mProps.marginLeft, mProps.marginBottom,
+ new Rectangle(mProps.marginLeft, mProps.marginTop,
pageWidth - mProps.marginLeft - mProps.marginRight,
pageHeight - mProps.marginTop - mProps.marginBottom);