]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Correct margin handling on body region for writing-mode
authorKaren Lease <klease@apache.org>
Sat, 23 Feb 2002 16:50:58 +0000 (16:50 +0000)
committerKaren Lease <klease@apache.org>
Sat, 23 Feb 2002 16:50:58 +0000 (16:50 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194669 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/fo/pagination/RegionBody.java
src/org/apache/fop/fo/pagination/SimplePageMaster.java
src/org/apache/fop/layout/MarginProps.java

index 5a6429ed29197fa71613ddd041bc60cec0ed6b1b..b2132c330ec0e8fd84ed4a72f3bc2ebf8955fa9e 100644 (file)
@@ -13,7 +13,9 @@ import java.awt.geom.Rectangle2D;
 // FOP
 
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.Property;
 import org.apache.fop.fo.properties.Overflow;
 import org.apache.fop.datatypes.ColorType;
 import org.apache.fop.datatypes.FODimension;
@@ -32,22 +34,35 @@ public class RegionBody extends Region {
 
     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?
+       /*
+        * Use space-before and space-after which will use corresponding
+        * absolute margin properties if specified. For indents:
+        * try to get corresponding absolute margin property using the
+        * writing-mode on the page (not on the region-body!). If that's not
+        * set but indent is explicitly set, it will return that.
+        */
         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);
+       int start = getRelMargin(PropertyList.START, "start-indent");
+       return new Rectangle( start, mProps.spaceBefore,
+                             reldims.ipd - start -
+                             getRelMargin(PropertyList.END, "end-indent"),
+                             reldims.bpd - mProps.spaceBefore -
+                             mProps.spaceAfter);
+    }
+
+    /**
+     * Get the relative margin using parent's writing mode, not own
+     * writing mode.
+     */
+    private int getRelMargin(int reldir, String sRelPropName) {
+       FObj parent = (FObj) getParent();
+       String sPropName = "margin-" +
+           parent.properties.wmRelToAbs(reldir);
+       Property prop = properties.getExplicitBaseProp(sPropName);
+       if (prop == null) {
+          prop = properties.getExplicitBaseProp(sRelPropName);
+       }
+       return ((prop != null)? prop.getLength().mvalue() : 0);
     }
 
     protected void setRegionTraits(RegionReference r, Rectangle2D absRegVPRect) {
index 9cd1dea09ad9a154a1c62ea82dc778aab68dbb6e..73be3f0e21a72848876c2618ca6ff3f35c397e59 100644 (file)
@@ -125,6 +125,10 @@ public class SimplePageMaster extends FObj {
         properties = null;
     }
 
+    public boolean generatesReferenceAreas() {
+        return true;
+    }
+
     public PageMaster getPageMaster() {
         return this.pageMaster;
     }
index 2d8bfcf32cc155b33dc97c3283c7853dfccc0ff5..793fb8acf23898bd7e48eac3d89d8a2252c9125d 100644 (file)
@@ -8,7 +8,7 @@
 package org.apache.fop.layout;
 
 /**
- * Store all hyphenation related properties on an FO.
+ * Store all block-level margin related properties on an FO.
  * Public "structure" allows direct member access.
  */
 public class MarginProps {