diff --git a/lib/Epub/Epub/Page.cpp b/lib/Epub/Epub/Page.cpp index 65ce5698..92839eb7 100644 --- a/lib/Epub/Epub/Page.cpp +++ b/lib/Epub/Epub/Page.cpp @@ -32,7 +32,7 @@ void Page::render(GfxRenderer& renderer, const int fontId, const int xOffset, co } bool Page::serialize(FsFile& file) const { - const uint32_t count = elements.size(); + const uint16_t count = elements.size(); serialization::writePod(file, count); for (const auto& el : elements) { @@ -49,10 +49,10 @@ bool Page::serialize(FsFile& file) const { std::unique_ptr Page::deserialize(FsFile& file) { auto page = std::unique_ptr(new Page()); - uint32_t count; + uint16_t count; serialization::readPod(file, count); - for (uint32_t i = 0; i < count; i++) { + for (uint16_t i = 0; i < count; i++) { uint8_t tag; serialization::readPod(file, tag); diff --git a/lib/Epub/Epub/ParsedText.cpp b/lib/Epub/Epub/ParsedText.cpp index 91834203..f9c0326f 100644 --- a/lib/Epub/Epub/ParsedText.cpp +++ b/lib/Epub/Epub/ParsedText.cpp @@ -18,7 +18,7 @@ void ParsedText::addWord(std::string word, const EpdFontFamily::Style fontStyle) } // Consumes data to minimize memory usage -void ParsedText::layoutAndExtractLines(const GfxRenderer& renderer, const int fontId, const int viewportWidth, +void ParsedText::layoutAndExtractLines(const GfxRenderer& renderer, const int fontId, const uint16_t viewportWidth, const std::function)>& processLine, const bool includeLastLine) { if (words.empty()) { diff --git a/lib/Epub/Epub/ParsedText.h b/lib/Epub/Epub/ParsedText.h index 109677cf..4b851a94 100644 --- a/lib/Epub/Epub/ParsedText.h +++ b/lib/Epub/Epub/ParsedText.h @@ -34,7 +34,7 @@ class ParsedText { TextBlock::Style getStyle() const { return style; } size_t size() const { return words.size(); } bool isEmpty() const { return words.empty(); } - void layoutAndExtractLines(const GfxRenderer& renderer, int fontId, int viewportWidth, + void layoutAndExtractLines(const GfxRenderer& renderer, int fontId, uint16_t viewportWidth, const std::function)>& processLine, bool includeLastLine = true); }; diff --git a/lib/Epub/Epub/Section.cpp b/lib/Epub/Epub/Section.cpp index ef1e140b..1f99f018 100644 --- a/lib/Epub/Epub/Section.cpp +++ b/lib/Epub/Epub/Section.cpp @@ -8,8 +8,8 @@ namespace { constexpr uint8_t SECTION_FILE_VERSION = 8; -constexpr uint32_t HEADER_SIZE = sizeof(uint8_t) + sizeof(int) + sizeof(float) + sizeof(bool) + sizeof(int) + - sizeof(int) + sizeof(int) + sizeof(uint32_t); +constexpr uint32_t HEADER_SIZE = sizeof(uint8_t) + sizeof(int) + sizeof(float) + sizeof(bool) + sizeof(uint16_t) + + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint32_t); } // namespace uint32_t Section::onPageComplete(std::unique_ptr page) { @@ -30,7 +30,7 @@ uint32_t Section::onPageComplete(std::unique_ptr page) { } void Section::writeSectionFileHeader(const int fontId, const float lineCompression, const bool extraParagraphSpacing, - const int viewportWidth, const int viewportHeight) { + const uint16_t viewportWidth, const uint16_t viewportHeight) { if (!file) { Serial.printf("[%lu] [SCT] File not open for writing header\n", millis()); return; @@ -50,7 +50,7 @@ void Section::writeSectionFileHeader(const int fontId, const float lineCompressi } bool Section::loadSectionFile(const int fontId, const float lineCompression, const bool extraParagraphSpacing, - const int viewportWidth, const int viewportHeight) { + const uint16_t viewportWidth, const uint16_t viewportHeight) { if (!SdMan.openFileForRead("SCT", filePath, file)) { return false; } @@ -66,7 +66,8 @@ bool Section::loadSectionFile(const int fontId, const float lineCompression, con return false; } - int fileFontId, fileViewportWidth, fileViewportHeight; + int fileFontId; + uint16_t fileViewportWidth, fileViewportHeight; float fileLineCompression; bool fileExtraParagraphSpacing; serialization::readPod(file, fileFontId); @@ -108,7 +109,7 @@ bool Section::clearCache() const { } bool Section::createSectionFile(const int fontId, const float lineCompression, const bool extraParagraphSpacing, - const int viewportWidth, const int viewportHeight, + const uint16_t viewportWidth, const uint16_t viewportHeight, const std::function& progressSetupFn, const std::function& progressFn) { constexpr uint32_t MIN_SIZE_FOR_PROGRESS = 50 * 1024; // 50KB diff --git a/lib/Epub/Epub/Section.h b/lib/Epub/Epub/Section.h index bc2efabc..55244d0e 100644 --- a/lib/Epub/Epub/Section.h +++ b/lib/Epub/Epub/Section.h @@ -14,12 +14,12 @@ class Section { std::string filePath; FsFile file; - void writeSectionFileHeader(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, - int viewportHeight); + void writeSectionFileHeader(int fontId, float lineCompression, bool extraParagraphSpacing, uint16_t viewportWidth, + uint16_t viewportHeight); uint32_t onPageComplete(std::unique_ptr page); public: - int pageCount = 0; + uint16_t pageCount = 0; int currentPage = 0; explicit Section(const std::shared_ptr& epub, const int spineIndex, GfxRenderer& renderer) @@ -28,11 +28,11 @@ class Section { renderer(renderer), filePath(epub->getCachePath() + "/sections/" + std::to_string(spineIndex) + ".bin") {} ~Section() = default; - bool loadSectionFile(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, - int viewportHeight); + bool loadSectionFile(int fontId, float lineCompression, bool extraParagraphSpacing, uint16_t viewportWidth, + uint16_t viewportHeight); bool clearCache() const; - bool createSectionFile(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, - int viewportHeight, const std::function& progressSetupFn = nullptr, + bool createSectionFile(int fontId, float lineCompression, bool extraParagraphSpacing, uint16_t viewportWidth, + uint16_t viewportHeight, const std::function& progressSetupFn = nullptr, const std::function& progressFn = nullptr); std::unique_ptr loadPageFromSectionFile(); }; diff --git a/lib/Epub/Epub/blocks/TextBlock.cpp b/lib/Epub/Epub/blocks/TextBlock.cpp index b1fe078f..2a15aef0 100644 --- a/lib/Epub/Epub/blocks/TextBlock.cpp +++ b/lib/Epub/Epub/blocks/TextBlock.cpp @@ -32,7 +32,7 @@ bool TextBlock::serialize(FsFile& file) const { } // Word data - serialization::writePod(file, static_cast(words.size())); + serialization::writePod(file, static_cast(words.size())); for (const auto& w : words) serialization::writeString(file, w); for (auto x : wordXpos) serialization::writePod(file, x); for (auto s : wordStyles) serialization::writePod(file, s); @@ -44,7 +44,7 @@ bool TextBlock::serialize(FsFile& file) const { } std::unique_ptr TextBlock::deserialize(FsFile& file) { - uint32_t wc; + uint16_t wc; std::list words; std::list wordXpos; std::list wordStyles; diff --git a/lib/Epub/Epub/blocks/TextBlock.h b/lib/Epub/Epub/blocks/TextBlock.h index ea2314a6..415a18f3 100644 --- a/lib/Epub/Epub/blocks/TextBlock.h +++ b/lib/Epub/Epub/blocks/TextBlock.h @@ -8,7 +8,7 @@ #include "Block.h" -// represents a block of words in the html document +// Represents a line of text on a page class TextBlock final : public Block { public: enum Style : uint8_t { diff --git a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h index 1956ce0c..795c2c33 100644 --- a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h +++ b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h @@ -33,8 +33,8 @@ class ChapterHtmlSlimParser { int fontId; float lineCompression; bool extraParagraphSpacing; - int viewportWidth; - int viewportHeight; + uint16_t viewportWidth; + uint16_t viewportHeight; void startNewTextBlock(TextBlock::Style style); void makePages(); @@ -45,8 +45,8 @@ class ChapterHtmlSlimParser { public: explicit ChapterHtmlSlimParser(const std::string& filepath, GfxRenderer& renderer, const int fontId, - const float lineCompression, const bool extraParagraphSpacing, const int viewportWidth, - const int viewportHeight, + const float lineCompression, const bool extraParagraphSpacing, + const uint16_t viewportWidth, const uint16_t viewportHeight, const std::function)>& completePageFn, const std::function& progressFn = nullptr) : filepath(filepath), diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index d1025c8c..fae5d241 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -263,8 +263,8 @@ void EpubReaderActivity::renderScreen() { Serial.printf("[%lu] [ERS] Loading file: %s, index: %d\n", millis(), filepath.c_str(), currentSpineIndex); section = std::unique_ptr
(new Section(epub, currentSpineIndex, renderer)); - const auto viewportWidth = renderer.getScreenWidth() - orientedMarginLeft - orientedMarginRight; - const auto viewportHeight = renderer.getScreenHeight() - orientedMarginTop - orientedMarginBottom; + const uint16_t viewportWidth = renderer.getScreenWidth() - orientedMarginLeft - orientedMarginRight; + const uint16_t viewportHeight = renderer.getScreenHeight() - orientedMarginTop - orientedMarginBottom; if (!section->loadSectionFile(SETTINGS.getReaderFontId(), SETTINGS.getReaderLineCompression(), SETTINGS.extraParagraphSpacing, viewportWidth, viewportHeight)) {