mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-06 21:55:43 +01:00
further work on new color manipulation code
This commit is contained in:
parent
405afb757d
commit
fdcb792358
2 changed files with 260 additions and 6 deletions
|
|
@ -17,19 +17,85 @@
|
|||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __ardour_canvas_colors_h__
|
||||
#define __ardour_canvas_colors_h__
|
||||
|
||||
#include <cairomm/context.h>
|
||||
|
||||
#include "canvas/visibility.h"
|
||||
#include "canvas/types.h"
|
||||
|
||||
namespace ArdourCanvas {
|
||||
namespace ArdourCanvas
|
||||
{
|
||||
|
||||
extern LIBCANVAS_API void color_to_hsv (Color color, double& h, double& s, double& v);
|
||||
extern LIBCANVAS_API Color hsv_to_color (double h, double s, double v, double a);
|
||||
struct LIBCANVAS_API HSV;
|
||||
struct LIBCANVAS_API HSVA;
|
||||
|
||||
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);
|
||||
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 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
|
||||
{
|
||||
HSV ();
|
||||
HSV (double h, double s, double v);
|
||||
HSV (Color);
|
||||
virtual ~HSV() {}
|
||||
|
||||
double h;
|
||||
double s;
|
||||
double v;
|
||||
|
||||
bool is_gray() const { return s == 0; }
|
||||
|
||||
operator Color() const { return hsv_to_color (*this); }
|
||||
|
||||
HSV operator+ (const HSV&) const;
|
||||
HSV operator- (const HSV&) const;
|
||||
HSV operator* (double) 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();
|
||||
};
|
||||
|
||||
|
||||
|
||||
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;
|
||||
|
||||
void print (std::ostream&) const;
|
||||
|
||||
protected:
|
||||
void clamp ();
|
||||
};
|
||||
|
||||
uint32_t LIBCANVAS_API contrasting_text_color (uint32_t c);
|
||||
}
|
||||
|
||||
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__ */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue