From f81215eb464189b3b19943fb41aff6dc9366f736 Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Sat, 11 Dec 2021 13:36:28 -0500 Subject: [PATCH] vectorclock: Bangle.js 2 support --- apps.json | 9 +++-- apps/vectorclock/Changelog | 1 + apps/vectorclock/app.js | 34 ++++++++++++------ .../bangle2-vector-clock-screenshot.png | Bin 0 -> 3571 bytes 4 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 apps/vectorclock/bangle2-vector-clock-screenshot.png diff --git a/apps.json b/apps.json index fd2e14e60..017bfb694 100644 --- a/apps.json +++ b/apps.json @@ -4117,14 +4117,17 @@ { "id": "vectorclock", "name": "Vector Clock", - "version": "0.02", + "version": "0.03", "description": "A digital clock that uses the built-in vector font.", "icon": "app.png", "type": "clock", "tags": "clock", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS", "BANGLEJS2"], "allow_emulator": true, - "screenshots": [{"url":"bangle1-vector-clock-screenshot.png"}], + "screenshots": [ + {"url":"bangle2-vector-clock-screenshot.png"}, + {"url":"bangle1-vector-clock-screenshot.png"} + ], "storage": [ {"name":"vectorclock.app.js","url":"app.js"}, {"name":"vectorclock.img","url":"app-icon.js","evaluate":true} diff --git a/apps/vectorclock/Changelog b/apps/vectorclock/Changelog index 43190331b..c2a6fbcf4 100644 --- a/apps/vectorclock/Changelog +++ b/apps/vectorclock/Changelog @@ -1,2 +1,3 @@ 0.1: New watch face 0.2: Use Bangle.setUI for button/launcher handling +0.3: Bangle.js 2 support \ No newline at end of file diff --git a/apps/vectorclock/app.js b/apps/vectorclock/app.js index a98c9f97b..8259b82e4 100644 --- a/apps/vectorclock/app.js +++ b/apps/vectorclock/app.js @@ -5,9 +5,10 @@ function padNum(n, l) { return ("0".repeat(l)+n).substr(-l); } -let rects = {}; -let rectsToClear = {}; -let commands = []; +var rects = {}; +var rectsToClear = {}; +var commands = []; +var showSeconds = true; function pushCommand(command) { let hash = E.CRC32(E.toJS(arguments)); @@ -20,17 +21,20 @@ function executeCommands() { "ram"; for (let hash in rectsToClear) delete rects[hash]; for (let r of rectsToClear) if (r) g.clearRect(r.x1, r.y1, r.x2, r.y2); - g.getModified(true); - for (let c of commands) { - c.command(); - rects[c.hash] = g.getModified(true); - } + for (let c of commands) rects[c.hash] = c.command(); rectsToClear = Object.assign({}, rects); commands = []; } function drawVectorText(text, size, x, y, alignX, alignY) { g.setFont("Vector", size).setFontAlign(alignX, alignY).drawString(text, x, y); + var m = g.stringMetrics(text); + return { + x1: x - m.width * (alignX / 2 + 0.5), + y1: y - m.height * (alignY / 2 + 0.5), + x2: x - m.width * (alignX / 2 - 0.5), + y2: y - m.height * (alignY / 2 - 0.5) + }; } function draw() { @@ -60,7 +64,7 @@ function draw() { pushCommand(drawVectorText, timeText, timeFontSize, 0, y, -1, -1); pushCommand(drawVectorText, meridian, timeFontSize*9/20, g.getWidth(), y, 1, -1); - pushCommand(drawVectorText, secondsText, timeFontSize*9/20, g.getWidth(), y + timeHeight, 1, 1); + if (showSeconds) pushCommand(drawVectorText, secondsText, timeFontSize*9/20, g.getWidth(), y + timeHeight, 1, 1); y += timeHeight + spacer; pushCommand(drawVectorText, dowText, dowFontSize, g.getWidth()/2, y, 0, -1); @@ -71,11 +75,12 @@ function draw() { executeCommands(); } -let timeout; +var timeout; function tick() { draw(); - timeout = setTimeout(tick, 1000 - getTime() % 1 * 1000); + var period = showSeconds ? 1000 : 60 * 1000; + timeout = setTimeout(tick, period - getTime() * 1000 % period); } Bangle.on('lcdPower', function(on) { @@ -84,6 +89,13 @@ Bangle.on('lcdPower', function(on) { if (on) tick(); }); +Bangle.on('lock', function(locked) { + if (timeout) clearTimeout(timeout); + timeout = null; + showSeconds = !locked; + tick(); +}); + g.clear(); tick(); Bangle.loadWidgets(); diff --git a/apps/vectorclock/bangle2-vector-clock-screenshot.png b/apps/vectorclock/bangle2-vector-clock-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..30d40c86483c905ef69d8ee5c01dccf908480528 GIT binary patch literal 3571 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 literal 0 HcmV?d00001