2#include <ossia/network/dataspace/dataspace_base.hpp>
3#include <ossia/network/domain/domain_base_impl.hpp>
10template <
typename Impl>
13 using is_unit = std::true_type;
14 using is_multidimensional = std::true_type;
16 using neutral_unit = argb_u;
17 using concrete_type = Impl;
18 using dataspace_type = color_u;
21struct OSSIA_EXPORT argb_u :
public color_unit<argb_u>
23 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"argb")); }
25 static constexpr auto array_parameters()
27 constexpr_return(ossia::make_string_view(
"argb"));
30 static ossia::vecf_domain<4> domain()
32 return vecf_domain<4>{
33 ossia::make_vec(0.f, 0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f, 1.f)};
38 using value_type = vec4f;
40 static constexpr strong_value<neutral_unit>
41 to_neutral(strong_value<concrete_type> self)
46 static constexpr value_type from_neutral(strong_value<neutral_unit> self)
48 return self.dataspace_value;
52struct OSSIA_EXPORT rgba8_u :
public color_unit<rgba8_u>
54 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"rgba8")); }
56 static constexpr auto array_parameters()
58 constexpr_return(ossia::make_string_view(
"rgba"));
61 using value_type = vec4f;
63 static strong_value<neutral_unit> to_neutral(strong_value<concrete_type> self)
66 self.dataspace_value[3] / 255.f, self.dataspace_value[0] / 255.f,
67 self.dataspace_value[1] / 255.f, self.dataspace_value[2] / 255.f);
70 static value_type from_neutral(strong_value<neutral_unit> self)
73 self.dataspace_value[1] * 255.f, self.dataspace_value[2] * 255.f,
74 self.dataspace_value[3] * 255.f, self.dataspace_value[0] * 255.f);
77 static ossia::vecf_domain<4> domain()
79 return vecf_domain<4>{
80 ossia::make_vec(0.f, 0.f, 0.f, 0.f),
81 ossia::make_vec(255.f, 255.f, 255.f, 255.f)};
87struct OSSIA_EXPORT rgba_u :
public color_unit<rgba_u>
89 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"rgba")); }
91 static constexpr auto array_parameters()
93 constexpr_return(ossia::make_string_view(
"rgba"));
96 using value_type = vec4f;
98 static strong_value<neutral_unit> to_neutral(strong_value<concrete_type> self)
101 self.dataspace_value[3], self.dataspace_value[0], self.dataspace_value[1],
102 self.dataspace_value[2]};
105 static value_type from_neutral(strong_value<neutral_unit> self)
108 self.dataspace_value[1], self.dataspace_value[2], self.dataspace_value[3],
109 self.dataspace_value[0]};
112 static ossia::vecf_domain<4> domain()
114 return vecf_domain<4>{
115 ossia::make_vec(0.f, 0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f, 1.f)};
120struct OSSIA_EXPORT rgb_u :
public color_unit<rgb_u>
122 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"rgb")); }
124 static constexpr auto array_parameters()
126 constexpr_return(ossia::make_string_view(
"rgb"));
129 using value_type = vec3f;
131 static strong_value<neutral_unit> to_neutral(strong_value<concrete_type> self)
134 1., self.dataspace_value[0], self.dataspace_value[1], self.dataspace_value[2]};
137 static value_type from_neutral(strong_value<neutral_unit> self)
139 return {self.dataspace_value[1], self.dataspace_value[2], self.dataspace_value[3]};
142 static ossia::vecf_domain<3> domain()
144 return vecf_domain<3>{
145 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f)};
150struct OSSIA_EXPORT bgr_u :
public color_unit<bgr_u>
152 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"bgr")); }
154 static constexpr auto array_parameters()
156 constexpr_return(ossia::make_string_view(
"bgr"));
159 using value_type = vec3f;
161 static strong_value<neutral_unit> to_neutral(strong_value<concrete_type> self)
164 1., self.dataspace_value[2], self.dataspace_value[1], self.dataspace_value[0]};
167 static value_type from_neutral(strong_value<neutral_unit> self)
169 return {self.dataspace_value[3], self.dataspace_value[2], self.dataspace_value[1]};
172 static ossia::vecf_domain<3> domain()
174 return vecf_domain<3>{
175 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f)};
180struct OSSIA_EXPORT argb8_u :
public color_unit<argb8_u>
182 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"argb8")); }
184 static constexpr auto array_parameters()
186 constexpr_return(ossia::make_string_view(
"argb"));
189 using value_type = vec4f;
191 static strong_value<neutral_unit> to_neutral(strong_value<concrete_type> self)
194 self.dataspace_value[0] / 255.f, self.dataspace_value[1] / 255.f,
195 self.dataspace_value[2] / 255.f, self.dataspace_value[3] / 255.f);
198 static value_type from_neutral(strong_value<neutral_unit> self)
201 self.dataspace_value[0] * 255.f, self.dataspace_value[1] * 255.f,
202 self.dataspace_value[2] * 255.f, self.dataspace_value[3] * 255.f);
205 static ossia::vecf_domain<4> domain()
207 return vecf_domain<4>{
208 ossia::make_vec(0.f, 0.f, 0.f, 0.f),
209 ossia::make_vec(255.f, 255.f, 255.f, 255.f)};
214struct OSSIA_EXPORT hsv_u :
public color_unit<hsv_u>
216 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"hsv")); }
218 static constexpr auto array_parameters()
220 constexpr_return(ossia::make_string_view(
"hsv"));
223 using value_type = vec3f;
224 static strong_value<neutral_unit> to_neutral(strong_value<concrete_type> self);
226 static value_type from_neutral(strong_value<neutral_unit> self);
228 static ossia::vecf_domain<3> domain()
230 return vecf_domain<3>{
231 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f)};
236struct OSSIA_EXPORT hsl_u :
public color_unit<hsl_u>
238 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"hsl")); }
240 static constexpr auto array_parameters()
242 constexpr_return(ossia::make_string_view(
"hsl"));
245 using value_type = vec3f;
247 static ossia::vecf_domain<3> domain()
249 return vecf_domain<3>{
250 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f)};
255struct OSSIA_EXPORT cmy8_u :
public color_unit<cmy8_u>
257 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"cmy8")); }
259 static constexpr auto array_parameters()
261 constexpr_return(ossia::make_string_view(
"cmy"));
264 using value_type = vec3f;
266 static strong_value<neutral_unit> to_neutral(strong_value<concrete_type> self)
269 1.f, (255.f - self.dataspace_value[0]) / 255.f,
270 (255.f - self.dataspace_value[1]) / 255.f,
271 (255.f - self.dataspace_value[2]) / 255.f);
274 static value_type from_neutral(strong_value<neutral_unit> self)
277 255.f * (1.f - self.dataspace_value[1]), 255.f * (1.f - self.dataspace_value[2]),
278 255.f * (1.f - self.dataspace_value[3]));
281 static ossia::vecf_domain<3> domain()
283 return vecf_domain<3>{
284 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(255.f, 255.f, 255.f)};
289struct OSSIA_EXPORT cmyk8_u :
public color_unit<cmyk8_u>
291 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"cmyk8")); }
293 static constexpr auto array_parameters()
295 constexpr_return(ossia::make_string_view(
"cmyk"));
298 using value_type = vec4f;
301struct OSSIA_EXPORT xyz_u :
public color_unit<xyz_u>
303 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"cie_xyz")); }
305 static constexpr auto array_parameters()
307 constexpr_return(ossia::make_string_view(
"xyz"));
310 using value_type = vec3f;
312 static strong_value<neutral_unit> to_neutral(strong_value<concrete_type> self);
314 static value_type from_neutral(strong_value<neutral_unit> self);
316 static ossia::vecf_domain<3> domain()
318 return vecf_domain<3>{
319 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f)};
324struct OSSIA_EXPORT yxy_u :
public color_unit<yxy_u>
326 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"cie_Yxy")); }
328 static constexpr auto array_parameters()
330 constexpr_return(ossia::make_string_view(
"Yxy"));
333 using value_type = vec3f;
335 static ossia::vecf_domain<3> domain()
337 return vecf_domain<3>{
338 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f)};
343struct OSSIA_EXPORT hunter_lab_u :
public color_unit<hunter_lab_u>
345 static constexpr auto text()
347 constexpr_return(ossia::make_string_array(
"hunter_lab"));
349 static constexpr auto array_parameters()
351 constexpr_return(ossia::make_string_view(
"lab"));
353 using value_type = vec3f;
355 static strong_value<neutral_unit> to_neutral(strong_value<concrete_type> self);
356 static value_type from_neutral(strong_value<neutral_unit> self);
358 static ossia::vecf_domain<3> domain()
360 return vecf_domain<3>{
361 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f)};
366struct OSSIA_EXPORT cie_lab_u :
public color_unit<cie_lab_u>
368 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"cie_lab")); }
369 static constexpr auto array_parameters()
371 constexpr_return(ossia::make_string_view(
"lab"));
373 using value_type = vec3f;
375 static ossia::vecf_domain<3> domain()
377 return vecf_domain<3>{
378 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f)};
383struct OSSIA_EXPORT cie_luv_u :
public color_unit<cie_luv_u>
385 static constexpr auto text() { constexpr_return(ossia::make_string_array(
"cie_luv")); }
386 static constexpr auto array_parameters()
388 constexpr_return(ossia::make_string_view(
"luv"));
390 using value_type = vec3f;
392 static ossia::vecf_domain<3> domain()
394 return vecf_domain<3>{
395 ossia::make_vec(0.f, 0.f, 0.f), ossia::make_vec(1.f, 1.f, 1.f)};
@ CLIP
The bounds are ignored.