widgets: clock: Add a simple clock widget
This is intended to be reused by any app that shows the clock as part of the status bar at the top of the display. Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
This commit is contained in:
parent
2b244ec2a3
commit
6cd1e86295
1 changed files with 43 additions and 0 deletions
|
@ -8,9 +8,11 @@ The widget library allows common fragments of logic and drawing code to be
|
||||||
shared between applications.
|
shared between applications.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import fonts
|
||||||
import icons
|
import icons
|
||||||
import wasp
|
import wasp
|
||||||
import watch
|
import watch
|
||||||
|
|
||||||
from micropython import const
|
from micropython import const
|
||||||
|
|
||||||
class BatteryMeter:
|
class BatteryMeter:
|
||||||
|
@ -70,6 +72,47 @@ class BatteryMeter:
|
||||||
|
|
||||||
self.level = level
|
self.level = level
|
||||||
|
|
||||||
|
class Clock:
|
||||||
|
"""Small clock widget."""
|
||||||
|
def __init__(self, enabled=True):
|
||||||
|
self.on_screen = None
|
||||||
|
self.enabled = enabled
|
||||||
|
|
||||||
|
def draw(self):
|
||||||
|
"""Redraw the clock from scratch.
|
||||||
|
|
||||||
|
The container is required to clear the canvas prior to the redraw
|
||||||
|
and the clock is only drawn if it is enabled.
|
||||||
|
"""
|
||||||
|
self.on_screen = None
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
"""Update the clock widget if needed.
|
||||||
|
|
||||||
|
This is a lazy update that only redraws if the time has changes
|
||||||
|
since the last call *and* the clock is enabled.
|
||||||
|
|
||||||
|
:returns: An time tuple if the time has changed since the last call,
|
||||||
|
None otherwise.
|
||||||
|
"""
|
||||||
|
now = wasp.watch.rtc.get_localtime()
|
||||||
|
on_screen = self.on_screen
|
||||||
|
|
||||||
|
if on_screen and on_screen == now:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if self.enabled and (not on_screen or now[4] != on_screen[4]):
|
||||||
|
t1 = '{:02}:{:02}'.format(now[3], now[4])
|
||||||
|
|
||||||
|
draw = wasp.watch.drawable
|
||||||
|
draw.set_font(fonts.sans28)
|
||||||
|
draw.set_color(0xe73c)
|
||||||
|
draw.string(t1, 52, 12, 138)
|
||||||
|
|
||||||
|
self.on_screen = now
|
||||||
|
return now
|
||||||
|
|
||||||
class NotificationBar:
|
class NotificationBar:
|
||||||
"""Show BT status and if there are pending notifications."""
|
"""Show BT status and if there are pending notifications."""
|
||||||
def __init__(self, x=8, y=8):
|
def __init__(self, x=8, y=8):
|
||||||
|
|
Loading…
Reference in a new issue