#ifndef GRADIENT_H #define GRADIENT_H #include #include #include "Color.h" #include #include class Gradient { std::vector> points; /// the colors of this gradient stored in linear RGB format /// so they can be easily interpolated std::vector colors; float max; bool repeat; public: Gradient(void); Gradient(std::vector> colors, bool repeat = false, int precalcSteps = -1); const std::vector>& getPoints(void) const; static Gradient defaultGradient(void); //static Gradient readXml(const std::string& xml); /*! * \brief get a color at a specific position in this gradient * \param x the position * \return the color in sRGB format */ RGBColor get(float x) const; private: static RGBColorf lerpColors(RGBColorf a, RGBColorf b, float val); static RGBColor lerpColors(RGBColor a, RGBColor b, float val); std::tuple getNeighbors(float x) const; }; #endif // GRADIENT_H