1 #include "framebuffer.hpp"
5 struct h_rotate
: public framebuffer::color_mod
7 h_rotate(const std::string
& name
, int steps
)
8 : framebuffer::color_mod(name
, [steps
](int64_t& v
) {
9 v
= framebuffer::color_rotate_hue(v
, steps
, 24);
14 struct s_adjust
: public framebuffer::color_mod
16 s_adjust(const std::string
& name
, int steps
)
17 : framebuffer::color_mod(name
, [steps
](int64_t& v
) {
18 v
= framebuffer::color_adjust_saturation(v
, steps
/ 16.0);
23 struct l_adjust
: public framebuffer::color_mod
25 l_adjust(const std::string
& name
, int steps
)
26 : framebuffer::color_mod(name
, [steps
](int64_t& v
) {
27 v
= framebuffer::color_adjust_lightness(v
, steps
/ 16.0);
32 struct hsl
: public framebuffer::basecolor
34 hsl(const std::string
& name
, int16_t h
, int16_t s
, uint16_t l
)
35 : framebuffer::basecolor(name
, getcolor(h
, s
, l
))
38 int64_t getcolor(int16_t h
, int16_t s
, uint16_t l
)
41 if(l
<= 128) m2
= l
* (s
+ 256) / 256;
42 else m2
= l
+ s
- l
* s
/ 256;
43 int16_t m1
= l
* 2 - m2
;
46 int64_t r
= huev(h
+ 510, m1
, m2
);
47 int64_t g
= huev(h
, m1
, m2
);
48 int64_t b
= huev(h
- 510, m1
, m2
);
49 return (r
<< 16) | (g
<< 8) | (b
<< 0);
51 uint8_t huev(int16_t h
, int16_t m1
, int16_t m2
)
54 if(h
> 1536) h
-= 1530;
55 if(h
< 256) return m1
+ (m2
- m1
) * h
/ 255;
56 if(h
< 765) return m2
;
57 if(h
< 1020) return m1
+ (m2
- m1
) * (1020 - h
) / 255;
63 hsl_luminance(const std::string
& name
, int16_t h
, int16_t s
)
64 : a0(name
+ "0", h
, s
, 0)
65 , a1(name
+ "1", h
, s
, 32)
66 , a2(name
+ "2", h
, s
, 64)
67 , a3(name
+ "3", h
, s
, 96)
68 , a4(name
+ "4", h
, s
, 128)
69 , a5(name
+ "5", h
, s
, 160)
70 , a6(name
+ "6", h
, s
, 192)
71 , a7(name
+ "7", h
, s
, 224)
72 , a8(name
+ "8", h
, s
, 256)
88 hsl_saturation(const std::string
& name
, int16_t h
)
89 : a0(name
+ "0", h
, 0)
90 , a1(name
+ "1", h
, 32)
91 , a2(name
+ "2", h
, 64)
92 , a3(name
+ "3", h
, 96)
93 , a4(name
+ "4", h
, 128)
94 , a5(name
+ "5", h
, 160)
95 , a6(name
+ "6", h
, 192)
96 , a7(name
+ "7", h
, 224)
97 , a8(name
+ "8", h
, 256)
113 hsl_hue(const std::string
& name
)
115 , a1(name
+ "ry", 128)
116 , a1b(name
+ "o", 128)
117 , a2(name
+ "y", 255)
118 , a3(name
+ "yg", 383)
119 , a4(name
+ "g", 510)
120 , a5(name
+ "gc", 638)
121 , a6(name
+ "c", 765)
122 , a7(name
+ "cb", 893)
123 , a8(name
+ "b", 1020)
124 , a9(name
+ "bm", 1148)
125 , a10(name
+ "m", 1275)
126 , a11(name
+ "mr", 1403)
145 hsl_hue
hsls("hsl-");
146 h_rotate
hrotatep1("hue+1", 1);
147 h_rotate
hrotatep2("hue+2", 2);
148 h_rotate
hrotatep3("hue+3", 3);
149 h_rotate
hrotatep4("hue+4", 4);
150 h_rotate
hrotatep5("hue+5", 5);
151 h_rotate
hrotatep6("hue+6", 6);
152 h_rotate
hrotatep7("hue+7", 7);
153 h_rotate
hrotatep8("hue+8", 8);
154 h_rotate
hrotatep9("hue+9", 9);
155 h_rotate
hrotatep10("hue+10", 10);
156 h_rotate
hrotatep11("hue+11", 11);
157 h_rotate
hrotatep12("hue+12", 12);
158 h_rotate
hrotatep13("hue+13", 13);
159 h_rotate
hrotatep14("hue+14", 14);
160 h_rotate
hrotatep15("hue+15", 15);
161 h_rotate
hrotatep16("hue+16", 16);
162 h_rotate
hrotatep17("hue+17", 17);
163 h_rotate
hrotatep18("hue+18", 18);
164 h_rotate
hrotatep19("hue+19", 19);
165 h_rotate
hrotatep20("hue+20", 20);
166 h_rotate
hrotatep21("hue+21", 21);
167 h_rotate
hrotatep22("hue+22", 22);
168 h_rotate
hrotatep23("hue+23", 23);
169 h_rotate
hrotatem1("hue-1", -1);
170 h_rotate
hrotatem2("hue-2", -2);
171 h_rotate
hrotatem3("hue-3", -3);
172 h_rotate
hrotatem4("hue-4", -4);
173 h_rotate
hrotatem5("hue-5", -5);
174 h_rotate
hrotatem6("hue-6", -6);
175 h_rotate
hrotatem7("hue-7", -7);
176 h_rotate
hrotatem8("hue-8", -8);
177 h_rotate
hrotatem9("hue-9", -9);
178 h_rotate
hrotatem10("hue-10", -10);
179 h_rotate
hrotatem11("hue-11", -11);
180 h_rotate
hrotatem12("hue-12", -12);
181 h_rotate
hrotatem13("hue-13", -13);
182 h_rotate
hrotatem14("hue-14", -14);
183 h_rotate
hrotatem15("hue-15", -15);
184 h_rotate
hrotatem16("hue-16", -16);
185 h_rotate
hrotatem17("hue-17", -17);
186 h_rotate
hrotatem18("hue-18", -18);
187 h_rotate
hrotatem19("hue-19", -19);
188 h_rotate
hrotatem20("hue-20", -20);
189 h_rotate
hrotatem21("hue-21", -21);
190 h_rotate
hrotatem22("hue-22", -22);
191 h_rotate
hrotatem23("hue-23", -23);
193 s_adjust
sadjustp1("saturation+1", 1);
194 s_adjust
sadjustp2("saturation+2", 2);
195 s_adjust
sadjustp3("saturation+3", 3);
196 s_adjust
sadjustp4("saturation+4", 4);
197 s_adjust
sadjustp5("saturation+5", 5);
198 s_adjust
sadjustp6("saturation+6", 6);
199 s_adjust
sadjustp7("saturation+7", 7);
200 s_adjust
sadjustp8("saturation+8", 8);
201 s_adjust
sadjustp9("saturation+9", 9);
202 s_adjust
sadjustp10("saturation+10", 10);
203 s_adjust
sadjustp11("saturation+11", 11);
204 s_adjust
sadjustp12("saturation+12", 12);
205 s_adjust
sadjustp13("saturation+13", 13);
206 s_adjust
sadjustp14("saturation+14", 14);
207 s_adjust
sadjustp15("saturation+15", 15);
208 s_adjust
sadjustp16("saturation+16", 16);
209 s_adjust
sadjustm1("saturation-1", -1);
210 s_adjust
sadjustm2("saturation-2", -2);
211 s_adjust
sadjustm3("saturation-3", -3);
212 s_adjust
sadjustm4("saturation-4", -4);
213 s_adjust
sadjustm5("saturation-5", -5);
214 s_adjust
sadjustm6("saturation-6", -6);
215 s_adjust
sadjustm7("saturation-7", -7);
216 s_adjust
sadjustm8("saturation-8", -8);
217 s_adjust
sadjustm9("saturation-9", -9);
218 s_adjust
sadjustm10("saturation-10", -10);
219 s_adjust
sadjustm11("saturation-11", -11);
220 s_adjust
sadjustm12("saturation-12", -12);
221 s_adjust
sadjustm13("saturation-13", -13);
222 s_adjust
sadjustm14("saturation-14", -14);
223 s_adjust
sadjustm15("saturation-15", -15);
224 s_adjust
sadjustm16("saturation-16", -16);
226 l_adjust
ladjustp1("lightness+1", 1);
227 l_adjust
ladjustp2("lightness+2", 2);
228 l_adjust
ladjustp3("lightness+3", 3);
229 l_adjust
ladjustp4("lightness+4", 4);
230 l_adjust
ladjustp5("lightness+5", 5);
231 l_adjust
ladjustp6("lightness+6", 6);
232 l_adjust
ladjustp7("lightness+7", 7);
233 l_adjust
ladjustp8("lightness+8", 8);
234 l_adjust
ladjustp9("lightness+9", 9);
235 l_adjust
ladjustp10("lightness+10", 10);
236 l_adjust
ladjustp11("lightness+11", 11);
237 l_adjust
ladjustp12("lightness+12", 12);
238 l_adjust
ladjustp13("lightness+13", 13);
239 l_adjust
ladjustp14("lightness+14", 14);
240 l_adjust
ladjustp15("lightness+15", 15);
241 l_adjust
ladjustp16("lightness+16", 16);
242 l_adjust
ladjustm1("lightness-1", -1);
243 l_adjust
ladjustm2("lightness-2", -2);
244 l_adjust
ladjustm3("lightness-3", -3);
245 l_adjust
ladjustm4("lightness-4", -4);
246 l_adjust
ladjustm5("lightness-5", -5);
247 l_adjust
ladjustm6("lightness-6", -6);
248 l_adjust
ladjustm7("lightness-7", -7);
249 l_adjust
ladjustm8("lightness-8", -8);
250 l_adjust
ladjustm9("lightness-9", -9);
251 l_adjust
ladjustm10("lightness-10", -10);
252 l_adjust
ladjustm11("lightness-11", -11);
253 l_adjust
ladjustm12("lightness-12", -12);
254 l_adjust
ladjustm13("lightness-13", -13);
255 l_adjust
ladjustm14("lightness-14", -14);
256 l_adjust
ladjustm15("lightness-15", -15);
257 l_adjust
ladjustm16("lightness-16", -16);