56#include "res/qwiic_resdef.h"
73extern const uint8_t byte_bits[8];
80#define mod_byte(_value_) (_value_ & 0x07)
85#define swap_int(_a_, _b_) (((_a_) ^= (_b_)), ((_b_) ^= (_a_)), ((_a_) ^= (_b_)))
98 virtual void drawPixel(uint8_t x, uint8_t y, uint8_t clr)
103 virtual void drawLine(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t clr)
106 virtual void drawLineHorz(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t clr)
109 virtual void drawLineVert(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t clr)
114 virtual void drawRect(uint8_t x0, uint8_t y0, uint8_t width, uint8_t height, uint8_t clr)
117 virtual void drawRectFilled(uint8_t x0, uint8_t y0, uint8_t width, uint8_t height, uint8_t clr)
122 virtual void drawCircle(uint8_t x0, uint8_t y0, uint8_t radius, uint8_t clr)
125 virtual void drawCircleFilled(uint8_t x0, uint8_t y0, uint8_t radius, uint8_t clr)
130 virtual void drawBitmap(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *pBitmap, uint8_t bmp_width,
135 virtual void drawText(uint8_t x0, uint8_t y0,
const char *text, uint8_t clr)
141typedef void (*QwDrawPntFn)(
void *, uint8_t, uint8_t, uint8_t);
142typedef void (*QwDrawTwoPntFn)(
void *, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
143typedef void (*QwDrawCircleFn)(
void *, uint8_t, uint8_t, uint8_t, uint8_t);
144typedef void (*QwDrawBitmapFn)(
void *, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t *, uint8_t, uint8_t);
145typedef void (*QwDrawTextFn)(
void *, uint8_t, uint8_t,
const char *, uint8_t);
148struct _QwIDraw_vtable
150 QwDrawPntFn drawPixel;
151 QwDrawTwoPntFn drawLine;
152 QwDrawTwoPntFn drawLineHorz;
153 QwDrawTwoPntFn drawLineVert;
154 QwDrawTwoPntFn drawRect;
155 QwDrawTwoPntFn drawRectFilled;
156 QwDrawCircleFn drawCircle;
157 QwDrawCircleFn drawCircleFilled;
158 QwDrawBitmapFn drawBitmap;
159 QwDrawTextFn drawText;
168class QwGrBufferDevice :
protected _QwIDraw
173 QwGrBufferDevice() : m_currentFont{nullptr} {};
174 QwGrBufferDevice(uint8_t width, uint8_t height) : QwGrBufferDevice(0, 0, width, height){};
175 QwGrBufferDevice(uint8_t x0, uint8_t y0, uint8_t width, uint8_t height) : QwGrBufferDevice()
177 setViewport(x0, y0, width, height);
181 void setViewport(uint8_t x0, uint8_t y0, uint8_t width, uint8_t height)
185 m_viewport.width = width;
186 m_viewport.height = height;
189 QwRect viewport(
void)
193 uint16_t originX(
void)
197 uint16_t originY(
void)
203 return m_viewport.width;
205 uint16_t height(
void)
207 return m_viewport.height;
211 virtual bool init(
void);
215 void setFont(QwFont &font);
216 void setFont(
const QwFont *font);
220 bool getStringSize(
const char *text, uint16_t &width, uint16_t &height);
223 void line(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t clr = 1);
225 void circle(uint8_t x0, uint8_t y0, uint8_t radius, uint8_t clr = 1);
226 void circleFill(uint8_t x0, uint8_t y0, uint8_t radius, uint8_t clr = 1);
228 void pixel(uint8_t x, uint8_t y, uint8_t clr = 1);
230 void rectangle(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t clr = 1);
231 void rectangleFill(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t clr = 1);
233 void bitmap(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *pBitmap, uint8_t bmp_width,
237 void bitmap(uint8_t x0, uint8_t y0, uint8_t *pBitmap, uint8_t bmp_width, uint8_t bmp_height);
240 void bitmap(uint8_t x0, uint8_t y0, QwBitmap &bitmap);
242 void text(uint8_t x0, uint8_t y0,
const char *text, uint8_t clr = 1);
245 virtual void display(
void) = 0;
246 virtual void erase(
void) = 0;
255 virtual void drawPixel(uint8_t x, uint8_t y, uint8_t clr) = 0;
259 virtual void drawLine(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t clr);
262 virtual void drawRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t clr);
263 virtual void drawRectFilled(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t clr);
266 virtual void drawCircle(uint8_t x0, uint8_t y0, uint8_t radius, uint8_t clr);
267 virtual void drawCircleFilled(uint8_t x0, uint8_t y0, uint8_t radius, uint8_t clr);
270 virtual void drawText(uint8_t x0, uint8_t y0,
const char *text, uint8_t clr);
273 _QwIDraw_vtable m_idraw;
276 QwFont *m_currentFont;
279 bool initDrawFunctions(
void);