001 /**
002 * ========================================
003 * JFreeReport : a free Java report library
004 * ========================================
005 *
006 * Project Info: http://reporting.pentaho.org/
007 *
008 * (C) Copyright 2000-2007, by Object Refinery Limited, Pentaho Corporation and Contributors.
009 *
010 * This library is free software; you can redistribute it and/or modify it under the terms
011 * of the GNU Lesser General Public License as published by the Free Software Foundation;
012 * either version 2.1 of the License, or (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016 * See the GNU Lesser General Public License for more details.
017 *
018 * You should have received a copy of the GNU Lesser General Public License along with this
019 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020 * Boston, MA 02111-1307, USA.
021 *
022 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023 * in the United States and other countries.]
024 *
025 * ------------
026 * $Id: PageBackgroundDrawable.java,v 1.4 2007/04/01 18:49:31 taqua Exp $
027 * ------------
028 * (C) Copyright 2000-2005, by Object Refinery Limited.
029 * (C) Copyright 2005-2007, by Pentaho Corporation.
030 */
031
032 package org.jfree.report.modules.gui.swing.preview;
033
034 import java.awt.Color;
035 import java.awt.Dimension;
036 import java.awt.Graphics2D;
037 import java.awt.RenderingHints;
038 import java.awt.geom.AffineTransform;
039 import java.awt.geom.Rectangle2D;
040 import java.awt.print.PageFormat;
041 import javax.swing.UIManager;
042
043 import org.jfree.layouting.modules.output.graphics.PageDrawable;
044 import org.jfree.ui.ExtendedDrawable;
045
046 /**
047 * Creation-Date: 17.11.2006, 20:31:36
048 *
049 * @author Thomas Morgner
050 */
051 public class PageBackgroundDrawable implements ExtendedDrawable
052 {
053 private PageDrawable backend;
054 private boolean borderPainted;
055 private float shadowSize;
056 private double zoom;
057
058 public PageBackgroundDrawable()
059 {
060 this.shadowSize = 6;
061 this.borderPainted = false;
062 this.zoom = 1;
063 }
064
065 public PageDrawable getBackend()
066 {
067 return backend;
068 }
069
070 public void setBackend(final PageDrawable backend)
071 {
072 this.backend = backend;
073 }
074
075 public boolean isBorderPainted()
076 {
077 return borderPainted;
078 }
079
080 public void setBorderPainted(final boolean borderPainted)
081 {
082 this.borderPainted = borderPainted;
083 }
084
085 public double getZoom()
086 {
087 return zoom;
088 }
089
090 public void setZoom(final double zoom)
091 {
092 this.zoom = zoom;
093 }
094
095 public Dimension getPreferredSize()
096 {
097 if (backend == null)
098 {
099 return new Dimension(0, 0);
100 }
101 final Dimension preferredSize = backend.getPreferredSize();
102
103 return new Dimension
104 ((int) ((preferredSize.width + shadowSize) * zoom),
105 (int) ((preferredSize.height + shadowSize) * zoom));
106 }
107
108 public boolean isPreserveAspectRatio()
109 {
110 return true;
111 }
112
113 public float getShadowSize()
114 {
115 return shadowSize;
116 }
117
118 public void setShadowSize(final float shadowSize)
119 {
120 this.shadowSize = shadowSize;
121 }
122
123 /**
124 * Draws the object.
125 *
126 * @param g2 the graphics device.
127 * @param area the area inside which the object should be drawn.
128 */
129 public void draw(Graphics2D g2, Rectangle2D area)
130 {
131 if (backend == null)
132 {
133 return;
134 }
135
136 final PageFormat pageFormat = backend.getPageFormat();
137 final float outerW = (float) pageFormat.getWidth();
138 final float outerH = (float) pageFormat.getHeight();
139
140 final float innerX = (float) pageFormat.getImageableX();
141 final float innerY = (float) pageFormat.getImageableY();
142 final float innerW = (float) pageFormat.getImageableWidth();
143 final float innerH = (float) pageFormat.getImageableHeight();
144
145 //double paperBorder = paperBorderPixel * zoomFactor;
146
147 /** Prepare background **/
148 g2.transform(AffineTransform.getScaleInstance(getZoom(), getZoom()));
149 g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
150
151 /** Prepare background **/
152 Rectangle2D pageArea =
153 new Rectangle2D.Float(0, 0, outerW, outerH);
154
155 g2.setPaint(Color.white);
156 g2.fill(pageArea);
157
158
159 Graphics2D g22 = (Graphics2D) g2.create();
160 backend.draw(g22, new Rectangle2D.Double
161 (0, 0, pageFormat.getImageableWidth(), pageFormat.getImageableHeight()));
162 g22.dispose();
163
164 /**
165 * The border around the printable area is painted when the corresponding property is
166 * set to true.
167 */
168 final Rectangle2D printingArea = new Rectangle2D.Float(innerX, innerY, innerW, innerH);
169
170 /** Paint Page Shadow */
171 final Rectangle2D southborder = new Rectangle2D.Float
172 (getShadowSize(), outerH,
173 outerW, getShadowSize());
174
175 g2.setPaint(UIManager.getColor("controlShadow"));
176
177 g2.fill(southborder);
178
179 final Rectangle2D eastborder = new Rectangle2D.Float
180 (outerW, getShadowSize(),getShadowSize(), outerH);
181
182 g2.fill(eastborder);
183 final Rectangle2D transPageArea = new Rectangle2D.Float(0, 0, outerW, outerH);
184
185 g2.setPaint(Color.black);
186 g2.draw(transPageArea);
187 if (isBorderPainted())
188 {
189 g2.setPaint(Color.gray);
190 g2.draw(printingArea);
191 }
192
193 }
194 }