File syn_canvas.h¶
File List > display > syn_canvas.h
Go to the documentation of this file
#ifndef SYN_CANVAS_H
#define SYN_CANVAS_H
#include "../common/syn_defs.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* ── Font descriptor ────────────────────────────────────────────────────── */
typedef struct {
const uint8_t *data;
uint8_t width;
uint8_t height;
uint8_t first_char;
uint8_t char_count;
} SYN_Font;
extern const SYN_Font syn_font_5x7;
/* ── Flush callback ─────────────────────────────────────────────────────── */
typedef void (*SYN_Canvas_FlushFn)(const uint8_t *buf, size_t len, void *ctx);
/* ── Canvas instance ────────────────────────────────────────────────────── */
typedef struct {
uint8_t *framebuf;
size_t buf_size;
uint16_t width;
uint16_t height;
uint8_t bpp;
const SYN_Font *font;
SYN_Canvas_FlushFn flush_fn;
void *flush_ctx;
int16_t clip_x;
int16_t clip_y;
int16_t clip_w;
int16_t clip_h;
} SYN_Canvas;
/* ── API ────────────────────────────────────────────────────────────────── */
void syn_canvas_init(SYN_Canvas *c, uint8_t *buf, uint16_t w, uint16_t h, uint8_t bpp,
SYN_Canvas_FlushFn flush, void *ctx);
void syn_canvas_set_clip(SYN_Canvas *c, int16_t x, int16_t y, int16_t w, int16_t h);
void syn_canvas_reset_clip(SYN_Canvas *c);
void syn_canvas_set_font(SYN_Canvas *c, const SYN_Font *font);
void syn_canvas_clear(SYN_Canvas *c);
void syn_canvas_fill(SYN_Canvas *c, uint16_t color);
void syn_canvas_pixel(SYN_Canvas *c, int16_t x, int16_t y, uint16_t color);
void syn_canvas_line(SYN_Canvas *c, int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
void syn_canvas_line_aa(SYN_Canvas *c, int16_t x0, int16_t y0, int16_t x1, int16_t y1,
uint16_t color);
void syn_canvas_rect(SYN_Canvas *c, int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
void syn_canvas_rect_fill(SYN_Canvas *c, int16_t x, int16_t y, int16_t w, int16_t h,
uint16_t color);
void syn_canvas_circle(SYN_Canvas *c, int16_t cx, int16_t cy, int16_t r, uint16_t color);
void syn_canvas_circle_fill(SYN_Canvas *c, int16_t cx, int16_t cy, int16_t r, uint16_t color);
void syn_canvas_arc(SYN_Canvas *c, int16_t cx, int16_t cy, int16_t r, int16_t start_angle_deg,
int16_t end_angle_deg, uint16_t color);
void syn_canvas_line_polar(SYN_Canvas *c, int16_t cx, int16_t cy, int16_t angle_deg, int16_t length,
uint16_t color);
void syn_canvas_rect_round(SYN_Canvas *c, int16_t x, int16_t y, int16_t w, int16_t h, int16_t r,
uint16_t color);
void syn_canvas_rect_round_fill(SYN_Canvas *c, int16_t x, int16_t y, int16_t w, int16_t h,
int16_t r, uint16_t color);
void syn_canvas_bitmap(SYN_Canvas *c, int16_t x, int16_t y, const uint8_t *bitmap, int16_t w,
int16_t h, uint16_t color);
void syn_canvas_text(SYN_Canvas *c, int16_t x, int16_t y, const char *str, uint16_t color);
uint8_t syn_canvas_char(SYN_Canvas *c, int16_t x, int16_t y, char ch, uint16_t color);
uint16_t syn_canvas_text_width(const SYN_Canvas *c, const char *str);
uint8_t syn_canvas_text_height(const SYN_Canvas *c);
void syn_canvas_hline(SYN_Canvas *c, int16_t x, int16_t y, int16_t w, uint16_t color);
void syn_canvas_vline(SYN_Canvas *c, int16_t x, int16_t y, int16_t h, uint16_t color);
void syn_canvas_flush(SYN_Canvas *c);
void syn_canvas_flush_partial(SYN_Canvas *c, size_t offset, size_t len);
/* ── Color helpers (RGB565) ─────────────────────────────────────────────── */
static inline uint16_t syn_rgb565(uint8_t r, uint8_t g, uint8_t b)
{
return (uint16_t)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3));
}
#define SYN_COLOR_BLACK 0x0000
#define SYN_COLOR_WHITE 0xFFFF
#define SYN_COLOR_RED 0xF800
#define SYN_COLOR_GREEN 0x07E0
#define SYN_COLOR_BLUE 0x001F
#ifdef __cplusplus
}
#endif
#endif /* SYN_CANVAS_H */