Add quick resume

This commit is contained in:
jpirnay
2026-05-21 23:13:28 +02:00
parent ce521a63aa
commit 5bb3980dc0
40 changed files with 262 additions and 26 deletions
@@ -24,6 +24,7 @@
#include "components/UITheme.h"
#include "fontIds.h"
#include "images/Logo120.h"
#include "images/MoonIcon.h"
namespace {
@@ -353,6 +354,18 @@ size_t pickSleepImageIndex(size_t numFiles) {
void SleepActivity::onEnter() {
Activity::onEnter();
RenderLock lock(*this);
// Quick Resume: paint a moon icon over the current page and keep the framebuffer
// intact for the next wake. Applies always when the user picked Quick Resume as
// sleep screen, or only on timeout sleeps when "Quick Resume on Timeout" is on.
const bool renderQuickResume =
SETTINGS.sleepScreen == CrossPointSettings::SLEEP_SCREEN_MODE::QUICK_RESUME ||
(fromTimeout &&
SETTINGS.quickResumeSleepScreen == CrossPointSettings::QUICK_RESUME_SLEEP_SCREEN::QUICK_RESUME_AFTER_TIMEOUT);
if (renderQuickResume) {
return renderLastScreenSleepScreen();
}
// For OVERLAY mode the popup is suppressed so the frame buffer (reader page) stays intact
if (SETTINGS.sleepScreen != CrossPointSettings::SLEEP_SCREEN_MODE::OVERLAY) {
GUI.drawPopup(renderer, tr(STR_ENTERING_SLEEP));
@@ -804,6 +817,15 @@ void SleepActivity::renderBlankSleepScreen() const {
renderer.displayBuffer(HalDisplay::HALF_REFRESH);
}
void SleepActivity::renderLastScreenSleepScreen() const {
// Keep whatever is currently in the framebuffer (the reader page) and overlay a small moon
// icon to signal sleep. main.cpp persists the framebuffer to SD so the next wake can restore
// it before the boot screen would otherwise paint.
const auto pageHeight = renderer.getScreenHeight();
renderer.drawImage(MoonIcon, 0, pageHeight - MOONICON_HEIGHT, MOONICON_WIDTH, MOONICON_HEIGHT);
renderer.displayBuffer(HalDisplay::HALF_REFRESH);
}
void SleepActivity::renderOverlaySleepScreen() const {
// Overlay pictures always use portrait orientation regardless of the reader's orientation preference.
const auto savedOrientation = renderer.getOrientation();
+6 -2
View File
@@ -16,8 +16,8 @@ struct BookOverlayInfo {
class SleepActivity final : public Activity {
public:
explicit SleepActivity(GfxRenderer& renderer, MappedInputManager& mappedInput)
: Activity("Sleep", renderer, mappedInput) {}
explicit SleepActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, bool fromTimeout = false)
: Activity("Sleep", renderer, mappedInput), fromTimeout(fromTimeout) {}
void onEnter() override;
private:
@@ -28,5 +28,9 @@ class SleepActivity final : public Activity {
bool topAlignForCoverFit = false) const;
void renderBlankSleepScreen() const;
void renderOverlaySleepScreen() const;
// Quick Resume: leaves the framebuffer (reader page) intact and overlays a small moon icon.
void renderLastScreenSleepScreen() const;
BookOverlayInfo getBookOverlayInfo(const std::string& bookPath) const;
const bool fromTimeout = false;
};