feat: Add per-book letterbox fill override
Introduce BookSettings utility for per-book settings stored in the book's cache directory (book_settings.bin). Add "Letterbox Fill" option to the EPUB reader menu that cycles Default/Dithered/Solid/None. At sleep time, the per-book override is loaded and takes precedence over the global setting for all book types (EPUB, XTC, TXT). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -68,6 +68,14 @@ void EpubReaderMenuActivity::loop() {
|
||||
updateRequired = true;
|
||||
return;
|
||||
}
|
||||
if (selectedAction == MenuAction::LETTERBOX_FILL) {
|
||||
// Cycle through: Default -> Dithered -> Solid -> None -> Default ...
|
||||
int idx = (letterboxFillToIndex() + 1) % LETTERBOX_FILL_OPTION_COUNT;
|
||||
pendingLetterboxFill = indexToLetterboxFill(idx);
|
||||
saveLetterboxFill();
|
||||
updateRequired = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. Capture the callback and action locally
|
||||
auto actionCallback = onAction;
|
||||
@@ -139,6 +147,12 @@ void EpubReaderMenuActivity::renderScreen() {
|
||||
const auto width = renderer.getTextWidth(UI_10_FONT_ID, value);
|
||||
renderer.drawText(UI_10_FONT_ID, contentX + contentWidth - 20 - width, displayY, value, !isSelected);
|
||||
}
|
||||
if (menuItems[i].action == MenuAction::LETTERBOX_FILL) {
|
||||
// Render current letterbox fill value on the right edge of the content area.
|
||||
const auto value = letterboxFillLabels[letterboxFillToIndex()];
|
||||
const auto width = renderer.getTextWidth(UI_10_FONT_ID, value);
|
||||
renderer.drawText(UI_10_FONT_ID, contentX + contentWidth - 20 - width, displayY, value, !isSelected);
|
||||
}
|
||||
}
|
||||
|
||||
// Footer / Hints
|
||||
|
||||
Reference in New Issue
Block a user