Brings ~55 mod-exclusive files to the upstream-based mod/master-resync branch: Activities (migrated to new ActivityManager pattern): - Clock/Time: SetTimeActivity, SetTimezoneOffsetActivity, NtpSyncActivity - Dictionary: DictionaryDefinitionActivity, DictionarySuggestionsActivity, DictionaryWordSelectActivity, LookedUpWordsActivity - Bookmark: EpubReaderBookmarkSelectionActivity - Book management: BookManageMenuActivity, EndOfBookMenuActivity - OPDS: OpdsServerListActivity, OpdsSettingsActivity - Utility: DirectoryPickerActivity, NumericStepperActivity Utilities (unchanged): - BookManager, BookSettings, BookmarkStore, BootNtpSync - Dictionary, LookupHistory, TimeSync, OpdsServerStore Libraries: PlaceholderCover, TableData, ChapterXPathIndexer Scripts: inject_mod_version, generate_book_icon, preview_placeholder_cover Docs: KOReader sync XPath mapping Migration changes: - ActivityWithSubactivity -> Activity base class - Callback constructors -> finish()/setResult() pattern - enterNewActivity() -> startActivityForResult() - Activity::RenderLock&& -> RenderLock&& These files won't compile yet - they reference mod settings and I18n strings that will be added in subsequent phases. Made-with: Cursor
2.3 KiB
2.3 KiB
Cherry-pick Image Support from pablohc/crosspoint-reader@2d8cbcf (PR #556)
Task
Merge EPUB embedded image support (JPEG/PNG) from pablohc's fork into the mod branch, based on upstream PR #556.
Changes Made
New Files (11)
lib/Epub/Epub/blocks/ImageBlock.h/.cpp- Image block type for page layoutlib/Epub/Epub/converters/DitherUtils.h- 4x4 Bayer dithering for 4-level grayscalelib/Epub/Epub/converters/ImageDecoderFactory.h/.cpp- Format-based decoder selectionlib/Epub/Epub/converters/ImageToFramebufferDecoder.h/.cpp- Base decoder interfacelib/Epub/Epub/converters/JpegToFramebufferConverter.h/.cpp- JPEG decoder (picojpeg)lib/Epub/Epub/converters/PngToFramebufferConverter.h/.cpp- PNG decoder (PNGdec)lib/Epub/Epub/converters/PixelCache.h- 2-bit pixel cache for fast re-renderscripts/generate_test_epub.py- Test EPUB generator
Modified Files (13)
lib/Epub/Epub/blocks/Block.h- Removed unusedlayout()virtuallib/Epub/Epub/blocks/TextBlock.h- Removed unusedlayout()overridelib/Epub/Epub/Page.h/.cpp- AddedPageImageclass,TAG_PageImage=3,hasImages(),getImageBoundingBox()lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h/.cpp- Image extraction/decoding from EPUB, new constructor paramslib/Epub/Epub/Section.cpp- Derive content base/image paths, bumped version 12→13lib/GfxRenderer/GfxRenderer.h/.cpp- AddedgetRenderMode(), implementeddisplayWindow()lib/hal/HalDisplay.h/.cpp- AddeddisplayWindow()for partial refreshsrc/activities/reader/EpubReaderActivity.cpp- Image-aware refresh with double FAST_REFRESH optimizationplatformio.ini- AddedPNGdecdependency,PNG_MAX_BUFFERED_PIXELS=6402build flag
Key Conflict Resolutions
TAG_PageImage = 3(not 2) to avoid collision with mod'sTAG_PageTableRow = 2- Preserved mod's bookmark ribbon rendering in
renderContents - Preserved mod's table rendering (
PageTableRow) alongside newPageImage - Section file version bumped to invalidate cached sections
Build Result
modenvironment: SUCCESS (RAM 31.0%, Flash 77.5%)
Follow-up Items
- Test on device with JPEG/PNG EPUBs
- Run
scripts/generate_test_epub.pyto create test EPUBs - Consider whether
displayWindow()experimental path should be enabled