Skip to content

Add Legend watch face#2450

Open
DavisNT wants to merge 1 commit into
InfiniTimeOrg:mainfrom
DavisNT:legend
Open

Add Legend watch face#2450
DavisNT wants to merge 1 commit into
InfiniTimeOrg:mainfrom
DavisNT:legend

Conversation

@DavisNT

@DavisNT DavisNT commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

An elegant and very practical digital watch face.

Uses only fonts already in InfiniTime and no external resources. Has the standard functionality:

  • shows time, date (without year) and day of week
  • supports 24 and 12 hour time formats
  • BLE, new notification and alarm clock icons
  • battery percentage (green when charging)
  • steps and heart rate
  • temperature and weather icon

Additionally:

  • visual indication (amber dot) for any notification(s)
  • visual indication (red or blue line) when notifications are muted
  • battery percentage turns red when 20% or less
  • stopwatch and timer icons (when active)
  • colorful sun, snow and thunderstorm weather icons
  • generally uses brighter colors for more urgent things
InfiniSim_2026-07-18_223549 InfiniSim_2026-07-18_215528 InfiniSim_2026-07-18_215818

@github-actions

github-actions Bot commented Jul 18, 2026

Copy link
Copy Markdown

Build size and comparison to main:

Section Size Difference
text 388368B 3136B
data 944B 0B
bss 22640B 0B

Run in InfiniEmu

@mark9064 mark9064 added the new watchface This thread is about a new watchface label Jul 18, 2026

@mark9064 mark9064 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great overall :)

A few comments, but nothing big

I am curioous, how much did you use LLMs (if at all) during development of this watchface?

Comment thread src/displayapp/screens/WatchFaceLegend.h Outdated
Comment thread src/displayapp/screens/WatchFaceLegend.h Outdated
Comment thread src/displayapp/screens/WatchFaceLegend.cpp Outdated
@DavisNT
DavisNT force-pushed the legend branch 2 times, most recently from 88014ff to db9d562 Compare July 19, 2026 15:30
@DavisNT

DavisNT commented Jul 19, 2026

Copy link
Copy Markdown
Contributor Author

@mark9064 Thanks for the fast review!
Initial version of the design and initial code was generated by LLM (Claude Fable 5), afterwards things were fixed and more functionality (weather icon, service icons am/pm indicator etc.) was added.

I have fixed the issues you highlighted and rebased the PR. Can you please review again?

@mark9064 mark9064 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the code itself is all good. Could you take a look at all the comments though, some of them seem a bit overblown - I would say that most of the description isn't needed because if I want detail I will read the code. Visual markers for sections are probably still useful though. I've highlighted a few here

I find LLMs quite like to do this with comments :)

Also, have you tested this with AOD? Does it still look OK? (It's fine if some UI elements disappear that aren't important, but it needs to stay usable)

Comment thread src/displayapp/screens/WatchFaceLegend.cpp Outdated
Comment on lines +50 to +51
// Notification indicator. Empty string when nothing is unread,
// so the label costs no pixels and no redraws in the common case.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the description is adding much value

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we keep it with a shorted text (to help distinguish between this and the any notification indicator)?

Comment on lines +58 to +59
// Services icons. Empty string when nothing is active,
// so the label costs no pixels and no redraws in the common case.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would like to keep this with a shortened and improved text. Is the new text OK?

lv_obj_align(bleIcon, batteryValue, LV_ALIGN_OUT_LEFT_MID, -10, 0);
lv_obj_set_auto_realign(bleIcon, true);

// Upper divider - indicator of silence

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"indicator of silence" could be phrased better: maybe notification mode?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Improved. Is the new text OK?

Comment thread src/displayapp/screens/WatchFaceLegend.h Outdated
Comment thread src/displayapp/screens/WatchFaceLegend.h Outdated
if (stepCount.IsUpdated()) {
const uint32_t steps = stepCount.Get();
if (steps >= 1000) {
// "6.4k" style: compact, fixed maximum width

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment just describes the code. But also isn't it incorrect? If I do >10k steps, it gets one digit longer, and same is true for 100K (though I've only ever done about 40!)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maximum length indeed is not fixed. And also this shortening does not save any space (hundreds are still shown, dozens and ones are replaces with "." and "k"). Thanks for pointing to this! I have removed the non-working "shortening".
I think 100k steps will be around 80 km, so I think we can assume usually 5 digits max (that will be as wide as the "steps" label).

An elegant and very practical digital watch face.

Uses only fonts already in InfiniTime and no external resources.
Has the standard functionality:
* shows time, date (without year) and day of week
* supports 24 and 12 hour time formats
* BLE, new notification and alarm clock icons
* battery percentage (green when charging)
* steps and heart rate
* temperature and weather icon

Additionally:
* visual indication (amber dot) for any notification(s)
* visual indication (red or blue line) when notifications are muted
* battery percentage turns red when 20% or less
* stopwatch and timer icons (when active)
* colorful sun, snow and thunderstorm weather icons
* generally uses brighter colors for more urgent things
@DavisNT

DavisNT commented Jul 19, 2026

Copy link
Copy Markdown
Contributor Author

@mark9064 Thanks!
I have removed or changed the comments.
Also the shortening of steps has been removed (as it didn't actually shorten the label).
The watch face is tested with Always On Display - and only the bottom row labels (stepCaption, heartbeatCaption and weatherCaption) become invisible. I think it looks good with AOD.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new watchface This thread is about a new watchface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants