]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Fix some bugs in the CTM logic
authorKaren Lease <klease@apache.org>
Mon, 18 Feb 2002 22:49:22 +0000 (22:49 +0000)
committerKaren Lease <klease@apache.org>
Mon, 18 Feb 2002 22:49:22 +0000 (22:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194654 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/area/CTM.java
src/org/apache/fop/fo/PropertyManager.java
src/org/apache/fop/fo/pagination/RegionBody.java
src/org/apache/fop/fo/pagination/SimplePageMaster.java

index 6ed7ea726de237446e69ceee98b94adb916435fa..9a4ee968c55945a75e9e309268f28fbccd044fa8 100644 (file)
@@ -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 + "]";
+    }
 }
index 6048d4937239a55d09c1e012a29c58c11a0237a4..9ea6b25fc34b4f2428869982065e901f85c358f3 100644 (file)
@@ -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);
index 181f6378af63a91b52e5a625c81ff2bd3b4a8c79..5a6429ed29197fa71613ddd041bc60cec0ed6b1b 100644 (file)
@@ -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)) {
index 42b4c4f0ece5c81eb7319354b6f76d1e264f4bee..9cd1dea09ad9a154a1c62ea82dc778aab68dbb6e 100644 (file)
@@ -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);