11#include <mlab/bin_data.hpp>
18 inline rgb operator ""_rgb(
unsigned long long int);
35 void set(T &target)
const;
38 void add(U &target)
const;
54 explicit inline rgb(std::uint32_t rgb_);
56 inline rgb(std::uint8_t r_, std::uint8_t g_, std::uint8_t b_);
65 [[nodiscard]]
inline rgb shift(
rgb delta,
bool negate =
false)
const;
68 [[nodiscard]]
inline rgb blend(
rgb target,
float factor)
const;
75 [[nodiscard]] std::string
to_string()
const;
85 inline hsv(
float h_,
float s_,
float v_);
96 [[nodiscard]]
inline hsv shift(
hsv delta,
bool negate =
false)
const;
105 rgb literals::operator
""_rgb(
unsigned long long int c) {
106 return rgb{std::uint32_t(c)};
109 rgb::rgb(std::uint8_t r_, std::uint8_t g_, std::uint8_t b_) : r{r_}, g{g_}, b{b_} {}
112 std::uint8_t(0xff & (rgb_ >> 16)),
113 std::uint8_t(0xff & (rgb_ >> 8)),
114 std::uint8_t(0xff & rgb_)} {}
117 hsv::hsv(
float h_,
float s_,
float v_) : h{h_}, s{s_}, v{v_} {}
136 if constexpr (not std::is_signed_v<U> and std::is_signed_v<T>) {
137 target = U(std::clamp(T(target + value),
138 T(std::numeric_limits<U>::lowest()),
139 T(std::numeric_limits<U>::max())));
147 return negate ?
shift(-delta.
r, -delta.
g, -delta.
b) :
shift(delta.
r, delta.
g, delta.
b);
151 return negate ?
shift(-delta.
h, -delta.
s, -delta.
v) :
shift(delta.
h, delta.
s, delta.
v);
156 retval.
update(r_, g_, b_);
162 retval.
shift(dr, dg, db);
168 retval.
shift(delta, negate);
174 retval.
update(h_, s_, v_);
180 retval.
shift(dh, ds, dv);
186 retval.
shift(delta, negate);
192 retval.
blend(target, factor);
Definition: any_fx.cpp:81
mlab::bin_stream & operator>>(mlab::bin_stream &s, neo::any_fx_config &fx_cfg)
Definition: any_fx.cpp:83
bin_data & operator<<(bin_data &o, neo::rgb c)
Definition: color.cpp:157
std::uint8_t linear_to_srgb(float v)
Definition: color.cpp:22
float srgb_to_linear(std::uint8_t v)
Definition: color.cpp:17
static constexpr keep_t keep
Definition: color.hpp:24
float v
Definition: color.hpp:81
float s
Definition: color.hpp:80
float h
Definition: color.hpp:79
rgb to_rgb() const
Definition: color.cpp:80
hsv & shift(maybe_update< float > dh, maybe_update< float > ds, maybe_update< float > dv)
Definition: color.cpp:137
hsv & clamp()
Definition: color.cpp:109
hsv & update(maybe_update< float > h_, maybe_update< float > s_, maybe_update< float > v_)
Definition: color.cpp:116
maybe_update(keep_t)
Definition: color.hpp:120
const bool update
Definition: color.hpp:28
T value
Definition: color.hpp:29
void set(T &target) const
Definition: color.hpp:126
void add(U &target) const
Definition: color.hpp:134
hsv to_hsv() const
Definition: color.cpp:53
rgb & blend(rgb target, float factor)
Definition: color.cpp:145
std::string to_string() const
Definition: color.cpp:28
std::array< float, 3 > to_linear_rgb() const
Definition: color.cpp:45
static rgb from_linear_rgb(std::array< float, 3 > const &linear_rgb)
Definition: color.cpp:49
std::uint8_t r
Definition: color.hpp:48
std::uint8_t g
Definition: color.hpp:49
rgb & shift(maybe_update< signed > dr, maybe_update< signed > dg, maybe_update< signed > db)
Definition: color.cpp:130
rgb & update(maybe_update< std::uint8_t > r_, maybe_update< std::uint8_t > g_, maybe_update< std::uint8_t > b_)
Definition: color.cpp:123
std::uint8_t b
Definition: color.hpp:50