package portaudio w/WASAPI for Vista or later
[ardour.git] / libs / canvas / canvas / colors.h
index 17e93cf12869644a82426cd155db471e4553d10f..87901b45861f483828d3ad3e7706a72c153adbe8 100644 (file)
@@ -31,34 +31,76 @@ namespace ArdourCanvas
 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); }
@@ -66,26 +108,13 @@ struct LIBCANVAS_API HSV
        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;
 
@@ -93,9 +122,9 @@ struct LIBCANVAS_API HSVA : public HSV
        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__ */