Skip to content

XPoint v2.2.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 00:45
· 182 commits to develop since this release
v2.2.0
e5838ea

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

Bug Fixes

  • ci
  • docs
  • font
    • honest hint-probe budget and a probe that cannot crash (#177)
    • park-wait the timed-out probe and fold forced degrades into the verdict mask
    • measure the hint probe on a dedicated 32KB task (#175)
    • measure the hint stack probe from a shallow frame (#174)
  • frontlight
    • persist side-swipe adjustments on drag release
  • input
    • consume-on-check edge reads (soak regression: tap/home-key replay) (#158)
  • lib/EpdFont
  • lib/FsHelpers
  • lib/GfxRenderer
  • lib/Utf8
  • lib/hal
    • make HalFile::close() tolerant of never-opened handles
    • defer reader background layout while input is active (#143) (#147)
    • defer reader background layout while input is active (#143)
  • 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
    • review hardening for PR #165/#167 (kody threads)
  • settings
  • sleep
    • invert the logo before the transparent blit
  • src/ReaderFontSizes.cpp
  • src/SettingsList.h
  • src/SilentRestart.h
  • src/SleepFrameHash.h
    • skip redundant sleep-frame rewrites (#164)
  • src/activities
  • src/images
  • src/main.cpp
    • unblock X4 Pro frontlight double-click when short power press = Sleep, add Home key option (crosspoint-reader#3089)

Performance

  • docs
    • adopt freeink-sdk advance fast path for FIBP indexing (#167)
    • FreeType glyph cache, hinting re-enable, fast face loading, next-page prerender (#155)
  • lib/GfxRenderer
  • src/activities
  • src/util

Refactors

  • docs
    • consolidate file writes onto the SDK's atomic write path (#178)
  • frontlight
    • one shared controller + global edge drag
  • reader

Documentation

  • design
    • GT911 sleep toward touch-only wake (proposed)
  • dictionary
  • 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
  • lib/I18n
  • other
    • allow build RC from develop
    • allow build RC from develop
  • scripts
  • 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
  • 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