6
6
#include < algorithm>
7
7
#include < vector>
8
8
#include < functional>
9
+ #include < math.h>
9
10
10
11
#include " libraries/hershey_fonts/hershey_fonts.hpp"
11
12
#include " libraries/bitmap_fonts/bitmap_fonts.hpp"
@@ -25,6 +26,8 @@ namespace pimoroni {
25
26
typedef uint8_t RGB332;
26
27
typedef uint16_t RGB565;
27
28
typedef uint32_t RGB888;
29
+
30
+
28
31
struct RGB {
29
32
int16_t r, g, b;
30
33
@@ -90,6 +93,8 @@ namespace pimoroni {
90
93
}
91
94
};
92
95
96
+
97
+
93
98
typedef int Pen;
94
99
95
100
struct Rect ;
@@ -171,6 +176,9 @@ namespace pimoroni {
171
176
Rect bounds;
172
177
Rect clip;
173
178
179
+
180
+
181
+
174
182
typedef std::function<void (void *data, size_t length)> conversion_callback_func;
175
183
typedef std::function<RGB565()> next_pixel_func;
176
184
// typedef std::function<void(int y)> scanline_interrupt_func;
@@ -184,6 +192,7 @@ namespace pimoroni {
184
192
return RGB (r, g, b).to_rgb332 ();
185
193
}
186
194
195
+
187
196
static constexpr RGB565 rgb332_to_rgb565 (RGB332 c) {
188
197
uint16_t p = ((c & 0b11100000 ) << 8 ) |
189
198
((c & 0b00011100 ) << 6 ) |
@@ -221,6 +230,7 @@ namespace pimoroni {
221
230
virtual void set_pixel_span (const Point &p, uint l) = 0;
222
231
223
232
virtual int create_pen (uint8_t r, uint8_t g, uint8_t b);
233
+ virtual int create_pen_hsv (float h, float s, float v);
224
234
virtual int update_pen (uint8_t i, uint8_t r, uint8_t g, uint8_t b);
225
235
virtual int reset_pen (uint8_t i);
226
236
virtual void set_pixel_dither (const Point &p, const RGB &c);
@@ -253,6 +263,7 @@ namespace pimoroni {
253
263
void polygon (const std::vector<Point> &points);
254
264
void triangle (Point p1, Point p2, Point p3);
255
265
void line (Point p1, Point p2);
266
+ void from_hsv (float h, float s, float v, uint8_t &r, uint8_t &g, uint8_t &b);
256
267
257
268
protected:
258
269
void frame_convert_rgb565 (conversion_callback_func callback, next_pixel_func get_next_pixel);
@@ -400,7 +411,6 @@ namespace pimoroni {
400
411
void set_pen (uint c) override ;
401
412
void set_pen (uint8_t r, uint8_t g, uint8_t b) override ;
402
413
int create_pen (uint8_t r, uint8_t g, uint8_t b) override ;
403
-
404
414
void set_pixel (const Point &p) override ;
405
415
void set_pixel_span (const Point &p, uint l) override ;
406
416
void set_pixel_dither (const Point &p, const RGB &c) override ;
@@ -422,14 +432,14 @@ namespace pimoroni {
422
432
void set_pen (uint c) override ;
423
433
void set_pen (uint8_t r, uint8_t g, uint8_t b) override ;
424
434
int create_pen (uint8_t r, uint8_t g, uint8_t b) override ;
435
+ int create_pen_hsv (float h, float s, float v) override ;
425
436
void set_pixel (const Point &p) override ;
426
437
void set_pixel_span (const Point &p, uint l) override ;
427
438
static size_t buffer_size (uint w, uint h) {
428
439
return w * h * sizeof (RGB565);
429
440
}
430
441
};
431
442
432
-
433
443
class PicoGraphics_PenRGB888 : public PicoGraphics {
434
444
public:
435
445
RGB src_color;
@@ -438,6 +448,7 @@ namespace pimoroni {
438
448
void set_pen (uint c) override ;
439
449
void set_pen (uint8_t r, uint8_t g, uint8_t b) override ;
440
450
int create_pen (uint8_t r, uint8_t g, uint8_t b) override ;
451
+ int create_pen_hsv (float h, float s, float v) override ;
441
452
void set_pixel (const Point &p) override ;
442
453
void set_pixel_span (const Point &p, uint l) override ;
443
454
static size_t buffer_size (uint w, uint h) {
0 commit comments