Files
crosspoint-reader-mod/chat-summaries/2026-02-15_17-21-summary.md
cottongin dfbc931c14 mod: Phase 1 - bring forward mod-exclusive files with ActivityManager migration
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
2026-03-07 15:10:00 -05:00

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 layout
  • lib/Epub/Epub/converters/DitherUtils.h - 4x4 Bayer dithering for 4-level grayscale
  • lib/Epub/Epub/converters/ImageDecoderFactory.h / .cpp - Format-based decoder selection
  • lib/Epub/Epub/converters/ImageToFramebufferDecoder.h / .cpp - Base decoder interface
  • lib/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-render
  • scripts/generate_test_epub.py - Test EPUB generator

Modified Files (13)

  • lib/Epub/Epub/blocks/Block.h - Removed unused layout() virtual
  • lib/Epub/Epub/blocks/TextBlock.h - Removed unused layout() override
  • lib/Epub/Epub/Page.h / .cpp - Added PageImage class, TAG_PageImage=3, hasImages(), getImageBoundingBox()
  • lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h / .cpp - Image extraction/decoding from EPUB, new constructor params
  • lib/Epub/Epub/Section.cpp - Derive content base/image paths, bumped version 12→13
  • lib/GfxRenderer/GfxRenderer.h / .cpp - Added getRenderMode(), implemented displayWindow()
  • lib/hal/HalDisplay.h / .cpp - Added displayWindow() for partial refresh
  • src/activities/reader/EpubReaderActivity.cpp - Image-aware refresh with double FAST_REFRESH optimization
  • platformio.ini - Added PNGdec dependency, PNG_MAX_BUFFERED_PIXELS=6402 build flag

Key Conflict Resolutions

  • TAG_PageImage = 3 (not 2) to avoid collision with mod's TAG_PageTableRow = 2
  • Preserved mod's bookmark ribbon rendering in renderContents
  • Preserved mod's table rendering (PageTableRow) alongside new PageImage
  • Section file version bumped to invalidate cached sections

Build Result

  • mod environment: SUCCESS (RAM 31.0%, Flash 77.5%)

Follow-up Items

  • Test on device with JPEG/PNG EPUBs
  • Run scripts/generate_test_epub.py to create test EPUBs
  • Consider whether displayWindow() experimental path should be enabled