From fac80e8f12b4627c68090a9ba6bf9d3fbaf3b1c1 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 9 Oct 2024 14:54:57 +0100 Subject: [PATCH] Add simple clock using 'Clock Backgrounds' to allow custom colour or image backgrounds. The date is in the widget bar which you can swipe down --- apps/simplebgclock/ChangeLog | 1 + apps/simplebgclock/app-icon.js | 1 + apps/simplebgclock/app.js | 96 ++++++++++++++++++++++++++++++ apps/simplebgclock/icon.png | Bin 0 -> 12142 bytes apps/simplebgclock/metadata.json | 20 +++++++ apps/simplebgclock/screenshot.png | Bin 0 -> 2148 bytes apps/simplebgclock/settings.js | 30 ++++++++++ 7 files changed, 148 insertions(+) create mode 100644 apps/simplebgclock/ChangeLog create mode 100644 apps/simplebgclock/app-icon.js create mode 100644 apps/simplebgclock/app.js create mode 100644 apps/simplebgclock/icon.png create mode 100644 apps/simplebgclock/metadata.json create mode 100644 apps/simplebgclock/screenshot.png create mode 100644 apps/simplebgclock/settings.js diff --git a/apps/simplebgclock/ChangeLog b/apps/simplebgclock/ChangeLog new file mode 100644 index 000000000..09953593e --- /dev/null +++ b/apps/simplebgclock/ChangeLog @@ -0,0 +1 @@ +0.01: New Clock! diff --git a/apps/simplebgclock/app-icon.js b/apps/simplebgclock/app-icon.js new file mode 100644 index 000000000..cec086b04 --- /dev/null +++ b/apps/simplebgclock/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4X//8HA4IEBjHGJf4A/AH4ALgNUgNVoEBoEFgFVqEAg/9j//6kH6Efov/+sAg2tvWq0sXyEar2q1dAg/t9f/1v3ykarX/9QqBtvtr2p8+Vr16q+q6EAtvl9X5++q1V7r2+BYXn1t5CYILB9XeBYXu2tpoNVrV71teBYXr6/tqkAHYO1vXABYJTB1vkBYJTDgF9NYPV+kANYX9QgMUgqDBPwKDEAH4A/AH4AjA")) \ No newline at end of file diff --git a/apps/simplebgclock/app.js b/apps/simplebgclock/app.js new file mode 100644 index 000000000..ca134dc69 --- /dev/null +++ b/apps/simplebgclock/app.js @@ -0,0 +1,96 @@ +Graphics.prototype.setFontAudiowide = function() { + // Actual height 33 (36 - 4) + return this.setFontCustom( + E.toString(require('heatshrink').decompress(atob('AB/wAgcB/AFVgFgHbkYAok4AogvEgYFEg4FEj4FEn4FE//gKQf/4AcD/4QDh/8Djf+DhN/T4YcFgYcKh4cEh68Eh4cDAoOAAocORYkMf1JxBIYcf/6PDn//MIYEB/5KBOIIABKwIFFO4V/UQMHEIMfFQMHAQP3AQJ3BDIKABh/ggf7ApHAg/5AonxAocPAokf8IFE4IFDn4FEv+BAokBAof/AofB/wFE/gFD4YFE4/4AohgBAoXPAonvMAIFD4AFCVgIFBQYX3wCGCR4T+CTYqtLX4rLC/zXIcYoAQQYIFiJoR9CArgAlToIpDRQIFDSwI7C4CiBApN/Apb1D4F+Av4Fd8H+Aof/AoaTB/gFIgaBBAoSrB+AFCgF/8AFDAESP/Av3wv0HZYYABYoYAB+AFGZYIAB8DLCAAPAZYQFBZUhHC/gFE/wFaAAN+Av4Fqv53EboYFdAFIvB4EBGofwAon4Aon8ApX+AofAAot+Av4Fev8DAojFDAo0/S4IFGAAMf//gV4mAAoUD/zYgFwP8AoRGB/4FCAgI1CgIFC4A5BAoRHBg4FCKYMH/l+n5fC+F+g5rC8F+PoYFFZf7XVw7XNAALXNTYLXCVoYAQF4IFZjAFEnAFELIZCBAojRDAoMfAol/AohrCAoJfBNYIFBNYOAAoUf/xBDv/8AoXBRAcP4aCDh/PDgSNCDgQFCHIIFDUoafFAoJ3EGYQFCDgYFBXgZuBGYQAba4pDEhzvE/4ABKoMBAogbBAAJKBg4EBw4FEX4Z9BgIFC8AFE4F+Av5HFKYhfFAoRxCO4qDFgF/AokATYgfCZwcD/zTdAAV/Z4RBCHIZNBJYI5D/gFFOJEP+DF/a7N+ZYQFG+F+g7XFRYIFFbobLBboajCAoTRCcYTiEUQYAdgYCBsACBMwJlCAqUHJYLxDAAMgHSQ'))), + 46, + atob("CiAsESQjJSQkHyQkDA=="), + 48|65536 + ); +}; +Graphics.prototype.setFontAudiowide12 = function() { + // Actual height 12 (11 - 0) + return this.setFontCustom( + E.toString(require('heatshrink').decompress(atob('AAtAg/4uAFBuEEAQIFBgUB3E/w/gj+D/F6gMggEB0E+DQN/wXghkBwE8gdInuB+Ecgf4k+AvEDwEgn+D7E5weYkOAnECHAQCBj+H/ng9gKCgHAt8On/B+BFBDAMH4AbBwBbCKoNgj4CBAoMEgPAiEIgGAAQopCKQMII4NwjwDCDYIMB8E/w04s+G7Ftw+YvOH/E/CANgO4QlBh+G/FtCgQCBvJrBGQQLFEYIgDvBfBhhtBAQV/BwMAg41BDQovBp4aBn47BFItvwCJBgxKBLIUH8F4BAIAB+AsBC4d9GQMHBgKhBzAmFv+DEwIABjKUCoOciKwBhyMBmcCiCSBkEafwICCiQWBkMDiEzCgJrBJQJEBt+G9Fsg+AvALBg0B/EfwP4jsB+DdCg+DSQMGmFjAQS2ER4IFBLIhoCn4OBR4Vhw0YAQpoCWAQOGO4MeBwQdBtK8GDoI4DwFsg3AAQVgFIgaFOgLjCLITyKDokBwEYAQoLBYQYRChkB4E+gdwseENAwgIHweD4EPegMDwHwnikEDoUwDAJNBsEDBwkegfwuakHn7sBRIjRF8E+JQIdJ40cn9BDotgs0GuFnTYN8wLvCzF5YQ34p+GKIMGLgYFCYQV4g/wg6DFCIJlCsAMBeQN4QYgLDCIN4h6wBnACBTAN4GQPAgEEhFhw84PoU/g84sOEhFwg/AvglDvEGBAcAPoM4NwV5w6DBwEIOIP+v/2gcAMQNwgfAhw7BL4MIoEmgd/+/+A=='))), + 32, + atob("BAMFCQYKCAMFBQcGAwcCCAsECQkJCQkICQkDAwYHBggICgoJCgkJCgoDCQoJDAoKCgoKCQkKCQwJCQkECAQ="), + 12|65536 + ); +}; + +{ + let settings = Object.assign({ + ypos : 88 + }, require('Storage').readJSON("simplebgclock.json", 1) || {}); + const background = require("clockbg"); // image backgrounds + + // timeout used to update every minute + let drawTimeout, widgetTimeout; + + // draw everything + let draw = function() { + // queue draw in one minute + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); + // draw properly + var x = g.getWidth()/2; + var y = settings.ypos; + var h = 27; + // fill background + g.reset(); + background.fillRect(0,y-h, g.getWidth(),y+h); + // work out locale-friendly date/time + var date = new Date(); + var timeStr = require("locale").time(date,1); + // draw time + g.setFontAlign(0,0).setFont("Audiowide"); + // draw a shadow by shifting left/right/up/down + g.drawString(timeStr,x-6,y) + .drawString(timeStr,x+6,y) + .drawString(timeStr,x,y-6) + .drawString(timeStr,x,y+6) + .drawString(timeStr,x-4,y+4) + .drawString(timeStr,x+4,y+4) + .drawString(timeStr,x-4,y-4) + .drawString(timeStr,x+4,y-4); + // finally draw in the foreground color + g.setColor(g.theme.bg).drawString(timeStr,x,y); + }; + + // Show launcher when middle button pressed + Bangle.setUI({mode:"clock", remove:function() { // free memory + if (drawTimeout) clearTimeout(drawTimeout); + if (widgetTimeout) clearTimeout(widgetTimeout); + var e = WIDGETS["simplebg"]; + g.reset().clearRect(e.x,e.y,e.x+63,e.y+23); + delete WIDGETS["simplebg"]; + require("widget_utils").show(); + delete Graphics.prototype.setFontAudiowide; + delete Graphics.prototype.setFontAudiowide12; + }}); + // Load widgets (make them swipeable) + Bangle.loadWidgets(); + WIDGETS["simplebg"] = { + area:"tl", + width: 52, + draw : function(e) { + g.reset().clearRect(e.x,e.y,e.x+e.width-1,e.y+23); + var d = new Date(); + // day of week + g.setFontAudiowide12().setFontAlign(-1,0).drawString(require("locale").dow(d,1).toUpperCase(), e.x+2, e.y+8); + // date without year + g.setFontAlign(-1,0).drawString(require("locale").date(d,0).replace(/\d\d\d\d/,"").trim().toUpperCase(), e.x+2, e.y+18); + widgetTimeout = setTimeout(function() { // redraw every hour (it's just easier that working out timezones) + widgetTimeout = undefined; + WIDGETS["simplebg"].draw(WIDGETS["simplebg"]); + }, 3600000 - (Date.now() % 3600000)); + } + }; + require("widget_utils").swipeOn(); + // Clear the screen once, at startup + background.fillRect(Bangle.appRect); + // draw immediately at first, queue update + draw(); +} \ No newline at end of file diff --git a/apps/simplebgclock/icon.png b/apps/simplebgclock/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cd007dd42b82671fe3567129ac93914ff4f0ed77 GIT binary patch literal 12142 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 literal 0 HcmV?d00001 diff --git a/apps/simplebgclock/metadata.json b/apps/simplebgclock/metadata.json new file mode 100644 index 000000000..c0589cece --- /dev/null +++ b/apps/simplebgclock/metadata.json @@ -0,0 +1,20 @@ +{ "id": "simplebgclock", + "name": "Simple Background Clock", + "shortName":"Simple Bg Clk", + "version":"0.01", + "description": "A simple clock using 'Clock Backgrounds' to allow custom colour or image backgrounds. The date is in the widget bar which you can swipe down.", + "icon": "icon.png", + "screenshots": [{"url":"screenshot.png"}], + "type": "clock", + "tags": "clock,clkinfo,clockbg", + "supports" : ["BANGLEJS2"], + "dependencies" : { "clockbg":"module" }, + "storage": [ + {"name":"simplebgclock.app.js","url":"app.js"}, + {"name":"simplebgclock.img","url":"app-icon.js","evaluate":true}, + {"name":"simplebgclock.settings.js","url":"settings.js"} + ], + "data": [ + {"name":"simplebgclock.json"} + ] +} diff --git a/apps/simplebgclock/screenshot.png b/apps/simplebgclock/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..988f232bce0cc4bff8799bff4849d02eab0fc2f5 GIT binary patch literal 2148 zcmeH}=~t2o1I6*_vB0tr*HJ5q+%RAFWyVZX6HSRs!x9&)6Ph|{I*CSxpm=h`oEgBx zn5^Mgj>__uja%fCIa0Y)$7xhl#3fD9(IPR*Wtu-?KE3aUdw<{VJ?DP9CC8593=J#| zU@(|rSZMI^FO>cx_~tJzX_`v-0=?|xxImb=&w3UHgYOCpJ`|msu<-L}j>c;nxUfP` zq1*YNk7J>vNE;`??AcA6`o|V`Ozz6Yc9qM^=;)VRXeZ-F&b7g65NTl)YaF2Za{+Sz zm<&h*;3KX1ML4o`3LeHFHI*;H*_%WNbf#Ksw2N`!mZu(ge)M1m#$|h>Z2=@2#^r)t zj6XqS^Tp5ba>(ap6%1%PzkA%sV$1(XXuRrkyil8)vfQ0|u|1_pmiNnYwSQu_U-pJj zo6T6p0+$APC>DR2a!ru>oIWS#Olzyyi^VxPjEqcJ9Y`=;9 zHnZ+TN2zhA4b?PtIhLDGnU9PYs%lnItlw8A)PN-JZP3WnBjd`}L=gX+(?a~Qe{P*b z>s4Twnzd}&wDUlc<5K!np_1jc;mR0xp_+f(_JjY99n2Yp1m$cuE`LG6%S-K~P8wCz zlT@G@@oweJu;Gu@SqS;<2Wc040|(s~_b&0!{rx_9#jEyewA546^KK!hZ771AR>^Gk zCroy=2U4pbZI3aEKx5ky1m+I+&`)lN4PW&QPF|$(<8YB1;-OII%oWjM9y?02R4^zP>)EM^~e%=0588&=2aj zS3*8Nc}RDP9?1D9I%YPVo+osec3~uMU42LipB}Z%G^3mtk?nr6K_g_W^^UObcXV04 z^4KZ!__Un2Z^@>|*T8!Dit|$uqT(hbv}&Dc_Z<&)C6P(fVjy{6tk=2XW`4eqB3@tZ zEQvGn$zCA#Q0corLhhNMCb_a?BWwVA6y$GfOy7)Y|JqhbZ9MbWe=^NdbZ6FvD?$~& zW>gHJ2xiTO8c-hI{_6U-zTK7r9uyN%96AzlM;5hD(7DBWPX&## zXw=bA!u%ocxblVGJ>AM1p^F`KAkD1^Z9d?i`hNWVl`>t>HDpYvwVV0W12Z3Y9V$bc zXtM_@J3KaPd%kpZ{@i|7|2WkQFNWU#-9+K~_o}u;j8}kSag=X9IE%Z=2NvVQ=dRrQ zi1;tIdq8K`!aqsu^>`i?AI=tF#~ybFsmihw44{TzY@QzBP(3gY*+*`QyrVD5TxyR= zIoHdf82qGDL24n@3zObfH8T@(nl?Mvnxx_}O9XR(^L^2w+G4*=byeST!{UXC53khg zfTrNO1j6B`{5s0kcYo#1iXNzPl43OdAaOiu2Ll04<5h^HlK_C#1BoS(8HZsEk>ZdA z4+hkC);8@efQSod_7NE4#OXgsMgipd9At=10fcp(6T#8a6TWaEDuB$hSSEtV!MdGA zkqET(2>X&F08f9ty`vUHp0o*(nd*VRrEW=z2H*`Sq4IkeKzdN<^8dPjeaxjDCffS> Ut+t-lUv2{|?C{ZGaUhxbH!DEc4*&oF literal 0 HcmV?d00001 diff --git a/apps/simplebgclock/settings.js b/apps/simplebgclock/settings.js new file mode 100644 index 000000000..8fd042b3b --- /dev/null +++ b/apps/simplebgclock/settings.js @@ -0,0 +1,30 @@ +(function(back) { + const SETTINGS_FILE = "simplebgclock.json"; + let settings = Object.assign({ + ypos : 88 + }, require('Storage').readJSON(SETTINGS_FILE, 1) || {}); + + function save() { + require('Storage').write(SETTINGS_FILE, settings); + } + + var positions = { + /*Lang*/"Top" : 36, + /*Lang*/"Middle" : 88, + /*Lang*/"Bottom" : 140, + }; + + E.showMenu({ + '': { 'title': 'Simple Bg Clock' }, + /*LANG*/'< Back': back, + /*LANG*/'Position': { + value: Math.max(0,Object.values(positions).indexOf(88)), + min: 0, max: positions.length - 1, + format: v => Object.keys(positions)[v], + onchange: v => { + settings.ypos = Object.values(positions)[v]; + save(); + } + } + }); +});