Fix bugs in previous commit that caused FTBFS in synfig and ETL FTBFS with older...
[synfig.git] / synfig-core / tags / stable / src / synfig / gradient.h
index af70d47..fdba3df 100644 (file)
@@ -6,6 +6,7 @@
 **
 **     \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
@@ -60,27 +61,57 @@ struct GradientCPoint : public UniqueID
 /*! \class Gradient
 **     \brief Color Gradient Class
 */
-class Gradient : public std::vector<GradientCPoint>
+using namespace std;
+class Gradient
 {
 public:
        typedef GradientCPoint CPoint;
+       typedef vector<CPoint> 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 Convience Constructor
+       //! Two-Tone Color Gradient Convenience Constructor
        Gradient(const Color &c1, const Color &c2);
 
-       //! Three-Tone Color Gradient Convience Constructor
+       //! Three-Tone Color Gradient Convenience Constructor
        Gradient(const Color &c1, const Color &c2, const Color &c3);
 
-       //! Alias for sort (Implemented for consistancy)
+       //! 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