#include "Activity.h" #include #include "CrossPointSettings.h" void Activity::onEnter() { Serial.printf("[%lu] [ACT] Entering activity: %s\n", millis(), name.c_str()); setMargins(); } void Activity::onExit() { Serial.printf("[%lu] [ACT] Exiting activity: %s\n", millis(), name.c_str()); } void Activity::setMargins() { switch (SETTINGS.orientation) { case CrossPointSettings::ORIENTATION::PORTRAIT: marginLeft = marginRight = marginTop = 20; marginBottom = 50; break; case CrossPointSettings::ORIENTATION::LANDSCAPE_CW: marginRight = marginTop = marginBottom = 20; marginLeft = 50; break; case CrossPointSettings::ORIENTATION::INVERTED: marginLeft = marginRight = marginBottom = 20; marginTop = 20; break; case CrossPointSettings::ORIENTATION::LANDSCAPE_CCW: marginLeft = marginTop = marginBottom = 20; marginRight = 50; break; default: break; } } void Activity::setRendererOrientation() { switch (SETTINGS.orientation) { case CrossPointSettings::ORIENTATION::PORTRAIT: renderer.setOrientation(GfxRenderer::Orientation::Portrait); break; case CrossPointSettings::ORIENTATION::LANDSCAPE_CW: renderer.setOrientation(GfxRenderer::Orientation::LandscapeClockwise); break; case CrossPointSettings::ORIENTATION::INVERTED: renderer.setOrientation(GfxRenderer::Orientation::PortraitInverted); break; case CrossPointSettings::ORIENTATION::LANDSCAPE_CCW: renderer.setOrientation(GfxRenderer::Orientation::LandscapeCounterClockwise); break; } setMargins(); } // Number of items that fit on a page, derived from logical screen height. // This adapts automatically when switching between portrait and landscape. int Activity::getPageItems() const { // Layout constants used in renderScreen constexpr int startY = CONTENT_START_Y; constexpr int lineHeight = LINE_HEIGHT; const int screenHeight = renderer.getScreenHeight(); const int endY = screenHeight - lineHeight; const int availableHeight = endY - startY; int items = availableHeight / lineHeight; // Ensure we always have at least one item per page to avoid division by zero if (items < 1) { items = 1; } return items; }