struct LIBCANVAS_API HSV;
struct LIBCANVAS_API HSVA;
-extern LIBCANVAS_API Color hsv_to_color (double h, double s, double v, double a = 1.0);
-extern LIBCANVAS_API Color hsv_to_color (const HSV&, double a = 1.0);
-extern LIBCANVAS_API Color hsva_to_color (const HSVA&);
-extern LIBCANVAS_API void color_to_hsv (Color color, double& h, double& s, double& v);
+extern LIBCANVAS_API Color change_alpha (Color, double alpha);
+extern LIBCANVAS_API Color hsva_to_color (double h, double s, double v, double a = 1.0);
+extern LIBCANVAS_API void color_to_hsva (Color color, double& h, double& s, double& v, double& a);
+extern LIBCANVAS_API void color_to_hsv (Color color, double& h, double& s, double& v);
extern LIBCANVAS_API void color_to_rgba (Color, double& r, double& g, double& b, double& a);
extern LIBCANVAS_API Color rgba_to_color (double r, double g, double b, double a);
uint32_t LIBCANVAS_API contrasting_text_color (uint32_t c);
-struct LIBCANVAS_API HSV
+struct LIBCANVAS_API HSV;
+
+class LIBCANVAS_API SVAModifier
+{
+ public:
+ enum Type {
+ Add,
+ Multiply,
+ Assign
+ };
+
+ SVAModifier (std::string const &);
+ SVAModifier (Type t, double ss, double vv, double aa) : type (t), _s (ss) , _v (vv) , _a (aa) {}
+ SVAModifier () : type (Add), _s (0), _v (0), _a (0) {} /* no-op modifier */
+
+ double s() const { return _s; }
+ double v() const { return _v; }
+ double a() const { return _a; }
+
+ HSV operator () (HSV& hsv) const;
+ std::string to_string () const;
+ void from_string (std::string const &);
+
+ private:
+ Type type;
+ double _s;
+ double _v;
+ double _a;
+};
+
+struct LIBCANVAS_API HSV
{
HSV ();
- HSV (double h, double s, double v);
+ HSV (double h, double s, double v, double a = 1.0);
HSV (Color);
- virtual ~HSV() {}
-
+ HSV (const std::string&);
+
double h;
double s;
double v;
+ double a;
- bool is_gray() const { return s == 0; }
-
- operator Color() const { return hsv_to_color (*this); }
+ std::string to_string() const;
+ bool is_gray() const;
+
+ Color color() const { return hsva_to_color (h,s, v, a); }
+ operator Color() const { return color(); }
+ HSV mod (SVAModifier const & svam);
+
HSV operator+ (const HSV&) const;
HSV operator- (const HSV&) const;
- HSV operator* (double) const;
+
+ HSV& operator=(Color);
+ HSV& operator=(const std::string&);
+
+ bool operator== (const HSV& other);
+
+ double distance (const HSV& other) const;
+ HSV delta (const HSV& other) const;
HSV darker (double factor = 1.3) const { return shade (factor); }
HSV lighter (double factor = 0.7) const { return shade (factor); }
HSV shade (double factor) const;
HSV mix (const HSV& other, double amt) const;
- void print (std::ostream&) const;
-
- protected:
- virtual void clamp();
-};
-
-
+ HSV opposite() const;
+ HSV complement() const { return opposite(); }
-struct LIBCANVAS_API HSVA : public HSV
-{
- HSVA ();
- HSVA (double h, double s, double v, double a);
- HSVA (Color);
-
- double a;
-
- operator Color() const { return hsva_to_color (*this); }
-
- HSVA operator+ (const HSVA&) const;
- HSVA operator- (const HSVA&) const;
+ HSV bw_text () const;
+ HSV text() const;
+ HSV selected () const;
+ HSV outline() const;
void print (std::ostream&) const;
void clamp ();
};
+
}
std::ostream& operator<<(std::ostream& o, const ArdourCanvas::HSV& hsv);
-std::ostream& operator<<(std::ostream& o, const ArdourCanvas::HSVA& hsva);
#endif /* __ardour_canvas_colors_h__ */