mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-04 14:47:37 +03:00
Compare commits
3 Commits
9288ec0519
...
3c81496b79
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c81496b79 | ||
|
|
d403044f76 | ||
|
|
6c31f7581c |
@ -15,7 +15,7 @@ class CrossPointSettings {
|
|||||||
CrossPointSettings(const CrossPointSettings&) = delete;
|
CrossPointSettings(const CrossPointSettings&) = delete;
|
||||||
CrossPointSettings& operator=(const CrossPointSettings&) = delete;
|
CrossPointSettings& operator=(const CrossPointSettings&) = delete;
|
||||||
|
|
||||||
enum SLEEP_SCREEN_MODE { DARK = 0, LIGHT = 1, CUSTOM = 2, COVER = 3, BLANK = 4, SLEEP_SCREEN_MODE_COUNT };
|
enum SLEEP_SCREEN_MODE { DARK = 0, LIGHT = 1, CUSTOM = 2, COVER = 3, COVERELSECUSTOM = 4, BLANK = 5, SLEEP_SCREEN_MODE_COUNT };
|
||||||
enum SLEEP_SCREEN_COVER_MODE { FIT = 0, CROP = 1, SLEEP_SCREEN_COVER_MODE_COUNT };
|
enum SLEEP_SCREEN_COVER_MODE { FIT = 0, CROP = 1, SLEEP_SCREEN_COVER_MODE_COUNT };
|
||||||
enum SLEEP_SCREEN_COVER_FILTER {
|
enum SLEEP_SCREEN_COVER_FILTER {
|
||||||
NO_FILTER = 0,
|
NO_FILTER = 0,
|
||||||
|
|||||||
@ -30,6 +30,10 @@ void SleepActivity::onEnter() {
|
|||||||
return renderCoverSleepScreen();
|
return renderCoverSleepScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SETTINGS.sleepScreen == CrossPointSettings::SLEEP_SCREEN_MODE::COVERELSECUSTOM) {
|
||||||
|
return renderCoverElseCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
renderDefaultSleepScreen();
|
renderDefaultSleepScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,6 +270,75 @@ void SleepActivity::renderCoverSleepScreen() const {
|
|||||||
renderDefaultSleepScreen();
|
renderDefaultSleepScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SleepActivity::renderCoverElseCustomSleepScreen() const {
|
||||||
|
if (APP_STATE.openEpubPath.empty()) {
|
||||||
|
return renderCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string coverBmpPath;
|
||||||
|
bool cropped = SETTINGS.sleepScreenCoverMode == CrossPointSettings::SLEEP_SCREEN_COVER_MODE::CROP;
|
||||||
|
|
||||||
|
// Check if the current book is XTC, TXT, or EPUB
|
||||||
|
if (StringUtils::checkFileExtension(APP_STATE.openEpubPath, ".xtc") ||
|
||||||
|
StringUtils::checkFileExtension(APP_STATE.openEpubPath, ".xtch")) {
|
||||||
|
// Handle XTC file
|
||||||
|
Xtc lastXtc(APP_STATE.openEpubPath, "/.crosspoint");
|
||||||
|
if (!lastXtc.load()) {
|
||||||
|
Serial.println("[SLP] Failed to load last XTC");
|
||||||
|
return renderCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lastXtc.generateCoverBmp()) {
|
||||||
|
Serial.println("[SLP] Failed to generate XTC cover bmp");
|
||||||
|
return renderCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
coverBmpPath = lastXtc.getCoverBmpPath();
|
||||||
|
} else if (StringUtils::checkFileExtension(APP_STATE.openEpubPath, ".txt")) {
|
||||||
|
// Handle TXT file - looks for cover image in the same folder
|
||||||
|
Txt lastTxt(APP_STATE.openEpubPath, "/.crosspoint");
|
||||||
|
if (!lastTxt.load()) {
|
||||||
|
Serial.println("[SLP] Failed to load last TXT");
|
||||||
|
return renderCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lastTxt.generateCoverBmp()) {
|
||||||
|
Serial.println("[SLP] No cover image found for TXT file");
|
||||||
|
return renderCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
coverBmpPath = lastTxt.getCoverBmpPath();
|
||||||
|
} else if (StringUtils::checkFileExtension(APP_STATE.openEpubPath, ".epub")) {
|
||||||
|
// Handle EPUB file
|
||||||
|
Epub lastEpub(APP_STATE.openEpubPath, "/.crosspoint");
|
||||||
|
if (!lastEpub.load()) {
|
||||||
|
Serial.println("[SLP] Failed to load last epub");
|
||||||
|
return renderCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lastEpub.generateCoverBmp(cropped)) {
|
||||||
|
Serial.println("[SLP] Failed to generate cover bmp");
|
||||||
|
return renderCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
coverBmpPath = lastEpub.getCoverBmpPath(cropped);
|
||||||
|
} else {
|
||||||
|
return renderCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
FsFile file;
|
||||||
|
if (SdMan.openFileForRead("SLP", coverBmpPath, file)) {
|
||||||
|
Bitmap bitmap(file);
|
||||||
|
if (bitmap.parseHeaders() == BmpReaderError::Ok) {
|
||||||
|
Serial.printf("[SLP] Rendering sleep cover: %s\n", coverBmpPath);
|
||||||
|
renderBitmapSleepScreen(bitmap);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
renderCustomSleepScreen();
|
||||||
|
}
|
||||||
|
|
||||||
void SleepActivity::renderBlankSleepScreen() const {
|
void SleepActivity::renderBlankSleepScreen() const {
|
||||||
renderer.clearScreen();
|
renderer.clearScreen();
|
||||||
renderer.displayBuffer(HalDisplay::HALF_REFRESH);
|
renderer.displayBuffer(HalDisplay::HALF_REFRESH);
|
||||||
|
|||||||
@ -13,6 +13,7 @@ class SleepActivity final : public Activity {
|
|||||||
void renderDefaultSleepScreen() const;
|
void renderDefaultSleepScreen() const;
|
||||||
void renderCustomSleepScreen() const;
|
void renderCustomSleepScreen() const;
|
||||||
void renderCoverSleepScreen() const;
|
void renderCoverSleepScreen() const;
|
||||||
|
void renderCoverElseCustomSleepScreen() const;
|
||||||
void renderBitmapSleepScreen(const Bitmap& bitmap) const;
|
void renderBitmapSleepScreen(const Bitmap& bitmap) const;
|
||||||
void renderBlankSleepScreen() const;
|
void renderBlankSleepScreen() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -546,8 +546,8 @@ void WifiSelectionActivity::renderNetworkList() const {
|
|||||||
|
|
||||||
// Draw network name (truncate if too long)
|
// Draw network name (truncate if too long)
|
||||||
std::string displayName = network.ssid;
|
std::string displayName = network.ssid;
|
||||||
if (displayName.length() > 16) {
|
if (displayName.length() > 33) {
|
||||||
displayName.replace(13, displayName.length() - 13, "...");
|
displayName.replace(30, displayName.length() - 30, "...");
|
||||||
}
|
}
|
||||||
renderer.drawText(UI_10_FONT_ID, 20, networkY, displayName.c_str());
|
renderer.drawText(UI_10_FONT_ID, 20, networkY, displayName.c_str());
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,7 @@ namespace {
|
|||||||
constexpr int displaySettingsCount = 6;
|
constexpr int displaySettingsCount = 6;
|
||||||
const SettingInfo displaySettings[displaySettingsCount] = {
|
const SettingInfo displaySettings[displaySettingsCount] = {
|
||||||
// Should match with SLEEP_SCREEN_MODE
|
// Should match with SLEEP_SCREEN_MODE
|
||||||
SettingInfo::Enum("Sleep Screen", &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover", "None"}),
|
SettingInfo::Enum("Sleep Screen", &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover", "Cover else Custom", "None"}),
|
||||||
SettingInfo::Enum("Sleep Screen Cover Mode", &CrossPointSettings::sleepScreenCoverMode, {"Fit", "Crop"}),
|
SettingInfo::Enum("Sleep Screen Cover Mode", &CrossPointSettings::sleepScreenCoverMode, {"Fit", "Crop"}),
|
||||||
SettingInfo::Enum("Sleep Screen Cover Filter", &CrossPointSettings::sleepScreenCoverFilter,
|
SettingInfo::Enum("Sleep Screen Cover Filter", &CrossPointSettings::sleepScreenCoverFilter,
|
||||||
{"None", "Contrast", "Inverted"}),
|
{"None", "Contrast", "Inverted"}),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user