summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Bernard West <pbwest@apache.org>2004-06-06 15:30:29 +0000
committerPeter Bernard West <pbwest@apache.org>2004-06-06 15:30:29 +0000
commit7d6dda87092d95f8e85f53965f84f2f5c82cac38 (patch)
tree872a25a44713c7db44a90507a423196ec791553a
parent90706263bc6d07be2689168d0c21c9efc418bb99 (diff)
downloadxmlgraphics-fop-7d6dda87092d95f8e85f53965f84f2f5c82cac38.tar.gz
xmlgraphics-fop-7d6dda87092d95f8e85f53965f84f2f5c82cac38.zip
AreaFrames (padding, borders and spaces/margins) and
ContentRectangle to represent geometries of basic area components git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/FOP_0-20-0_Alt-Design@197686 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/fop/area/AreaFrame.java169
-rw-r--r--src/java/org/apache/fop/area/BorderRectangle.java54
-rw-r--r--src/java/org/apache/fop/area/ContentRectangle.java68
-rw-r--r--src/java/org/apache/fop/area/PaddingRectangle.java54
-rw-r--r--src/java/org/apache/fop/area/SpacesRectangle.java54
5 files changed, 399 insertions, 0 deletions
diff --git a/src/java/org/apache/fop/area/AreaFrame.java b/src/java/org/apache/fop/area/AreaFrame.java
new file mode 100644
index 000000000..0cb091ca2
--- /dev/null
+++ b/src/java/org/apache/fop/area/AreaFrame.java
@@ -0,0 +1,169 @@
+/*
+ *
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Created on 5/06/2004
+ * $Id$
+ */
+package org.apache.fop.area;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * <code>AreaFrame</code> is the basic type for the geometry of a rectangle
+ * enclosing another rectangle, e.g., a padding rectangle.
+ * @author pbw
+ * @version $Revision$ $Name$
+ */
+public class AreaFrame extends Rectangle2D.Double {
+
+ /**
+ *
+ */
+ private AreaFrame() {}
+
+ /**
+ * Instantiates a new framing rectangle with the given origin point, the
+ * given width and height, the given content rectangle, and the given
+ * offset from the origin of the framing rectangle to the origin of the
+ * content rectangle.
+ * @param x x-value of the origin of the framing rectangle in user space
+ * units
+ * @param y y-value of the origin of the framing rectangle in user space
+ * units
+ * @param w width of the framing rectangle in user space units
+ * @param h height of the framing rectangle in user space units
+ * @param contents the framed rectangle
+ * @param contentOffset the offset to the origin point of the framed
+ * rectangle from the origin point of <code>this</code> framing rectangle.
+ */
+ public AreaFrame(double x, double y, double w, double h,
+ Rectangle2D contents, Point2D contentOffset) {
+ super(x, y, w, h);
+ this.contents = contents;
+ this.contentOffset = contentOffset;
+ }
+
+ /** The framed rectangle */
+ private Rectangle2D contents = null;
+ /** The offset from <code>this</code> origin to the origin of the framed
+ * rectangle */
+ private Point2D contentOffset = null;
+
+ /**
+ * Instantiates a new framing rectangle from the given rectangle, given
+ * contents, and given offset from the origin of the framing rectangle to
+ * the origin of the framed rectangle. The dimensions and location of the
+ * given rectangle are copied into the dimensions of the new framing
+ * rectangle.
+ * @param rect the framing rectangle
+ * @param contents the framed rectangle
+ * @param contentOffset offset from origin of the framing rectangle to the
+ * origin of the framed rectangle
+ */
+ public AreaFrame(
+ Rectangle2D rect, Rectangle2D contents, Point2D contentOffset) {
+ this(rect.getX(), rect.getY(),
+ rect.getWidth(), rect.getHeight(),
+ contents, contentOffset);
+ }
+
+ /**
+ * Sets the contents rectangle. The dimensions of <code>this</code> are
+ * adjusted to the difference between the current framed contents and
+ * the new framed contents. The offset is not affected.
+ * @param contents the new framed contents
+ */
+ public void setContents(Rectangle2D contents) {
+ setRect(getX(), getY(),
+ getWidth() + (contents.getWidth() - this.contents.getWidth()),
+ getHeight() + (contents.getWidth() - this.contents.getWidth()));
+ contents = this.contents;
+ }
+
+ /**
+ * Sets the offset from the origin of <code>this</code> to the origin of
+ * the framed contents rectangle. The dimensions of the framed contents
+ * are not affected, but the dimensions of <code>this</code> are changed
+ * by the difference between the current offset and the new offset in the
+ * X and Y axes.
+ * @param offset the new offset to the framed rectangle
+ */
+ public void setContentsOffset(Point2D offset) {
+ setStart(offset.getX());
+ setBefore(offset.getY());
+ contentOffset = offset;
+ }
+
+ /**
+ * Sets the before edge width of the frame. The <code>contents</code> size
+ * is unaffected, but the size of the frame (<code>this</code>) will
+ * change. The height will vary by the difference between the previous and
+ * new before edge. The <code>contentOffset</code> will also change by the
+ * same amount. Note that the origin of this frame (<code>getX(),
+ * getY()</code>) will not change.
+ * @param before
+ */
+ public void setBefore(double before) {
+ double diff = before - contentOffset.getY();
+ setRect(getX(), getY(),
+ getWidth(), getHeight() + diff);
+ contentOffset.setLocation(contentOffset.getX(), before);
+ }
+
+ /**
+ * Sets the start edge width of the frame. The <code>contents</code> size
+ * is unaffected, but the size of the frame (<code>this</code>) will
+ * change. The width will vary by the difference between the previous and
+ * new start edge. The <code>contentOffset</code> will also change by the
+ * same amount. Note that the origin of this frame (<code>getX(),
+ * getY()</code>) will not change.
+ * @param start
+ */
+ public void setStart(double start) {
+ double diff = start - contentOffset.getY();
+ setRect(getX(), getY(),
+ getWidth() + diff, getHeight());
+ contentOffset.setLocation(start, contentOffset.getX());
+ }
+
+ /**
+ * Sets the after edge width of the frame. The <code>contents</code> size
+ * and the <code>contentOffset</code> are unaffected, but the size of the
+ * frame (<code>this</code>) will change. The height will vary by the
+ * difference between the previous and new after edge. Note that the
+ * origin of this frame (<code>getX(), getY()</code>) will not change.
+ * @param after
+ */
+ public void setAfter(double after) {
+ double diff = after - (getY() - contentOffset.getY() - contents.getY());
+ setRect(getX(), getY(), getWidth(), getHeight() + diff);
+ }
+
+ /**
+ * Sets the end edge width of the frame. The <code>contents</code> size
+ * and the <code>contentOffset</code> are unaffected, but the size of the
+ * frame (<code>this</code>) will change. The width will vary by the
+ * difference between the previous and new end edge. Note that the
+ * origin of this frame (<code>getX(), getY()</code>) will not change.
+ * @param end
+ */
+ public void setEnd(double end) {
+ double diff = end - (getX() - contentOffset.getX() - contents.getX());
+ setRect(getX(), getY(), getWidth() + diff, getHeight());
+ }
+
+}
diff --git a/src/java/org/apache/fop/area/BorderRectangle.java b/src/java/org/apache/fop/area/BorderRectangle.java
new file mode 100644
index 000000000..e8fbfaea7
--- /dev/null
+++ b/src/java/org/apache/fop/area/BorderRectangle.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Created on 7/06/2004
+ * $Id$
+ */
+package org.apache.fop.area;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * @author pbw
+ * @version $Revision$ $Name$
+ */
+public class BorderRectangle extends AreaFrame {
+
+ /**
+ * @param x
+ * @param y
+ * @param w
+ * @param h
+ * @param contents
+ * @param contentOffset
+ */
+ public BorderRectangle(double x, double y, double w, double h,
+ Rectangle2D contents, Point2D contentOffset) {
+ super(x, y, w, h, contents, contentOffset);
+ }
+
+ /**
+ * @param rect
+ * @param contents
+ * @param contentOffset
+ */
+ public BorderRectangle(Rectangle2D rect, Rectangle2D contents,
+ Point2D contentOffset) {
+ super(rect, contents, contentOffset);
+ }
+
+}
diff --git a/src/java/org/apache/fop/area/ContentRectangle.java b/src/java/org/apache/fop/area/ContentRectangle.java
new file mode 100644
index 000000000..c42e06a26
--- /dev/null
+++ b/src/java/org/apache/fop/area/ContentRectangle.java
@@ -0,0 +1,68 @@
+/*
+ *
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Created on 6/06/2004
+ * $Id$
+ */
+package org.apache.fop.area;
+
+import java.awt.geom.Rectangle2D.Double;
+
+/**
+ * Defines the <i>content rectangle</i> of an area. It is the central class
+ * in the management of the layout geometry of areas. The other generated
+ * rectangular areas are accessed through and defined in terms of this area.
+ * @author pbw
+ * @version $Revision$ $Name$
+ */
+public class ContentRectangle extends Double {
+
+ /**
+ * Creates an empty contents object.
+ */
+ public ContentRectangle() {
+ super();
+ }
+
+ /**
+ * Creates a contents object from the given origin (<code>x, y</code>)
+ * width (<code>w</code>) and height (<code>h</code>).
+ * @param x x-origin
+ * @param y y-origin
+ * @param w width
+ * @param h height
+ */
+ public ContentRectangle(double x, double y, double w, double h) {
+ super(x, y, w, h);
+ }
+
+ private PaddingRectangle padding = null;
+ private BorderRectangle borders = null;
+ private SpacesRectangle spaces = null;
+
+ public void setPadding(PaddingRectangle padding) {
+ this.padding = padding;
+ }
+
+ public void setBorders(BorderRectangle borders) {
+ this.borders = borders;
+ }
+
+ public void setSpaces(SpacesRectangle spaces) {
+ this.spaces = spaces;
+ }
+
+}
diff --git a/src/java/org/apache/fop/area/PaddingRectangle.java b/src/java/org/apache/fop/area/PaddingRectangle.java
new file mode 100644
index 000000000..fd0de4e7b
--- /dev/null
+++ b/src/java/org/apache/fop/area/PaddingRectangle.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Created on 6/06/2004
+ * $Id$
+ */
+package org.apache.fop.area;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * @author pbw
+ * @version $Revision$ $Name$
+ */
+public class PaddingRectangle extends AreaFrame {
+
+ /**
+ * @param x
+ * @param y
+ * @param w
+ * @param h
+ * @param contents
+ * @param contentOffset
+ */
+ public PaddingRectangle(double x, double y, double w, double h,
+ Rectangle2D contents, Point2D contentOffset) {
+ super(x, y, w, h, contents, contentOffset);
+ }
+
+ /**
+ * @param rect
+ * @param contents
+ * @param contentOffset
+ */
+ public PaddingRectangle(Rectangle2D rect, Rectangle2D contents,
+ Point2D contentOffset) {
+ super(rect, contents, contentOffset);
+ }
+
+}
diff --git a/src/java/org/apache/fop/area/SpacesRectangle.java b/src/java/org/apache/fop/area/SpacesRectangle.java
new file mode 100644
index 000000000..0148fbb0e
--- /dev/null
+++ b/src/java/org/apache/fop/area/SpacesRectangle.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Created on 7/06/2004
+ * $Id$
+ */
+package org.apache.fop.area;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * @author pbw
+ * @version $Revision$ $Name$
+ */
+public class SpacesRectangle extends AreaFrame {
+
+ /**
+ * @param x
+ * @param y
+ * @param w
+ * @param h
+ * @param contents
+ * @param contentOffset
+ */
+ public SpacesRectangle(double x, double y, double w, double h,
+ Rectangle2D contents, Point2D contentOffset) {
+ super(x, y, w, h, contents, contentOffset);
+ }
+
+ /**
+ * @param rect
+ * @param contents
+ * @param contentOffset
+ */
+ public SpacesRectangle(Rectangle2D rect, Rectangle2D contents,
+ Point2D contentOffset) {
+ super(rect, contents, contentOffset);
+ }
+
+}