Repository navigation
XPoint v2.2.0
·
182 commits
to develop
since this release
Personal fork release. See README fork notice. OTA is signed (Ed25519); verify before flashing.
Headline: TrueType & OpenType fonts, with hinting actually working — and a rewritten fast, clean TTF engine
The TTF/OTF engine was rewritten to use FreeType directly on PSRAM boards (X4 Pro, and any other board with PSRAM), and it's the fast-and-clean kind of rewrite: hinting on so glyphs snap to the pixel grid, and the render path is monochrome 1-bit now, so you don't need anti-aliasing anymore.
What that means on the page:
- Sharper text at small sizes. Hinting makes glyphs land crisp on the pixel grid, which is exactly where the old unhinted pipeline looked soft and a little blurry.
- Faster. The FreeType backend reuses open faces and uses a glyph cache + fast face loading, and next-page prerendering is back. Page turns stopped hunting for a font you were already looking at.
- Cleaner output, no AA. With the FreeType path on PSRAM boards, glyphs render monochrome, so the renderer no longer has to pay the grayscale anti-aliasing pass. Less work on the SPI bridge, cleaner edges.
- Hinting genuinely works this time. The stack budget that gates hinting was sitting below the real cost of a hinted render, so it switched hinting off for essentially every font — including OTF/CFF faces that crashed the probe on the way in. The budget is now derived from data (the actual 48 KB render-task stack minus a measured margin), backed by a host benchmark (
test/hint_mem_bench) that records real per-font stack depth. The probe itself was resized so it reports an over-budget face instead of panicking on it. Both Amazon Ember and Atkinson Hyperlegible keep hinting on now.
If you use custom fonts, drop your .ttf / .otf in /fonts or /.fonts and flash this release — this is the one where it lands.
Changelog
Range: v2.1.0..v2.2.0
Features
- docs
- Add TrueType fonts on PSRAM boards (crosspoint-reader#3646)
- add word and character spacing controls (crosspoint-reader#3528)
- choose which UI languages are compiled in (crosspoint-reader#3618)
- font
- port upstream crosspoint-reader#3646 TTF improvements into the native-TTF stack (#162)
- switch native-TTF reader to the FreeType backend
- lib/Epub
- add Portuguese hyphenation support (crosspoint-reader#3643)
- Adds Cover Grid UI Theme for PSRAM capable devices (crosspoint-reader#3657)
- lib/I18n
- better footnotes navigation (crosspoint-reader#3682)
- Add CrossInk style swipe and tap controls (crosspoint-reader#3586)
- refresh library (crosspoint-reader#3608)
- reader
- quick-menu sizing unification + full-screen font preview activity
- background FIBP chapter-index prefetch (index-ahead) (#153)
- src/MappedInputManager.cpp
- add back buttons to the header and unify all theme headers (crosspoint-reader#3689)
- src/activities
- settings checkbox (crosspoint-reader#3773)
- navigate lists on button press (crosspoint-reader#3754)
- Convert slider dialogs to popups over current page (crosspoint-reader#3669)
- rename files (crosspoint-reader#3572)
Bug Fixes
- ci
- pin pioarduino core inside the platform penv (crosspoint-reader#3594)
- docs
- Remove article stripping logic (crosspoint-reader#3749)
- justify Korean text by word spaces only (crosspoint-reader#3700)
- font
- frontlight
- persist side-swipe adjustments on drag release
- input
- consume-on-check edge reads (soak regression: tap/home-key replay) (#158)
- lib/EpdFont
- Sticky env missing ram stats (crosspoint-reader#3683)
- stop duplicating identical interval tables across font styles (crosspoint-reader#3616)
- lib/FsHelpers
- don't cut screenshot folder names mid-letter (crosspoint-reader#3750)
- lib/GfxRenderer
- speed up long status titles (crosspoint-reader#3573)
- re-introduce deferred overlay refresh with bounded settle (follow-up to #143) (#149)
- restore space widths on partial cache misses (crosspoint-reader#3585)
- lib/Utf8
- restore NFC composition in File Browser rows (crosspoint-reader#3630)
- lib/hal
- other
- pin pioarduino in release.yml too
- pin packages in rc workflow
- pin packages in rc workflow
- reader
- drop quick-font +/- buttons; preview close pops to the book page
- selecting the already-resident family must not reload the loader
- resync the TTF UI fallback after a loader reload
- serve partial-prefix resume, stop FIBP claim churn, local quick-font steps (#165)
- mark TTF pages rendered so sleep covers and recents work
- guard prerender invalidation behind the TTF build flag
- settle overlay refresh before launching stats screens
- gate FIBP worker progress and dedup re-arm (PR #153 review threads)
- quick font sheet +/- responsiveness after family pick and per-tap delay (#140)
- reader,bench
- settings
- fix list scrolling (crosspoint-reader#3668)
- sleep
- invert the logo before the transparent blit
- src/ReaderFontSizes.cpp
- Toolbar menu in landscape mode + TTF font sizes (crosspoint-reader#3748)
- src/SettingsList.h
- Re-Enable toolbar reader menu on button-only devices (crosspoint-reader#3603)
- src/SilentRestart.h
- tear down WiFi when leaving the Settings network screen (crosspoint-reader#3613)
- src/SleepFrameHash.h
- skip redundant sleep-frame rewrites (#164)
- src/activities
- let Back leave File Transfer during a slow HTTP upload (crosspoint-reader#3732)
- Footnote selection with power button (crosspoint-reader#3766)
- update keyboard layout and look (crosspoint-reader#3755)
- don't reopen unreadable EPUB on wake (crosspoint-reader#3724)
- release SD-font caches on reader exit (crosspoint-reader#3699)
- Switch tap zones for RTL books (crosspoint-reader#3709)
- Reader list not scrollable with touch (crosspoint-reader#3693)
- wrap OTA completion power-on hint (crosspoint-reader#3632)
- Split navigation modes for cover grid & add selected states (crosspoint-reader#3670)
- harden the overlay settle-timeout path (issue #151) (#152)
- tear down quick font sheet chrome unconditionally (#143) (#144)
- stop materializing every File Browser row (FUI list rowProvider) (crosspoint-reader#3600)
- dictionary definition navigation honors touchReaderControls (#138) (#139)
- src/images
- Remove loading icon display during startup (crosspoint-reader#3671)
- src/main.cpp
- unblock X4 Pro frontlight double-click when short power press = Sleep, add Home key option (crosspoint-reader#3089)
Performance
- docs
- lib/GfxRenderer
- reduce per-pixel overhead in font rendering (crosspoint-reader#3633)
- src/activities
- avoid main-loop contention during EPUB rendering (crosspoint-reader#3652)
- src/util
- remove ButtonNavigator allocation churn (crosspoint-reader#3698)
Refactors
- docs
- consolidate file writes onto the SDK's atomic write path (#178)
- frontlight
- one shared controller + global edge drag
- reader
- unify TXT and Markdown rendering via EPUB pipeline (crosspoint-reader#3704)
Documentation
- design
- GT911 sleep toward touch-only wake (proposed)
- dictionary
- recommend unzipping .dict.dz files on devices without PSRAM. (crosspoint-reader#3768)
- other
- make ESP32-S3 (X4 Pro) the default target with C3 compatibility
Tests
- include in library builder storage stub (crosspoint-reader#3765)
- fix library_builder stub include for GCC 16
CI
- pin platform-espressif32 to 55.03.312 release asset
Chores
- deps
- update freeink-sdk digest to 2e7a3cf (#181)
- update freeink-sdk digest to 73284f4 (#179)
- update freeink-sdk digest to 1bc845c (#176)
- update freeink-sdk digest to 6aea9ce (#173)
- update freeink-sdk digest to 3b0573c (#172)
- update freeink-sdk digest to 1149d71 (#169)
- update freeink-sdk digest to 7004582 (#166)
- update freeink-sdk digest to 55f241b (#163)
- bump freeink-sdk to 211c834 (trailing reveal list action)
- bump freeink-sdk to 2e4dae25 (ttc face-index + review hardening, PR Belphemur/freeink-sdk#33)
- update freeink-sdk digest to 517f150 (#161)
- update freeink-sdk digest to 4979b86 (#160)
- update freeink-sdk digest to 8a17f64 (#157)
- update astral-sh/setup-uv action to v10.2.0 (#159)
- update freeink-sdk digest to ab103d0 (#156)
- update freeink-sdk digest to 43fed43 (#154)
- update freeink-sdk digest to 2dbd5a8 (#150)
- update freeink-sdk digest to 5b52bfc (#148)
- update freeink-sdk digest to 6a8addc (#145)
- bump freeink-sdk to 660dc91 (FreeInkFont split)
- update freeink-sdk digest to d4ae97f (#141)
- docs
- Update translations (crosspoint-reader#3396)
- lib/I18n
- update German translation (crosspoint-reader#3621)
- other
- allow build RC from develop
- allow build RC from develop
- scripts
- address Python Sonar warnings (crosspoint-reader#2515)
- sync
- merge upstream/develop — ours-resolve TXT/EPUB pipeline refactor
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
- merge upstream/develop into develop
Other
- lib/Epub
- [port] unify TXT and Markdown rendering via EPUB pipeline (crosspoint-reader#3704)
- other
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge upstream develop: footnote power-button select, list navigation, keyboard layout
- Merge remote-tracking branch 'origin/develop' into develop
- Merge remote-tracking branch 'upstream/develop' into HEAD
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge remote-tracking branch 'origin/develop' into develop
- Merge remote-tracking branch 'upstream/develop' into HEAD
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge branch 'wt/issue-143-revert-43a3358' into develop
- Merge remote-tracking branch 'upstream/develop' into develop
- Merge remote-tracking branch 'upstream/develop' into HEAD
- src/MappedInputManager.cpp
- Fix header back button tap handling in input routing
- src/activities
- Merge remote-tracking branch 'upstream/develop' into develop
- Use FAST refresh for moon icon in night mode
- Preserve display inversion for Quick Resume sleep
- Remove RenderLock from EpubReaderActivity destructor
- Revert "fix: Re-Enable toolbar reader menu on button-only devices (crosspoint-reader#3603)" (async refresh machinery only)
- [RS-debug] fix: time-left estimates use the live page's engine wordCount
- [RS-debug] style: clang-format QuickPageCapture aggregate
- [RS-debug] fix: QuickPageCapture aggregate after Page::wordCount insertion
- [RS-debug] fix: use engine-computed page wordCount for pace samples
- [RS-debug] instrument: log raw dwell/words/wpm per pace sample
- [RS-debug] fix: clip dump lines to panel width, mirror full dump to DBG log
- src/components
- Change book card selection indicator to CoverFrame