ttx 0.1.0
Loading...
Searching...
No Matches
graphics_rendition.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/container/string/prelude.h"
4#include "di/reflect/prelude.h"
5#include "di/types/integers.h"
6#include "di/vocab/optional/prelude.h"
7#include "di/vocab/span/prelude.h"
8#include "ttx/features.h"
9#include "ttx/params.h"
10
11namespace ttx {
12struct Color {
13 enum class Type {
17 };
18
37
38 Color() = default;
39 constexpr Color(Palette c) : type(Type::Palette), r(c) {}
40 constexpr Color(u8 r, u8 g, u8 b) : type(Type::Custom), r(r), g(g), b(b) {}
41
43 u8 r = 0;
44 u8 g = 0;
45 u8 b = 0;
46
47 auto operator==(Color const& other) const -> bool = default;
48 auto operator<=>(Color const& other) const = default;
49
50 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<Color>) {
51 return di::make_fields<"Color">(di::field<"type", &Color::type>, di::field<"r", &Color::r>,
52 di::field<"g", &Color::g>, di::field<"b", &Color::b>);
53 }
54};
55
56constexpr auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<Color::Type>) {
57 using enum Color::Type;
58 return di::make_enumerators<"Color::Type">(di::enumerator<"Default", Default>, di::enumerator<"Palette", Palette>,
59 di::enumerator<"Custom", Custom>);
60}
61
62constexpr auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<Color::Palette>) {
63 using enum Color::Palette;
64 return di::make_enumerators<"Color::Palette">(
65 di::enumerator<"Black", Black>, di::enumerator<"Red", Red>, di::enumerator<"Green", Green>,
66 di::enumerator<"Brown", Brown>, di::enumerator<"Blue", Blue>, di::enumerator<"Magenta", Magenta>,
67 di::enumerator<"Cyan", Cyan>, di::enumerator<"LightGrey", LightGrey>, di::enumerator<"DarkGrey", DarkGrey>,
68 di::enumerator<"LightRed", LightRed>, di::enumerator<"LightGreen", LightGreen>,
69 di::enumerator<"Yellow", Yellow>, di::enumerator<"LightBlue", LightBlue>,
70 di::enumerator<"LightMagenta", LightMagenta>, di::enumerator<"LightCyan", LightCyan>,
71 di::enumerator<"White", White>);
72}
73
74enum class BlinkMode : u8 {
78};
79
80constexpr auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<BlinkMode>) {
81 using enum BlinkMode;
82 return di::make_enumerators<"BlinkMode">(di::enumerator<"None", None>, di::enumerator<"Normal", Normal>,
83 di::enumerator<"Rapid", Rapid>);
84}
85
86enum class FontWeight : u8 {
90};
91
92constexpr auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<FontWeight>) {
93 using enum FontWeight;
94 return di::make_enumerators<"FontWeight">(di::enumerator<"None", None>, di::enumerator<"Bold", Bold>,
95 di::enumerator<"Dim", Dim>);
96}
97
98enum class UnderlineMode : u8 {
99 None = 0,
102 Curly = 3,
105};
106
107constexpr auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<UnderlineMode>) {
108 using enum UnderlineMode;
109 return di::make_enumerators<"UnderlineMode">(di::enumerator<"None", None>, di::enumerator<"Normal", Normal>,
110 di::enumerator<"Double", Double>, di::enumerator<"Curly", Curly>,
111 di::enumerator<"Dotted", Dotted>, di::enumerator<"Dashed", Dashed>);
112}
113
118
122 bool italic { false };
123 bool overline { false };
124 bool inverted { false };
125 bool invisible { false };
126 bool strike_through { false };
127
128 static auto from_csi_params(Params const& params) {
129 auto result = GraphicsRendition {};
130 result.update_with_csi_params(params);
131 return result;
132 }
133 void update_with_csi_params(Params const& params);
134
135 auto as_csi_params(Feature features = Feature::None, di::Optional<GraphicsRendition const&> prev = {}) const
136 -> di::Vector<Params>;
137
138 auto operator==(GraphicsRendition const& other) const -> bool = default;
139 auto operator<=>(GraphicsRendition const& other) const = default;
140
141 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<GraphicsRendition>) {
142 return di::make_fields<"GraphicsRendition">(
143 di::field<"fg", &GraphicsRendition::fg>, di::field<"bg", &GraphicsRendition::bg>,
144 di::field<"underline_color", &GraphicsRendition::underline_color>,
145 di::field<"font_weight", &GraphicsRendition::font_weight>,
146 di::field<"blink_mode", &GraphicsRendition::blink_mode>,
147 di::field<"underline_mode", &GraphicsRendition::underline_mode>,
148 di::field<"italic", &GraphicsRendition::italic>, di::field<"overline", &GraphicsRendition::overline>,
149 di::field<"inverted", &GraphicsRendition::inverted>, di::field<"invisible", &GraphicsRendition::invisible>,
150 di::field<"strike_through", &GraphicsRendition::strike_through>);
151 }
152};
153}
Definition params.h:67
Definition clipboard.h:10
BlinkMode
Definition graphics_rendition.h:74
@ None
Definition graphics_rendition.h:75
@ Normal
Definition graphics_rendition.h:76
@ Rapid
Definition graphics_rendition.h:77
@ None
Definition direction.h:8
constexpr auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< ClipboardMode >)
Definition clipboard.h:21
UnderlineMode
Definition graphics_rendition.h:98
@ None
Definition graphics_rendition.h:99
@ Dotted
Definition graphics_rendition.h:103
@ Double
Definition graphics_rendition.h:101
@ Curly
Definition graphics_rendition.h:102
@ Dashed
Definition graphics_rendition.h:104
Feature
Definition features.h:8
@ None
Definition features.h:9
FontWeight
Definition graphics_rendition.h:86
@ Bold
Definition graphics_rendition.h:88
@ None
Definition graphics_rendition.h:87
@ Dim
Definition graphics_rendition.h:89
Definition graphics_rendition.h:12
Palette
Definition graphics_rendition.h:19
@ LightGreen
Definition graphics_rendition.h:30
@ DarkGrey
Definition graphics_rendition.h:28
@ LightCyan
Definition graphics_rendition.h:34
@ Yellow
Definition graphics_rendition.h:31
@ Red
Definition graphics_rendition.h:21
@ Brown
Definition graphics_rendition.h:23
@ LightRed
Definition graphics_rendition.h:29
@ Cyan
Definition graphics_rendition.h:26
@ LightGrey
Definition graphics_rendition.h:27
@ LightMagenta
Definition graphics_rendition.h:33
@ Blue
Definition graphics_rendition.h:24
@ LightBlue
Definition graphics_rendition.h:32
@ Green
Definition graphics_rendition.h:22
@ White
Definition graphics_rendition.h:35
@ Magenta
Definition graphics_rendition.h:25
@ Black
Definition graphics_rendition.h:20
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< Color >)
Definition graphics_rendition.h:50
u8 r
Definition graphics_rendition.h:43
Type type
Definition graphics_rendition.h:42
auto operator==(Color const &other) const -> bool=default
u8 b
Definition graphics_rendition.h:45
auto operator<=>(Color const &other) const =default
u8 g
Definition graphics_rendition.h:44
constexpr Color(u8 r, u8 g, u8 b)
Definition graphics_rendition.h:40
Color()=default
Type
Definition graphics_rendition.h:13
@ Default
Color is the default (unset SGR)
Definition graphics_rendition.h:14
@ Custom
Color is true color (r, b, g fully specified)
Definition graphics_rendition.h:16
constexpr Color(Palette c)
Definition graphics_rendition.h:39
Definition graphics_rendition.h:114
static auto from_csi_params(Params const &params)
Definition graphics_rendition.h:128
bool strike_through
Definition graphics_rendition.h:126
bool italic
Definition graphics_rendition.h:122
auto as_csi_params(Feature features=Feature::None, di::Optional< GraphicsRendition const & > prev={}) const -> di::Vector< Params >
Definition graphics_rendition.cpp:281
BlinkMode blink_mode
Definition graphics_rendition.h:120
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< GraphicsRendition >)
Definition graphics_rendition.h:141
Color fg
Definition graphics_rendition.h:115
UnderlineMode underline_mode
Definition graphics_rendition.h:121
auto operator==(GraphicsRendition const &other) const -> bool=default
void update_with_csi_params(Params const &params)
Definition graphics_rendition.cpp:88
Color underline_color
Definition graphics_rendition.h:117
Color bg
Definition graphics_rendition.h:116
bool invisible
Definition graphics_rendition.h:125
FontWeight font_weight
Definition graphics_rendition.h:119
bool overline
Definition graphics_rendition.h:123
bool inverted
Definition graphics_rendition.h:124
auto operator<=>(GraphicsRendition const &other) const =default