klease 02/02/18 14:49:22 Modified: src/org/apache/fop/area CTM.java src/org/apache/fop/fo PropertyManager.java src/org/apache/fop/fo/pagination RegionBody.java SimplePageMaster.java Log: Fix some bugs in the CTM logic Revision Changes Path 1.2 +50 -11 xml-fop/src/org/apache/fop/area/CTM.java Index: CTM.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/CTM.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- CTM.java 17 Feb 2002 21:59:29 -0000 1.1 +++ CTM.java 18 Feb 2002 22:49:22 -0000 1.2 @@ -1,5 +1,5 @@ /* - * $Id: CTM.java,v 1.1 2002/02/17 21:59:29 klease Exp $ + * $Id: CTM.java,v 1.2 2002/02/18 22:49:22 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. @@ -21,9 +21,9 @@ 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 @@ 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 @@ * 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 @@ * @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); } @@ -166,5 +201,9 @@ y1t = tmp; } return new Rectangle(x1t, y1t, x2t-x1t, y2t-y1t); + } + + public String toString() { + return "[" + a + " " + b + " " + c + " " + d + " " + e + " " + f + "]"; } } 1.9 +4 -3 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.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- PropertyManager.java 17 Feb 2002 21:59:30 -0000 1.8 +++ PropertyManager.java 18 Feb 2002 22:49:22 -0000 1.9 @@ -1,5 +1,5 @@ /* - * $Id: PropertyManager.java,v 1.8 2002/02/17 21:59:30 klease Exp $ + * $Id: PropertyManager.java,v 1.9 2002/02/18 22:49:22 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. @@ -278,19 +278,20 @@ * (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); 1.16 +11 -1 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.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- RegionBody.java 17 Feb 2002 21:59:30 -0000 1.15 +++ RegionBody.java 18 Feb 2002 22:49:22 -0000 1.16 @@ -1,5 +1,5 @@ /* - * $Id: RegionBody.java,v 1.15 2002/02/17 21:59:30 klease Exp $ + * $Id: RegionBody.java,v 1.16 2002/02/18 22:49:22 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. @@ -36,9 +36,18 @@ // 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 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)) { 1.23 +2 -2 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.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- SimplePageMaster.java 17 Feb 2002 21:59:30 -0000 1.22 +++ SimplePageMaster.java 18 Feb 2002 22:49:22 -0000 1.23 @@ -1,5 +1,5 @@ /* - * $Id: SimplePageMaster.java,v 1.22 2002/02/17 21:59:30 klease Exp $ + * $Id: SimplePageMaster.java,v 1.23 2002/02/18 22:49:22 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. @@ -85,7 +85,7 @@ * 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);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]