diff options
| author | uvok | 2026-05-03 18:57:41 +0200 |
|---|---|---|
| committer | uvok | 2026-05-03 18:57:41 +0200 |
| commit | 3f808628dd27552bc50609baad1073e5c0b59b87 (patch) | |
| tree | 27269f8569404bd19250b791349b6def5f9be3c7 /src | |
| parent | d98908f1b2fbc1136b1efebb582d568e7555ba23 (diff) | |
Add function to draw text
Diffstat (limited to 'src')
| -rw-r--r-- | src/display.cpp | 54 |
1 files changed, 40 insertions, 14 deletions
diff --git a/src/display.cpp b/src/display.cpp index 37b938a..277fc7a 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -6,6 +6,7 @@ #include <Fonts/FreeSansBold12pt7b.h> // #include <GxEPD2_3C.h> #include <GxEPD2_BW.h> +#include <QRCodeGFX.h> #include "badge/config.h" #include "badge/util.h" @@ -33,7 +34,10 @@ GxEPD2_BW<GxEPD2_290_T94, GxEPD2_290_T94::HEIGHT> display(GxEPD2_290_T94(45, 46, #error "define display" #endif -static uint8_t displayed = 0; +QRCodeGFX qrc(display); + +static uint8_t displayed_image = 0; +static std::string displayed_text; #include "cheebox.xbm" #include "chleepy.xbm" @@ -63,6 +67,7 @@ void de::uvok::badge::display_init() display.hibernate(); LOG_F("Display done.\n"); + } #define IMAGE_DATA(name, text) {name##_bits, name##_width, name##_height, text} @@ -83,24 +88,38 @@ const int de::uvok::badge::image_count = (ARRAY_LENGTH(imgs)); typedef enum { DISPLAY_PREVIEW, - DISPLAY_FULL + DISPLAY_FULL, + DISPLAY_QRCODE } display_mode_t; +static void displayQRCode() +{ + do + { + display.setFullWindow(); + } while (display.nextPage()); +} + static void displayDo(display_mode_t mode) { + if (mode == DISPLAY_QRCODE) + { + displayQRCode(); + return; + } if (is_initial) { mode = DISPLAY_FULL; is_initial = false; } - LOG_F("Print image %d in full mode? %d\n", displayed, mode); + LOG_F("Print image %d in full mode? %d\n", displayed_image, mode); display.setRotation(rotation); display.setTextColor(GxEPD_BLACK); display.setFont(&FreeSansBold12pt7b); - const char *display_text = imgs[displayed].text; + const char *display_text = imgs[displayed_image].text; int16_t tbx, tby; uint16_t tbw, tbh; display.getTextBounds(display_text, 0, 0, &tbx, &tby, &tbw, &tbh); @@ -117,8 +136,8 @@ static void displayDo(display_mode_t mode) if (mode == DISPLAY_FULL) { display.setFullWindow(); - display.drawXBitmap(0, 0, (const unsigned char *)imgs[displayed].bits, imgs[displayed].width, - imgs[displayed].height, GxEPD_BLACK); + display.drawXBitmap(0, 0, (const unsigned char *)imgs[displayed_image].bits, imgs[displayed_image].width, + imgs[displayed_image].height, GxEPD_BLACK); } else { @@ -137,24 +156,24 @@ static void displayDo(display_mode_t mode) uint8_t de::uvok::badge::display_prev() { - displayed--; - if (displayed >= image_count) - displayed = image_count - 1; + displayed_image--; + if (displayed_image >= image_count) + displayed_image = image_count - 1; displayDo(DISPLAY_PREVIEW); - return displayed; + return displayed_image; } uint8_t de::uvok::badge::display_next() { - displayed = (displayed + 1) % image_count; + displayed_image = (displayed_image + 1) % image_count; displayDo(DISPLAY_PREVIEW); - return displayed; + return displayed_image; } uint8_t de::uvok::badge::display_refresh() { displayDo(DISPLAY_FULL); - return displayed; + return displayed_image; } void de::uvok::badge::display_direct(uint8_t num) @@ -162,10 +181,17 @@ void de::uvok::badge::display_direct(uint8_t num) LOG_F("Display direct\n"); if (num >= image_count) return; - displayed = num; + displayed_image = num; displayDo(DISPLAY_FULL); } +void de::uvok::badge::display_text(const std::string& text) +{ + displayed_text = text; + displayDo(DISPLAY_QRCODE); + is_initial = true; +} + void de::uvok::badge::display_indicator(DisplayIndicator indicator) { LOG_F("Set indicator to %d\n", indicator); |
