4 Commits

Author SHA1 Message Date
Eunchurn Park
16568932cf
Improve EPUB cover image quality with pre-scaling and Atkinson dithering
Pre-scaling (critical fix):
- Add pre-scaling to fit display dimensions (480x800) before dithering
  to prevent post-downsampling artifacts that destroy dithering patterns
- Use fixed-point (16.16) math for sub-pixel accurate scaling
- Implement area averaging for smooth downsampling

Dithering improvements:
- Add Atkinson dithering (75% error diffusion) for cleaner results
- Add Floyd-Steinberg dithering option with serpentine scanning
- Keep clustered-dot halftone and Bayer as compile-time options

Image adjustments:
- Add brightness, contrast, and gamma adjustments for better visibility
- Adjust RGB to grayscale conversion (25-50-25) to reduce blue darkness

Other changes:
- Fix MCU block indexing bug for correct picojpeg buffer access
- Pre-generate cover BMP when EPUB is loaded for faster sleep screen
2025-12-25 00:33:15 +09:00
Dave Allie
77c655fcf5
Give activities names and log when entering and exiting them (#92)
## Summary

* Give activities name and log when entering and exiting them
* Clearer logs when attempting to debug, knowing where users are coming
from/going to helps
2025-12-21 21:17:00 +11:00
Dave Allie
958508eb6b
Prevent boot loop if last open epub crashes on load (#87)
## Summary

* Unset openEpubPath on boot and set once epub fully loaded

## Additional Context

* If an epub was crashing when loading, it was possible to get the
device stuck into a loop. There was no way to get back to the home
screen as we'd always load you back into old epub
* Break this loop by clearing the stored value when we boot, still
jumping to the last open epub, but only resetting that value once the
epub has been fully loaded
2025-12-21 18:41:52 +11:00
Dave Allie
d429966dd4
Rename Screens to Activities and restructure files (#44)
## Summary

* This PR drastically reshapes the structure of the codebase, moving
from the concept of "Screens" to "Activities", restructing the files and
setting up the concept of subactivities.
* This should help with keep the main file clean and containing all
functional logic in the relevant activity.
* CrossPointState is now also a global singleton which should help with
accessing it from within activities.

## Additional Context

* This is probably going to be a bit disruptive for people with open
PRs, sorry 😞
2025-12-17 23:32:18 +11:00