From db75324d00167b54407f832addd223ba2ebf2cc1 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Fri, 22 Sep 2023 20:38:11 +0200 Subject: [PATCH] saclock: add "monochrome" setting for Bangle.js 2 Only for Bangle.js 2, because part of the "simple" is that we draw to a graphics buffer, and B1 doesn't have enough memory for a colour buffer. (Drawing directly would involve sprinkling y-offsets and "redraw background" all over the code; doable, but no longer simple) --- apps/saclock/ChangeLog | 3 ++- apps/saclock/app.js | 21 +++++++++++++++------ apps/saclock/metadata.json | 8 ++++++-- apps/saclock/screenshot.png | Bin 14588 -> 0 bytes apps/saclock/screenshot1.png | Bin 0 -> 2504 bytes apps/saclock/screenshot2.png | Bin 0 -> 2723 bytes apps/saclock/screenshot3.png | Bin 0 -> 2550 bytes apps/saclock/settings.js | 21 +++++++++++++++++---- 8 files changed, 40 insertions(+), 13 deletions(-) delete mode 100644 apps/saclock/screenshot.png create mode 100644 apps/saclock/screenshot1.png create mode 100644 apps/saclock/screenshot2.png create mode 100644 apps/saclock/screenshot3.png diff --git a/apps/saclock/ChangeLog b/apps/saclock/ChangeLog index 88c983c2c..006982ef0 100644 --- a/apps/saclock/ChangeLog +++ b/apps/saclock/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! -0.02: Hide widgets instead of not loading them at all \ No newline at end of file +0.02: Hide widgets instead of not loading them at all +0.03: Bangle.js 2: add "monochrome" setting diff --git a/apps/saclock/app.js b/apps/saclock/app.js index 3bac66211..40849d1d2 100644 --- a/apps/saclock/app.js +++ b/apps/saclock/app.js @@ -30,11 +30,15 @@ function move(points, x, y) { let clock = new (require("ClockFace"))({ settingsFile: "saclock.settings.json", init: function() { + if (process.env.HWVERSION<2) this.multicol = false; // colored buffer won't fit in Bangle.js 1 memory :-( // create a graphics buffer, and pre-draw the outer ring const bs = Math.min(Bangle.appRect.w, Bangle.appRect.h); // buffer size - this.r = Math.min(Bangle.appRect.w, Bangle.appRect.h)/2; // outer radius - this.buffer = Graphics.createArrayBuffer(bs, bs, 1, {msb: true}); + this.r = Math.min(Bangle.appRect.w, Bangle.appRect.h)/2 - 1; // outer radius + this.bits = this.multicol ? 16 : 1; + this.buffer = Graphics.createArrayBuffer(bs, bs, this.bits, {msb: true}); let buf = this.buffer; + buf.setColor(g.theme.bg).fillRect(0,0, bs,bs); + buf.setColor(this.multicol ? g.theme.bgH : g.theme.fg); buf.fillCircle(this.r, this.r, this.r); // only fill this once: we only draw inside the inner ring }, update: function(time) { @@ -48,8 +52,8 @@ let clock = new (require("ClockFace"))({ hr = ((time.getHours()%12)+(time.getMinutes()/60))/12*Math.TAU, // hour hand rotation ml = 0.8*r2, // minute hand length mr = time.getMinutes()/60*Math.TAU, // minute hand rotation - x = Math.floor((Bangle.appRect.x+Bangle.appRect.x2)/2), // "real" clock center, only - y = Math.floor((Bangle.appRect.y+Bangle.appRect.y2)/2); // used for drawing buffer + x = Math.ceil((Bangle.appRect.x+Bangle.appRect.x2)/2), // "real" clock center, only + y = Math.ceil((Bangle.appRect.y+Bangle.appRect.y2)/2); // used for drawing buffer let buf = this.buffer; function drawHand(length, radians) { @@ -67,13 +71,18 @@ let clock = new (require("ClockFace"))({ } buf.setColor(g.theme.bg).fillCircle(c, c, r2); // clear inside - buf.setColor(g.theme.fg); + buf.setColor(this.multicol ? g.theme.fg2 : g.theme.fg); drawHand(hl, hr); // hour hand + buf.setColor(g.theme.fg); drawHand(ml, mr); // minute hand buf.fillCircle(c, c, Math.floor(hw)); // hands joiner + if (!this.multicol && !g.theme.dark) { + // apparently 1-bit g.drawImage swaps fg/bg colors for light themes? + g.setColor(g.theme.bg).setBgColor(g.theme.fg); + } g.drawImage({ width: buf.getWidth(), height: buf.getHeight(), - buffer: buf.buffer + buffer: buf.buffer, bpp: this.bits, }, x, y, {rotate: 0}); // setting `rotate` centers the image on x,y }, }); diff --git a/apps/saclock/metadata.json b/apps/saclock/metadata.json index 6ad55b0fe..bf0d99493 100644 --- a/apps/saclock/metadata.json +++ b/apps/saclock/metadata.json @@ -1,9 +1,13 @@ { "id": "saclock", "name": "Simple analog clock", "shortName":"Analog clock", - "version":"0.02", + "version":"0.03", "description": "A very basic analog clock", - "screenshots": [{"url":"screenshot.png"}], + "screenshots": [ + {"url":"screenshot1.png"}, + {"url":"screenshot2.png"}, + {"url":"screenshot3.png"} + ], "icon": "icon.png", "type": "clock", "tags": "clock,analog", diff --git a/apps/saclock/screenshot.png b/apps/saclock/screenshot.png deleted file mode 100644 index 595b032dd688bf69f249371a779f3f13dd298dff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14588 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 diff --git a/apps/saclock/screenshot1.png b/apps/saclock/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a539d6e2c2b4cbc9d216393baa958a9fa80520 GIT binary patch literal 2504 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 literal 0 HcmV?d00001 diff --git a/apps/saclock/screenshot3.png b/apps/saclock/screenshot3.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf9a6e2a65c836c22945cffa69f28676481d17a GIT binary patch literal 2550 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 M07*qoM6N<$f*xAK3;+NC literal 0 HcmV?d00001 diff --git a/apps/saclock/settings.js b/apps/saclock/settings.js index 30ea95321..fc50d04dc 100644 --- a/apps/saclock/settings.js +++ b/apps/saclock/settings.js @@ -1,10 +1,23 @@ (function(back) { + let settings = require("Storage").readJSON("saclock.settings.json", true)||{}; + function save(key, value) { + settings[key] = value; + require("Storage").writeJSON("saclock.settings.json", settings); + } + let menu = { "": {"title": /*LANG*/"Analog Clock"}, - /*LANG*/"< Back": back, + /*LANG*/"< Back": back }; - require("ClockFace_menu").addSettingsFile(menu, "saclock.settings.json", [ - "hideWidgets" - ]); + if (process.env.HWVERSION>1) { // Bangle.js 1 memory won't fit a coloured graphics buffer + menu[/*LANG*/"Monochrome"] = { + // saved as "multicol" so the default is monochrome (as in previous version) + value: !settings.multicol, + onchange: v => save("multicol", !v), + } + } + require("ClockFace_menu").addItems(menu, save, { + hideWidgets: settings.hideWidgets, + }); E.showMenu(menu); });