X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftags%2Fsynfig_0_61_07_rc1%2Fsrc%2Fsynfig%2Fgradient.h;fp=synfig-core%2Ftags%2Fsynfig_0_61_07_rc1%2Fsrc%2Fsynfig%2Fgradient.h;h=fdba3df1218f7845cffcb08b7e209ba08550c960;hb=7d32b486bfe48032fdb52fbb3b6f144a6ce7e63e;hp=0000000000000000000000000000000000000000;hpb=e46234d7b452318bb265f47ba85f2a5226f9657a;p=synfig.git diff --git a/synfig-core/tags/synfig_0_61_07_rc1/src/synfig/gradient.h b/synfig-core/tags/synfig_0_61_07_rc1/src/synfig/gradient.h new file mode 100644 index 0000000..fdba3df --- /dev/null +++ b/synfig-core/tags/synfig_0_61_07_rc1/src/synfig/gradient.h @@ -0,0 +1,134 @@ +/* === S Y N F I G ========================================================= */ +/*! \file gradient.h +** \brief Color Gradient Class +** +** $Id$ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore +** +** This package 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 package 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. +** \endlegal +*/ +/* ========================================================================= */ + +/* === S T A R T =========================================================== */ + +#ifndef __SYNFIG_GRADIENT_H +#define __SYNFIG_GRADIENT_H + +/* === H E A D E R S ======================================================= */ + +#include "real.h" +#include "color.h" +#include +#include +#include "uniqueid.h" + +/* === M A C R O S ========================================================= */ + +/* === T Y P E D E F S ===================================================== */ + +/* === C L A S S E S & S T R U C T S ======================================= */ + +namespace synfig { + +/*! \struct GradientCPoint +** \brief \todo +*/ +struct GradientCPoint : public UniqueID +{ + Real pos; + Color color; + + bool operator<(const GradientCPoint &rhs)const { return pos CPointList; + typedef CPointList::const_iterator const_iterator; + typedef CPointList::iterator iterator; + typedef CPointList::const_reverse_iterator const_reverse_iterator; + typedef CPointList::reverse_iterator reverse_iterator; +private: + CPointList cpoints; +public: + Gradient() { } + + //! Two-Tone Color Gradient Convenience Constructor + Gradient(const Color &c1, const Color &c2); + + //! Three-Tone Color Gradient Convenience Constructor + Gradient(const Color &c1, const Color &c2, const Color &c3); + + //! Alias for sort (Implemented for consistency) + void sync() { sort(); } + + //! You should call this function after changing stuff. + void sort(); + + void push_back(const CPoint cpoint) { cpoints.push_back(cpoint); } + iterator erase(iterator iter) { return cpoints.erase(iter); } + bool empty()const { return cpoints.empty(); } + size_t size()const { return cpoints.size(); } + + iterator begin() { return cpoints.begin(); } + iterator end() { return cpoints.end(); } + reverse_iterator rbegin() { return cpoints.rbegin(); } + reverse_iterator rend() { return cpoints.rend(); } + const_iterator begin()const { return cpoints.begin(); } + const_iterator end()const { return cpoints.end(); } + const_reverse_iterator rbegin()const { return cpoints.rbegin(); } + const_reverse_iterator rend()const { return cpoints.rend(); } + + Gradient &operator+=(const Gradient &rhs); + Gradient &operator-=(const Gradient &rhs); + Gradient &operator*=(const float &rhs); + Gradient &operator/=(const float &rhs); + + Gradient operator+(const Gradient &rhs)const { return Gradient(*this)+=rhs; } + Gradient operator-(const Gradient &rhs)const { return Gradient(*this)-=rhs; } + Gradient operator*(const float &rhs)const { return Gradient(*this)*=rhs; } + Gradient operator/(const float &rhs)const { return Gradient(*this)/=rhs; } + + Color operator()(const Real &x, float supersample=0)const; + + //! Returns the iterator of the CPoint closest to \a x + iterator proximity(const Real &x); + + //! Returns the const_iterator of the CPoint closest to \a x + const_iterator proximity(const Real &x)const; + + //! Returns the iterator of the CPoint with UniqueID \a id + iterator find(const UniqueID &id); + + //! Returns the const_iterator of the CPoint with UniqueID \a id + const_iterator find(const UniqueID &id)const; +}; // END of class Gradient + +}; // END of namespace synfig + +/* === E N D =============================================================== */ + +#endif