Add justification to list of local overrides
This commit is contained in:
@@ -473,6 +473,7 @@ bool JsonSettingsIO::saveRecentBooks(const RecentBooksStore& store, const char*
|
|||||||
}
|
}
|
||||||
obj["fontSizeOverride"] = book.fontSizeOverride;
|
obj["fontSizeOverride"] = book.fontSizeOverride;
|
||||||
obj["bionicReadingOverride"] = book.bionicReadingOverride;
|
obj["bionicReadingOverride"] = book.bionicReadingOverride;
|
||||||
|
obj["paragraphAlignmentOverride"] = book.paragraphAlignmentOverride;
|
||||||
}
|
}
|
||||||
|
|
||||||
String json;
|
String json;
|
||||||
@@ -516,6 +517,8 @@ bool JsonSettingsIO::loadRecentBooks(RecentBooksStore& store, const char* json)
|
|||||||
}
|
}
|
||||||
book.fontSizeOverride = clampInt8(obj["fontSizeOverride"] | -1, -1, CrossPointSettings::FONT_SIZE_COUNT - 1, -1);
|
book.fontSizeOverride = clampInt8(obj["fontSizeOverride"] | -1, -1, CrossPointSettings::FONT_SIZE_COUNT - 1, -1);
|
||||||
book.bionicReadingOverride = clampInt8(obj["bionicReadingOverride"] | -1, -1, 1, -1);
|
book.bionicReadingOverride = clampInt8(obj["bionicReadingOverride"] | -1, -1, 1, -1);
|
||||||
|
book.paragraphAlignmentOverride =
|
||||||
|
clampInt8(obj["paragraphAlignmentOverride"] | -1, -1, CrossPointSettings::PARAGRAPH_ALIGNMENT_COUNT - 1, -1);
|
||||||
store.recentBooks.push_back(book);
|
store.recentBooks.push_back(book);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ void RecentBooksStore::addBook(const std::string& path, const std::string& title
|
|||||||
std::string sdFontFamilyOverride;
|
std::string sdFontFamilyOverride;
|
||||||
int8_t fontSizeOverride = -1;
|
int8_t fontSizeOverride = -1;
|
||||||
int8_t bionicReadingOverride = -1;
|
int8_t bionicReadingOverride = -1;
|
||||||
|
int8_t paragraphAlignmentOverride = -1;
|
||||||
|
|
||||||
// Remove existing entry if present
|
// Remove existing entry if present
|
||||||
auto it =
|
auto it =
|
||||||
@@ -39,13 +40,14 @@ void RecentBooksStore::addBook(const std::string& path, const std::string& title
|
|||||||
sdFontFamilyOverride = it->sdFontFamilyOverride;
|
sdFontFamilyOverride = it->sdFontFamilyOverride;
|
||||||
fontSizeOverride = it->fontSizeOverride;
|
fontSizeOverride = it->fontSizeOverride;
|
||||||
bionicReadingOverride = it->bionicReadingOverride;
|
bionicReadingOverride = it->bionicReadingOverride;
|
||||||
|
paragraphAlignmentOverride = it->paragraphAlignmentOverride;
|
||||||
recentBooks.erase(it);
|
recentBooks.erase(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add to front
|
// Add to front
|
||||||
recentBooks.insert(recentBooks.begin(),
|
recentBooks.insert(recentBooks.begin(), {path, title, author, series, coverBmpPath, embeddedStyleOverride,
|
||||||
{path, title, author, series, coverBmpPath, embeddedStyleOverride, imageRenderingOverride,
|
imageRenderingOverride, fontFamilyOverride, sdFontFamilyOverride,
|
||||||
fontFamilyOverride, sdFontFamilyOverride, fontSizeOverride, bionicReadingOverride});
|
fontSizeOverride, bionicReadingOverride, paragraphAlignmentOverride});
|
||||||
|
|
||||||
// Trim to max size
|
// Trim to max size
|
||||||
if (recentBooks.size() > MAX_RECENT_BOOKS) {
|
if (recentBooks.size() > MAX_RECENT_BOOKS) {
|
||||||
@@ -95,7 +97,8 @@ bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, it->fontFamilyOverride,
|
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, it->fontFamilyOverride,
|
||||||
it->sdFontFamilyOverride, it->fontSizeOverride, it->bionicReadingOverride);
|
it->sdFontFamilyOverride, it->fontSizeOverride, it->bionicReadingOverride,
|
||||||
|
it->paragraphAlignmentOverride);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
||||||
@@ -108,7 +111,7 @@ bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t
|
|||||||
}
|
}
|
||||||
const std::string sdOverride = (fontFamilyOverride >= 0) ? std::string() : it->sdFontFamilyOverride;
|
const std::string sdOverride = (fontFamilyOverride >= 0) ? std::string() : it->sdFontFamilyOverride;
|
||||||
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, fontFamilyOverride, sdOverride,
|
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, fontFamilyOverride, sdOverride,
|
||||||
fontSizeOverride, it->bionicReadingOverride);
|
fontSizeOverride, it->bionicReadingOverride, it->paragraphAlignmentOverride);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
||||||
@@ -120,7 +123,8 @@ bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, fontFamilyOverride,
|
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, fontFamilyOverride,
|
||||||
sdFontFamilyOverride, fontSizeOverride, it->bionicReadingOverride);
|
sdFontFamilyOverride, fontSizeOverride, it->bionicReadingOverride,
|
||||||
|
it->paragraphAlignmentOverride);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
||||||
@@ -131,7 +135,8 @@ bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, it->fontFamilyOverride,
|
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, it->fontFamilyOverride,
|
||||||
it->sdFontFamilyOverride, it->fontSizeOverride, bionicReadingOverride);
|
it->sdFontFamilyOverride, it->fontSizeOverride, bionicReadingOverride,
|
||||||
|
it->paragraphAlignmentOverride);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
||||||
@@ -144,7 +149,7 @@ bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t
|
|||||||
}
|
}
|
||||||
const std::string sdOverride = (fontFamilyOverride >= 0) ? std::string() : it->sdFontFamilyOverride;
|
const std::string sdOverride = (fontFamilyOverride >= 0) ? std::string() : it->sdFontFamilyOverride;
|
||||||
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, fontFamilyOverride, sdOverride,
|
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, fontFamilyOverride, sdOverride,
|
||||||
fontSizeOverride, bionicReadingOverride);
|
fontSizeOverride, bionicReadingOverride, it->paragraphAlignmentOverride);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
||||||
@@ -156,6 +161,20 @@ bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t
|
|||||||
if (it == recentBooks.end()) {
|
if (it == recentBooks.end()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
return setReaderOverrides(path, embeddedStyleOverride, imageRenderingOverride, fontFamilyOverride,
|
||||||
|
sdFontFamilyOverride, fontSizeOverride, bionicReadingOverride,
|
||||||
|
it->paragraphAlignmentOverride);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t embeddedStyleOverride,
|
||||||
|
const int8_t imageRenderingOverride, const int8_t fontFamilyOverride,
|
||||||
|
const std::string& sdFontFamilyOverride, const int8_t fontSizeOverride,
|
||||||
|
const bool bionicReadingOverride, const int8_t paragraphAlignmentOverride) {
|
||||||
|
auto it =
|
||||||
|
std::find_if(recentBooks.begin(), recentBooks.end(), [&](const RecentBook& book) { return book.path == path; });
|
||||||
|
if (it == recentBooks.end()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
it->embeddedStyleOverride = embeddedStyleOverride;
|
it->embeddedStyleOverride = embeddedStyleOverride;
|
||||||
it->imageRenderingOverride = imageRenderingOverride;
|
it->imageRenderingOverride = imageRenderingOverride;
|
||||||
@@ -163,6 +182,7 @@ bool RecentBooksStore::setReaderOverrides(const std::string& path, const int8_t
|
|||||||
it->sdFontFamilyOverride = sdFontFamilyOverride;
|
it->sdFontFamilyOverride = sdFontFamilyOverride;
|
||||||
it->fontSizeOverride = fontSizeOverride;
|
it->fontSizeOverride = fontSizeOverride;
|
||||||
it->bionicReadingOverride = bionicReadingOverride;
|
it->bionicReadingOverride = bionicReadingOverride;
|
||||||
|
it->paragraphAlignmentOverride = paragraphAlignmentOverride;
|
||||||
return saveToFile();
|
return saveToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ struct RecentBook {
|
|||||||
int8_t fontSizeOverride = -1;
|
int8_t fontSizeOverride = -1;
|
||||||
// -1 = use global default, otherwise explicit per-book override (0 = off, 1 = on).
|
// -1 = use global default, otherwise explicit per-book override (0 = off, 1 = on).
|
||||||
int8_t bionicReadingOverride = -1;
|
int8_t bionicReadingOverride = -1;
|
||||||
|
// -1 = use global setting, otherwise CrossPointSettings::PARAGRAPH_ALIGNMENT value.
|
||||||
|
int8_t paragraphAlignmentOverride = -1;
|
||||||
|
|
||||||
bool operator==(const RecentBook& other) const { return path == other.path; }
|
bool operator==(const RecentBook& other) const { return path == other.path; }
|
||||||
};
|
};
|
||||||
@@ -77,6 +79,9 @@ class RecentBooksStore {
|
|||||||
bool setReaderOverrides(const std::string& path, int8_t embeddedStyleOverride, int8_t imageRenderingOverride,
|
bool setReaderOverrides(const std::string& path, int8_t embeddedStyleOverride, int8_t imageRenderingOverride,
|
||||||
int8_t fontFamilyOverride, const std::string& sdFontFamilyOverride, int8_t fontSizeOverride,
|
int8_t fontFamilyOverride, const std::string& sdFontFamilyOverride, int8_t fontSizeOverride,
|
||||||
bool bionicReadingOverride);
|
bool bionicReadingOverride);
|
||||||
|
bool setReaderOverrides(const std::string& path, int8_t embeddedStyleOverride, int8_t imageRenderingOverride,
|
||||||
|
int8_t fontFamilyOverride, const std::string& sdFontFamilyOverride, int8_t fontSizeOverride,
|
||||||
|
bool bionicReadingOverride, int8_t paragraphAlignmentOverride);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool loadFromBinaryFile();
|
bool loadFromBinaryFile();
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ struct MenuResult {
|
|||||||
int8_t fontSizeOverride = -1;
|
int8_t fontSizeOverride = -1;
|
||||||
uint8_t textDarkness = 1;
|
uint8_t textDarkness = 1;
|
||||||
uint8_t bionicReadingOverride = 0;
|
uint8_t bionicReadingOverride = 0;
|
||||||
|
int8_t paragraphAlignmentOverride = -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ChapterResult {
|
struct ChapterResult {
|
||||||
|
|||||||
@@ -321,6 +321,7 @@ void EpubReaderActivity::onEnter() {
|
|||||||
bookBionicReadingOverride = (currentBook.bionicReadingOverride >= 0)
|
bookBionicReadingOverride = (currentBook.bionicReadingOverride >= 0)
|
||||||
? static_cast<bool>(currentBook.bionicReadingOverride)
|
? static_cast<bool>(currentBook.bionicReadingOverride)
|
||||||
: static_cast<bool>(SETTINGS.bionicReading);
|
: static_cast<bool>(SETTINGS.bionicReading);
|
||||||
|
bookParagraphAlignmentOverride = currentBook.paragraphAlignmentOverride;
|
||||||
logReaderMemSnapshot("onEnter_after_recent_books");
|
logReaderMemSnapshot("onEnter_after_recent_books");
|
||||||
|
|
||||||
// Trigger first update
|
// Trigger first update
|
||||||
@@ -1291,7 +1292,8 @@ void EpubReaderActivity::toggleAutoPageTurn(const uint8_t selectedPageTurnOption
|
|||||||
void EpubReaderActivity::applyBookReaderOverrides(const int8_t embeddedStyleOverride,
|
void EpubReaderActivity::applyBookReaderOverrides(const int8_t embeddedStyleOverride,
|
||||||
const int8_t imageRenderingOverride, const int8_t fontFamilyOverride,
|
const int8_t imageRenderingOverride, const int8_t fontFamilyOverride,
|
||||||
const std::string& sdFontFamilyOverride,
|
const std::string& sdFontFamilyOverride,
|
||||||
const int8_t fontSizeOverride, const bool bionicReadingOverride) {
|
const int8_t fontSizeOverride, const bool bionicReadingOverride,
|
||||||
|
const int8_t paragraphAlignmentOverride) {
|
||||||
if (!epub) {
|
if (!epub) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1308,7 +1310,8 @@ void EpubReaderActivity::applyBookReaderOverrides(const int8_t embeddedStyleOver
|
|||||||
if (bookEmbeddedStyleOverride == embeddedStyleOverride && bookImageRenderingOverride == imageRenderingOverride &&
|
if (bookEmbeddedStyleOverride == embeddedStyleOverride && bookImageRenderingOverride == imageRenderingOverride &&
|
||||||
bookFontFamilyOverride == normalizedFontFamilyOverride &&
|
bookFontFamilyOverride == normalizedFontFamilyOverride &&
|
||||||
bookSdFontFamilyOverride == normalizedSdFontFamilyOverride && bookFontSizeOverride == fontSizeOverride &&
|
bookSdFontFamilyOverride == normalizedSdFontFamilyOverride && bookFontSizeOverride == fontSizeOverride &&
|
||||||
bookBionicReadingOverride == bionicReadingOverride) {
|
bookBionicReadingOverride == bionicReadingOverride &&
|
||||||
|
bookParagraphAlignmentOverride == paragraphAlignmentOverride) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1318,9 +1321,10 @@ void EpubReaderActivity::applyBookReaderOverrides(const int8_t embeddedStyleOver
|
|||||||
bookSdFontFamilyOverride = normalizedSdFontFamilyOverride;
|
bookSdFontFamilyOverride = normalizedSdFontFamilyOverride;
|
||||||
bookFontSizeOverride = fontSizeOverride;
|
bookFontSizeOverride = fontSizeOverride;
|
||||||
bookBionicReadingOverride = bionicReadingOverride;
|
bookBionicReadingOverride = bionicReadingOverride;
|
||||||
|
bookParagraphAlignmentOverride = paragraphAlignmentOverride;
|
||||||
RECENT_BOOKS.setReaderOverrides(epub->getPath(), bookEmbeddedStyleOverride, bookImageRenderingOverride,
|
RECENT_BOOKS.setReaderOverrides(epub->getPath(), bookEmbeddedStyleOverride, bookImageRenderingOverride,
|
||||||
bookFontFamilyOverride, bookSdFontFamilyOverride, bookFontSizeOverride,
|
bookFontFamilyOverride, bookSdFontFamilyOverride, bookFontSizeOverride,
|
||||||
bookBionicReadingOverride);
|
bookBionicReadingOverride, bookParagraphAlignmentOverride);
|
||||||
|
|
||||||
RenderLock lock(*this);
|
RenderLock lock(*this);
|
||||||
if (section) {
|
if (section) {
|
||||||
@@ -1345,6 +1349,13 @@ uint8_t EpubReaderActivity::getEffectiveImageRendering() const {
|
|||||||
return SETTINGS.imageRendering;
|
return SETTINGS.imageRendering;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t EpubReaderActivity::getEffectiveParagraphAlignment() const {
|
||||||
|
if (bookParagraphAlignmentOverride >= 0) {
|
||||||
|
return static_cast<uint8_t>(bookParagraphAlignmentOverride);
|
||||||
|
}
|
||||||
|
return SETTINGS.paragraphAlignment;
|
||||||
|
}
|
||||||
|
|
||||||
float EpubReaderActivity::getEffectiveReaderLineCompression() const {
|
float EpubReaderActivity::getEffectiveReaderLineCompression() const {
|
||||||
const uint8_t fontSize = (bookFontSizeOverride >= 0) ? static_cast<uint8_t>(bookFontSizeOverride) : SETTINGS.fontSize;
|
const uint8_t fontSize = (bookFontSizeOverride >= 0) ? static_cast<uint8_t>(bookFontSizeOverride) : SETTINGS.fontSize;
|
||||||
const int effectiveFontId = getEffectiveReaderFontId();
|
const int effectiveFontId = getEffectiveReaderFontId();
|
||||||
@@ -1564,7 +1575,7 @@ void EpubReaderActivity::render(RenderLock&& lock) {
|
|||||||
const unsigned long sectionStart = millis();
|
const unsigned long sectionStart = millis();
|
||||||
|
|
||||||
if (!section->loadSectionFile(getEffectiveReaderFontId(), getEffectiveReaderLineCompression(),
|
if (!section->loadSectionFile(getEffectiveReaderFontId(), getEffectiveReaderLineCompression(),
|
||||||
SETTINGS.extraParagraphSpacing, SETTINGS.paragraphAlignment, viewportWidth,
|
SETTINGS.extraParagraphSpacing, getEffectiveParagraphAlignment(), viewportWidth,
|
||||||
viewportHeight, SETTINGS.hyphenationEnabled, embeddedStyle, bookBionicReadingOverride,
|
viewportHeight, SETTINGS.hyphenationEnabled, embeddedStyle, bookBionicReadingOverride,
|
||||||
imageRendering)) {
|
imageRendering)) {
|
||||||
LOG_DBG("ERS", "Cache not found, building...");
|
LOG_DBG("ERS", "Cache not found, building...");
|
||||||
@@ -1586,7 +1597,7 @@ void EpubReaderActivity::render(RenderLock&& lock) {
|
|||||||
// by MAX_PAGE_GLYPHS per style.
|
// by MAX_PAGE_GLYPHS per style.
|
||||||
renderer.clearSdCardFontAccumulation();
|
renderer.clearSdCardFontAccumulation();
|
||||||
if (!section->createSectionFile(getEffectiveReaderFontId(), getEffectiveReaderLineCompression(),
|
if (!section->createSectionFile(getEffectiveReaderFontId(), getEffectiveReaderLineCompression(),
|
||||||
SETTINGS.extraParagraphSpacing, SETTINGS.paragraphAlignment, viewportWidth,
|
SETTINGS.extraParagraphSpacing, getEffectiveParagraphAlignment(), viewportWidth,
|
||||||
viewportHeight, SETTINGS.hyphenationEnabled, embeddedStyle,
|
viewportHeight, SETTINGS.hyphenationEnabled, embeddedStyle,
|
||||||
bookBionicReadingOverride, imageRendering, progressFn)) {
|
bookBionicReadingOverride, imageRendering, progressFn)) {
|
||||||
LOG_ERR("ERS", "Failed to persist page data to SD");
|
LOG_ERR("ERS", "Failed to persist page data to SD");
|
||||||
@@ -2249,7 +2260,7 @@ void EpubReaderActivity::openReaderMenu() {
|
|||||||
renderer, mappedInput, epub->getTitle(), currentPage, totalPages, bookProgressPercent, SETTINGS.orientation,
|
renderer, mappedInput, epub->getTitle(), currentPage, totalPages, bookProgressPercent, SETTINGS.orientation,
|
||||||
!currentPageFootnotes.empty(), bookEmbeddedStyleOverride, bookImageRenderingOverride, bookFontFamilyOverride,
|
!currentPageFootnotes.empty(), bookEmbeddedStyleOverride, bookImageRenderingOverride, bookFontFamilyOverride,
|
||||||
bookSdFontFamilyOverride, bookFontSizeOverride, SETTINGS.textDarkness, bookBionicReadingOverride,
|
bookSdFontFamilyOverride, bookFontSizeOverride, SETTINGS.textDarkness, bookBionicReadingOverride,
|
||||||
!bookmarkStore.isEmpty(), isCurrentPageStarred),
|
bookParagraphAlignmentOverride, !bookmarkStore.isEmpty(), isCurrentPageStarred),
|
||||||
[this](const ActivityResult& result) {
|
[this](const ActivityResult& result) {
|
||||||
const auto& menu = std::get<MenuResult>(result.data);
|
const auto& menu = std::get<MenuResult>(result.data);
|
||||||
applyOrientation(menu.orientation);
|
applyOrientation(menu.orientation);
|
||||||
@@ -2257,7 +2268,7 @@ void EpubReaderActivity::openReaderMenu() {
|
|||||||
toggleAutoPageTurn(menu.pageTurnOption);
|
toggleAutoPageTurn(menu.pageTurnOption);
|
||||||
applyBookReaderOverrides(menu.embeddedStyleOverride, menu.imageRenderingOverride, menu.fontFamilyOverride,
|
applyBookReaderOverrides(menu.embeddedStyleOverride, menu.imageRenderingOverride, menu.fontFamilyOverride,
|
||||||
menu.sdFontFamilyOverride, menu.fontSizeOverride,
|
menu.sdFontFamilyOverride, menu.fontSizeOverride,
|
||||||
static_cast<bool>(menu.bionicReadingOverride));
|
static_cast<bool>(menu.bionicReadingOverride), menu.paragraphAlignmentOverride);
|
||||||
if (!result.isCancelled) {
|
if (!result.isCancelled) {
|
||||||
onReaderMenuConfirm(static_cast<EpubReaderMenuActivity::MenuAction>(menu.action));
|
onReaderMenuConfirm(static_cast<EpubReaderMenuActivity::MenuAction>(menu.action));
|
||||||
}
|
}
|
||||||
@@ -2389,7 +2400,8 @@ void EpubReaderActivity::onButtonAction(const CrossPointSettings::BUTTON_ACTION
|
|||||||
case BA::BTN_TOGGLE_BIONIC_READING:
|
case BA::BTN_TOGGLE_BIONIC_READING:
|
||||||
if (epub) {
|
if (epub) {
|
||||||
applyBookReaderOverrides(bookEmbeddedStyleOverride, bookImageRenderingOverride, bookFontFamilyOverride,
|
applyBookReaderOverrides(bookEmbeddedStyleOverride, bookImageRenderingOverride, bookFontFamilyOverride,
|
||||||
bookSdFontFamilyOverride, bookFontSizeOverride, !bookBionicReadingOverride);
|
bookSdFontFamilyOverride, bookFontSizeOverride, !bookBionicReadingOverride,
|
||||||
|
bookParagraphAlignmentOverride);
|
||||||
requestUpdate();
|
requestUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -2399,7 +2411,8 @@ void EpubReaderActivity::onButtonAction(const CrossPointSettings::BUTTON_ACTION
|
|||||||
(bookFontSizeOverride >= 0) ? static_cast<uint8_t>(bookFontSizeOverride) : SETTINGS.fontSize;
|
(bookFontSizeOverride >= 0) ? static_cast<uint8_t>(bookFontSizeOverride) : SETTINGS.fontSize;
|
||||||
const int8_t next = static_cast<int8_t>((current + 1) % CrossPointSettings::FONT_SIZE_COUNT);
|
const int8_t next = static_cast<int8_t>((current + 1) % CrossPointSettings::FONT_SIZE_COUNT);
|
||||||
applyBookReaderOverrides(bookEmbeddedStyleOverride, bookImageRenderingOverride, bookFontFamilyOverride,
|
applyBookReaderOverrides(bookEmbeddedStyleOverride, bookImageRenderingOverride, bookFontFamilyOverride,
|
||||||
bookSdFontFamilyOverride, next, bookBionicReadingOverride);
|
bookSdFontFamilyOverride, next, bookBionicReadingOverride,
|
||||||
|
bookParagraphAlignmentOverride);
|
||||||
requestUpdate();
|
requestUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -149,6 +149,7 @@ class EpubReaderActivity final : public Activity {
|
|||||||
std::string bookSdFontFamilyOverride;
|
std::string bookSdFontFamilyOverride;
|
||||||
int8_t bookFontSizeOverride = -1;
|
int8_t bookFontSizeOverride = -1;
|
||||||
bool bookBionicReadingOverride = false;
|
bool bookBionicReadingOverride = false;
|
||||||
|
int8_t bookParagraphAlignmentOverride = -1;
|
||||||
|
|
||||||
// Bookmarks (starred pages)
|
// Bookmarks (starred pages)
|
||||||
BookmarkStore bookmarkStore;
|
BookmarkStore bookmarkStore;
|
||||||
@@ -192,10 +193,11 @@ class EpubReaderActivity final : public Activity {
|
|||||||
void stopAutomaticPageTurn();
|
void stopAutomaticPageTurn();
|
||||||
void applyBookReaderOverrides(int8_t embeddedStyleOverride, int8_t imageRenderingOverride, int8_t fontFamilyOverride,
|
void applyBookReaderOverrides(int8_t embeddedStyleOverride, int8_t imageRenderingOverride, int8_t fontFamilyOverride,
|
||||||
const std::string& sdFontFamilyOverride, int8_t fontSizeOverride,
|
const std::string& sdFontFamilyOverride, int8_t fontSizeOverride,
|
||||||
bool bionicReadingOverride);
|
bool bionicReadingOverride, int8_t paragraphAlignmentOverride);
|
||||||
void openReaderMenu();
|
void openReaderMenu();
|
||||||
bool getEffectiveEmbeddedStyle() const;
|
bool getEffectiveEmbeddedStyle() const;
|
||||||
uint8_t getEffectiveImageRendering() const;
|
uint8_t getEffectiveImageRendering() const;
|
||||||
|
uint8_t getEffectiveParagraphAlignment() const;
|
||||||
int getEffectiveReaderFontId() const;
|
int getEffectiveReaderFontId() const;
|
||||||
float getEffectiveReaderLineCompression() const;
|
float getEffectiveReaderLineCompression() const;
|
||||||
bool stepPageState(bool isForwardTurn);
|
bool stepPageState(bool isForwardTurn);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ EpubReaderMenuActivity::EpubReaderMenuActivity(
|
|||||||
const int8_t initialEmbeddedStyleOverride, const int8_t initialImageRenderingOverride,
|
const int8_t initialEmbeddedStyleOverride, const int8_t initialImageRenderingOverride,
|
||||||
const int8_t initialFontFamilyOverride, const std::string& initialSdFontFamilyOverride,
|
const int8_t initialFontFamilyOverride, const std::string& initialSdFontFamilyOverride,
|
||||||
const int8_t initialFontSizeOverride, const uint8_t initialTextDarkness, const bool initialBionicReadingOverride,
|
const int8_t initialFontSizeOverride, const uint8_t initialTextDarkness, const bool initialBionicReadingOverride,
|
||||||
const bool hasStarredPages, const bool isCurrentPageStarred)
|
const int8_t initialParagraphAlignmentOverride, const bool hasStarredPages, const bool isCurrentPageStarred)
|
||||||
: MenuListActivity("EpubReaderMenu", renderer, mappedInput),
|
: MenuListActivity("EpubReaderMenu", renderer, mappedInput),
|
||||||
currentPageStarred(isCurrentPageStarred),
|
currentPageStarred(isCurrentPageStarred),
|
||||||
pendingOrientation(currentOrientation),
|
pendingOrientation(currentOrientation),
|
||||||
@@ -51,6 +51,7 @@ EpubReaderMenuActivity::EpubReaderMenuActivity(
|
|||||||
pendingFontSizeOverride(initialFontSizeOverride),
|
pendingFontSizeOverride(initialFontSizeOverride),
|
||||||
pendingTextDarkness(initialTextDarkness),
|
pendingTextDarkness(initialTextDarkness),
|
||||||
pendingBionicReading(initialBionicReadingOverride),
|
pendingBionicReading(initialBionicReadingOverride),
|
||||||
|
pendingParagraphAlignmentOverride(initialParagraphAlignmentOverride),
|
||||||
title(title),
|
title(title),
|
||||||
currentPage(currentPage),
|
currentPage(currentPage),
|
||||||
totalPages(totalPages),
|
totalPages(totalPages),
|
||||||
@@ -219,6 +220,24 @@ void EpubReaderMenuActivity::buildMenuItems(bool hasFootnotes, bool hasStarredPa
|
|||||||
[](void* ctx, uint8_t v) { static_cast<EpubReaderMenuActivity*>(ctx)->pendingBionicReading = (v != 0); })
|
[](void* ctx, uint8_t v) { static_cast<EpubReaderMenuActivity*>(ctx)->pendingBionicReading = (v != 0); })
|
||||||
.withSubmenu(StrId::STR_READER_OVERRIDES));
|
.withSubmenu(StrId::STR_READER_OVERRIDES));
|
||||||
|
|
||||||
|
// Paragraph alignment: default(-1) + the 5 global options
|
||||||
|
menuItems.push_back(SettingInfo::DynamicEnumCtx(
|
||||||
|
StrId::STR_PARA_ALIGNMENT,
|
||||||
|
{StrId::STR_DEFAULT_VALUE, StrId::STR_JUSTIFY, StrId::STR_ALIGN_LEFT, StrId::STR_CENTER,
|
||||||
|
StrId::STR_ALIGN_RIGHT, StrId::STR_BOOK_S_STYLE},
|
||||||
|
self,
|
||||||
|
[](const void* ctx) -> uint8_t {
|
||||||
|
const auto* s = static_cast<const EpubReaderMenuActivity*>(ctx);
|
||||||
|
return (s->pendingParagraphAlignmentOverride < 0)
|
||||||
|
? 0
|
||||||
|
: static_cast<uint8_t>(s->pendingParagraphAlignmentOverride + 1);
|
||||||
|
},
|
||||||
|
[](void* ctx, uint8_t v) {
|
||||||
|
auto* s = static_cast<EpubReaderMenuActivity*>(ctx);
|
||||||
|
s->pendingParagraphAlignmentOverride = (v == 0) ? -1 : static_cast<int8_t>(v - 1);
|
||||||
|
})
|
||||||
|
.withSubmenu(StrId::STR_READER_OVERRIDES));
|
||||||
|
|
||||||
// Helper functions, reading ruler, auto page turn, orientation
|
// Helper functions, reading ruler, auto page turn, orientation
|
||||||
menuItems.push_back(SettingInfo::Separator(StrId::STR_READER_UTILS));
|
menuItems.push_back(SettingInfo::Separator(StrId::STR_READER_UTILS));
|
||||||
// Auto page turn: ACTION type with custom cycling in onActionSelected
|
// Auto page turn: ACTION type with custom cycling in onActionSelected
|
||||||
@@ -303,7 +322,7 @@ void EpubReaderMenuActivity::finishWithAction(MenuAction action) {
|
|||||||
setResult(MenuResult{static_cast<int>(action), -1, pendingOrientation, selectedPageTurnOption,
|
setResult(MenuResult{static_cast<int>(action), -1, pendingOrientation, selectedPageTurnOption,
|
||||||
pendingEmbeddedStyleOverride, pendingImageRenderingOverride, pendingFontFamilyOverride,
|
pendingEmbeddedStyleOverride, pendingImageRenderingOverride, pendingFontFamilyOverride,
|
||||||
pendingSdFontFamilyOverride, pendingFontSizeOverride, pendingTextDarkness,
|
pendingSdFontFamilyOverride, pendingFontSizeOverride, pendingTextDarkness,
|
||||||
static_cast<uint8_t>(pendingBionicReading)});
|
static_cast<uint8_t>(pendingBionicReading), pendingParagraphAlignmentOverride});
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,7 +357,8 @@ void EpubReaderMenuActivity::onBackPressed() {
|
|||||||
pendingSdFontFamilyOverride,
|
pendingSdFontFamilyOverride,
|
||||||
pendingFontSizeOverride,
|
pendingFontSizeOverride,
|
||||||
pendingTextDarkness,
|
pendingTextDarkness,
|
||||||
static_cast<uint8_t>(pendingBionicReading)};
|
static_cast<uint8_t>(pendingBionicReading),
|
||||||
|
pendingParagraphAlignmentOverride};
|
||||||
setResult(std::move(result));
|
setResult(std::move(result));
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
@@ -387,6 +407,12 @@ std::string EpubReaderMenuActivity::getItemValueString(int index) const {
|
|||||||
return std::string(tr(STR_DEFAULT_VALUE)) + " (" + I18N.get(item.enumValues[defaultIndex]) + ")";
|
return std::string(tr(STR_DEFAULT_VALUE)) + " (" + I18N.get(item.enumValues[defaultIndex]) + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (item.nameId == StrId::STR_PARA_ALIGNMENT && pendingParagraphAlignmentOverride < 0) {
|
||||||
|
const auto defaultIndex = static_cast<size_t>(SETTINGS.paragraphAlignment + 1);
|
||||||
|
if (defaultIndex < item.enumValues.size()) {
|
||||||
|
return std::string(tr(STR_DEFAULT_VALUE)) + " (" + I18N.get(item.enumValues[defaultIndex]) + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DynamicEnum items use the standard display
|
// DynamicEnum items use the standard display
|
||||||
@@ -421,6 +447,12 @@ void EpubReaderMenuActivity::openSubmenu(const SettingInfo& submenuEntry) {
|
|||||||
return std::string(tr(STR_DEFAULT_VALUE)) + " (" + I18N.get(item.enumValues[valueIndex]) + ")";
|
return std::string(tr(STR_DEFAULT_VALUE)) + " (" + I18N.get(item.enumValues[valueIndex]) + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (item.nameId == StrId::STR_PARA_ALIGNMENT && pendingParagraphAlignmentOverride < 0) {
|
||||||
|
const auto valueIndex = static_cast<size_t>(SETTINGS.paragraphAlignment + 1);
|
||||||
|
if (valueIndex < item.enumValues.size()) {
|
||||||
|
return std::string(tr(STR_DEFAULT_VALUE)) + " (" + I18N.get(item.enumValues[valueIndex]) + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
return item.getDisplayValue();
|
return item.getDisplayValue();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ class EpubReaderMenuActivity final : public MenuListActivity {
|
|||||||
const int8_t initialFontFamilyOverride,
|
const int8_t initialFontFamilyOverride,
|
||||||
const std::string& initialSdFontFamilyOverride, const int8_t initialFontSizeOverride,
|
const std::string& initialSdFontFamilyOverride, const int8_t initialFontSizeOverride,
|
||||||
const uint8_t initialTextDarkness, const bool initialBionicReadingOverride,
|
const uint8_t initialTextDarkness, const bool initialBionicReadingOverride,
|
||||||
const bool hasStarredPages, const bool isCurrentPageStarred);
|
const int8_t initialParagraphAlignmentOverride, const bool hasStarredPages,
|
||||||
|
const bool isCurrentPageStarred);
|
||||||
|
|
||||||
void onEnter() override;
|
void onEnter() override;
|
||||||
void render(RenderLock&&) override;
|
void render(RenderLock&&) override;
|
||||||
@@ -73,6 +74,7 @@ class EpubReaderMenuActivity final : public MenuListActivity {
|
|||||||
int8_t pendingFontSizeOverride = -1;
|
int8_t pendingFontSizeOverride = -1;
|
||||||
uint8_t pendingTextDarkness = 1;
|
uint8_t pendingTextDarkness = 1;
|
||||||
bool pendingBionicReading = false;
|
bool pendingBionicReading = false;
|
||||||
|
int8_t pendingParagraphAlignmentOverride = -1;
|
||||||
|
|
||||||
static constexpr const char* pageTurnLabels[] = {"", "1", "3", "6", "12"};
|
static constexpr const char* pageTurnLabels[] = {"", "1", "3", "6", "12"};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user