--- /dev/null
+/*
+ * $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);
+ }
+ }
+}
--- /dev/null
+/*
+ * $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;
+ }
+}
--- /dev/null
+/*
+ * $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);
+ }
+ }
+}