00001 00003 00004 // 00005 // Copyright (c) 2002-2004 California Institute of Technology 00006 // Copyright (c) 2004-2007 University of Southern California 00007 // Rob Peters <rjpeters at usc dot edu> 00008 // 00009 // created: Wed Nov 13 13:04:27 2002 00010 // commit: $Id: gxscaler.h 10065 2007-04-12 05:54:56Z rjpeters $ 00011 // $HeadURL: file:///lab/rjpeters/svnrepo/code/trunk/groovx/src/gfx/gxscaler.h $ 00012 // 00013 // -------------------------------------------------------------------- 00014 // 00015 // This file is part of GroovX. 00016 // [http://ilab.usc.edu/rjpeters/groovx/] 00017 // 00018 // GroovX is free software; you can redistribute it and/or modify it 00019 // under the terms of the GNU General Public License as published by 00020 // the Free Software Foundation; either version 2 of the License, or 00021 // (at your option) any later version. 00022 // 00023 // GroovX is distributed in the hope that it will be useful, but 00024 // WITHOUT ANY WARRANTY; without even the implied warranty of 00025 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00026 // General Public License for more details. 00027 // 00028 // You should have received a copy of the GNU General Public License 00029 // along with GroovX; if not, write to the Free Software Foundation, 00030 // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 00031 // 00033 00034 #ifndef GROOVX_GFX_GXSCALER_H_UTC20050626084024_DEFINED 00035 #define GROOVX_GFX_GXSCALER_H_UTC20050626084024_DEFINED 00036 00037 #include "gfx/gxbin.h" 00038 00040 class GxScaler : public GxBin 00041 { 00042 public: 00044 // 00045 // Scaling modes 00046 // 00048 00053 typedef int Mode; 00054 00058 static const Mode NATIVE_SCALING = 1; 00059 00065 static const Mode MAINTAIN_ASPECT_SCALING = 2; 00066 00069 static const Mode FREE_SCALING = 3; 00070 00071 00073 GxScaler(); 00074 00076 GxScaler(nub::ref<GxNode> child); 00077 00079 static GxScaler* make(); 00080 00082 Mode getMode() const { return itsMode; } 00083 00085 void setMode(Mode new_mode); 00086 00088 void setWidth(double new_width); 00090 void setHeight(double new_height); 00092 void setMaxDim(double new_max_dimension); 00093 00095 void setAspectRatio(double new_aspect_ratio); 00096 00098 void setWidthFactor(double f); 00100 void setHeightFactor(double f); 00101 00103 double scaledWidth() const; 00105 double scaledHeight() const; 00107 double scaledMaxDim() const; 00108 00110 double aspectRatio() const; 00111 00113 double widthFactor() const { return itsWidthFactor; } 00115 double heightFactor() const { return itsHeightFactor; } 00116 00117 virtual void read_from(io::reader& reader); 00118 virtual void write_to(io::writer& writer) const; 00119 00120 virtual void draw(Gfx::Canvas& canvas) const; 00121 00122 virtual void getBoundingCube(Gfx::Bbox& bbox) const; 00123 00124 private: 00125 Mode itsMode; 00126 00127 double itsWidthFactor; 00128 double itsHeightFactor; 00129 double itsAspectRatio; 00130 }; 00131 00132 00133 static const char __attribute__((used)) vcid_groovx_gfx_gxscaler_h_utc20050626084024[] = "$Id: gxscaler.h 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file: 00134 #endif // !GROOVX_GFX_GXSCALER_H_UTC20050626084024_DEFINED