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 */ 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 final 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(final Graphics2D g2, final Rectangle2D area) 131 { 132 if (drawable == null) 133 { 134 return; 135 } 136 final Graphics2D derived = (Graphics2D) g2.create(); 137 derived.scale(scaleX, scaleY); 138 final 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 }