This release delivers a full graphic restyle of the UI, a large set of new
vector icons, reader-menu icons, plus several bug fixes — most importantly a
PNG-decoding fix that prevented folder-selector image previews from rendering.
Highlights
- 🎨 Complete UI graphic restyle with a new "cyberpunk" panel style (Marcoand75 theme)
- 🖼️ 19 new SVG icons generated into 38 C++ header files (32 px + 24 px variants)
- 📖 Reader menu now shows per-item icons
- 🐛 PNG image previews in the screensaver / sleep folder selectors no longer fail
with "Invalid image file" - 🔧 Various stability and UI fixes
🎨 UI / Graphic Restyle
- New angular "cyberpunk" panel style (chamfered borders, corner brackets, scanline
separators) for the Marcoand75 theme, applied across homepage stats, icon bar,
carousel and popup overlays. - Centralized panel drawing into a shared
PanelDrawHelperhelper
(drawCyberpunkPanel,drawBackground,drawAngularPanel,drawRowIcon, …)
used by popups, context menus and overlays. - Restyle of homepage panels and the book-context popup with the cyberpunk style.
- All Lyra / Marcoand75 theme panels reworked for consistent layout and metrics.
- Settings screens restored/refreshed as part of the restyle.
🖼️ Icons
- Added 19 new custom SVG icons, each emitted as both 32 px and 24 px C++ headers
(38 newcomponents/icons/*.hfiles): SearchPlus, SearchMinus, TimeFast,
SortAsc, SortDesc, LibraryNew, GpsFound, MedalAlt, Dictionary2, AppsHub,
CalendarTime, LibraryBook, DeleteFile, CacheCleaner, FinishFlag,
NotificationUnread, FileTransfer, Calibre, plus Bookmark/Search/Rotation/Pageview. - New icon-generation tooling:
scripts/generate_cpr_icons.py— converts SVGs into the C++ header format.scripts/fetch_koreader_icons.py— fetches upstream KOReader icon sources.
- Reader menu (
EpubReaderMenuActivity) now renders an icon per menu item
(Settings, Chapter, Bookmarks, Dictionary, Rotate, Auto-turn, Screenshot, QR,
Mark finished, Sync, Delete cache, …).
🐛 Bug Fixes
- PNG folder-selector previews (
ScreenSaverPreviewActivity): PNG decoding
failed with "Invalid image file" while BMP previews kept working. Root cause:
PNGdec keeps its entire ~58 KB working set (32 KB zlib window + inflate state +
row/palette/file buffers) inline in thePNGobject, sonew PNG()needed one
large contiguous heap block that is frequently unavailable on the ESP32-C3 due
to heap fragmentation. The decoder now uses a single static instance living in
.bss, so decoding no longer depends on contiguous heap. Font caches are also
cleared right before each decode (mirroringSleepActivity). BMP path unaffected. - Long refresh after exiting the Library fixed.
- Mark as Unread now correctly resets the book "completed" status
(ReadingStatsStore::beginSession).
🔧 Improvements
- Homepage panel label changed from "Tempo" to "ETA" (estimated time to finish),
already present in IT/EN translations. - Minor
GfxRendereradditions to support the new panel drawing.
🌐 Translations
- English and Italian string tables updated for the new labels/icons.
🛠️ Internal / Developer
src/components/PanelDrawHelper.hadded as the shared panel-drawing utility.src/util/PngSleepRenderer.cppreworked to reuse a staticPNGdecoder instance
(safe:PNG::open()re-initializes the struct on every call, and decoding is
always synchronous from a single activity).README.mdupdated with the full feature list.ShortcutRegistry.hextended with the new shortcut icons.
Affected areas (by file count)
| Area | Files |
|---|---|
| Icons | 82 |
| Other | 23 |
| Activities | 7 |
| Themes | 5 |
| Core / PNG | 4 |
| Scripts | 3 |
| Translations | 2 |
Build note: the static PNG decoder working set raises static RAM usage
(~31% → ~49% of DRAM); this is intentional to guarantee PNG decoding without
relying on fragmented heap.