]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
move logic from fo/pagination/SimplePageMaster.end() to layoutmgr/PageLayoutManager...
authorWilliam Victor Mote <vmote@apache.org>
Tue, 26 Aug 2003 22:11:17 +0000 (22:11 +0000)
committerWilliam Victor Mote <vmote@apache.org>
Tue, 26 Aug 2003 22:11:17 +0000 (22:11 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@196853 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/pagination/Region.java
src/java/org/apache/fop/fo/pagination/SimplePageMaster.java
src/java/org/apache/fop/layoutmgr/PageLayoutManager.java

index c3c5bee2be32e0627e98ca1cc248fa80ec9de2a2..8c70438759e6309f1de0977196e277e1b9d81083 100644 (file)
@@ -204,7 +204,7 @@ public abstract class Region extends FObj {
      * Area tree.
      * @return the region area class
      */
-    protected abstract int getRegionAreaClass();
+    public abstract int getRegionAreaClass();
 
     /**
      * Returns the default region name (xsl-region-before, xsl-region-start,
index bc58b0d5adc6c9d28c3ecf37ba5a72d2a97b50bd..d45e98aeab6eebe3e0a788fb007946ba6dced4c2 100644 (file)
@@ -51,7 +51,6 @@
 package org.apache.fop.fo.pagination;
 
 // Java
-import java.awt.Rectangle;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -60,16 +59,12 @@ import java.util.Map;
 import org.xml.sax.Attributes;
 
 // FOP
-import org.apache.fop.area.CTM;
-import org.apache.fop.datatypes.FODimension;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.area.PageViewport;
 import org.apache.fop.area.Page;
-import org.apache.fop.area.RegionViewport;
 import org.apache.fop.area.RegionReference;
-import org.apache.fop.fo.properties.CommonMarginBlock;
 import org.apache.fop.layout.PageMaster;
 import org.apache.fop.apps.FOPException;
 
@@ -118,67 +113,6 @@ public class SimplePageMaster extends FObj {
         regions = new HashMap(5);
     }
 
-    /**
-     * At the end of this element read all the information and create
-     * the page master.
-     */
-    protected void end() {
-        int pageWidth =
-                this.properties.get("page-width").getLength().getValue();
-        int pageHeight =
-                this.properties.get("page-height").getLength().getValue();
-        // this.properties.get("reference-orientation");
-        // this.properties.get("writing-mode");
-
-        // Get absolute margin properties (top, left, bottom, right)
-        CommonMarginBlock mProps = propMgr.getMarginProps();
-
-        /* Create the page reference area rectangle (0,0 is at top left
-        * of the "page media" and y increases
-        * when moving towards the bottom of the page.
-        * The media rectangle itself is (0,0,pageWidth,pageHeight).
-        */
-        Rectangle pageRefRect =
-                new Rectangle(mProps.marginLeft, mProps.marginTop,
-                        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 = CTM.getCTMandRelDims(propMgr.getAbsRefOrient(),
-                propMgr.getWritingMode(), pageRefRect, reldims);
-
-        // Create a RegionViewport/ reference area pair for each page region
-
-        boolean bHasBody = false;
-
-        for (Iterator regenum = regions.values().iterator();
-             regenum.hasNext();) {
-            Region r = (Region)regenum.next();
-            RegionViewport rvp = r.makeRegionViewport(reldims, pageCTM);
-            rvp.setRegion(r.makeRegionReferenceArea(rvp.getViewArea()));
-            page.setRegion(r.getRegionAreaClass(), rvp);
-            if (r.getRegionAreaClass() == RegionReference.BODY) {
-                bHasBody = true;
-            }
-        }
-
-        if (!bHasBody) {
-            getLogger().error("simple-page-master has no region-body");
-        }
-
-        this.pageMaster = new PageMaster(new PageViewport(page,
-                new Rectangle(0, 0, pageWidth, pageHeight)));
-
-        //  regions = null; // PageSequence access SimplePageMaster....
-        children = null;
-        properties = null;
-    }
-
     /**
      * @see org.apache.fop.fo.FObj#generatesReferenceAreas()
      */
@@ -194,6 +128,10 @@ public class SimplePageMaster extends FObj {
         return this.pageMaster;
     }
 
+    public void setPageMaster(PageMaster pageMaster) {
+        this.pageMaster = pageMaster;
+    }
+
     /**
      * Returns the next page master. For simple-page-master this is always the
      * same as the previous.
@@ -251,7 +189,7 @@ public class SimplePageMaster extends FObj {
      * Returns a Map of regions associated with this simple-page-master
      * @return the regions
      */
-    protected Map getRegions() {
+    public Map getRegions() {
         return regions;
     }
 
index ee422c0511b6f4feca63c24fec88bb430fb85db3..bd427b3fa49986735528fbc265fd608f5183a2eb 100644 (file)
 package org.apache.fop.layoutmgr;
 
 import org.apache.fop.apps.FOPException;
+
+import org.apache.fop.area.CTM;
 import org.apache.fop.area.AreaTree;
 import org.apache.fop.area.AreaTreeModel;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.PageViewport;
 import org.apache.fop.area.Flow;
+import org.apache.fop.area.Page;
 import org.apache.fop.area.RegionViewport;
 import org.apache.fop.area.RegionReference;
 import org.apache.fop.area.BodyRegion;
@@ -64,20 +67,28 @@ import org.apache.fop.area.Span;
 import org.apache.fop.area.BeforeFloat;
 import org.apache.fop.area.Footnote;
 import org.apache.fop.area.Resolveable;
+
+import org.apache.fop.datatypes.FODimension;
+
 import org.apache.fop.fo.flow.Marker;
-import org.apache.fop.fo.properties.Constants;
+
 import org.apache.fop.fo.pagination.PageNumberGenerator;
 import org.apache.fop.fo.pagination.PageSequence;
 import org.apache.fop.fo.pagination.Region;
 import org.apache.fop.fo.properties.RetrieveBoundary;
 import org.apache.fop.fo.pagination.SimplePageMaster;
 import org.apache.fop.fo.pagination.StaticContent;
+
+import org.apache.fop.fo.properties.CommonMarginBlock;
+import org.apache.fop.fo.properties.Constants;
+
 import org.apache.fop.layout.PageMaster;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import org.apache.fop.apps.*;
+import java.awt.Rectangle;
+import java.util.Iterator;
 
 /**
  * LayoutManager for a PageSequence and its flow.
@@ -715,7 +726,12 @@ public class PageLayoutManager extends AbstractLayoutManager implements Runnable
                                  + "' does not map to the region-body in page-master '"
                                  + pageSequence.getCurrentSimplePageMaster().getMasterName() + "'");
         }
-        PageMaster pageMaster = pageSequence.getCurrentSimplePageMaster().getPageMaster();
+        SimplePageMaster currentSimplePageMaster = pageSequence.getCurrentSimplePageMaster();
+        PageMaster pageMaster = currentSimplePageMaster.getPageMaster();
+        if (pageMaster == null) {
+            createSimplePageMasterAreas(currentSimplePageMaster);
+        }
+        pageMaster = pageSequence.getCurrentSimplePageMaster().getPageMaster();
         PageViewport p = pageMaster.makePage();
         return p;
         // The page will have a viewport/reference area pair defined
@@ -730,5 +746,57 @@ public class PageLayoutManager extends AbstractLayoutManager implements Runnable
         //forcePage(areaTree, firstAvailPageNumber);
     }
 
+    public void createSimplePageMasterAreas(SimplePageMaster node) {
+        int pageWidth =
+                node.properties.get("page-width").getLength().getValue();
+        int pageHeight =
+                node.properties.get("page-height").getLength().getValue();
+        // Get absolute margin properties (top, left, bottom, right)
+        CommonMarginBlock mProps = node.getPropertyManager().getMarginProps();
+
+      /* Create the page reference area rectangle (0,0 is at top left
+       * of the "page media" and y increases
+       * when moving towards the bottom of the page.
+       * The media rectangle itself is (0,0,pageWidth,pageHeight).
+       */
+       Rectangle pageRefRect =
+               new Rectangle(mProps.marginLeft, mProps.marginTop,
+                       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 = CTM.getCTMandRelDims(node.getPropertyManager().getAbsRefOrient(),
+               node.getPropertyManager().getWritingMode(), pageRefRect, reldims);
+
+       // Create a RegionViewport/ reference area pair for each page region
+
+       boolean bHasBody = false;
+
+       for (Iterator regenum = node.getRegions().values().iterator();
+            regenum.hasNext();) {
+           Region r = (Region)regenum.next();
+           RegionViewport rvp = r.makeRegionViewport(reldims, pageCTM);
+           rvp.setRegion(r.makeRegionReferenceArea(rvp.getViewArea()));
+           page.setRegion(r.getRegionAreaClass(), rvp);
+           if (r.getRegionAreaClass() == RegionReference.BODY) {
+               bHasBody = true;
+           }
+       }
+
+       if (!bHasBody) {
+           node.getLogger().error("simple-page-master has no region-body");
+       }
+
+       node.setPageMaster(new PageMaster(new PageViewport(page,
+               new Rectangle(0, 0, pageWidth, pageHeight))));
+
+
+    }
+
 }