feat: blurred letterbox, portrait pairs, overlay metadata, button fixes

- Letterbox: extend edge pixels outward with blur + fade to solid color
- Portrait: detect and pair portraits side-by-side, fallback to solo
- Metadata: add overlay mode (corner badge), time field, custom date/time
  format strings (strftime), font size 1.5x, region-aware for pairs
- Buttons: swap G9/G10 to match physical layout, double-press random
  button for deep sleep, SLP indicator drawn before sleep
- Boot: remove redundant 'Loading photos' screen (saves 17s refresh)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-03 15:53:06 -04:00
parent 1d4f94426d
commit 0399573edf
13 changed files with 515 additions and 72 deletions

View File

@@ -20,6 +20,8 @@ Settings SettingsManager::get() {
s.img_quality = static_cast<ImageQuality>(readU8("img_quality", DEFAULT_IMG_QUALITY));
s.meta_flags = readU8("meta_flags", DEFAULT_META_FLAGS);
s.meta_pos = static_cast<MetaPosition>(readU8("meta_pos", DEFAULT_META_POS));
s.date_fmt = readString("date_fmt", "%Y-%m-%d");
s.time_fmt = readString("time_fmt", "%H:%M:%S");
s.led_brightness = readU8("led_bright", DEFAULT_LED_BRIGHTNESS);
s.queue_cursor = readU32("queue_cursor", 0);
s.albums_json = readString("albums_json", "[]");
@@ -36,6 +38,8 @@ void SettingsManager::save(const Settings& s) {
writeU8("img_quality", static_cast<uint8_t>(s.img_quality));
writeU8("meta_flags", s.meta_flags);
writeU8("meta_pos", static_cast<uint8_t>(s.meta_pos));
writeString("date_fmt", s.date_fmt);
writeString("time_fmt", s.time_fmt);
writeU8("led_bright", s.led_brightness);
writeU32("queue_cursor", s.queue_cursor);
writeString("albums_json", s.albums_json);