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: ScalingDrawable.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.Graphics2D;
034 import java.awt.geom.Rectangle2D;
035
036 import org.jfree.ui.Drawable;
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 ScalingDrawable implements Drawable
045 {
046 private float scaleX;
047 private float scaleY;
048 private ExtendedDrawable drawable;
049
050 public ScalingDrawable()
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 * Draws the object.
088 *
089 * @param g2 the graphics device.
090 * @param area the area inside which the object should be drawn.
091 */
092 public void draw(Graphics2D g2, Rectangle2D area)
093 {
094 if (drawable == null)
095 {
096 return;
097 }
098 Graphics2D derived = (Graphics2D) g2.create();
099 derived.scale(scaleX, scaleY);
100 Rectangle2D scaledArea = (Rectangle2D) area.clone();
101 scaledArea.setRect(scaledArea.getX() * scaleX, scaledArea.getY() * scaleY,
102 scaledArea.getWidth() * scaleX, scaledArea.getHeight() * scaleY);
103 drawable.draw(derived, scaledArea);
104 derived.dispose();
105 }
106 }