41 constexpr color(
color const&)
noexcept =
default;
43 constexpr color& operator=(
color const&)
noexcept =
default;
44 constexpr color& operator=(
color&&)
noexcept =
default;
46 [[nodiscard]]
constexpr explicit color(
f16x4 const& other) noexcept : _v(other)
51 [[nodiscard]]
constexpr explicit color(
f32x4 const& other) noexcept :
color(
static_cast<f16x4>(other)) {}
53 [[nodiscard]]
constexpr explicit operator f16x4()
const noexcept
58 [[nodiscard]]
constexpr explicit operator f32x4()
const noexcept
60 return static_cast<f32x4>(_v);
63 [[nodiscard]]
constexpr color(
float r,
float g,
float b,
float a = 1.0f) noexcept :
color(
f32x4{r, g, b, a}) {}
67 [[nodiscard]]
constexpr explicit color(hi::semantic_color semantic_color,
float alpha = 1.0f) noexcept : _v()
69 _v.x() = float16::from_uint16_t(0xf900 +
static_cast<uint8_t
>(semantic_color));
70 _v.y() = float16::from_uint16_t(0x0000);
71 _v.z() = float16::from_uint16_t(0x0000);
75 [[nodiscard]]
constexpr bool is_semantic()
const noexcept
77 return (_v.x().get() & 0xf900) == 0xf900;
80 constexpr explicit operator semantic_color()
const noexcept
83 return static_cast<semantic_color
>(_v.x().get() & 0xff);
87 [[nodiscard]]
static constexpr color blue()
noexcept {
return color{semantic_color::blue}; }
88 [[nodiscard]]
static constexpr color green()
noexcept {
return color{semantic_color::green}; }
89 [[nodiscard]]
static constexpr color indigo()
noexcept {
return color{semantic_color::indigo}; }
90 [[nodiscard]]
static constexpr color orange()
noexcept {
return color{semantic_color::orange}; }
91 [[nodiscard]]
static constexpr color pink()
noexcept {
return color{semantic_color::pink}; }
92 [[nodiscard]]
static constexpr color purple()
noexcept {
return color{semantic_color::purple}; }
93 [[nodiscard]]
static constexpr color red()
noexcept {
return color{semantic_color::red}; }
94 [[nodiscard]]
static constexpr color teal()
noexcept {
return color{semantic_color::teal}; }
95 [[nodiscard]]
static constexpr color yellow()
noexcept {
return color{semantic_color::yellow}; }
96 [[nodiscard]]
static constexpr color gray()
noexcept {
return color{semantic_color::gray}; }
97 [[nodiscard]]
static constexpr color gray2()
noexcept {
return color{semantic_color::gray2}; }
98 [[nodiscard]]
static constexpr color gray3()
noexcept {
return color{semantic_color::gray3}; }
99 [[nodiscard]]
static constexpr color gray4()
noexcept {
return color{semantic_color::gray4}; }
100 [[nodiscard]]
static constexpr color gray5()
noexcept {
return color{semantic_color::gray5}; }
101 [[nodiscard]]
static constexpr color gray6()
noexcept {
return color{semantic_color::gray6}; }
102 [[nodiscard]]
static constexpr color foreground()
noexcept {
return color{semantic_color::foreground}; }
103 [[nodiscard]]
static constexpr color border()
noexcept {
return color{semantic_color::border}; }
104 [[nodiscard]]
static constexpr color fill()
noexcept {
return color{semantic_color::fill}; }
105 [[nodiscard]]
static constexpr color accent()
noexcept {
return color{semantic_color::accent}; }
106 [[nodiscard]]
static constexpr color text_select()
noexcept {
return color{semantic_color::text_select}; }
107 [[nodiscard]]
static constexpr color primary_cursor()
noexcept {
return color{semantic_color::primary_cursor}; }
108 [[nodiscard]]
static constexpr color secondary_cursor()
noexcept {
return color{semantic_color::secondary_cursor}; }
111 [[nodiscard]]
static constexpr color transparent()
noexcept
113 return {0.0f, 0.0f, 0.0f, 0.0f};
116 [[nodiscard]]
static constexpr color white()
noexcept
118 return {1.0f, 1.0f, 1.0f, 1.0f};
121 [[nodiscard]]
static constexpr color black()
noexcept
123 return {0.0f, 0.0f, 0.0f, 1.0f};
126 [[nodiscard]]
size_t hash()
const noexcept
131 [[nodiscard]]
constexpr float16& r()
noexcept
136 [[nodiscard]]
constexpr float16& g()
noexcept
141 [[nodiscard]]
constexpr float16& b()
noexcept
146 [[nodiscard]]
constexpr float16& a()
noexcept
151 [[nodiscard]]
constexpr float16 const& r()
const noexcept
156 [[nodiscard]]
constexpr float16 const& g()
const noexcept
161 [[nodiscard]]
constexpr float16 const& b()
const noexcept
166 [[nodiscard]]
constexpr float16 const& a()
const noexcept
171 [[nodiscard]]
constexpr bool holds_invariant()
const noexcept
173 return _v.w() >= 0.0 && _v.w() <= 1.0;
176 [[nodiscard]]
constexpr friend bool operator==(
color const& lhs,
color const& rhs)
noexcept =
default;
178 [[nodiscard]]
constexpr friend color operator*(
color const& lhs,
color const& rhs)
noexcept
180 return color{lhs._v * rhs._v};
188 [[nodiscard]]
constexpr friend color desaturate(
color const& rhs)
noexcept
192 hilet Y = 0.2126f * rhs_.r() + 0.7152f * rhs_.g() + 0.0722f * rhs_.b();
194 return color{Y, Y, Y, rhs_.a()};
#define hi_axiom(expression)
Specify an axiom; an expression that is true.
Definition assert.hpp:133
void composit(pixel_map< sfloat_rgba16 > &dst, hi::color color, graphic_path const &mask) noexcept
Composit color onto the destination image where the mask is solid.