diff --git a/lib/EpdFont/EpdFont.cpp b/lib/EpdFont/EpdFont.cpp index d2d2260..0640b0d 100644 --- a/lib/EpdFont/EpdFont.cpp +++ b/lib/EpdFont/EpdFont.cpp @@ -2,8 +2,6 @@ #include -EpdFont::EpdFont(const EpdFontData* data) { this->data = data; } - inline int min(const int a, const int b) { return a < b ? a : b; } inline int max(const int a, const int b) { return a < b ? b : a; } diff --git a/lib/EpdFont/EpdFont.h b/lib/EpdFont/EpdFont.h index 83e10eb..c8473fc 100644 --- a/lib/EpdFont/EpdFont.h +++ b/lib/EpdFont/EpdFont.h @@ -6,7 +6,7 @@ class EpdFont { public: const EpdFontData* data; - explicit EpdFont(const EpdFontData* data); + explicit EpdFont(const EpdFontData* data) : data(data) {} ~EpdFont() = default; void getTextDimensions(const char* string, int* w, int* h) const; bool hasPrintableChars(const char* string) const; diff --git a/lib/EpdFontRenderer/EpdFontRenderer.hpp b/lib/EpdFontRenderer/EpdFontRenderer.hpp index 127c728..66541f7 100644 --- a/lib/EpdFontRenderer/EpdFontRenderer.hpp +++ b/lib/EpdFontRenderer/EpdFontRenderer.hpp @@ -11,12 +11,12 @@ static tinfl_decompressor decomp; template class EpdFontRenderer { - Renderable* renderer; + Renderable& renderer; void renderChar(uint32_t cp, int* x, const int* y, uint16_t color, EpdFontStyle style = REGULAR); public: const EpdFontFamily* fontFamily; - explicit EpdFontRenderer(const EpdFontFamily* fontFamily, Renderable* renderer) + explicit EpdFontRenderer(const EpdFontFamily* fontFamily, Renderable& renderer) : fontFamily(fontFamily), renderer(renderer) {} ~EpdFontRenderer() = default; void renderString(const char* string, int* x, int* y, uint16_t color, EpdFontStyle style = REGULAR); @@ -113,7 +113,7 @@ void EpdFontRenderer::renderChar(const uint32_t cp, int* x, const in } if (bm) { - renderer->drawPixel(xx, yy, color); + renderer.drawPixel(xx, yy, color); } byteComplete = !byteComplete; localX++; diff --git a/lib/EpdRenderer/EpdRenderer.cpp b/lib/EpdRenderer/EpdRenderer.cpp index 0a2c961..a65d616 100644 --- a/lib/EpdRenderer/EpdRenderer.cpp +++ b/lib/EpdRenderer/EpdRenderer.cpp @@ -8,21 +8,30 @@ #include "builtinFonts/ubuntu_10.h" #include "builtinFonts/ubuntu_bold_10.h" -EpdRenderer::EpdRenderer(XteinkDisplay* display) { - const auto bookerlyFontFamily = new EpdFontFamily(new EpdFont(&bookerly), new EpdFont(&bookerly_bold), - new EpdFont(&bookerly_italic), new EpdFont(&bookerly_bold_italic)); - const auto ubuntuFontFamily = new EpdFontFamily(new EpdFont(&ubuntu_10), new EpdFont(&ubuntu_bold_10)); +EpdFont bookerlyFont(&bookerly); +EpdFont bookerlyBoldFont(&bookerly_bold); +EpdFont bookerlyItalicFont(&bookerly_italic); +EpdFont bookerlyBoldItalicFont(&bookerly_bold_italic); +EpdFontFamily bookerlyFontFamily(&bookerlyFont, &bookerlyBoldFont, &bookerlyItalicFont, &bookerlyBoldItalicFont); - this->display = display; - this->regularFontRenderer = new EpdFontRenderer(bookerlyFontFamily, display); - this->smallFontRenderer = new EpdFontRenderer(new EpdFontFamily(new EpdFont(&babyblue)), display); - this->uiFontRenderer = new EpdFontRenderer(ubuntuFontFamily, display); +EpdFont smallFont(&babyblue); +EpdFontFamily smallFontFamily(&smallFont); - this->marginTop = 11; - this->marginBottom = 30; - this->marginLeft = 10; - this->marginRight = 10; - this->lineCompression = 0.95f; +EpdFont ubuntu10Font(&ubuntu_10); +EpdFont ununtuBold10Font(&ubuntu_bold_10); +EpdFontFamily ubuntuFontFamily(&ubuntu10Font, &ununtuBold10Font); + +EpdRenderer::EpdRenderer(XteinkDisplay& display) + : display(display), marginTop(11), marginBottom(30), marginLeft(10), marginRight(10), lineCompression(0.95f) { + this->regularFontRenderer = new EpdFontRenderer(&bookerlyFontFamily, display); + this->smallFontRenderer = new EpdFontRenderer(&smallFontFamily, display); + this->uiFontRenderer = new EpdFontRenderer(&ubuntuFontFamily, display); +} + +EpdRenderer::~EpdRenderer() { + delete regularFontRenderer; + delete smallFontRenderer; + delete uiFontRenderer; } int EpdRenderer::getTextWidth(const char* text, const EpdFontStyle style) const { @@ -107,24 +116,24 @@ void EpdRenderer::drawTextBox(const int x, const int y, const std::string& text, } void EpdRenderer::drawLine(int x1, int y1, int x2, int y2, uint16_t color) const { - display->drawLine(x1 + marginLeft, y1 + marginTop, x2 + marginLeft, y2 + marginTop, - color > 0 ? GxEPD_BLACK : GxEPD_WHITE); + display.drawLine(x1 + marginLeft, y1 + marginTop, x2 + marginLeft, y2 + marginTop, + color > 0 ? GxEPD_BLACK : GxEPD_WHITE); } void EpdRenderer::drawRect(const int x, const int y, const int width, const int height, const uint16_t color) const { - display->drawRect(x + marginLeft, y + marginTop, width, height, color > 0 ? GxEPD_BLACK : GxEPD_WHITE); + display.drawRect(x + marginLeft, y + marginTop, width, height, color > 0 ? GxEPD_BLACK : GxEPD_WHITE); } void EpdRenderer::fillRect(const int x, const int y, const int width, const int height, const uint16_t color) const { - display->fillRect(x + marginLeft, y + marginTop, width, height, color > 0 ? GxEPD_BLACK : GxEPD_WHITE); + display.fillRect(x + marginLeft, y + marginTop, width, height, color > 0 ? GxEPD_BLACK : GxEPD_WHITE); } void EpdRenderer::drawCircle(const int x, const int y, const int radius, const uint16_t color) const { - display->drawCircle(x + marginLeft, y + marginTop, radius, color > 0 ? GxEPD_BLACK : GxEPD_WHITE); + display.drawCircle(x + marginLeft, y + marginTop, radius, color > 0 ? GxEPD_BLACK : GxEPD_WHITE); } void EpdRenderer::fillCircle(const int x, const int y, const int radius, const uint16_t color) const { - display->fillCircle(x + marginLeft, y + marginTop, radius, color > 0 ? GxEPD_BLACK : GxEPD_WHITE); + display.fillCircle(x + marginLeft, y + marginTop, radius, color > 0 ? GxEPD_BLACK : GxEPD_WHITE); } void EpdRenderer::drawImage(const uint8_t bitmap[], const int x, const int y, const int width, const int height, @@ -134,23 +143,23 @@ void EpdRenderer::drawImage(const uint8_t bitmap[], const int x, const int y, co void EpdRenderer::drawImageNoMargin(const uint8_t bitmap[], const int x, const int y, const int width, const int height, const bool invert, const bool mirrorY) const { - display->drawImage(bitmap, x, y, width, height, invert, mirrorY); + display.drawImage(bitmap, x, y, width, height, invert, mirrorY); } void EpdRenderer::clearScreen(const bool black) const { Serial.println("Clearing screen"); - display->fillScreen(black ? GxEPD_BLACK : GxEPD_WHITE); + display.fillScreen(black ? GxEPD_BLACK : GxEPD_WHITE); } -void EpdRenderer::flushDisplay(const bool partialUpdate) const { display->display(partialUpdate); } +void EpdRenderer::flushDisplay(const bool partialUpdate) const { display.display(partialUpdate); } void EpdRenderer::flushArea(const int x, const int y, const int width, const int height) const { - display->displayWindow(x + marginLeft, y + marginTop, width, height); + display.displayWindow(x + marginLeft, y + marginTop, width, height); } -int EpdRenderer::getPageWidth() const { return display->width() - marginLeft - marginRight; } +int EpdRenderer::getPageWidth() const { return display.width() - marginLeft - marginRight; } -int EpdRenderer::getPageHeight() const { return display->height() - marginTop - marginBottom; } +int EpdRenderer::getPageHeight() const { return display.height() - marginTop - marginBottom; } int EpdRenderer::getSpaceWidth() const { return regularFontRenderer->fontFamily->getGlyph(' ', REGULAR)->advanceX; } diff --git a/lib/EpdRenderer/EpdRenderer.h b/lib/EpdRenderer/EpdRenderer.h index 6083953..83822c6 100644 --- a/lib/EpdRenderer/EpdRenderer.h +++ b/lib/EpdRenderer/EpdRenderer.h @@ -7,7 +7,7 @@ #define XteinkDisplay GxEPD2_BW class EpdRenderer { - XteinkDisplay* display; + XteinkDisplay& display; EpdFontRenderer* regularFontRenderer; EpdFontRenderer* smallFontRenderer; EpdFontRenderer* uiFontRenderer; @@ -18,8 +18,8 @@ class EpdRenderer { float lineCompression; public: - explicit EpdRenderer(XteinkDisplay* display); - ~EpdRenderer() = default; + explicit EpdRenderer(XteinkDisplay& display); + ~EpdRenderer(); int getTextWidth(const char* text, EpdFontStyle style = REGULAR) const; int getUiTextWidth(const char* text, EpdFontStyle style = REGULAR) const; int getSmallTextWidth(const char* text, EpdFontStyle style = REGULAR) const; diff --git a/src/main.cpp b/src/main.cpp index 071662f..1ac0288 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,7 +31,7 @@ GxEPD2_BW display(GxEPD2_426_GDEQ0426T82(EPD_CS, EPD_DC, EPD_RST, EPD_BUSY)); InputManager inputManager; -EpdRenderer renderer(&display); +EpdRenderer renderer(display); Screen* currentScreen; CrossPointState appState; diff --git a/src/screens/EpubReaderScreen.cpp b/src/screens/EpubReaderScreen.cpp index 357f8fa..374b468 100644 --- a/src/screens/EpubReaderScreen.cpp +++ b/src/screens/EpubReaderScreen.cpp @@ -74,8 +74,6 @@ void EpubReaderScreen::handleInput() { return; } - Serial.printf("Prev released: %d, Next released: %d\n", prevReleased, nextReleased); - const bool skipChapter = inputManager.getHeldTime() > SKIP_CHAPTER_MS; if (skipChapter) {