44 constexpr color(
color const&)
noexcept =
default;
46 constexpr color& operator=(
color const&)
noexcept =
default;
47 constexpr color& operator=(
color&&)
noexcept =
default;
49 [[nodiscard]]
constexpr explicit color(f16x4
const&
other) noexcept : _v(
other)
54 [[nodiscard]]
constexpr explicit color(f32x4
const&
other) noexcept :
color(
static_cast<f16x4
>(
other)) {}
56 [[nodiscard]]
constexpr explicit operator f16x4()
const noexcept
61 [[nodiscard]]
constexpr explicit operator f32x4()
const noexcept
63 return static_cast<f32x4
>(_v);
66 [[nodiscard]]
constexpr color(
float r,
float g,
float b,
float a = 1.0f) noexcept :
color(f32x4{r, g, b, a}) {}
68 [[nodiscard]]
constexpr color() noexcept :
color(f32x4{}) {}
72 _v.x() = float16::from_uint16_t(0xf900 +
static_cast<uint8_t
>(
semantic_color));
73 _v.y() = float16::from_uint16_t(0x0000);
74 _v.z() = float16::from_uint16_t(0x0000);
75 _v.w() = float16(1.0f);
78 [[nodiscard]]
constexpr bool is_semantic()
const noexcept
80 return (_v.x().get() & 0xf900) == 0xf900;
90 [[nodiscard]]
static constexpr color blue()
noexcept {
return color{semantic_color::blue}; }
91 [[nodiscard]]
static constexpr color green()
noexcept {
return color{semantic_color::green}; }
92 [[nodiscard]]
static constexpr color indigo()
noexcept {
return color{semantic_color::indigo}; }
93 [[nodiscard]]
static constexpr color orange()
noexcept {
return color{semantic_color::orange}; }
94 [[nodiscard]]
static constexpr color pink()
noexcept {
return color{semantic_color::pink}; }
95 [[nodiscard]]
static constexpr color purple()
noexcept {
return color{semantic_color::purple}; }
96 [[nodiscard]]
static constexpr color red()
noexcept {
return color{semantic_color::red}; }
97 [[nodiscard]]
static constexpr color teal()
noexcept {
return color{semantic_color::teal}; }
98 [[nodiscard]]
static constexpr color yellow()
noexcept {
return color{semantic_color::yellow}; }
99 [[nodiscard]]
static constexpr color gray()
noexcept {
return color{semantic_color::gray}; }
100 [[nodiscard]]
static constexpr color gray2()
noexcept {
return color{semantic_color::gray2}; }
101 [[nodiscard]]
static constexpr color gray3()
noexcept {
return color{semantic_color::gray3}; }
102 [[nodiscard]]
static constexpr color gray4()
noexcept {
return color{semantic_color::gray4}; }
103 [[nodiscard]]
static constexpr color gray5()
noexcept {
return color{semantic_color::gray5}; }
104 [[nodiscard]]
static constexpr color gray6()
noexcept {
return color{semantic_color::gray6}; }
105 [[nodiscard]]
static constexpr color foreground()
noexcept {
return color{semantic_color::foreground}; }
106 [[nodiscard]]
static constexpr color border()
noexcept {
return color{semantic_color::border}; }
107 [[nodiscard]]
static constexpr color fill()
noexcept {
return color{semantic_color::fill}; }
108 [[nodiscard]]
static constexpr color accent()
noexcept {
return color{semantic_color::accent}; }
109 [[nodiscard]]
static constexpr color text_select()
noexcept {
return color{semantic_color::text_select}; }
110 [[nodiscard]]
static constexpr color primary_cursor()
noexcept {
return color{semantic_color::primary_cursor}; }
111 [[nodiscard]]
static constexpr color secondary_cursor()
noexcept {
return color{semantic_color::secondary_cursor}; }
114 [[nodiscard]]
static constexpr color transparent()
noexcept
116 return {0.0f, 0.0f, 0.0f, 0.0f};
119 [[nodiscard]]
static constexpr color white()
noexcept
121 return {1.0f, 1.0f, 1.0f, 1.0f};
124 [[nodiscard]]
static constexpr color black()
noexcept
126 return {0.0f, 0.0f, 0.0f, 1.0f};
129 [[nodiscard]]
size_t hash()
const noexcept
134 [[nodiscard]]
constexpr float16& r()
noexcept
139 [[nodiscard]]
constexpr float16& g()
noexcept
144 [[nodiscard]]
constexpr float16& b()
noexcept
149 [[nodiscard]]
constexpr float16& a()
noexcept
154 [[nodiscard]]
constexpr float16 r()
const noexcept
159 [[nodiscard]]
constexpr float16 g()
const noexcept
164 [[nodiscard]]
constexpr float16 b()
const noexcept
169 [[nodiscard]]
constexpr float16 a()
const noexcept
174 [[nodiscard]]
constexpr bool holds_invariant()
const noexcept
176 return _v.w() >= 0.0 && _v.w() <= 1.0;
179 [[nodiscard]]
constexpr friend bool operator==(
color const& lhs,
color const& rhs)
noexcept
181 return equal(lhs._v, rhs._v);
184 [[nodiscard]]
constexpr friend color operator*(
color const& lhs,
color const& rhs)
noexcept
186 return color{lhs._v * rhs._v};
189 [[nodiscard]]
constexpr friend color composit(
color const& lhs,
color const& rhs)
noexcept
191 return color{composit(lhs._v, rhs._v)};
194 [[nodiscard]]
constexpr friend color desaturate(
color const& rhs)
noexcept
196 hilet rhs_ = f32x4{rhs};
198 hilet Y = 0.2126f * rhs_.r() + 0.7152f * rhs_.g() + 0.0722f * rhs_.b();
200 return color{Y, Y, Y, rhs_.a()};
216 get<0>(lhs) *
static_cast<f32x4
>(rhs).xxxx() + get<1>(lhs) *
static_cast<f32x4
>(rhs).yyyy() +
217 get<2>(lhs) *
static_cast<f32x4
>(rhs).zzzz() + get<3>(lhs)};
223 [[nodiscard]]
constexpr friend color operator*(
identity3 const& lhs,
color const& rhs)
noexcept
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:238