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: ScalingExtendedDrawable.java,v 1.4 2007/04/01 18:49:34 taqua Exp $
027 * ------------
028 * (C) Copyright 2000-2005, by Object Refinery Limited.
029 * (C) Copyright 2005-2007, by Pentaho Corporation.
030 */
031 package org.jfree.report.util;
032
033 import java.awt.Dimension;
034 import java.awt.Graphics2D;
035 import java.awt.geom.Rectangle2D;
036
037 import org.jfree.ui.ExtendedDrawable;
038
039 /**
040 * Creation-Date: 20.01.2006, 19:46:10
041 *
042 * @author Thomas Morgner
043 */
044 public class ScalingExtendedDrawable implements ExtendedDrawable
045 {
046 private float scaleX;
047 private float scaleY;
048 private ExtendedDrawable drawable;
049
050 public ScalingExtendedDrawable()
051 {
052 scaleX = 1;
053 scaleY = 1;
054 }
055
056 public ExtendedDrawable getDrawable()
057 {
058 return drawable;
059 }
060
061 public void setDrawable(final ExtendedDrawable drawable)
062 {
063 this.drawable = drawable;
064 }
065
066 public float getScaleY()
067 {
068 return scaleY;
069 }
070
071 public void setScaleY(final float scaleY)
072 {
073 this.scaleY = scaleY;
074 }
075
076 public float getScaleX()
077 {
078 return scaleX;
079 }
080
081 public void setScaleX(final float scaleX)
082 {
083 this.scaleX = scaleX;
084 }
085
086 /**
087 * Returns the preferred size of the drawable. If the drawable is aspect ratio
088 * aware, these bounds should be used to compute the preferred aspect ratio
089 * for this drawable.
090 *
091 * @return the preferred size.
092 */
093 public Dimension getPreferredSize()
094 {
095 if (drawable == null)
096 {
097 return new Dimension(0,0);
098 }
099
100 Dimension dim = drawable.getPreferredSize();
101 if (dim == null)
102 {
103 return null;
104 }
105 dim.setSize(scaleX * dim.getWidth(), scaleY * dim.getHeight());
106 return dim;
107 }
108
109 /**
110 * Returns true, if this drawable will preserve an aspect ratio during the
111 * drawing.
112 *
113 * @return true, if an aspect ratio is preserved, false otherwise.
114 */
115 public boolean isPreserveAspectRatio()
116 {
117 if (drawable == null)
118 {
119 return false;
120 }
121 return drawable.isPreserveAspectRatio();
122 }
123
124 /**
125 * Draws the object.
126 *
127 * @param g2 the graphics device.
128 * @param area the area inside which the object should be drawn.
129 */
130 public void draw(Graphics2D g2, Rectangle2D area)
131 {
132 if (drawable == null)
133 {
134 return;
135 }
136 Graphics2D derived = (Graphics2D) g2.create();
137 derived.scale(scaleX, scaleY);
138 Rectangle2D scaledArea = (Rectangle2D) area.clone();
139 scaledArea.setRect(scaledArea.getX() * scaleX, scaledArea.getY() * scaleY,
140 scaledArea.getWidth() * scaleX, scaledArea.getHeight() * scaleY);
141 drawable.draw(derived, scaledArea);
142 derived.dispose();
143 }
144 }