001 /* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.
006 *
007 * Project Info: http://www.jfree.org/jfreechart/index.html
008 *
009 * This library is free software; you can redistribute it and/or modify it
010 * under the terms of the GNU Lesser General Public License as published by
011 * the Free Software Foundation; either version 2.1 of the License, or
012 * (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but
015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
017 * License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this library; if not, write to the Free Software
021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
022 * USA.
023 *
024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
025 * in the United States and other countries.]
026 *
027 * ---------------
028 * EmptyBlock.java
029 * ---------------
030 * (C) Copyright 2004-2008, by Object Refinery Limited.
031 *
032 * Original Author: David Gilbert (for Object Refinery Limited);
033 * Contributor(s): -;
034 *
035 * Changes:
036 * --------
037 * 22-Oct-2004 : Version 1 (DG);
038 * 04-Feb-2005 : Now cloneable and serializable (DG);
039 * 20-Apr-2005 : Added new draw() method (DG);
040 * 08-Apr-2008 : Added support for margin and border (DG);
041 * 08-May-2008 : Updated arrange() method to recognise
042 * incoming constraint (DG);
043 *
044 */
045
046 package org.jfree.chart.block;
047
048 import java.awt.Graphics2D;
049 import java.awt.geom.Rectangle2D;
050 import java.io.Serializable;
051
052 import org.jfree.ui.Size2D;
053 import org.jfree.util.PublicCloneable;
054
055 /**
056 * An empty block with a fixed size.
057 */
058 public class EmptyBlock extends AbstractBlock
059 implements Block, Cloneable, PublicCloneable, Serializable {
060
061 /** For serialization. */
062 private static final long serialVersionUID = -4083197869412648579L;
063
064 /**
065 * Creates a new block with the specified width and height.
066 *
067 * @param width the width.
068 * @param height the height.
069 */
070 public EmptyBlock(double width, double height) {
071 setWidth(width);
072 setHeight(height);
073 }
074
075 /**
076 * Arranges the contents of the block, within the given constraints, and
077 * returns the block size.
078 *
079 * @param g2 the graphics device.
080 * @param constraint the constraint (<code>null</code> not permitted).
081 *
082 * @return The block size (in Java2D units, never <code>null</code>).
083 */
084 public Size2D arrange(Graphics2D g2, RectangleConstraint constraint) {
085 Size2D base = new Size2D(calculateTotalWidth(getWidth()),
086 calculateTotalHeight(getHeight()));
087 return constraint.calculateConstrainedSize(base);
088 }
089
090 /**
091 * Draws the block. Since the block is empty, there is nothing to draw
092 * except the optional border.
093 *
094 * @param g2 the graphics device.
095 * @param area the area.
096 */
097 public void draw(Graphics2D g2, Rectangle2D area) {
098 draw(g2, area, null);
099 }
100
101 /**
102 * Draws the block within the specified area. Since the block is empty,
103 * there is nothing to draw except the optional border.
104 *
105 * @param g2 the graphics device.
106 * @param area the area.
107 * @param params ignored (<code>null</code> permitted).
108 *
109 * @return Always <code>null</code>.
110 */
111 public Object draw(Graphics2D g2, Rectangle2D area, Object params) {
112 area = trimMargin(area);
113 drawBorder(g2, area);
114 return null;
115 }
116
117 /**
118 * Returns a clone of the block.
119 *
120 * @return A clone.
121 *
122 * @throws CloneNotSupportedException if there is a problem cloning.
123 */
124 public Object clone() throws CloneNotSupportedException {
125 return super.clone();
126 }
127
128 }