8#define deg2rad(deg) ((deg)*3.141592 / 180.0)
24 virtual uint16_t
Width()
const = 0;
39 virtual void Fill(
bool on) = 0;
47 virtual void DrawPixel(uint_fast8_t x, uint_fast8_t y,
bool on) = 0;
55 virtual void SetColorFG(uint8_t red, uint8_t green, uint8_t blue) = 0;
63 virtual void SetColorBG(uint8_t red, uint8_t green, uint8_t blue) = 0;
125 int_fast16_t start_angle,
138 DrawCircle(uint_fast8_t x, uint_fast8_t y, uint_fast8_t radius,
bool on)
140 DrawArc(x, y, radius, 0, 360, on);
138 DrawCircle(uint_fast8_t x, uint_fast8_t y, uint_fast8_t radius,
bool on) {
…}
228template <
class ChildType>
241 int_fast16_t deltaX = abs((int_fast16_t)x2 - (int_fast16_t)x1);
242 int_fast16_t deltaY = abs((int_fast16_t)y2 - (int_fast16_t)y1);
243 int_fast16_t signX = ((x1 < x2) ? 1 : -1);
244 int_fast16_t signY = ((y1 < y2) ? 1 : -1);
245 int_fast16_t error = deltaX - deltaY;
251 ((ChildType*)(
this))->ChildType::DrawPixel(x2, y2, on);
253 while((x1 != x2) || (y1 != y2))
255 ((ChildType*)(
this))->ChildType::DrawPixel(x1, y1, on);
276 bool fill =
false)
override
280 for(uint_fast8_t x = x1; x <= x2; x++)
282 for(uint_fast8_t y = y1; y <= y2; y++)
284 ((ChildType*)(
this))->ChildType::DrawPixel(x, y, on);
290 ((ChildType*)(
this))->ChildType::DrawLine(x1, y1, x2, y1, on);
291 ((ChildType*)(
this))->ChildType::DrawLine(x2, y1, x2, y2, on);
292 ((ChildType*)(
this))->ChildType::DrawLine(x2, y2, x1, y2, on);
293 ((ChildType*)(
this))->ChildType::DrawLine(x1, y2, x1, y1, on);
300 int_fast16_t start_angle,
305 int_fast16_t t_x, t_y, err, e2;
308 float t_sxy, t_syx, t_sxny, t_synx;
309 float t_exy, t_eyx, t_exny, t_eynx;
311 float start_angle_rad, end_angle_rad;
312 float start_x, start_y, end_x, end_y;
316 d1 = d2 = d3 = d4 =
true;
322 start_angle += sweep;
326 start_angle_rad =
deg2rad(start_angle);
327 end_angle_rad =
deg2rad(start_angle + sweep);
329 start_x = cos(start_angle_rad) * radius;
330 start_y = -sin(start_angle_rad) * radius;
331 end_x = cos(end_angle_rad) * radius;
332 end_y = -sin(end_angle_rad) * radius;
335 if((end_x - start_x) * (end_x - start_x)
336 + (end_y - start_y) * (end_y - start_y)
348 err = 2 - 2 * radius;
354 t_sxy = start_x * t_y;
355 t_syx = start_y * t_x;
356 t_sxny = start_x * -t_y;
357 t_synx = start_y * -t_x;
360 t_exny = end_x * -t_y;
361 t_eynx = end_y * -t_x;
365 d1 = (t_sxy - t_synx < 0 || t_exy - t_eynx > 0);
366 d2 = (t_sxy - t_syx < 0 || t_exy - t_eyx > 0);
367 d3 = (t_sxny - t_syx < 0 || t_exny - t_eyx > 0);
368 d4 = (t_sxny - t_synx < 0 || t_exny - t_eynx > 0);
372 d1 = (t_sxy - t_synx < 0 && t_exy - t_eynx > 0);
373 d2 = (t_sxy - t_syx < 0 && t_exy - t_eyx > 0);
374 d3 = (t_sxny - t_syx < 0 && t_exny - t_eyx > 0);
375 d4 = (t_sxny - t_synx < 0 && t_exny - t_eynx > 0);
381 ->ChildType::DrawPixel(x - t_x, y + t_y, on);
384 ->ChildType::DrawPixel(x + t_x, y + t_y, on);
387 ->ChildType::DrawPixel(x + t_x, y - t_y, on);
390 ->ChildType::DrawPixel(x - t_x, y - t_y, on);
396 err = err + (t_y * 2 + 1);
397 if(-t_x == t_y && e2 <= t_x)
405 err = err + (t_x * 2 + 1);
415 if(ch < 32 || ch > 126)
432 if((b << j) & 0x8000)
435 ->ChildType::DrawPixel(
441 ->ChildType::DrawPixel(
459 if(((ChildType*)(
this))->ChildType::WriteChar(*str, font, on)
480 const auto alignedRect
481 = GetTextRect(str, font).
AlignedWithin(boundingBox, alignment);
482 SetCursor(alignedRect.GetX(), alignedRect.GetY());
483 ((ChildType*)(
this))->ChildType::WriteString(str, font, on);
488 uint32_t strlen(
const char*
string)
491 while(*
string++ !=
'\0')
496 Rectangle GetTextRect(
const char* text,
const FontDef& font)
498 const auto numChars = strlen(text);
Definition color_display.h:18
virtual Rectangle WriteStringAligned(const char *str, const FontDef &font, Rectangle boundingBox, Alignment alignment, bool on)=0
virtual void DrawPixel(uint_fast8_t x, uint_fast8_t y, bool on)=0
Rectangle GetBounds() const
Definition color_display.h:26
virtual uint16_t Width() const =0
uint16_t currentY_
Definition color_display.h:199
virtual char WriteChar(char ch, FontDef font, bool on)=0
virtual char WriteString(const char *str, FontDef font, bool on)=0
void DrawCircle(uint_fast8_t x, uint_fast8_t y, uint_fast8_t radius, bool on)
Definition color_display.h:138
size_t CurrentY()
Definition color_display.h:33
virtual uint16_t Height() const =0
size_t CurrentX()
Definition color_display.h:32
virtual void DrawLine(uint_fast8_t x1, uint_fast8_t y1, uint_fast8_t x2, uint_fast8_t y2, bool on)=0
virtual void SetColorBG(uint8_t red, uint8_t green, uint8_t blue)=0
ColorGraphicsDisplay()
Definition color_display.h:20
void SetCursor(uint16_t x, uint16_t y)
Definition color_display.h:185
virtual ~ColorGraphicsDisplay()
Definition color_display.h:21
virtual void Fill(bool on)=0
uint16_t currentX_
Definition color_display.h:198
virtual void DrawRect(uint_fast8_t x1, uint_fast8_t y1, uint_fast8_t x2, uint_fast8_t y2, bool on, bool fill=false)=0
virtual void DrawArc(uint_fast8_t x, uint_fast8_t y, uint_fast8_t radius, int_fast16_t start_angle, int_fast16_t sweep, bool on)=0
virtual void SetColorFG(uint8_t red, uint8_t green, uint8_t blue)=0
void DrawRect(const Rectangle &rect, bool on, bool fill=false)
Definition color_display.h:103
Definition color_display.h:230
char WriteString(const char *str, FontDef font, bool on) override
Definition color_display.h:454
void DrawLine(uint_fast8_t x1, uint_fast8_t y1, uint_fast8_t x2, uint_fast8_t y2, bool on) override
Definition color_display.h:235
void DrawRect(uint_fast8_t x1, uint_fast8_t y1, uint_fast8_t x2, uint_fast8_t y2, bool on, bool fill=false) override
Definition color_display.h:271
void DrawArc(uint_fast8_t x, uint_fast8_t y, uint_fast8_t radius, int_fast16_t start_angle, int_fast16_t sweep, bool on) override
Definition color_display.h:297
Rectangle WriteStringAligned(const char *str, const FontDef &font, Rectangle boundingBox, Alignment alignment, bool on) override
Definition color_display.h:474
ColorGraphicsDisplayImpl()
Definition color_display.h:232
char WriteChar(char ch, FontDef font, bool on) override
Definition color_display.h:410
virtual ~ColorGraphicsDisplayImpl()
Definition color_display.h:233
Definition graphics_common.h:22
int16_t GetY() const
Definition graphics_common.h:57
int16_t GetRight() const
Definition graphics_common.h:60
Rectangle AlignedWithin(const Rectangle &other, Alignment alignment) const
Definition graphics_common.h:209
int16_t GetBottom() const
Definition graphics_common.h:61
int16_t GetX() const
Definition graphics_common.h:56
#define deg2rad(deg)
Definition color_display.h:8
Hardware defines and helpers for daisy field platform.
Definition index.h:2
Alignment
Definition graphics_common.h:9
Definition oled_fonts.h:17
uint8_t FontHeight
Definition oled_fonts.h:19
const uint16_t * data
Definition oled_fonts.h:20
const uint8_t FontWidth
Definition oled_fonts.h:18