diff --git a/includes/type/color.pat b/includes/type/color.pat new file mode 100644 index 0000000..da06247 --- /dev/null +++ b/includes/type/color.pat @@ -0,0 +1,43 @@ +#pragma once + +#include + +namespace type { + + struct RGBA8 { + u8 r, g, b, a; + } [[sealed, format("type::impl::format_color")]]; + + bitfield RGB565 { + r : 5; + g : 6; + b : 5; + } [[sealed, format("type::impl::format_color")]]; + + bitfield RGBA4 { + r : 4; + g : 4; + b : 4; + a : 4; + } [[sealed, format("type::impl::format_color")]]; + + namespace impl { + + fn format_color(ref auto color) { + if (!std::core::has_member(color, "a")) { + return std::format("#{0:02X}{1:02X}{2:02X} | rgb({0}, {1}, {2})", + color.r, + color.g, + color.b); + } else { + return std::format("#{0:02X}{1:02X}{2:02X}{3:02X} | rgba({0}, {1}, {2}, {3})", + color.r, + color.g, + color.b, + color.a); + } + }; + + } + +} \ No newline at end of file