From 91e80cc3b2ba1d40145115c4f1ca372955308d1f Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sun, 26 Jun 2022 00:03:29 +0200 Subject: [PATCH 1/3] barclock: add powerSave option, perform second updates in "ram" --- apps/barclock/ChangeLog | 1 + apps/barclock/README.md | 3 ++- apps/barclock/clock-bar.js | 25 +++++++++++++++++++------ apps/barclock/metadata.json | 2 +- apps/barclock/settings.js | 10 +++++++--- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/apps/barclock/ChangeLog b/apps/barclock/ChangeLog index ba44ecef8..a00ae9325 100644 --- a/apps/barclock/ChangeLog +++ b/apps/barclock/ChangeLog @@ -12,3 +12,4 @@ 0.12: Add settings to hide date,widgets 0.13: Add font setting 0.14: Use ClockFace_menu.addItems +0.15: Add Power saving option \ No newline at end of file diff --git a/apps/barclock/README.md b/apps/barclock/README.md index ff66a5cbb..28572e37c 100644 --- a/apps/barclock/README.md +++ b/apps/barclock/README.md @@ -7,4 +7,5 @@ A simple digital clock showing seconds as a horizontal bar. ## Settings * `Show date`: display date at the bottom of screen -* `Font`: choose between bitmap or vector fonts \ No newline at end of file +* `Font`: choose between bitmap or vector fonts +* `Power saving`: (Bangle.js 2 only) don't draw the seconds bar while the watch is locked \ No newline at end of file diff --git a/apps/barclock/clock-bar.js b/apps/barclock/clock-bar.js index 61ce07dfb..cb58f5609 100644 --- a/apps/barclock/clock-bar.js +++ b/apps/barclock/clock-bar.js @@ -14,12 +14,10 @@ let locale = require("locale"); } function renderBar(l) { - if (!this.fraction) { - // zero-size fillRect stills draws one line of pixels, we don't want that - return; - } - const width = this.fraction*l.w; - g.fillRect(l.x, l.y, l.x+width-1, l.y+l.height-1); + "ram"; + if (!this.fraction) return; // zero-size fillRect stills draws one line of pixels, we don't want that + if (this.powerSave && Bangle.isLocked()) return; + g.fillRect(l.x, l.y, l.x+this.fraction*l.w-1, l.y+l.height-1); } @@ -91,6 +89,7 @@ const ClockFace = require("ClockFace"), this.layout.update(); }, update: function(date, c) { + "ram"; if (c.m) this.layout.time.label = timeText(date); if (c.h) this.layout.ampm.label = ampmText(date); if (c.d && this.showDate) this.layout.date.label = dateText(date); @@ -102,4 +101,18 @@ const ClockFace = require("ClockFace"), this.layout.forgetLazyState(); }, }); +if (clock.powerSave) { + Bangle.on("lock", l => { + if (l) { + clock.precision = 60; + clock.tick(); + const l = clock.layout.bar; + setTimeout(() => g.clearRect(l.x, l.y, l.x+l.w-1, l.y+l.height-1), 100); + } else { + clock.precision = 1; + clock.tick(); + } + }); +} + clock.start(); diff --git a/apps/barclock/metadata.json b/apps/barclock/metadata.json index 0c227dc52..5b783dbda 100644 --- a/apps/barclock/metadata.json +++ b/apps/barclock/metadata.json @@ -1,7 +1,7 @@ { "id": "barclock", "name": "Bar Clock", - "version": "0.14", + "version": "0.15", "description": "A simple digital clock showing seconds as a bar", "icon": "clock-bar.png", "screenshots": [{"url":"screenshot.png"},{"url":"screenshot_pm.png"}], diff --git a/apps/barclock/settings.js b/apps/barclock/settings.js index dfe25581c..7b88b7021 100644 --- a/apps/barclock/settings.js +++ b/apps/barclock/settings.js @@ -17,10 +17,14 @@ onchange: v => save("font", v), }, }; - require("ClockFace_menu").addItems(menu, save, { + let items = { showDate: s.showDate, loadWidgets: s.loadWidgets, - }); - + }; + // Power saving for Bangle.js 1 doesn't make sense (no updates while screen is off anyway) + if (process.env.HWVERSION>1) { + items.powerSave = s.powerSave; + } + require("ClockFace_menu").addItems(menu, save, items); E.showMenu(menu); }); From 86e3ee489bf54eec3be7faa4d59810ca4cbea971 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sun, 26 Jun 2022 14:15:46 +0200 Subject: [PATCH 2/3] barclock: optimize drawing --- apps/barclock/clock-bar.js | 45 ++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/apps/barclock/clock-bar.js b/apps/barclock/clock-bar.js index cb58f5609..4127ab97a 100644 --- a/apps/barclock/clock-bar.js +++ b/apps/barclock/clock-bar.js @@ -13,11 +13,18 @@ let locale = require("locale"); locale.hasMeridian = (locale.meridian(date)!==""); } +let barW = 0,prevX = 0; function renderBar(l) { "ram"; - if (!this.fraction) return; // zero-size fillRect stills draws one line of pixels, we don't want that - if (this.powerSave && Bangle.isLocked()) return; - g.fillRect(l.x, l.y, l.x+this.fraction*l.w-1, l.y+l.height-1); + if (l) prevX = 0; // called from Layout: drawing area was cleared + else l = clock.layout.bar; + let x2 = l.x+barW; + if (clock.powerSave && Bangle.isLocked()) x2 = 0; // hide bar + if (x2===prevX) return; // nothing to do + if (x2===0) x2--; // don't leave 1px line + if (x21; if (this.is12Hour && locale.hasMeridian) { @@ -87,31 +94,31 @@ const ClockFace = require("ClockFace"), this.layout.time.font = "6x8:"+thickness; } this.layout.update(); + bar.y2 = bar.y+bar.height-1; }, update: function(date, c) { "ram"; if (c.m) this.layout.time.label = timeText(date); if (c.h) this.layout.ampm.label = ampmText(date); if (c.d && this.showDate) this.layout.date.label = dateText(date); - const SECONDS_PER_MINUTE = 60; - if (c.s) this.layout.bar.fraction = date.getSeconds()/SECONDS_PER_MINUTE; - this.layout.render(); + if (c.m) this.layout.render(); + if (c.s) { + barW = Math.round(date.getSeconds()/60*this.layout.bar.w); + renderBar(); + } }, resume: function() { + prevX = 0; // force redraw of bar this.layout.forgetLazyState(); }, }); + +// power saving: only update once a minute while locked, hide bar if (clock.powerSave) { - Bangle.on("lock", l => { - if (l) { - clock.precision = 60; - clock.tick(); - const l = clock.layout.bar; - setTimeout(() => g.clearRect(l.x, l.y, l.x+l.w-1, l.y+l.height-1), 100); - } else { - clock.precision = 1; - clock.tick(); - } + Bangle.on("lock", lock => { + clock.precision = lock ? 60 : 1; + clock.tick(); + renderBar(); // hide/redraw bar right away }); } From 29eedee89958fee79ebeca75d7dd9bfae4d656c3 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sun, 26 Jun 2022 14:16:24 +0200 Subject: [PATCH 3/3] barclock: whitespace --- apps/barclock/clock-bar.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/apps/barclock/clock-bar.js b/apps/barclock/clock-bar.js index 4127ab97a..5a7dfc8c0 100644 --- a/apps/barclock/clock-bar.js +++ b/apps/barclock/clock-bar.js @@ -13,7 +13,7 @@ let locale = require("locale"); locale.hasMeridian = (locale.meridian(date)!==""); } -let barW = 0,prevX = 0; +let barW = 0, prevX = 0; function renderBar(l) { "ram"; if (l) prevX = 0; // called from Layout: drawing area was cleared @@ -23,11 +23,10 @@ function renderBar(l) { if (x2===prevX) return; // nothing to do if (x2===0) x2--; // don't leave 1px line if (x2