#pragma once #include #include #include #include #include #include "../Activity.h" #include "EpubReaderFootnotesActivity.h" class EpubReaderActivity final : public Activity { std::shared_ptr epub; std::unique_ptr
section = nullptr; TaskHandle_t displayTaskHandle = nullptr; SemaphoreHandle_t renderingMutex = nullptr; std::unique_ptr subAcitivity = nullptr; int currentSpineIndex = 0; int nextPageNumber = 0; int pagesUntilFullRefresh = 0; bool updateRequired = false; const std::function onGoBack; FootnotesData currentPageFootnotes; int savedSpineIndex = -1; int savedPageNumber = -1; bool isViewingFootnote = false; static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); void renderScreen(); void renderContents(std::unique_ptr p); void renderStatusBar() const; // Footnote navigation methods void navigateToHref(const char* href, bool savePosition = false); void restoreSavedPosition(); public: explicit EpubReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::unique_ptr epub, const std::function& onGoBack) : Activity(renderer, inputManager), epub(std::move(epub)), onGoBack(onGoBack) {} void onEnter() override; void onExit() override; void loop() override; };