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 4ae0e61610
commit e9909c6dbf
13 changed files with 515 additions and 72 deletions

View File

@@ -16,12 +16,19 @@ enum class ImageQuality : uint8_t {
};
enum class MetaPosition : uint8_t {
Bottom = 0,
Top = 1
// Captioned mode (full-width bar)
CaptionBottom = 0,
CaptionTop = 1,
// Overlay mode (corner badge)
OverlayTopLeft = 2,
OverlayTopRight = 3,
OverlayBottomLeft = 4,
OverlayBottomRight = 5
};
// Metadata flags bitmask
constexpr uint8_t META_DATE = 0x01;
constexpr uint8_t META_TIME = 0x20;
constexpr uint8_t META_LOCATION = 0x02;
constexpr uint8_t META_PEOPLE = 0x04;
constexpr uint8_t META_ALBUM = 0x08;
@@ -44,6 +51,8 @@ struct Settings {
// Display
uint8_t meta_flags;
MetaPosition meta_pos;
String date_fmt; // strftime-style, default "%Y-%m-%d"
String time_fmt; // strftime-style, default "%H:%M:%S"
// Device
uint8_t led_brightness;