Skip to content

v0.0.2: WYSIWYG settings + coloured weather icons - #3

Merged
eldios merged 4 commits into
watchfacefrom
feat/v0.0.2
Jun 14, 2026
Merged

v0.0.2: WYSIWYG settings + coloured weather icons#3
eldios merged 4 commits into
watchfacefrom
feat/v0.0.2

Conversation

@eldios

@eldios eldios commented Jun 14, 2026

Copy link
Copy Markdown
Owner

Summary

  • WYSIWYG settings. Saving the config page now applies every value it shows, not only the ones you touched. Previously the page sent only the keys that differed from a phone-side baseline (localStorage), which is not authoritative and drifts from the watch (reinstall, a different phone, or JS defaults that never matched the firmware). A value shown in the page but left untouched was silently never applied — e.g. a complication reading "Location" in the settings yet staying "Date" on the watch. Every non-translation setting is now always sent (the C inbox handler already applies only the keys present, so this stays idempotent). Translation strings stay delta-only to fit the watch's 1280-byte inbox; the language picker resends them when it changes them.
  • Coloured weather icons on colour watches (basalt, emery): the condition glyph is tinted by meaning — sun amber, rain/snow blue, lightning amber, moon pale yellow — while the temperature keeps the theme colour. Black-and-white watches (diorite, flint) are unchanged.
  • Weather → Icon style selector: Default (colour where the platform supports it, B&W otherwise, and it follows the Mono theme's monochrome look), Colour (force the tinted icons, overriding the Mono theme), or Black & White (force the classic monochrome glyph on colour watches too).
  • Config defaults aligned to firmware (the above-calendar Week and AM/PM slots, low-battery threshold), so a fresh install shows the watch's real out-of-box state before the first save.

Compatibility

adv_settings.weather_icons is appended at the end of the persisted struct, so existing saved blobs keep the Default value via the static initializer — no reset, fully backward compatible (persist_read_data tolerates a shorter stored blob).

Test plan

Verified inside nix develop:

  • Host unit suite: 18/18 passing (tools/test.sh).
  • pebble build completes for basalt, diorite, emery, flint.
  • strict-check clean under the cloud's -Werror flag set on all four platforms (zero warnings) — both PBL_COLOR and PBL_BW paths.
  • Config JS logic with node: the "ghost setting" scenario is fixed; payload stays under the 1280-byte inbox (~835 B common case, ~831 B AppMessage on a full language switch); the new Icon style field renders with Default selected and is included in the always-send set.
  • Not verified visually on the emulator (screenshots to be captured separately).

eldios added 4 commits June 14, 2026 04:11
The config page sent only keys that differed from a phone-side baseline. That
baseline (localStorage) is not authoritative — it drifts from the watch on
reinstall, a different phone, or when JS defaults never matched the firmware —
so a value shown in the page but left untouched was silently never applied
(e.g. a complication reading "Location" yet staying "Date" on the watch).

Always send every non-translation setting so the watch matches the page (the C
inbox handler already applies only the keys present, keeping this idempotent).
Translation strings stay delta-only to fit the 1280-byte inbox; the language
picker resends them when it changes them. Also align the JS slot/threshold
defaults (style_week, style_am_pm, low-battery) to the firmware so a fresh
install shows the real out-of-box state before the first save.
weather_glyph_color() maps each Climacons condition glyph to a meaningful
colour (sun amber, rain/snow blue, lightning amber, moon pale yellow) on
PBL_COLOR watches outside the Mono theme; the temperature keeps the theme
colour. Black-and-white platforms (diorite, flint) and the Mono theme are
unchanged. All colours are stock SDK GColor values.
WYSIWYG settings fix and colour weather icons; see CHANGELOG.md.
A Weather > Icon style selector lets colour-watch owners choose:
  - Default: colour where the platform supports it, B&W otherwise (and it
    follows the Mono theme's monochrome look);
  - Colour: force the tinted icons, overriding the Mono theme;
  - Black & White: force the classic monochrome glyph on colour watches too.

Stored as adv_settings.weather_icons (appended at the struct end so existing
persisted blobs keep the Default via the static initializer). weather_glyph_color
honours it; the config handler redraws the weather on change.
@eldios eldios self-assigned this Jun 14, 2026
@eldios
eldios merged commit d4aed42 into watchface Jun 14, 2026
2 checks passed
@eldios
eldios deleted the feat/v0.0.2 branch June 14, 2026 02:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant