feat: metadata overlay tweaks — location badge, rounded corners, translucent option

- Location gets its own badge in the lower-left corner (separate from
  the main date/time/people/camera badge at the configured position)
- All overlay badges now use rounded corners (radius 4px) via
  fillRoundRect instead of fillRect
- New setting: 'Translucent background?' checkbox in web UI
  When enabled, badge backgrounds use a checkerboard pattern (every
  other pixel black) instead of solid black, creating a 50% opacity
  effect that lets the underlying image show through
- Refactored all badge drawing through a single drawOverlayBadge()
  helper (metadata, sleep indicator, battery indicator)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-03 20:50:01 -04:00
parent 5b7c0042f9
commit bb270e0546
7 changed files with 153 additions and 63 deletions

View File

@@ -287,6 +287,7 @@ void AppWebServer::handleGetSettings(AsyncWebServerRequest* request) {
doc["time_fmt"] = s.time_fmt;
doc["pipeline_mode"] = s.pipeline_mode;
doc["dither_noise"] = s.dither_noise;
doc["meta_translucent"] = s.meta_translucent;
doc["led_brightness"] = s.led_brightness;
doc["show_battery"] = s.show_battery;
doc["immich_url"] = s.immich_url;
@@ -318,6 +319,7 @@ void AppWebServer::handlePostSettings(AsyncWebServerRequest* request,
if (!doc["time_fmt"].isNull()) s.time_fmt = doc["time_fmt"].as<String>();
if (!doc["pipeline_mode"].isNull()) s.pipeline_mode = doc["pipeline_mode"];
if (!doc["dither_noise"].isNull()) s.dither_noise = doc["dither_noise"];
if (!doc["meta_translucent"].isNull()) s.meta_translucent = doc["meta_translucent"];
if (!doc["led_brightness"].isNull()) s.led_brightness = doc["led_brightness"];
if (!doc["show_battery"].isNull()) s.show_battery = doc["show_battery"];
if (!doc["immich_url"].isNull()) s.immich_url = doc["immich_url"].as<String>();