mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-05 23:27:38 +03:00
74 lines
2.2 KiB
C++
74 lines
2.2 KiB
C++
#include "Activity.h"
|
|
|
|
#include <GfxRenderer.h>
|
|
|
|
#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;
|
|
}
|