diff --git a/src/screens/SleepScreen.cpp b/src/screens/SleepScreen.cpp index cbcb411..0b83387 100644 --- a/src/screens/SleepScreen.cpp +++ b/src/screens/SleepScreen.cpp @@ -2,10 +2,23 @@ #include +#include "SD.h" #include "config.h" #include "images/CrossLarge.h" void SleepScreen::onEnter() { + // Look for sleep.bmp on the root of the sd card to determine if we should + // render a custom sleep screen instead of the default. + auto file = SD.open("/sleep.bmp"); + if (file) { + renderCustomSleepScreen(file); + return; + } + + renderDefaultSleepScreen(); +} + +void SleepScreen::renderDefaultSleepScreen() { const auto pageWidth = GfxRenderer::getScreenWidth(); const auto pageHeight = GfxRenderer::getScreenHeight(); @@ -16,3 +29,16 @@ void SleepScreen::onEnter() { renderer.invertScreen(); renderer.displayBuffer(EInkDisplay::HALF_REFRESH); } + +void SleepScreen::renderCustomSleepScreen(File file) { + Serial.println("Rendering custom sleep screen from sleep.bmp"); + + const auto pageWidth = GfxRenderer::getScreenWidth(); + const auto pageHeight = GfxRenderer::getScreenHeight(); + + renderer.clearScreen(); + + renderer.drawCenteredText(UI_FONT_ID, pageHeight / 2 + 70, "CUSTOM SLEEP SCREEN", true, BOLD); + + renderer.displayBuffer(EInkDisplay::HALF_REFRESH); +} diff --git a/src/screens/SleepScreen.h b/src/screens/SleepScreen.h index b280087..29857a8 100644 --- a/src/screens/SleepScreen.h +++ b/src/screens/SleepScreen.h @@ -1,8 +1,11 @@ #pragma once +#include "SD.h" #include "Screen.h" class SleepScreen final : public Screen { public: explicit SleepScreen(GfxRenderer& renderer, InputManager& inputManager) : Screen(renderer, inputManager) {} void onEnter() override; + void renderDefaultSleepScreen(); + void renderCustomSleepScreen(File file); };