]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Base classes for before/after, start/end Region
authorKaren Lease <klease@apache.org>
Fri, 9 Nov 2001 22:12:34 +0000 (22:12 +0000)
committerKaren Lease <klease@apache.org>
Fri, 9 Nov 2001 22:12:34 +0000 (22:12 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194547 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/fo/pagination/RegionBA.java [new file with mode: 0644]
src/org/apache/fop/fo/pagination/RegionBASE.java [new file with mode: 0644]
src/org/apache/fop/fo/pagination/RegionSE.java [new file with mode: 0644]

diff --git a/src/org/apache/fop/fo/pagination/RegionBA.java b/src/org/apache/fop/fo/pagination/RegionBA.java
new file mode 100644 (file)
index 0000000..db526e7
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * $Id$
+ * 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.
+ */
+
+package org.apache.fop.fo.pagination;
+
+// FOP
+import org.apache.fop.fo.*;
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.fo.properties.Precedence;
+
+import java.awt.Rectangle;
+
+public abstract class RegionBA extends RegionBASE {
+
+    private boolean bPrecedence;
+
+    protected RegionBA(FONode parent) {
+        super(parent);
+    }
+
+    boolean getPrecedence() {
+        return bPrecedence;
+    }
+
+    public void end() {
+        bPrecedence =
+           (this.properties.get("precedence").getEnum()==Precedence.TRUE);
+    }
+
+    /**
+     * Adjust the viewport reference rectangle for a region as a function
+     * of precedence.
+     * If precedence is false on a before or after region, its
+     * inline-progression-dimension is limited by the extent of the start
+     * and end regions if they are present.
+     */
+    protected void adjustIPD(Rectangle vpRect) {
+       int xoff = 0;
+       Region start = getSiblingRegion(Region.START);
+       if (start != null) {
+           xoff = start.getExtent();
+           vpRect.translate(xoff, 0);
+       }
+       Region end =getSiblingRegion(Region.END);
+       if (end != null) {
+           xoff += end.getExtent();
+       }
+       if (xoff > 0) {
+           vpRect.grow(-xoff,0);
+       }
+    }
+}
diff --git a/src/org/apache/fop/fo/pagination/RegionBASE.java b/src/org/apache/fop/fo/pagination/RegionBASE.java
new file mode 100644 (file)
index 0000000..8ca69e7
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * $Id$
+ * 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.
+ */
+
+package org.apache.fop.fo.pagination;
+
+// FOP
+import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.PropertyList;
+import org.apache.fop.apps.FOPException;
+
+/**
+ * Base class for Before, After, Start and End regions (BASE).
+ */
+public abstract class RegionBASE extends Region {
+
+    private int extent;
+
+    protected RegionBASE(FONode parent) {
+        super(parent);
+    }
+
+    public void end() {
+       // The problem with this is that it might not be known yet....
+       // Supposing extent is calculated in terms of percentage
+        this.extent = this.properties.get("extent").getLength().mvalue();
+    }
+
+    int getExtent() {
+       return this.extent;
+    }
+}
diff --git a/src/org/apache/fop/fo/pagination/RegionSE.java b/src/org/apache/fop/fo/pagination/RegionSE.java
new file mode 100644 (file)
index 0000000..92db107
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * $Id$
+ * 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.
+ */
+
+package org.apache.fop.fo.pagination;
+
+
+import org.apache.fop.fo.*;
+import org.apache.fop.apps.FOPException;
+
+import java.awt.Rectangle;
+
+public abstract class RegionSE extends RegionBASE {
+
+    protected RegionSE(FONode parent) {
+        super(parent);
+    }
+
+    /**
+     * Adjust the viewport reference rectangle for a region as a function
+     * of precedence.
+     * If  before and after have precedence = true, the start and end
+     * regions only go to the limits of their extents, otherwise
+     * they extend in the BPD to the page reference rectangle
+     * diminish by extend of start and end if present.
+     */
+    protected void adjustIPD(Rectangle refRect) {
+       int yoff = 0;
+       Region before = getSiblingRegion(Region.BEFORE);
+       if (before != null && before.getPrecedence()) {
+           yoff = before.getExtent();
+           refRect.translate(0, yoff);
+       }
+       Region after = getSiblingRegion(Region.AFTER);
+       if (after != null && after.getPrecedence()) {
+           yoff += after.getExtent();
+       }
+       if (yoff > 0) {
+           refRect.grow(0,-yoff);
+       }
+    }
+}