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