get rid of global EPD var

This commit is contained in:
Shuanglei Tao
2025-10-15 17:12:00 +08:00
parent c044759262
commit 1ac6b8473f
10 changed files with 119 additions and 150 deletions

View File

@@ -130,7 +130,7 @@ void GFX_firstPage(Adafruit_GFX *gfx) {
gfx->current_page = 0;
}
bool GFX_nextPage(Adafruit_GFX *gfx, buffer_callback callback) {
bool GFX_nextPage(Adafruit_GFX *gfx, buffer_callback callback, void *user_data) {
if (callback) {
int16_t page_ys = gfx->current_page * gfx->page_height;
if (gfx->px != 0 || gfx->py != 0 || gfx->pw != gfx->_width || gfx->ph != gfx->_height) {
@@ -138,10 +138,10 @@ bool GFX_nextPage(Adafruit_GFX *gfx, buffer_callback callback) {
uint16_t dest_ys = gfx->py + page_ys; // transposed
uint16_t dest_ye = MIN(gfx->py + gfx->ph, gfx->py + page_ye);
if (dest_ye > dest_ys)
callback(gfx->buffer, gfx->color, gfx->px, dest_ys, gfx->pw, dest_ye - dest_ys);
callback(user_data, gfx->buffer, gfx->color, gfx->px, dest_ys, gfx->pw, dest_ye - dest_ys);
} else {
int16_t height = MIN(gfx->page_height, gfx->HEIGHT - page_ys);
callback(gfx->buffer, gfx->color, 0, page_ys, gfx->WIDTH, height);
callback(user_data, gfx->buffer, gfx->color, 0, page_ys, gfx->WIDTH, height);
}
}

View File

@@ -14,7 +14,7 @@
#define GFX_GREEN 0x07E0 // 0, 255, 0
#define GFX_ORANGE 0xFC00 // 255, 128, 0
typedef void (*buffer_callback)(uint8_t *black, uint8_t *color, uint16_t x, uint16_t y, uint16_t w, uint16_t h);
typedef void (*buffer_callback)(void *user_data, uint8_t *black, uint8_t *color, uint16_t x, uint16_t y, uint16_t w, uint16_t h);
typedef enum {
GFX_ROTATE_0 = 0,
@@ -51,7 +51,7 @@ void GFX_begin_4c(Adafruit_GFX *gfx, int16_t w, int16_t h, int16_t buffer_height
void GFX_setRotation(Adafruit_GFX *gfx, GFX_Rotate r);
void GFX_setWindow(Adafruit_GFX *gfx, uint16_t x, uint16_t y, uint16_t w, uint16_t h);
void GFX_firstPage(Adafruit_GFX *gfx);
bool GFX_nextPage(Adafruit_GFX *gfx, buffer_callback callback);
bool GFX_nextPage(Adafruit_GFX *gfx, buffer_callback callback, void *user_data);
void GFX_end(Adafruit_GFX *gfx);
// DRAW API

View File

@@ -420,7 +420,7 @@ static void DrawClock(Adafruit_GFX *gfx, tm_t *tm, struct Lunar_Date *Lunar, gui
}
}
void DrawGUI(gui_data_t *data, buffer_callback draw, display_mode_t mode)
void DrawGUI(gui_data_t *data, buffer_callback callback, void *callback_data)
{
if (data->week_start > 6) data->week_start = 0;
@@ -445,7 +445,7 @@ void DrawGUI(gui_data_t *data, buffer_callback draw, display_mode_t mode)
LUNAR_SolarToLunar(&Lunar, tm.tm_year + YEAR0, tm.tm_mon + 1, tm.tm_mday);
switch (mode) {
switch (data->mode) {
case MODE_CALENDAR:
DrawCalendar(&gfx, &tm, &Lunar, data);
break;
@@ -455,11 +455,11 @@ void DrawGUI(gui_data_t *data, buffer_callback draw, display_mode_t mode)
default:
break;
}
if ((mode == MODE_CALENDAR || mode == MODE_CLOCK) &&
if ((data->mode == MODE_CALENDAR || data->mode == MODE_CLOCK) &&
(tm.tm_year + YEAR0 == 2025 && tm.tm_mon + 1 == 1)) {
DrawTimeSyncTip(&gfx, data);
}
} while(GFX_nextPage(&gfx, draw));
} while(GFX_nextPage(&gfx, callback, callback_data));
GFX_end(&gfx);
}

View File

@@ -10,6 +10,7 @@ typedef enum {
} display_mode_t;
typedef struct {
display_mode_t mode;
uint16_t color;
uint16_t width;
uint16_t height;
@@ -20,6 +21,6 @@ typedef struct {
char ssid[20];
} gui_data_t;
void DrawGUI(gui_data_t *data, buffer_callback draw, display_mode_t mode);
void DrawGUI(gui_data_t *data, buffer_callback callback, void *callback_data);
#endif