You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(37) |
Sep
(7) |
Oct
(1) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
2005 |
Jan
|
Feb
(10) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(37) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
(118) |
Mar
|
Apr
|
May
|
Jun
(7) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
(11) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(6) |
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(24) |
Dec
|
From: Kevin H. <kph...@us...> - 2011-11-07 06:10:12
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv7516 Modified Files: Tag: panorama_0_19 GenericRGBAColor.hpp GenericRGBColor.hpp Log Message: Adding capabilities. Index: GenericRGBAColor.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericRGBAColor.hpp,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -C2 -d -r1.1.2.4 -r1.1.2.5 *** GenericRGBAColor.hpp 6 Nov 2011 03:39:16 -0000 1.1.2.4 --- GenericRGBAColor.hpp 7 Nov 2011 06:10:09 -0000 1.1.2.5 *************** *** 23,34 **** #define PANORAMA__GENERIC_RGBACOLOR_HPP ! #include "StringDumpable.hpp" ! #include "GenericRGBColor.hpp" ! #include "Larger.hpp" #include "blocxx/Compare.hpp" #include <limits> - // FIXME! Add color capabilities - namespace panorama { --- 23,33 ---- #define PANORAMA__GENERIC_RGBACOLOR_HPP ! #include "panorama/common/StringDumpable.hpp" ! #include "panorama/common/GenericRGBColor.hpp" ! #include "panorama/common/Larger.hpp" ! #include "panorama/common/Capabilities.hpp" #include "blocxx/Compare.hpp" #include <limits> namespace panorama { *************** *** 238,241 **** --- 237,245 ---- blocxx::String name() const; + + ColorCapabilities capabilities() const + { + return ColorCapabilities(ColorCapabilities::RGB | ColorCapabilities::TRANSPARENT); + } }; // class GenericRGBAColor Index: GenericRGBColor.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericRGBColor.hpp,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** GenericRGBColor.hpp 6 Nov 2011 03:39:16 -0000 1.1.2.3 --- GenericRGBColor.hpp 7 Nov 2011 06:10:09 -0000 1.1.2.4 *************** *** 23,32 **** #define PANORAMA__GENERIC_RGBCOLOR_HPP ! #include "StringDumpable.hpp" #include "blocxx/Compare.hpp" #include <limits> - // FIXME! Add color capabilities - namespace panorama { --- 23,31 ---- #define PANORAMA__GENERIC_RGBCOLOR_HPP ! #include "panorama/common/StringDumpable.hpp" ! #include "panorama/common/Capabilities.hpp" #include "blocxx/Compare.hpp" #include <limits> namespace panorama { *************** *** 220,223 **** --- 219,227 ---- blocxx::String name() const; + + ColorCapabilities capabilities() const + { + return ColorCapabilities(ColorCapabilities::RGB); + } }; // class GenericRGBColor |
From: Kevin H. <kph...@us...> - 2011-11-07 06:09:48
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv7467 Modified Files: Tag: panorama_0_19 Raster.hpp Log Message: Allowing derived types access to the mutable raw raster data. I may regret this later. Index: Raster.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/Raster.hpp,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** Raster.hpp 6 Nov 2011 03:37:48 -0000 1.1.2.3 --- Raster.hpp 7 Nov 2011 06:09:45 -0000 1.1.2.4 *************** *** 196,199 **** --- 196,206 ---- void swap(Raster<T>& rast); + + protected: + // Only subclasses can do this. + T* getRawData() + { + return raster_data; + } }; // class Raster |
From: Kevin H. <kph...@us...> - 2011-11-07 06:08:03
|
Update of /cvsroot/panorama/panorama/src/graphics In directory vz-cvs-3.sog:/tmp/cvs-serv7245 Modified Files: Tag: panorama_0_19 GenericImage.hpp Makefile.am Added Files: Tag: panorama_0_19 ImageConvert.cpp ImageConvert.hpp Log Message: Starting some conversions. --- NEW FILE: ImageConvert.cpp --- #include "panorama/graphics/ImageConvert.hpp" namespace panorama { namespace { template <typename T, typename U> inline T clamp(U t, T tmin, T tmax) { return std::max(std::min<T>(t, tmax), tmin); } template <typename T, typename U> T clamp(U t) { return clamp(t, T(0), std::numeric_limits<T>::max()); } } //std::numeric_limits<T>::max() template<> unsigned char convertColorItem<unsigned char,float>(float f) { return clamp<unsigned char>(f * std::numeric_limits<unsigned char>::max()); } template<> unsigned char convertColorItem<unsigned char,double>(double d) { return clamp<unsigned char>(d * std::numeric_limits<unsigned char>::max()); } template<> unsigned char convertColorItem<unsigned char,unsigned short>(unsigned short s) { return s / 2; } template<> unsigned short convertColorItem<unsigned short,unsigned char>(unsigned char s) { return s * 2; } template<> unsigned short convertColorItem<unsigned short,float>(float f) { return clamp<unsigned short>(f * std::numeric_limits<unsigned short>::max()); } template<> unsigned short convertColorItem<unsigned short,double>(double d) { return clamp<unsigned short>(d * std::numeric_limits<unsigned short>::max()); } template<> float convertColorItem<float,unsigned char>(unsigned char f) { return float(f) / float(std::numeric_limits<unsigned char>::max()); } template<> float convertColorItem<float,double>(double d) { return float(d); } template<> float convertColorItem<float,unsigned short>(unsigned short s) { return float(s) / float(std::numeric_limits<unsigned short>::max()); } template<> double convertColorItem<double,unsigned char>(unsigned char d) { return double(d) / double(std::numeric_limits<unsigned char>::max()); } template<> double convertColorItem<double,float>(float f) { return f; } template<> double convertColorItem<double,unsigned short>(unsigned short s) { return double(s) / double(std::numeric_limits<unsigned short>::max()); } } --- NEW FILE: ImageConvert.hpp --- /* * $Id: ImageConvert.hpp,v 1.1.2.1 2011/11/07 06:08:00 kpharris Exp $ * * Part of "Panorama" a playground for graphics development * Copyright (C) 2011 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #if !defined(PANORAMA_IMAGE_CONVERT_HPP) #define PANORAMA_IMAGE_CONVERT_HPP #include "panorama/common/GenericRGBColor.hpp" #include "panorama/common/GenericRGBAColor.hpp" #include "panorama/graphics/GenericImage.hpp" #include "panorama/graphics/GenericRGBImage.hpp" #include "panorama/graphics/GenericAlphaImage.hpp" #include "panorama/graphics/MaskedImage.hpp" namespace panorama { template <typename U, typename T> U convertColorItem(T t) { return t; } template<> unsigned char convertColorItem<unsigned char,float>(float f); template<> unsigned char convertColorItem<unsigned char,double>(double d); template<> unsigned char convertColorItem<unsigned char,unsigned short>(unsigned short s); template<> unsigned short convertColorItem<unsigned short,unsigned char>(unsigned char s); template<> unsigned short convertColorItem<unsigned short,float>(float f); template<> unsigned short convertColorItem<unsigned short,double>(double d); template<> float convertColorItem<float,unsigned char>(unsigned char f); template<> float convertColorItem<float,double>(double d); template<> float convertColorItem<float,unsigned short>(unsigned short s); template<> double convertColorItem<double,unsigned char>(unsigned char d); template<> double convertColorItem<double,float>(float f); template<> double convertColorItem<double,unsigned short>(unsigned short s); // FIXME! Finish the color conversion. // FIXME! Unit tests. } // namespace panorama #endif /* !defined(PANORAMA_IMAGE_CONVERT_HPP) */ Index: Makefile.am =================================================================== RCS file: /cvsroot/panorama/panorama/src/graphics/Attic/Makefile.am,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** Makefile.am 6 Nov 2011 03:30:51 -0000 1.1.2.1 --- Makefile.am 7 Nov 2011 06:08:00 -0000 1.1.2.2 *************** *** 1,4 **** --- 1,5 ---- lib_LTLIBRARIES = libpanorama_graphics.la libpanorama_graphics_la_SOURCES = \ + ImageConvert.cpp \ ImageFormat.cpp \ PPMLoader.cpp \ *************** *** 7,12 **** --- 8,16 ---- pkgincludedir = $(includedir)/panorama/graphics pkginclude_HEADERS = \ + ImageConvert.hpp \ ImageFormat.hpp \ GenericImage.hpp \ + GenericRGBImage.hpp \ + GenericAlphaImage.hpp \ MaskedImage.hpp \ PPMLoader.hpp \ Index: GenericImage.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/graphics/Attic/GenericImage.hpp,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** GenericImage.hpp 6 Nov 2011 03:30:51 -0000 1.1.2.1 --- GenericImage.hpp 7 Nov 2011 06:08:00 -0000 1.1.2.2 *************** *** 3,7 **** * * Part of "Panorama" a playground for graphics development ! * Copyright (C) 2003 Kevin Harris * * This program is free software; you can redistribute it and/or modify --- 3,7 ---- * * Part of "Panorama" a playground for graphics development ! * Copyright (C) 2010 Kevin Harris * * This program is free software; you can redistribute it and/or modify *************** *** 26,32 **** #include "panorama/common/GenericRGBColor.hpp" - // FIXME! Subclass this for RGB and alpha images. - // FIXME! Add image capabilities - namespace panorama { --- 26,29 ---- *************** *** 65,77 **** * */ ! template <typename ColorType, typename T = typename ColorType::number_type> class GenericImage : public Raster<ColorType> { public: typedef ColorType color_type; ! typedef Raster<color_type> parent; GenericImage(); ! GenericImage(const parent& r); GenericImage(unsigned width, unsigned height); virtual ~GenericImage(); --- 62,74 ---- * */ ! template <typename ColorType> class GenericImage : public Raster<ColorType> { public: typedef ColorType color_type; ! typedef Raster<color_type> parent_type; GenericImage(); ! GenericImage(const parent_type& r); GenericImage(unsigned width, unsigned height); virtual ~GenericImage(); *************** *** 90,94 **** GenericImage subImage(const GenericRectangle<unsigned>& rect) const { ! return GenericImage(parent::subRaster(rect)); } --- 87,91 ---- GenericImage subImage(const GenericRectangle<unsigned>& rect) const { ! return GenericImage(parent_type::subRaster(rect)); } *************** *** 97,137 **** return subImage(GenericRectangle<unsigned>(x1, x2, y1, y2)); } }; // class GenericImage ! template <typename ColorType, typename T> ! GenericImage<ColorType,T>::GenericImage() ! : parent() { } // GenericImage() ! template <typename ColorType, typename T> ! GenericImage<ColorType,T>::GenericImage(const parent& r) : ! parent(r) { } ! template <typename ColorType, typename T> ! GenericImage<ColorType,T>::GenericImage(unsigned width, unsigned height): ! parent(width, height) { } // GenericImage(w,h) ! template <typename ColorType, typename T> ! GenericImage<ColorType,T>::~GenericImage() { } // ~GenericImage() ! template <typename ColorType, typename T> ! GenericImage<ColorType,T>::GenericImage(const GenericImage<ColorType,T>& old): ! parent(old) { } // GenericImage(GenericImage) ! template <typename ColorType, typename T> ! GenericImage<ColorType,T>& GenericImage<ColorType,T>::operator= (const GenericImage<ColorType,T>& old) { // Generic check for self-assignment --- 94,136 ---- return subImage(GenericRectangle<unsigned>(x1, x2, y1, y2)); } + + virtual ImageCapabilities capabilities() const; }; // class GenericImage ! template <typename ColorType> ! GenericImage<ColorType>::GenericImage() ! : parent_type() { } // GenericImage() ! template <typename ColorType> ! GenericImage<ColorType>::GenericImage(const parent_type& r) : ! parent_type(r) { } ! template <typename ColorType> ! GenericImage<ColorType>::GenericImage(unsigned width, unsigned height): ! parent_type(width, height) { } // GenericImage(w,h) ! template <typename ColorType> ! GenericImage<ColorType>::~GenericImage() { } // ~GenericImage() ! template <typename ColorType> ! GenericImage<ColorType>::GenericImage(const GenericImage<ColorType>& old): ! parent_type(old) { } // GenericImage(GenericImage) ! template <typename ColorType> ! GenericImage<ColorType>& GenericImage<ColorType>::operator= (const GenericImage<ColorType>& old) { // Generic check for self-assignment *************** *** 141,166 **** // to be assigned here. ! parent::operator=(old); } return(*this); } // GenericImage::operator=(GenericImage) ! template <typename ColorType, typename T> ! void GenericImage<ColorType,T>::collectInternalMembers(MemberStringDumpCollector& collector) const { ! parent::collectInternalMembers(collector); } ! template <typename ColorType, typename T> ! bool GenericImage<ColorType,T>::visible(int x, int y) const { ! return parent::inside(x,y); } ! template <typename ColorType, typename T> ! GenericImage<ColorType,T> scaleImage(const GenericImage<ColorType,T>& img, unsigned scale) { // FIXME! Allow scales other than block (eg. interpolated) ! GenericImage<ColorType,T> ret_image(img.getWidth() * scale, img.getHeight() * scale); for(unsigned y = 0; y < ret_image.getHeight(); ++y) --- 140,165 ---- // to be assigned here. ! parent_type::operator=(old); } return(*this); } // GenericImage::operator=(GenericImage) ! template <typename ColorType> ! void GenericImage<ColorType>::collectInternalMembers(MemberStringDumpCollector& collector) const { ! parent_type::collectInternalMembers(collector); } ! template <typename ColorType> ! bool GenericImage<ColorType>::visible(int x, int y) const { ! return parent_type::inside(x,y); } ! template <typename ColorType> ! GenericImage<ColorType> scaleImage(const GenericImage<ColorType>& img, unsigned scale) { // FIXME! Allow scales other than block (eg. interpolated) ! GenericImage<ColorType> ret_image(img.getWidth() * scale, img.getHeight() * scale); for(unsigned y = 0; y < ret_image.getHeight(); ++y) *************** *** 176,179 **** --- 175,199 ---- } + template <typename ColorType> + ImageCapabilities GenericImage<ColorType>::capabilities() const + { + ImageCapabilities caps = ImageCapabilities::NONE; + typedef typename ColorType::number_type number_type; + + if( std::numeric_limits<number_type>::is_exact ) + { + if( sizeof(number_type) > 1 ) + { + caps |= ImageCapabilities::HIGH_BITWIDTH; + } + caps |= ImageCapabilities::LOSSLESS; + } + else + { + caps |= ImageCapabilities::HIGH_BITWIDTH; + } + return caps; + } + } // namespace panorama |
From: Kevin H. <kph...@us...> - 2011-11-07 06:07:41
|
Update of /cvsroot/panorama/panorama/src/graphics In directory vz-cvs-3.sog:/tmp/cvs-serv7200 Added Files: Tag: panorama_0_19 GenericRGBImage.hpp GenericAlphaImage.hpp Log Message: Subclassing the generic image for known color types. --- NEW FILE: GenericRGBImage.hpp --- /* * $Id: GenericRGBImage.hpp,v 1.1.2.1 2011/11/07 06:07:38 kpharris Exp $ * * Part of "Panorama" a playground for graphics development * Copyright (C) 2011 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #if !defined(PANORAMA_GENERIC_RGB_IMAGE_HPP) #define PANORAMA_GENERIC_RGB_IMAGE_HPP #include "panorama/common/GenericRGBColor.hpp" #include "panorama/graphics/GenericImage.hpp" namespace panorama { template <typename T> class GenericRGBImage : public GenericImage<GenericRGBColor<T> > { public: typedef GenericRGBColor<T> color_type; typedef GenericImage<color_type> parent_type; GenericRGBImage() { } GenericRGBImage(unsigned width, unsigned height) : parent_type(width,height) { } GenericRGBImage(const parent_type& p) : parent_type(p) { } CloneableRef clone() const { return CloneableRef(new GenericRGBImage(*this)); } blocxx::String name() const { return "RGBImage"; } }; } // namespace panorama #endif /* !defined(PANORAMA_GENERIC_RGB_IMAGE_HPP) */ --- NEW FILE: GenericAlphaImage.hpp --- /* * $Id: GenericAlphaImage.hpp,v 1.1.2.1 2011/11/07 06:07:38 kpharris Exp $ * * Part of "Panorama" a playground for graphics development * Copyright (C) 2011 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #if !defined(PANORAMA_GENERIC_ALPHA_IMAGE_HPP) #define PANORAMA_GENERIC_ALPHA_IMAGE_HPP #include "panorama/common/GenericRGBAColor.hpp" #include "panorama/graphics/GenericImage.hpp" #include "panorama/graphics/GenericRGBImage.hpp" #include "panorama/graphics/MaskedImage.hpp" namespace panorama { template <typename T> class GenericAlphaImage : public GenericImage<GenericRGBAColor<T> > { public: typedef GenericRGBAColor<T> color_type; typedef GenericImage<color_type> parent_type; GenericAlphaImage() { } GenericAlphaImage(unsigned width, unsigned height) : parent_type(width,height) { } GenericAlphaImage(const parent_type& p) : parent_type(p) { } GenericAlphaImage(const GenericRGBImage<T>& img); template<typename ColorType, typename MaskType> GenericAlphaImage(const MaskedImage<ColorType, MaskType>& img); CloneableRef clone() const { return CloneableRef(new GenericAlphaImage(*this)); } blocxx::String name() const { return "AlphaImage"; } }; template<typename T> GenericAlphaImage<T>::GenericAlphaImage(const GenericRGBImage<T>& img) : parent_type(img.getWidth(), img.getHeight()) { // Convert each RGB color to an alpha color while copying. We know that // the bounds are good, so this is much faster than using the // bounds-checked Raster::operator() on each pixel. const typename GenericRGBImage<T>::color_type* source = img.getRawData(); std::copy(source, source + parent_type::getNumPixels(), parent_type::getRawData()); } template<typename T> template<typename ColorType, typename MaskType> GenericAlphaImage<T>::GenericAlphaImage(const MaskedImage<ColorType, MaskType>& img) : parent_type(img.getWidth(), img.getHeight()) { for( unsigned y = 0; y < parent_type::getHeight(); ++y ) { for( unsigned x = 0; x < parent_type::getWidth(); ++x ) { ColorType c = img(x,y); color_type o = c; o.set_a( img.mask(x,y) ? 0 : ColorType::color_traits_type::max() ); (*this)(x,y) = o; } } } } // namespace panorama #endif /* !defined(PANORAMA_GENERIC_ALPHA_IMAGE_HPP) */ |
From: Kevin H. <kph...@us...> - 2011-11-06 03:45:21
|
Update of /cvsroot/panorama/panorama/src/graphics In directory vz-cvs-3.sog:/tmp/cvs-serv1611 Added Files: Tag: panorama_0_19 ImageFormat.cpp Log Message: Adding ImageFormat implementation. --- NEW FILE: ImageFormat.cpp --- /* * $Id: ImageFormat.cpp,v 1.1.2.1 2011/11/06 03:45:19 kpharris Exp $ * * Part of GNU Panorama * * Copyright (C) 2011 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "panorama/graphics/ImageFormat.hpp" namespace panorama { ImageFormat::ImageFormat(const ImageCapabilities& imageCaps, const ColorCapabilities& colorCaps, const blocxx::StringArray& extensions, const blocxx::String& preferredExtension, const blocxx::String& givenFormatName, ImageFormat::TagType tag) : m_imageCapabilities(imageCaps) , m_colorCapabilities(colorCaps) , m_fileExtensions(extensions) , m_preferredExtension(preferredExtension) , m_formatName(givenFormatName) , m_formatTag(tag) { } ImageCapabilities ImageFormat::imageCapabilities() const { return m_imageCapabilities; } ColorCapabilities ImageFormat::colorCapabilities() const { return m_colorCapabilities; } blocxx::StringArray ImageFormat::defaultFileExtensions() const { return m_fileExtensions; } blocxx::String ImageFormat::preferredFileExtension() const { return m_preferredExtension; } blocxx::String ImageFormat::formatName() const { return m_formatName; } ImageFormat::TagType ImageFormat::formatTag() const { return m_formatTag; } void ImageFormat::collectInternalMembers(MemberStringDumpCollector& collector) const { collector.addMember("imageCaps", m_imageCapabilities); collector.addMember("colorCaps", m_colorCapabilities); collector.addMember("extensions", m_fileExtensions); collector.addMember("defaultExtension", m_preferredExtension); collector.addMember("formatName", m_formatName); collector.addMember("tag", m_formatTag); } blocxx::String ImageFormat::toString(const Indentation& indent, StringDumpable::PrefixType prefix ) const { return toStringAsMembers(*this, indent, prefix); } } // namespace panorama |
From: Kevin H. <kph...@us...> - 2011-11-06 03:44:37
|
Update of /cvsroot/panorama/panorama In directory vz-cvs-3.sog:/tmp/cvs-serv1566 Modified Files: Tag: panorama_0_19 Makefile.am Log Message: Ignoring doc and data for now, since "make install" there does not act like it should. Index: Makefile.am =================================================================== RCS file: /cvsroot/panorama/panorama/Attic/Makefile.am,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** Makefile.am 22 Feb 2009 10:09:56 -0000 1.1.2.1 --- Makefile.am 6 Nov 2011 03:44:34 -0000 1.1.2.2 *************** *** 1,8 **** SUBDIRS = \ src \ - data \ - doc \ test # hlapi \ # llapi \ --- 1,11 ---- SUBDIRS = \ src \ test + # data \ + # doc \ + # + + # hlapi \ # llapi \ |
From: Kevin H. <kph...@us...> - 2011-11-06 03:43:36
|
Update of /cvsroot/panorama/panorama In directory vz-cvs-3.sog:/tmp/cvs-serv1503 Modified Files: Tag: panorama_0_19 Makefile-executable.inc Log Message: Updating from blocxx. Index: Makefile-executable.inc =================================================================== RCS file: /cvsroot/panorama/panorama/Attic/Makefile-executable.inc,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** Makefile-executable.inc 22 Feb 2009 10:09:56 -0000 1.1.2.1 --- Makefile-executable.inc 6 Nov 2011 03:43:33 -0000 1.1.2.2 *************** *** 25,43 **** define EXECUTABLE_FLAG_TEMPLATE ! # Define <foo>_LDFLAGS in terms of the predefined values and any PROJECT_LIBS ! # requested. define $(1)_LDFLAGS ! -o $(1)$$(EXEEXT) $$(CXXBINLINKFLAGS_START) $$($(1)_PROJECT_LIBS) $$(COMMON_LDFLAGS) endef ! # Define <foo>_LDADD in terms of any EXTERNAL_LIBS and any systemwide ! # predefined append flags define $(1)_LDADD ! $$($(1)_EXTERNAL_LIBS) $$(BINLINKAPPENDFLAGS) endef ! # Define <foo>_DEPENCIES to be *.a files listed in _EXTERNAL_LIBS define $(1)_DEPENDENCIES ! $$(filter %.a,$$($(1)_EXTERNAL_LIBS)) endef --- 25,45 ---- define EXECUTABLE_FLAG_TEMPLATE ! # Define <foo>_LDFLAGS in terms of the predefined values requested. The ! # resulting LDFLAGS are applied *before* any object files listed on a link line ! # and so should not contain any library references. define $(1)_LDFLAGS ! -o $(1)$$(EXEEXT) $$(CXXBINLINKFLAGS_START) $$(COMMON_LDFLAGS) endef ! # Define <foo>_LDADD in terms of any PROJECT_LIBS, EXTERNAL_LIBS and any ! # systemwide predefined append flags define $(1)_LDADD ! $$($(1)_PROJECT_LIBS) $$($(1)_EXTERNAL_LIBS) $$(BINLINKAPPENDFLAGS) endef ! # Define <foo>_DEPENCIES to be *.a files listed in _EXTERNAL_LIBS and the ! # objects generated for the target. define $(1)_DEPENDENCIES ! $$(filter %.a,$$($(1)_EXTERNAL_LIBS)) $$($(1)_OBJECTS) endef *************** *** 51,54 **** --- 53,59 ---- @echo '$(1)_PROJECT_LIBS=$$($(1)_PROJECT_LIBS:@=$(1))' @echo '$(1)_SOURCES=$$($(1)_SOURCES:@=$(1))' + @echo '$(1)_LINK=$$($(1)_LINK:@=$(1))' + @echo '$(1)_OBJECTS=$$($(1)_OBJECTS:@=$(1))' + @echo 'LIBS=$(LIBS)' endef # end of EXECUTABLE_FLAG_TEMPLATE |
From: Kevin H. <kph...@us...> - 2011-11-06 03:42:57
|
Update of /cvsroot/panorama/panorama/src In directory vz-cvs-3.sog:/tmp/cvs-serv1462 Modified Files: Tag: panorama_0_19 Makefile.am Added Files: Tag: panorama_0_19 mapping.txt Log Message: --- NEW FILE: mapping.txt --- Here are how the old classes have been mapped to the new ones: TBaseClass --> BaseClass TFrame --> Raster TVector --> Vector3, Point3, Coord3 TVector2 --> Vector2, Point2, Coord2 Index: Makefile.am =================================================================== RCS file: /cvsroot/panorama/panorama/src/Attic/Makefile.am,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** Makefile.am 30 Aug 2010 06:00:50 -0000 1.1.2.3 --- Makefile.am 6 Nov 2011 03:42:55 -0000 1.1.2.4 *************** *** 2,6 **** . \ blocxx_export \ ! common # $(1) = symlink name --- 2,7 ---- . \ blocxx_export \ ! common \ ! graphics # $(1) = symlink name |
From: Kevin H. <kph...@us...> - 2011-11-06 03:42:09
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv1423 Modified Files: Tag: panorama_0_19 Makefile.am Types.hpp Added Files: Tag: panorama_0_19 GenericLine2.hpp Log Message: Adding new types. Index: Makefile.am =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/Makefile.am,v retrieving revision 1.1.2.10 retrieving revision 1.1.2.11 diff -C2 -d -r1.1.2.10 -r1.1.2.11 *** Makefile.am 30 Aug 2010 06:00:50 -0000 1.1.2.10 --- Makefile.am 6 Nov 2011 03:42:06 -0000 1.1.2.11 *************** *** 1,18 **** lib_LTLIBRARIES = libpanorama_common.la libpanorama_common_la_SOURCES = \ Cloneable.cpp \ StringDumpable.cpp \ ! BaseClass.cpp \ ! Capabilities.cpp pkgincludedir = $(includedir)/panorama/common pkginclude_HEADERS = \ ! Config.h \ ! Cloneable.hpp \ ! StringDumpable.hpp \ BaseClass.hpp \ ! Raster.hpp \ ! GenericCoord2.hpp \ ! Types.hpp \ GenericCoord2.hpp \ GenericCoord3.hpp \ --- 1,16 ---- lib_LTLIBRARIES = libpanorama_common.la libpanorama_common_la_SOURCES = \ + BaseClass.cpp \ + Capabilities.cpp \ Cloneable.cpp \ StringDumpable.cpp \ ! TextUtils.cpp pkgincludedir = $(includedir)/panorama/common pkginclude_HEADERS = \ ! Config.hpp \ BaseClass.hpp \ ! Capabilities.hpp \ ! Cloneable.hpp \ GenericCoord2.hpp \ GenericCoord3.hpp \ *************** *** 27,31 **** GenericInterval.hpp \ GenericLine.hpp \ ! Capabilities.hpp AM_CPPFLAGS = -I$(top_srcdir)/src --- 25,34 ---- GenericInterval.hpp \ GenericLine.hpp \ ! GenericLine2.hpp \ ! Raster.hpp \ ! StringDumpable.hpp \ ! TextUtils.hpp \ ! Types.hpp ! AM_CPPFLAGS = -I$(top_srcdir)/src Index: Types.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/Types.hpp,v retrieving revision 1.1.2.9 retrieving revision 1.1.2.10 diff -C2 -d -r1.1.2.9 -r1.1.2.10 *** Types.hpp 30 Aug 2010 06:00:50 -0000 1.1.2.9 --- Types.hpp 6 Nov 2011 03:42:06 -0000 1.1.2.10 *************** *** 33,36 **** --- 33,37 ---- #include "panorama/common/GenericPoint2.hpp" #include "panorama/common/GenericPoint3.hpp" + #include "panorama/common/GenericSize2.hpp" #include "panorama/common/GenericRGBColor.hpp" #include "panorama/common/GenericRGBAColor.hpp" *************** *** 49,52 **** --- 50,54 ---- typedef GenericPoint2<NumberType> Point2; typedef GenericPoint3<NumberType> Point3; + typedef GenericSize2<NumberType> Size2; typedef GenericRGBColor<NumberType> RGBColor; typedef GenericRGBAColor<NumberType> RGBAColor; --- NEW FILE: GenericLine2.hpp --- /* * $Id: GenericLine2.hpp,v 1.1.2.3 2011/11/06 03:42:06 kpharris Exp $ * * Part of GNU Panorama * Copyright (C) 2010 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #if !defined(PANORAMA_GENERICLINE2_HPP) #define PANORAMA_GENERICLINE2_HPP #include "panorama/common/GenericPoint2.hpp" #include "panorama/common/GenericVector2.hpp" #include "panorama/common/Interval.hpp" #include <limits> namespace panorama { /** * * A simple 2d line. * * @author Kevin Harris <kph...@us...> * @version $Revision: 1.1.2.3 $ * */ template<class T> class GenericLine2 { protected: GenericPoint2<T> m_origin; GenericVector2<T> m_direction; Interval<T> m_limits; public: // This tag allows use in the StringDumpable.hpp toString functions // without requiring the overridden virtual functions. typedef bool CanBeStringDumpedTag; GenericLine2(); GenericLine2(const GenericPoint2<T>& o, const GenericVector2<T>& v, const Interval<T>& limits = Interval<T>( numeric_limits<T>::min(), numeric_limits<T>::max() )); GenericLine2(const GenericPoint2<T>& p1, const GenericPoint2<T>& p2); virtual ~GenericLine2(); GenericLine2(const GenericLine2& old); GenericLine2& operator= (const GenericLine2& old); GenericPoint2<T> o() const { return m_origin; } GenericPoint2<T> origin() const { return m_origin; } GenericVector2<T> v() const { return m_direction; } GenericVector2<T> direction() const { return m_direction; } GenericPoint2<T> minimum() const { return(m_origin + m_limits.begin() * direction()); } GenericPoint2<T> maximum() const { return(m_origin + m_limits.end() * direction()); } GenericPoint2<T> point_at(const T& t) const { return(m_origin + direction() * t); } bool infinite() const { // Yes, I know that floating-point comparisons of this sort is usually bad, // but if they set it to something other than the default, this should // fail, so this wouldn't be infinite. return ( (m_limits.begin() <= -numeric_limits<T>::max()) && (m_limits.end() >= numeric_limits<T>::max()) ); } Interval<T> limits() const { return m_limits; } template<typename U> bool inside(U u) const { return m_limits.inside(u); } // Functions required for the tag-based toString interface void collectInternalMembers(MemberStringDumpCollector& collector) const; blocxx::String toString(const Indentation& indent = Indentation(), StringDumpable::PrefixType prefix = StringDumpable::E_PREFIX_NONE ) const; blocxx::String name() const { return "Line2"; } }; // class GenericLine2 template<class T> GenericLine2<T>::GenericLine2(): m_origin(), m_direction(), m_limits( -numeric_limits<T>::max(), numeric_limits<T>::max ) { } // GenericLine2() template<class T> GenericLine2<T>::GenericLine2(const GenericPoint2<T>& o, const GenericVector2<T>& v, const Interval<T>& limits): m_origin(o), m_direction(v), m_limits(limits) { } // GenericLine2() template<class T> GenericLine2<T>::GenericLine2(const GenericPoint2<T>& p1, const GenericPoint2<T>& p2): m_origin(p1), m_direction(p2 - p1), m_limits( numeric_limits<T>::min(), T(1) - numeric_limits<T>::epsilon() ) { } // GenericLine2() template<class T> GenericLine2<T>::~GenericLine2() { } // ~GenericLine2() template<class T> GenericLine2<T>::GenericLine2(const GenericLine2<T>& old): m_origin(old.m_origin), m_direction(old.m_direction), m_limits(old.m_limits) { } // GenericLine2(GenericLine2) template<class T> GenericLine2<T>& GenericLine2<T>::operator= (const GenericLine2<T>& old) { // Generic check for self-assignment if( &old != this ) { m_origin = old.m_origin; m_direction = old.m_direction; m_limits = old.m_limits; } return(*this); } // GenericLine2::operator=(GenericLine2) template <class T> void GenericLine2<T>::collectInternalMembers(MemberStringDumpCollector& collector) const { collector.addMember("origin", o()); collector.addMember("direction", v()); collector.addMember("limits", limits()); } template <class T> blocxx::String GenericLine2<T>::toString(const Indentation& indent, StringDumpable::PrefixType prefix) const { blocxx::String tag; if( prefix == StringDumpable::E_PREFIX_CLASSNAME ) { tag = GenericLine2<T>::name(); } return indent.initial() + tag + "|" + panorama::toString(o(), indent.indentInside(), prefix) + "," + panorama::toString(v(), indent.indentInside(), prefix) + "," + panorama::toString(limits(), indent.indentInside(), prefix) + "|"; } } // namespace panorama #endif /* !defined(PANORAMA_GENERICLINE2_HPP) */ |
From: Kevin H. <kph...@us...> - 2011-11-06 03:41:37
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv1381 Added Files: Tag: panorama_0_19 TextUtils.cpp TextUtils.hpp Log Message: Adding text functions. --- NEW FILE: TextUtils.cpp --- /* * $Id: TextUtils.cpp,v 1.1.2.1 2011/11/06 03:41:35 kpharris Exp $ * * Part of GNU Panorama * Copyright (C) 2010 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "panorama/common/TextUtils.hpp" namespace graphlib { void skipSpaces(const char*& text) { if( text ) { while( isspace(*text) ) { ++text; } } } void skipSpaces(const char*& text, unsigned& len) { if( text ) { while( (len > 0) && isspace(*text) ) { ++text; --len; } } } unsigned lengthToNewline(const char* str) { unsigned length = 0; if( str ) { for(; str[length] && (str[length] != '\n'); ++length ) { } } return length; } unsigned lengthToNewline(const char* str, unsigned len) { unsigned length = 0; if( str ) { for(; (length < len) && str[length] && (str[length] != '\n'); ++length ) { } } return length; } unsigned long dehexify(const char* str, unsigned length) { unsigned long retval = 0; if( str ) { while(*str && length > 0) { if( (*str >= '0') && (*str <= '9') ) { retval = (retval << 4) | (0 + unsigned(*str - '0')); } else if( (*str >= 'a') && (*str <= 'f') ) { retval = (retval << 4) | (10 + unsigned(*str - 'a')); } else if( (*str >= 'A') && (*str <= 'F') ) { retval = (retval << 4) | (10 + unsigned(*str - 'A')); } else { break; } ++str; --length; } } return retval; } } --- NEW FILE: TextUtils.hpp --- /* * $Id: TextUtils.hpp,v 1.1.2.1 2011/11/06 03:41:35 kpharris Exp $ * * Part of GNU Panorama * Copyright (C) 2010 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #if !defined(PANORAMA_TEXT_UTILS_HPP) #define PANORAMA_TEXT_UTILS_HPP /** * @author Kevin Harris */ #include <ctype.h> namespace panorama { // Advance the pointer to the next spot beyond whitespace. void skipSpaces(const char*& text); void skipSpaces(const char*& text, unsigned& len); unsigned lengthToNewline(const char* str); unsigned lengthToNewline(const char* str, unsigned len); unsigned long dehexify(const char* str, unsigned length); template<typename T> bool readInteger(const char*& text, T& value) { if( text ) { skipSpaces(text); value = T(0); const char* current = text; while( *current && isdigit(*current) ) { value = value * 10 + (*current - '0'); ++current; } // If we hit the end of the text or hit some whitespace, we ate it completely. if( (current != text) && (!*current || isspace(*current)) ) { text = current; return true; } } return false; } template<typename T> bool readInteger(const char*& text, unsigned& length, T& value) { if( text && length > 0 ) { skipSpaces(text); value = T(0); const char* current = text; unsigned len = length; while( (len > 0) && *current && isdigit(*current) ) { value = value * 10 + (*current - '0'); ++current; --len; } // If we hit the end of the text or hit some whitespace, we ate it completely. if( (current != text) && (!*current || isspace(*current)) ) { length = len; text = current; return true; } } return false; } } // namespace panorama #endif /* !defined(PANORAMA_TEXT_UTILS_HPP) */ |
From: Kevin H. <kph...@us...> - 2011-11-06 03:40:43
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv1253 Modified Files: Tag: panorama_0_19 GenericCoord3.hpp Log Message: Being explicit in the constructor. Index: GenericCoord3.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericCoord3.hpp,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -C2 -d -r1.1.2.4 -r1.1.2.5 *** GenericCoord3.hpp 3 Mar 2010 17:54:10 -0000 1.1.2.4 --- GenericCoord3.hpp 6 Nov 2011 03:40:41 -0000 1.1.2.5 *************** *** 74,78 **** typedef T base; ! GenericCoord3() { } --- 74,78 ---- typedef T base; ! GenericCoord3():coords(T(), T(), T()) { } |
From: Kevin H. <kph...@us...> - 2011-11-06 03:40:18
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv1212 Modified Files: Tag: panorama_0_19 .cvsignore Log Message: Ignoring files. Index: .cvsignore =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/.cvsignore,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** .cvsignore 15 Jun 2009 01:26:18 -0000 1.1.2.2 --- .cvsignore 6 Nov 2011 03:40:16 -0000 1.1.2.3 *************** *** 5,9 **** Makefile.in *.la ! Config.h ! Config.h.in stamp-h1 --- 5,9 ---- Makefile.in *.la ! Config.hpp ! Config.hpp.in stamp-h1 |
From: Kevin H. <kph...@us...> - 2011-11-06 03:39:18
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv1075 Modified Files: Tag: panorama_0_19 GenericRGBAColor.hpp GenericRGBColor.hpp Log Message: Adding more trait info, cleaning up. Index: GenericRGBAColor.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericRGBAColor.hpp,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** GenericRGBAColor.hpp 4 Nov 2011 21:44:30 -0000 1.1.2.3 --- GenericRGBAColor.hpp 6 Nov 2011 03:39:16 -0000 1.1.2.4 *************** *** 29,32 **** --- 29,34 ---- #include <limits> + // FIXME! Add color capabilities + namespace panorama { *************** *** 36,39 **** --- 38,45 ---- static T min() throw() { return 0; } static T max() throw() { return std::numeric_limits<T>::is_exact ? std::numeric_limits<T>::max() : T(1); } + static T clamp(T t, T tmin, T tmax) { return std::max(std::min(t, tmax), tmin); } + static T clamp(T t) { return clamp(t, min(), max()); } + + static const bool have_alpha = true; enum COLOR_VALUES *************** *** 48,51 **** --- 54,61 ---- static T min() throw() { return 0; } static T max() throw() { return std::numeric_limits<T>::is_exact ? std::numeric_limits<T>::max() : T(1); } + static T clamp(T t, T tmin, T tmax) { return std::max(std::min(t, tmax), tmin); } + static T clamp(T t) { return clamp(t, min(), max()); } + + static const bool have_alpha = true; enum COLOR_VALUES *************** *** 87,90 **** --- 97,101 ---- public: typedef T number_type; + typedef ColorTraits color_traits_type; // This tag allows use in the StringDumpable.hpp toString functions *************** *** 100,103 **** --- 111,116 ---- }; + static const bool HasAlpha = true; + protected: T components[4]; ///< Components of RGBA in an 'array' *************** *** 283,290 **** GenericRGBAColor<T, ColorTraits>& GenericRGBAColor<T, ColorTraits>::operator *=(T factor) { ! components[0] *= factor; ! components[1] *= factor; ! components[2] *= factor; ! components[3] *= factor; return *this; } // GenericRGBAColor::operator*=(T) --- 296,306 ---- GenericRGBAColor<T, ColorTraits>& GenericRGBAColor<T, ColorTraits>::operator *=(T factor) { ! components[ColorTraits::R] *= factor; ! components[ColorTraits::G] *= factor; ! components[ColorTraits::B] *= factor; ! ! // multiply the OPACITY by the factor, not the transparency. ! T newalpha = ColorTraits::max() - (ColorTraits::max() - components[ColorTraits::A]) * factor; ! components[ColorTraits::A] = ColorTraits::clamp(newalpha); return *this; } // GenericRGBAColor::operator*=(T) Index: GenericRGBColor.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericRGBColor.hpp,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** GenericRGBColor.hpp 4 Nov 2011 21:44:30 -0000 1.1.2.2 --- GenericRGBColor.hpp 6 Nov 2011 03:39:16 -0000 1.1.2.3 *************** *** 27,30 **** --- 27,32 ---- #include <limits> + // FIXME! Add color capabilities + namespace panorama { *************** *** 32,37 **** --- 34,43 ---- struct RGBColorTraits { + typedef T value_type; static T min() throw() { return 0; } static T max() throw() { return std::numeric_limits<T>::is_exact ? std::numeric_limits<T>::max() : T(1); } + static T clamp(T t, T tmin, T tmax) { return std::max(std::min(t, tmax), tmin); } + static T clamp(T t) { return clamp(t, min(), max()); } + static const bool have_alpha = false; enum COLOR_VALUES *************** *** 44,49 **** --- 50,60 ---- struct BGRColorTraits { + typedef T value_type; static T min() throw() { return 0; } static T max() throw() { return std::numeric_limits<T>::is_exact ? std::numeric_limits<T>::max() : T(1); } + static T clamp(T t, T tmin, T tmax) { return std::max(std::min(t, tmax), tmin); } + static T clamp(T t) { return clamp(t, min(), max()); } + + static const bool have_alpha = false; enum COLOR_VALUES *************** *** 85,88 **** --- 96,100 ---- public: typedef T number_type; + typedef ColorTraits color_traits_type; // This tag allows use in the StringDumpable.hpp toString functions *************** *** 97,100 **** --- 109,114 ---- }; + static const bool HasAlpha = false; + protected: T components[3]; ///< Components of RGB in an 'array' |
From: Kevin H. <kph...@us...> - 2011-11-06 03:38:42
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv32748 Added Files: Tag: panorama_0_19 GenericSize2.hpp Log Message: Adding a generic size type for 2d objects. --- NEW FILE: GenericSize2.hpp --- /* * $Id: GenericSize2.hpp,v 1.1.2.1 2011/11/06 03:38:39 kpharris Exp $ * * Part of "Panorama" a playground for graphics development * Copyright (C) 2003 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #if !defined(PANORAMA__GENERICSIZE2_HPP) #define PANORAMA__GENERICSIZE2_HPP /* GenericSize2.hpp A representation of a size with width and height. */ #include "panorama/common/GenericCoord2.hpp" #include "panorama/common/GenericVector2.hpp" namespace panorama { template <class T> class GenericSize2: private GenericCoord2<T> { public: // This tag allows use in the StringDumpable.hpp toString functions // without requiring the overridden virtual functions. typedef bool CanBeStringDumpedTag; using GenericCoord2<T>::COORD_VALUES; using GenericCoord2<T>::X; using GenericCoord2<T>::Y; typedef T base; inline GenericSize2():GenericCoord2<T>() { } inline GenericSize2(T width, T height): GenericCoord2<T>(width,height) { } inline explicit GenericSize2(const GenericCoord2<T>& c): GenericCoord2<T>(c) { } inline GenericSize2(const GenericSize2<T>& p): GenericCoord2<T>(p) { } inline void set(T width, T height) { GenericCoord2<T>::set(width,height); } GenericCoord2<T> getcoord() const { return GenericCoord2<T>(width(), height()); } /* Accessors */ inline T& operator[](int coord_index) { return(GenericCoord2<T>::operator[](coord_index)); } inline T operator[](int coord_index) const { return(GenericCoord2<T>::operator[](coord_index)); } T& width() { return(GenericCoord2<T>::x()); } T width() const { return(GenericCoord2<T>::x()); } T& height() { return(GenericCoord2<T>::y()); } T height() const { return(GenericCoord2<T>::y()); } GenericSize2<T>& operator=(const GenericSize2<T>& p); GenericSize2<T>& operator+=(const GenericVector2<T>& v1); GenericSize2<T>& operator-=(const GenericVector2<T>& v1); void collectInternalMembers(MemberStringDumpCollector& collector) const; blocxx::String toString(const Indentation& indent = Indentation(), StringDumpable::PrefixType prefix = StringDumpable::E_PREFIX_NONE ) const; blocxx::String name() const { return "Size2"; } }; // class GenericSize2 template <class T> inline GenericSize2<T>& GenericSize2<T>::operator=(const GenericSize2<T>& p) { set( p.width(), p.height() ); return *this; } template <class T> inline GenericSize2<T>& GenericSize2<T>::operator+=(const GenericVector2<T>& v1) { set( width() + v1.x(), height() + v1.y() ); return *this; } template <class T> inline GenericSize2<T>& GenericSize2<T>::operator-=(const GenericVector2<T>& v1) { set( width() - v1.x(), height() - v1.y() ); return *this; } template <class T> inline GenericVector2<T> operator-(const GenericSize2<T>& p1, const GenericSize2<T>& p2) { return GenericVector2<T>(p1.width() - p2.width(), p1.height() - p2.height()); } template <class T> inline GenericSize2<T> operator+(const GenericSize2<T>& p1, const GenericVector2<T>& v1) { return GenericSize2<T>(p1.width() + v1.x(), p1.height() + v1.y()); } template <class T> inline GenericSize2<T> operator-(const GenericSize2<T>& p1, const GenericVector2<T>& v1) { return GenericSize2<T>(p1.width() - v1.x(), p1.height() - v1.y()); } template <class T> inline T averageComponent(const GenericSize2<T>& v) { return((v.width() + v.height()) / 2); } template <class T> inline T maxComponent(const GenericSize2<T>& v) { return(std::max(v.width(), v.height())); } template <class T> void GenericSize2<T>::collectInternalMembers(MemberStringDumpCollector& collector) const { GenericCoord2<T>::collectInternalMembers(collector); } template <class T> blocxx::String GenericSize2<T>::toString(const Indentation& indent, StringDumpable::PrefixType prefix) const { blocxx::String tag; if( prefix == StringDumpable::E_PREFIX_CLASSNAME ) { tag = GenericSize2<T>::name(); } return indent.initial() + tag + "(" + panorama::toString(width(), indent.indentInside(), prefix) + "," + panorama::toString(height(), indent.indentInside(), prefix) + ")"; } } // namespace panorama #endif /* !defined(PANORAMA__GenericSize2_HPP) */ |
From: Kevin H. <kph...@us...> - 2011-11-06 03:37:50
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv32648 Modified Files: Tag: panorama_0_19 Raster.hpp Added Files: Tag: panorama_0_19 GenericRectangle.hpp Log Message: Adding rectangle-based operations. Index: Raster.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/Raster.hpp,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** Raster.hpp 23 Feb 2009 04:56:13 -0000 1.1.2.2 --- Raster.hpp 6 Nov 2011 03:37:48 -0000 1.1.2.3 *************** *** 28,31 **** --- 28,32 ---- #include "panorama/common/BaseClass.hpp" + #include "panorama/common/GenericRectangle.hpp" #include "blocxx/Array.hpp" // for blocxx::OutOfBoundsException #include "blocxx/Exception.hpp" *************** *** 93,96 **** --- 94,102 ---- const Scanline<T> operator[](unsigned y)const; + bool inside(int x, int y) const + { + return (y >= 0) && (y < int(height)) && (x >= 0) && (x < int(width)); + } + /** * Return a Raster which contains the elements in the range *************** *** 102,105 **** --- 108,113 ---- unsigned x2, unsigned y2) const; + Raster<T> subRaster(const GenericRectangle<unsigned>& rect) const; + /** * Resize the current Raster to the given width and height. If preserve is *************** *** 152,156 **** /** Get the width of the raster */ ! unsigned getWidth() const { return width; --- 160,164 ---- /** Get the width of the raster */ ! unsigned getWidth() const { return width; *************** *** 272,278 **** // ********************************************************************** - //-------------------------------------- - // Default constructor for class Raster - //-------------------------------------- template <class T> Raster<T>::Raster(): --- 280,283 ---- *************** *** 282,288 **** } // Raster() - //-------------------------------------- - // Default constructor for class Raster - //-------------------------------------- template <class T> Raster<T>::Raster(unsigned w, unsigned h): --- 287,290 ---- *************** *** 303,309 **** } // Raster(unsigned,unsigned) - //----------------------------- - // Destructor for class Raster - //----------------------------- template <class T> Raster<T>::~Raster() --- 305,308 ---- *************** *** 316,322 **** } // ~Raster() - //----------------------------------- - // Copy constructor for class Raster - //----------------------------------- template <class T> Raster<T>::Raster(const Raster<T>& old) --- 315,318 ---- *************** *** 347,354 **** } // Raster(Raster) - - //-------------------------------------- - // Assignment operator for class Raster - //-------------------------------------- template <class T> Raster<T>& Raster<T>::operator= (const Raster<T>& old) --- 343,346 ---- *************** *** 368,371 **** --- 360,364 ---- } // Raster::operator=(Raster) + #if !defined(NO_BOUNDS_CHECKING) #define X_WITHIN_WIDTH(x) \ do \ *************** *** 386,389 **** --- 379,386 ---- } \ while(0) + #else + #define X_WITHIN_WIDTH(x) + #define Y_WITHIN_HEIGHT(y) + #endif template<class T> *************** *** 423,426 **** --- 420,429 ---- template <class T> + Raster<T> Raster<T>::subRaster(const GenericRectangle<unsigned>& rect) const + { + return subRaster(rect.left, rect.top, rect.right, rect.bottom); + } + + template <class T> Raster<T> Raster<T>::subRaster(unsigned x1, unsigned y1, unsigned x2, unsigned y2) const --- NEW FILE: GenericRectangle.hpp --- /* * $Id: GenericRectangle.hpp,v 1.1.2.1 2011/11/06 03:37:48 kpharris Exp $ * * Part of "Panorama" a playground for graphics development * Copyright (C) 2003 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #if !defined(PANORAMA_GENERIC_RECTANGLE_HPP) #define PANORAMA_GENERIC_RECTANGLE_HPP #include "panorama/common/GenericSize2.hpp" #include "panorama/common/GenericPoint2.hpp" #include "panorama/common/GenericVector2.hpp" #include "panorama/common/Fuzzy.hpp" namespace panorama { /** * * A simple Rectangle class. * * @author Kevin Harris <kph...@us...> * @version $Revision: 1.1.2.1 $ * */ template<typename base> struct GenericRectangle { enum Components { E_Left = 0, E_Right, E_Top, E_Bottom }; union { struct { base left; base right; base top; base bottom; }; base components[4]; }; GenericRectangle(base l, base r, base t, base b); virtual ~GenericRectangle(); GenericRectangle(const GenericRectangle& old); GenericRectangle& operator= (const GenericRectangle& old); base width() const { return std::abs(right - left); } base height() const { return std::abs(bottom - top); } static GenericRectangle makeCenteredOn(const GenericPoint2<base>& center, const GenericSize2<base>& size); base& operator[](Components c) { return components[c]; } base operator[](Components c) const { return components[c]; } }; // class GenericRectangle template<typename base> GenericRectangle<base>::GenericRectangle(base l, base r, base t, base b): left(l), right(r), top(t), bottom(b) { } // GenericRectangle() template<typename base> GenericRectangle<base>::~GenericRectangle() { } // ~GenericRectangle() template<typename base> GenericRectangle<base>::GenericRectangle(const GenericRectangle<base>& old): left(old.left), right(old.right), top(old.top), bottom(old.bottom) { } // GenericRectangle(GenericRectangle) template<typename base> GenericRectangle<base>& GenericRectangle<base>::operator= (const GenericRectangle<base>& old) { // Generic check for self-assignment if( &old != this) { left = old.left; right = old.right; top = old.top; bottom = old.bottom; } return (*this); } // GenericRectangle::operator=(GenericRectangle) template<typename base> GenericRectangle<base> GenericRectangle<base>::makeCenteredOn(const GenericPoint2<base>& center, const GenericSize2<base>& size) { return GenericRectangle<base>( center.x() - size.width()/base(2), center.x() + size.width()/base(2), center.y() + size.height()/base(2), center.y() - size.height()/base(2)); } template<typename base> bool operator==(const GenericRectangle<base>& lhs, const GenericRectangle<base>& rhs) { return fuzzyEquals(lhs.left, rhs.left) && fuzzyEquals(lhs.right, rhs.right) && fuzzyEquals(lhs.top, rhs.top) && fuzzyEquals(lhs.bottom, rhs.bottom); } template<typename base> inline GenericRectangle<base> operator+(const GenericRectangle<base>& rect, const GenericVector2<base>& vec) { return GenericRectangle<base>( rect.left + vec.x(), rect.right + vec.x(), rect.top + vec.y(), rect.bottom + vec.y()); } template<typename base> bool operator!=(const GenericRectangle<base>& lhs, const GenericRectangle<base>& rhs) { return !(lhs == rhs); } template <typename base> bool intersecting(const GenericRectangle<base>& r1, const GenericRectangle<base>& r2) { if( fuzzyGreater(r2.left, r1.right) ) { return false; } if( fuzzyGreater(r1.left, r2.right) ) { return false; } if( fuzzyGreater(r1.bottom, r2.top) ) { return false; } if( fuzzyGreater(r2.bottom, r1.top) ) { return false; } return true; } template <typename base> GenericPoint2<base> center(const GenericRectangle<base>& r) { return GenericPoint2<base>( (r.left + r.right) / 2, (r.top + r.bottom) / 2); } } // namespace panorama #endif /* !defined(PANORAMA_GENERIC_RECTANGLE_HPP) */ |
From: Kevin H. <kph...@us...> - 2011-11-06 03:37:12
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv32563 Modified Files: Tag: panorama_0_19 GenericPoint2.hpp GenericCoord2.hpp Log Message: Fuzzily comparing equality. Index: GenericPoint2.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericPoint2.hpp,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** GenericPoint2.hpp 3 Mar 2010 17:54:10 -0000 1.1.2.2 --- GenericPoint2.hpp 6 Nov 2011 03:37:10 -0000 1.1.2.3 *************** *** 42,45 **** --- 42,46 ---- #include "panorama/common/GenericCoord2.hpp" #include "panorama/common/GenericVector2.hpp" + #include "panorama/common/Fuzzy.hpp" namespace panorama *************** *** 174,177 **** --- 175,184 ---- return(std::max(v.x(), v.y())); } + + template <class T> + inline GenericPoint2<T> midpoint(const GenericPoint2<T>& p1, const GenericPoint2<T>& p2) + { + return GenericPoint2<T>((p1.x() + p2.x()) / 2, (p1.y() + p2.y()) / 2); + } template <class T> *************** *** 198,201 **** --- 205,220 ---- } + template <class T> + bool operator==(const GenericPoint2<T>& lhs, const GenericPoint2<T>& rhs) + { + return fuzzyEquals(lhs.x(), rhs.x()) && fuzzyEquals(lhs.y(), rhs.y()); + } + + template <class T> + bool operator!=(const GenericPoint2<T>& lhs, const GenericPoint2<T>& rhs) + { + return !(lhs == rhs); + } + } // namespace panorama Index: GenericCoord2.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericCoord2.hpp,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -C2 -d -r1.1.2.4 -r1.1.2.5 *** GenericCoord2.hpp 3 Mar 2010 17:54:09 -0000 1.1.2.4 --- GenericCoord2.hpp 6 Nov 2011 03:37:10 -0000 1.1.2.5 *************** *** 48,51 **** --- 48,52 ---- #include <algorithm> #include "panorama/common/StringDumpable.hpp" + #include "panorama/common/Fuzzy.hpp" namespace panorama *************** *** 67,71 **** typedef T base; ! GenericCoord2() { } --- 68,72 ---- typedef T base; ! GenericCoord2():coords(T(), T()) { } *************** *** 379,382 **** --- 380,395 ---- } + template <class T> + bool operator==(const GenericCoord2<T>& lhs, const GenericCoord2<T>& rhs) + { + return fuzzyEquals(lhs.x(), rhs.x()) && fuzzyEquals(lhs.y(), rhs.y()); + } + + template <class T> + bool operator!=(const GenericCoord2<T>& lhs, const GenericCoord2<T>& rhs) + { + return !(lhs == rhs); + } + } // namespace panorama |
From: Kevin H. <kph...@us...> - 2011-11-06 03:34:58
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv32275 Added Files: Tag: panorama_0_19 Fuzzy.hpp Log Message: Adding a "fuzzy" compare to stand in place of what used to be an epsilon. --- NEW FILE: Fuzzy.hpp --- /* * $Id: Fuzzy.hpp,v 1.1.2.1 2011/11/06 03:34:56 kpharris Exp $ * * Part of GNU Panorama * Copyright (C) 2011 Kevin Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #if !defined(PANORAMA_FUZZY_HPP) #define PANORAMA_FUZZY_HPP #include <limits> namespace panorama { const int FUZZ_FACTOR = 4; template <typename T> inline T fuzzy(const T& t) { if( std::numeric_limits<T>::is_exact ) { return t; } return t + (FUZZ_FACTOR * std::numeric_limits<T>::epsilon() ); } template <typename T> inline bool fuzzyLess(const T& t1, const T& t2) { return t1 < fuzzy(t2); } template <typename T> inline bool fuzzyGreater(const T& t1, const T& t2) { return fuzzy(t1) > t2; } template <typename T> inline bool fuzzyEquals(const T& t1, const T& t2) { if( std::numeric_limits<T>::is_exact ) { return t1 == t2; } return (fuzzy(t1) >= t2) && (fuzzy(t2 >= t1)); } } #endif /* !defined(PANORAMA_FUZZY_HPP) */ |
From: Kevin H. <kph...@us...> - 2011-11-06 03:34:12
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv32198 Modified Files: Tag: panorama_0_19 BaseClass.hpp Log Message: Making base classes virtual. Index: BaseClass.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/BaseClass.hpp,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** BaseClass.hpp 22 Feb 2009 10:09:56 -0000 1.1.2.1 --- BaseClass.hpp 6 Nov 2011 03:34:10 -0000 1.1.2.2 *************** *** 41,45 **** * */ ! class BaseClass : public StringDumpable, public Cloneable { public: --- 41,45 ---- * */ ! class BaseClass : public virtual StringDumpable, public virtual Cloneable { public: |
From: Kevin H. <kph...@us...> - 2011-11-06 03:33:11
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv32092 Modified Files: Tag: panorama_0_19 Capabilities.cpp Capabilities.hpp Log Message: Adding color and image capabilities. Index: Capabilities.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/Capabilities.hpp,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** Capabilities.hpp 19 Jul 2009 17:32:34 -0000 1.1.2.1 --- Capabilities.hpp 6 Nov 2011 03:33:08 -0000 1.1.2.2 *************** *** 85,89 **** LOCAL_SYSTEM_CALCULATION = 32, TIME_SAMPLING = 64, ! ALL = TIME_SAMPLING * 2 - 1 ); --- 85,89 ---- LOCAL_SYSTEM_CALCULATION = 32, TIME_SAMPLING = 64, ! ALL = (TIME_SAMPLING * 2) - 1 ); *************** *** 97,101 **** IMPLICIT = 32, SIMPLE = 64, // A simple shape with fast intersection test (sphere, plane, etc). ! ALL = 2 * SIMPLE - 1 ); --- 97,101 ---- IMPLICIT = 32, SIMPLE = 64, // A simple shape with fast intersection test (sphere, plane, etc). ! ALL = (2 * SIMPLE) - 1 ); *************** *** 106,112 **** REFLECTIVE = 4, // specular reflection TRANSMISSIVE = 8, // implies refraction of some kind ! ALL = 2 * TRANSMISSIVE - 1 ); ! } // namespace amethyst #endif /* !defined(PANORAMA_CAPABILITIES_HPP) */ --- 106,130 ---- REFLECTIVE = 4, // specular reflection TRANSMISSIVE = 8, // implies refraction of some kind ! ALL = (2 * TRANSMISSIVE) - 1 ); ! CAPABILITIES_DECLARATION(ColorCapabilities, ! NONE = 0, ! GRAYSCALE = 1, // mono color ! RGB = 2, // tri-color ! TRANSPARENT = 4, // supports alpha ! SPECTRA = 8, // spectral function or map as a color value ! ALL = (2 * SPECTRA) - 1 ! ); ! ! CAPABILITIES_DECLARATION(ImageCapabilities, ! NONE = 0, ! LOSSLESS = 1, // Lossless image format ! COMPRESSED = 2, ! HIGH_BITWIDTH = 4, // 12 or more bits per channel ! BINARY = 8, ! ALL = (2 * BINARY) - 1 ! ); ! ! } // namespace panorama #endif /* !defined(PANORAMA_CAPABILITIES_HPP) */ Index: Capabilities.cpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/Capabilities.cpp,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** Capabilities.cpp 19 Jul 2009 17:32:34 -0000 1.1.2.1 --- Capabilities.cpp 6 Nov 2011 03:33:08 -0000 1.1.2.2 *************** *** 32,40 **** if( !s.empty() ) { ! s += ", " + item; } else { ! s += item; } } --- 32,40 ---- if( !s.empty() ) { ! s += ", " + item; } else { ! s += item; } } *************** *** 235,237 **** --- 235,309 ---- CAPABILITIES_DEFINITION(MaterialCapabilities); + /////////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////////// + + blocxx::String ColorCapabilities::toString(const Indentation& indent, StringDumpable::PrefixType prefix) const + { + blocxx::String retval; + + ADD_TO_RESULT_LONG(ColorCapabilities::GRAYSCALE, "Grayscale"); + ADD_TO_RESULT_LONG(ColorCapabilities::RGB, "RGB"); + ADD_TO_RESULT_LONG(ColorCapabilities::TRANSPARENT, "Transparent"); + ADD_TO_RESULT_LONG(ColorCapabilities::SPECTRA, "Spectra"); + + if( retval.empty() ) + { + retval = "NONE"; + } + + return "{" + retval + "}"; + } + + + blocxx::String ColorCapabilities::toStringShort() const + { + blocxx::String retval; + + ADD_TO_RESULT_SHORT(ColorCapabilities::GRAYSCALE, "G"); + ADD_TO_RESULT_SHORT(ColorCapabilities::RGB, "C"); + ADD_TO_RESULT_SHORT(ColorCapabilities::TRANSPARENT, "A"); + ADD_TO_RESULT_SHORT(ColorCapabilities::SPECTRA, "S"); + + return retval; + } + + CAPABILITIES_DEFINITION(ColorCapabilities); + + /////////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////////// + + blocxx::String ImageCapabilities::toString(const Indentation& indent, StringDumpable::PrefixType prefix) const + { + blocxx::String retval; + + ADD_TO_RESULT_LONG(ImageCapabilities::LOSSLESS, "Lossless"); + ADD_TO_RESULT_LONG(ImageCapabilities::COMPRESSED, "Compressed"); + ADD_TO_RESULT_LONG(ImageCapabilities::HIGH_BITWIDTH, "High Bitwidth"); + ADD_TO_RESULT_LONG(ImageCapabilities::BINARY, "Binary"); + + if( retval.empty() ) + { + retval = "NONE"; + } + + return "{" + retval + "}"; + } + + + blocxx::String ImageCapabilities::toStringShort() const + { + blocxx::String retval; + + ADD_TO_RESULT_SHORT(ImageCapabilities::LOSSLESS, "L"); + ADD_TO_RESULT_SHORT(ImageCapabilities::COMPRESSED, "C"); + ADD_TO_RESULT_SHORT(ImageCapabilities::HIGH_BITWIDTH, "H"); + ADD_TO_RESULT_SHORT(ImageCapabilities::BINARY, "B"); + + return retval; + } + + CAPABILITIES_DEFINITION(ImageCapabilities); + } // namespace amethyst |
From: Kevin H. <kph...@us...> - 2011-11-06 03:30:53
|
Update of /cvsroot/panorama/panorama In directory vz-cvs-3.sog:/tmp/cvs-serv31919 Modified Files: Tag: panorama_0_19 configure.in Log Message: Adding some image based functionality. Still a work in progress. Index: configure.in =================================================================== RCS file: /cvsroot/panorama/panorama/configure.in,v retrieving revision 1.25.4.10 retrieving revision 1.25.4.11 diff -C2 -d -r1.25.4.10 -r1.25.4.11 *** configure.in 15 Jun 2009 01:26:18 -0000 1.25.4.10 --- configure.in 6 Nov 2011 03:30:51 -0000 1.25.4.11 *************** *** 3,7 **** AC_INIT(panorama, 0.19, pan...@li...) AM_INIT_AUTOMAKE(panorama, 0.19) ! AM_CONFIG_HEADER(src/common/Config.h) AC_PREREQ(2.57) --- 3,7 ---- AC_INIT(panorama, 0.19, pan...@li...) AM_INIT_AUTOMAKE(panorama, 0.19) ! AM_CONFIG_HEADER(src/common/Config.hpp) AC_PREREQ(2.57) *************** *** 38,41 **** --- 38,47 ---- dnl Figure out which compiler flags can be used + AC_MSG_CHECKING(for C++0x) + AC_ARG_ENABLE(c++0x, [ --enable-c++0x Enable C++0x support], ENABLE_CXX0X=$enableval, ENABLE_CXX0X="no") + AC_MSG_RESULT($ENABLE_CXX0X) + if test $ENABLE_CXX0X = "yes"; then + PANORAMA_CHECK_COMPILER_FLAG(std=c++0x,[CXXFLAGS="$CXXFLAGS -std=c++0x"]) + fi PANORAMA_CHECK_COMPILER_FLAG(Wall,[CXXFLAGS="$CXXFLAGS -Wall"]) PANORAMA_CHECK_COMPILER_FLAG(W,[CXXFLAGS="$CXXFLAGS -W"]) *************** *** 597,600 **** --- 603,607 ---- src/Makefile src/common/Makefile + src/graphics/Makefile test/Makefile test/unit/Makefile |
From: Kevin H. <kph...@us...> - 2011-11-06 03:29:11
|
Update of /cvsroot/panorama/panorama/test/unit In directory vz-cvs-3.sog:/tmp/cvs-serv31809/unit Modified Files: Tag: panorama_0_19 .cvsignore Makefile.am Added Files: Tag: panorama_0_19 ImageTestCases.cpp Log Message: Adding tests for the GenericImage class. More need to be added after properly subclassing. Index: .cvsignore =================================================================== RCS file: /cvsroot/panorama/panorama/test/unit/Attic/.cvsignore,v retrieving revision 1.1.2.11 retrieving revision 1.1.2.12 diff -C2 -d -r1.1.2.11 -r1.1.2.12 *** .cvsignore 30 Aug 2010 06:00:50 -0000 1.1.2.11 --- .cvsignore 6 Nov 2011 03:29:08 -0000 1.1.2.12 *************** *** 23,24 **** --- 23,25 ---- Line2TestCases Line3TestCases + ImageTestCases \ No newline at end of file --- NEW FILE: ImageTestCases.cpp --- #define PROVIDE_AUTO_TEST_MAIN #include "blocxx_test/CppUnit/AutoTest.hpp" #include "panorama/graphics/GenericImage.hpp" typedef panorama::GenericImage<int,int> SimpleImage; typedef panorama::GenericRectangle<int> Rectangle; AUTO_UNIT_TEST(simple_raster_ops) { SimpleImage simple(5,6); unitAssert(!simple.empty()); unitAssertEquals(5u, simple.getWidth()); unitAssertEquals(6u, simple.getHeight()); unitAssertEquals(30u, simple.getNumPixels()); const SimpleImage simple2 = simple; unitAssert(!simple2.empty()); unitAssertEquals(5u, simple2.getWidth()); unitAssertEquals(6u, simple2.getHeight()); unitAssertEquals(30u, simple2.getNumPixels()); } AUTO_UNIT_TEST(image_bounds_checks) { SimpleImage image(5,6); { unitAssertThrowsEx(image[6][0], blocxx::OutOfBoundsException); unitAssertThrowsEx(image(0,6), blocxx::OutOfBoundsException); unitAssertThrowsEx(image[0][5], blocxx::OutOfBoundsException); unitAssertThrowsEx(image(5,0), blocxx::OutOfBoundsException); unitAssertThrowsEx(image(5,6), blocxx::OutOfBoundsException); unitAssertNoThrow(image[0][0]); unitAssertNoThrow(image[5][4]); unitAssertNoThrow(image(0,0)); unitAssertNoThrow(image(4,5)); } const SimpleImage image2 = image; { unitAssertThrowsEx(image2[6][0], blocxx::OutOfBoundsException); unitAssertThrowsEx(image2(0,6), blocxx::OutOfBoundsException); unitAssertThrowsEx(image2[0][5], blocxx::OutOfBoundsException); unitAssertThrowsEx(image2(5,0), blocxx::OutOfBoundsException); unitAssertThrowsEx(image2(5,6), blocxx::OutOfBoundsException); unitAssertNoThrow(image2[0][0]); unitAssertNoThrow(image2[5][4]); unitAssertNoThrow(image2(0,0)); unitAssertNoThrow(image2(4,5)); } } namespace { SimpleImage getFilledImage(int width, int height) { SimpleImage retval(width, height); for(int y = 0; y < height; ++y) { panorama::Scanline<int> line = retval[y]; for(int x = 0; x < width; ++x) { line[x] = (x + 1) * (y + 1); } } return retval; } } AUTO_UNIT_TEST(image_reinterpret) { SimpleImage image = getFilledImage(3,3); const int* data = image.reinterpret<const int*>(); unitAssert(data); unitAssertEquals(1, data[0 * 3 + 0]); unitAssertEquals(2, data[0 * 3 + 1]); unitAssertEquals(3, data[0 * 3 + 2]); unitAssertEquals(2, data[1 * 3 + 0]); unitAssertEquals(4, data[1 * 3 + 1]); unitAssertEquals(6, data[1 * 3 + 2]); unitAssertEquals(3, data[2 * 3 + 0]); unitAssertEquals(6, data[2 * 3 + 1]); unitAssertEquals(9, data[2 * 3 + 2]); } AUTO_UNIT_TEST(image_resize_regular) { SimpleImage image = getFilledImage(7,4); unitAssertEquals(28u, image.getNumPixels()); image.resize(2,3); unitAssertEquals(6u, image.getNumPixels()); unitAssertEquals(2u, image.getWidth()); unitAssertEquals(3u, image.getHeight()); // The data must be preserved... unitAssertEquals(1, image(0,0)); unitAssertEquals(2, image(1,0)); unitAssertEquals(2, image(0,1)); unitAssertEquals(4, image(1,1)); unitAssertEquals(3, image(0,2)); unitAssertEquals(6, image(1,2)); } AUTO_UNIT_TEST(image_resize_fill) { SimpleImage image = getFilledImage(2,2); unitAssertEquals(4u, image.getNumPixels()); image.resize(4,4,1,1,-1); unitAssertEquals(16u, image.getNumPixels()); // Verify the fill spots. unitAssertEquals(-1, image(0,0)); unitAssertEquals(-1, image(1,0)); unitAssertEquals(-1, image(2,0)); unitAssertEquals(-1, image(3,0)); unitAssertEquals(-1, image(0,1)); unitAssertEquals(-1, image(3,1)); unitAssertEquals(-1, image(0,2)); unitAssertEquals(-1, image(3,2)); unitAssertEquals(-1, image(0,3)); unitAssertEquals(-1, image(1,3)); unitAssertEquals(-1, image(2,3)); unitAssertEquals(-1, image(3,3)); // Verify the copied data. unitAssertEquals(1, image(1,1)); unitAssertEquals(2, image(2,1)); unitAssertEquals(2, image(1,2)); unitAssertEquals(4, image(2,2)); image.resize(0,0); unitAssert(image.empty()); unitAssertEquals(0u, image.getNumPixels()); // Since the image was zeroed, resizing it with a fill should fill everything. image.resize(3,3,1,1,10); unitAssertEquals(9u, image.getNumPixels()); unitAssertEquals(10, image(0,0)); unitAssertEquals(10, image(1,0)); unitAssertEquals(10, image(2,0)); unitAssertEquals(10, image(0,1)); unitAssertEquals(10, image(1,1)); unitAssertEquals(10, image(2,1)); unitAssertEquals(10, image(0,2)); unitAssertEquals(10, image(1,2)); unitAssertEquals(10, image(2,2)); } AUTO_UNIT_TEST(image_scale) { SimpleImage image = getFilledImage(2,2); unitAssertEquals(4u, image.getNumPixels()); SimpleImage image2 = scaleImage(image, 2); unitAssertEquals(16u, image2.getNumPixels()); unitAssertEquals(1, image2(0,0)); unitAssertEquals(1, image2(1,0)); unitAssertEquals(2, image2(2,0)); unitAssertEquals(2, image2(3,0)); unitAssertEquals(1, image2(0,1)); unitAssertEquals(1, image2(1,1)); unitAssertEquals(2, image2(2,1)); unitAssertEquals(2, image2(3,1)); unitAssertEquals(2, image2(0,2)); unitAssertEquals(2, image2(1,2)); unitAssertEquals(4, image2(2,2)); unitAssertEquals(4, image2(3,2)); unitAssertEquals(2, image2(0,3)); unitAssertEquals(2, image2(1,3)); unitAssertEquals(4, image2(2,3)); unitAssertEquals(4, image2(3,3)); } AUTO_UNIT_TEST(image_subimage) { SimpleImage image = getFilledImage(10,10); // Bad... { unitAssertThrows(image.subImage(1,0,0,1)); // x1 > x2 unitAssertThrows(image.subImage(0,1,1,0)); // y1 > y2 unitAssertThrows(image.subImage(0,0,1,10)); // y2 >= height unitAssertThrows(image.subImage(0,0,1,11)); // y2 >= height unitAssertThrows(image.subImage(0,0,10,1)); // x1 >= width unitAssertThrows(image.subImage(0,0,11,1)); // x1 >= width } { // The one pixel at 0,0 SimpleImage r1 = image.subImage(0,0,0,0); unitAssertEquals(1u, r1.getWidth()); unitAssertEquals(1u, r1.getHeight()); unitAssertEquals(1u, r1.getNumPixels()); unitAssertEquals(1, r1(0,0)); } { // Four pixels: (5,5), (6,5), (5,6), (6,6) SimpleImage r1 = image.subImage(5,5,6,6); unitAssertEquals(2u, r1.getWidth()); unitAssertEquals(2u, r1.getHeight()); unitAssertEquals(4u, r1.getNumPixels()); unitAssertEquals(36, r1(0,0)); unitAssertEquals(42, r1(1,0)); unitAssertEquals(42, r1(0,1)); unitAssertEquals(49, r1(1,1)); } } Index: Makefile.am =================================================================== RCS file: /cvsroot/panorama/panorama/test/unit/Attic/Makefile.am,v retrieving revision 1.1.2.11 retrieving revision 1.1.2.12 diff -C2 -d -r1.1.2.11 -r1.1.2.12 *** Makefile.am 30 Aug 2010 06:00:50 -0000 1.1.2.11 --- Makefile.am 6 Nov 2011 03:29:08 -0000 1.1.2.12 *************** *** 18,22 **** IntervalTestCases \ Line2TestCases \ ! Line3TestCases # Put new test source lists here. --- 18,23 ---- IntervalTestCases \ Line2TestCases \ ! Line3TestCases \ ! ImageTestCases # Put new test source lists here. *************** *** 39,42 **** --- 40,44 ---- Line2TestCases_SOURCES = Line2TestCases.cpp Line3TestCases_SOURCES = Line3TestCases.cpp + ImageTestCases_SOURCES = ImageTestCases.cpp # Needed for a new automake *************** *** 59,62 **** --- 61,65 ---- Line2TestCases_LDFLAGS = Line3TestCases_LDFLAGS = + ImageTestCases_LDFLAGS = # |
From: Kevin H. <kph...@us...> - 2011-11-06 02:02:23
|
Update of /cvsroot/panorama/panorama/src/graphics In directory vz-cvs-3.sog:/tmp/cvs-serv23763/graphics Log Message: Directory /cvsroot/panorama/panorama/src/graphics added to the repository --> Using per-directory sticky tag `panorama_0_19' |
From: Kevin H. <kph...@us...> - 2011-11-04 21:44:32
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv22434 Modified Files: Tag: panorama_0_19 GenericRGBAColor.hpp GenericRGBColor.hpp Log Message: Using the MultiMax I just added to BloCxx. Index: GenericRGBAColor.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericRGBAColor.hpp,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** GenericRGBAColor.hpp 30 Aug 2010 07:03:49 -0000 1.1.2.2 --- GenericRGBAColor.hpp 4 Nov 2011 21:44:30 -0000 1.1.2.3 *************** *** 26,29 **** --- 26,30 ---- #include "GenericRGBColor.hpp" #include "Larger.hpp" + #include "blocxx/Compare.hpp" #include <limits> *************** *** 406,410 **** { // FIXME! Max the alpha? ! return std::max(std::max(c.r(), c.g()), c.b()); } --- 407,411 ---- { // FIXME! Max the alpha? ! return blocxx::MultiMax(c.r(), c.g(), c.b()); } Index: GenericRGBColor.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericRGBColor.hpp,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** GenericRGBColor.hpp 30 Aug 2010 06:00:50 -0000 1.1.2.1 --- GenericRGBColor.hpp 4 Nov 2011 21:44:30 -0000 1.1.2.2 *************** *** 24,27 **** --- 24,28 ---- #include "StringDumpable.hpp" + #include "blocxx/Compare.hpp" #include <limits> *************** *** 400,404 **** inline T maxComponent(const GenericRGBColor<T, ColorTraits>& c) { ! return std::max(std::max(c.r(), c.g()), c.b()); } --- 401,405 ---- inline T maxComponent(const GenericRGBColor<T, ColorTraits>& c) { ! return blocxx::MultiMax(c.r(), c.g(), c.b()); } |
From: Kevin H. <kph...@us...> - 2011-11-04 21:43:36
|
Update of /cvsroot/panorama/panorama/src/common In directory vz-cvs-3.sog:/tmp/cvs-serv22219 Modified Files: Tag: panorama_0_19 GenericInterval.hpp Log Message: Greatly simplifying the interval intersection test. Index: GenericInterval.hpp =================================================================== RCS file: /cvsroot/panorama/panorama/src/common/Attic/GenericInterval.hpp,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** GenericInterval.hpp 7 Mar 2010 18:49:12 -0000 1.1.2.1 --- GenericInterval.hpp 4 Nov 2011 21:43:33 -0000 1.1.2.2 *************** *** 218,244 **** } ! // FIXME! Rewrite this to be simpler. ! if( (i1.begin() <= i2.begin()) && (i2.begin() <= i1.end()) ) ! { ! result = GenericInterval<T>(i2.begin(), std::min(i1.end(), i2.end())); ! } ! else if( (i2.begin() <= i1.begin()) && (i1.begin() <= i2.end()) ) ! { ! result = GenericInterval<T>(i1.begin(), std::min(i1.end(), i2.end())); ! } ! else if( (i1.begin() <= i2.end()) && (i2.end() <= i1.end()) ) ! { ! result = GenericInterval<T>(std::max(i1.begin(), i2.begin()), i2.end()); ! } ! else if( (i2.begin() <= i1.end()) && (i1.end() <= i2.end()) ) { ! result = GenericInterval<T>(std::max(i1.begin(), i1.begin()), i1.end()); } else { ! // Is a case here even valid? ! // FIXME: FOOBARBAZ } return result; } // intersection(const GenericInterval&) const --- 218,233 ---- } ! T start = std::max(i1.begin(), i2.begin()); ! T finish = std::min(i1.end(), i2.end()); ! if( start <= finish ) { ! result = GenericInterval<T>(start, finish); } else { ! // No overlap. Will return an empty interval. } + return result; } // intersection(const GenericInterval&) const |
From: Kevin H. <kph...@us...> - 2010-08-30 07:03:57
|
Update of /cvsroot/panorama/panorama/test/unit In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv29125/test/unit Modified Files: Tag: panorama_0_19 RGBAColorTestCases.cpp Log Message: Fixing some tests. Index: RGBAColorTestCases.cpp =================================================================== RCS file: /cvsroot/panorama/panorama/test/unit/Attic/RGBAColorTestCases.cpp,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** RGBAColorTestCases.cpp 30 Aug 2010 06:00:50 -0000 1.1.2.1 --- RGBAColorTestCases.cpp 30 Aug 2010 07:03:49 -0000 1.1.2.2 *************** *** 2,5 **** --- 2,6 ---- #include "blocxx_test/CppUnit/AutoTest.hpp" #include "panorama/common/Types.hpp" + #include "panorama/common/Larger.hpp" using namespace panorama; *************** *** 8,12 **** #define ASSERT_EQUAL(a, b) unitAssertDoublesEqual((a), (b), DELTA) ! AUTO_UNIT_TEST(rgbcolor_string_convert) { // Test the tag-based string conversion operations -- we don't want --- 9,13 ---- #define ASSERT_EQUAL(a, b) unitAssertDoublesEqual((a), (b), DELTA) ! AUTO_UNIT_TEST(rgbacolor_string_convert) { // Test the tag-based string conversion operations -- we don't want *************** *** 31,38 **** unitAssertEquals(color2[3], 7); ! unitAssertEquals("[- 5,7,9,11 -]", panorama::toString(color + color2)); } ! AUTO_UNIT_TEST(rgbcolor_reinterpret) { // This test proves that the structure is packed and double-aligned. If --- 32,40 ---- unitAssertEquals(color2[3], 7); ! // FIXME! No valid conversion yet exists. ! // unitAssertEquals("[- 5,7,9,11 -]", panorama::toString(color + RGBColor(color2))); } ! AUTO_UNIT_TEST(rgbacolor_reinterpret) { // This test proves that the structure is packed and double-aligned. If *************** *** 72,76 **** } ! AUTO_UNIT_TEST(rgbcolor_set_and_get) { RGBAColor c(0,1,2,3); --- 74,78 ---- } ! AUTO_UNIT_TEST(rgbacolor_set_and_get) { RGBAColor c(0,1,2,3); *************** *** 121,128 **** } ! AUTO_UNIT_TEST(rgbcolor_member_operators) { ! RGBAColor colorA(2,5,11); ! RGBAColor colorB(10,20,30); // = { --- 123,130 ---- } ! AUTO_UNIT_TEST(rgbacolor_member_operators) { ! RGBAColor colorA(2,5,11, 0.5); ! RGBAColor colorB(10,20,30, 0.5); // = { *************** *** 146,175 **** RGBAColor colorC = colorA; colorC += colorC; ! ASSERT_EQUAL(4, colorC.r()); ! ASSERT_EQUAL(10, colorC.g()); ! ASSERT_EQUAL(22, colorC.b()); colorC += colorB; ! ASSERT_EQUAL(14, colorC.r()); ! ASSERT_EQUAL(30, colorC.g()); ! ASSERT_EQUAL(52, colorC.b()); ! } ! // -= ! { ! RGBAColor colorC = colorA; ! colorC -= colorC; ! ASSERT_EQUAL(0, colorC.r()); ! ASSERT_EQUAL(0, colorC.g()); ! ASSERT_EQUAL(0, colorC.b()); ! ! colorC -= colorB; ! ASSERT_EQUAL(-10, colorC.r()); ! ASSERT_EQUAL(-20, colorC.g()); ! ASSERT_EQUAL(-30, colorC.b()); ! ! colorC -= colorA; ! ASSERT_EQUAL(-12, colorC.r()); ! ASSERT_EQUAL(-25, colorC.g()); ! ASSERT_EQUAL(-41, colorC.b()); } // *= (factor) --- 148,161 ---- RGBAColor colorC = colorA; colorC += colorC; ! ASSERT_EQUAL(0.25, colorC.a()); ! ASSERT_EQUAL(2, colorC.r()); ! ASSERT_EQUAL(5, colorC.g()); ! ASSERT_EQUAL(11, colorC.b()); colorC += colorB; ! ASSERT_EQUAL(6, colorC.r()); ! ASSERT_EQUAL(12.5, colorC.g()); ! ASSERT_EQUAL(20.5, colorC.b()); ! ASSERT_EQUAL(0.125, colorC.a()); } // *= (factor) *************** *** 217,249 **** } ! AUTO_UNIT_TEST(rgbcolor_non_member_operators) { // FIXME! ! RGBAColor colorA(2,5,11); ! RGBAColor colorB(10,20,30); // + { RGBAColor colorC = colorA + colorA + colorA; ! ASSERT_EQUAL(6, colorC.r()); ! ASSERT_EQUAL(15, colorC.g()); ! ASSERT_EQUAL(33, colorC.b()); RGBAColor colorD = colorC + colorB; ! ASSERT_EQUAL(16, colorD.r()); ! ASSERT_EQUAL(35, colorD.g()); ! ASSERT_EQUAL(63, colorD.b()); ! } ! // - ! { ! RGBAColor colorC = colorA - colorA - colorA; ! ASSERT_EQUAL(-2, colorC.r()); ! ASSERT_EQUAL(-5, colorC.g()); ! ASSERT_EQUAL(-11, colorC.b()); ! ! RGBAColor colorD = colorC - colorB; ! ASSERT_EQUAL(-12, colorD.r()); ! ASSERT_EQUAL(-25, colorD.g()); ! ASSERT_EQUAL(-41, colorD.b()); } // * (factor left) --- 203,225 ---- } ! AUTO_UNIT_TEST(rgbacolor_non_member_operators) { // FIXME! ! RGBAColor colorA(2,5,11,0.5); ! RGBAColor colorB(10,20,30,0.5); // + { RGBAColor colorC = colorA + colorA + colorA; ! ASSERT_EQUAL(2, colorC.r()); ! ASSERT_EQUAL(5, colorC.g()); ! ASSERT_EQUAL(11, colorC.b()); ! ASSERT_EQUAL(0.125, colorC.a()); RGBAColor colorD = colorC + colorB; ! ASSERT_EQUAL(6, colorD.r()); ! ASSERT_EQUAL(12.5, colorD.g()); ! ASSERT_EQUAL(20.5, colorD.b()); ! ASSERT_EQUAL(0.0625, colorD.a()); } // * (factor left) *************** *** 309,313 **** } ! AUTO_UNIT_TEST(rgbcolor_non_member_functions) { // averageComponent --- 285,289 ---- } ! AUTO_UNIT_TEST(rgbacolor_non_member_functions) { // averageComponent |