From 7763fb5673f940037cb2ab0a0c3f2afb55bfc4fa Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Sat, 16 Nov 2019 21:22:26 +0000 Subject: [PATCH 1/2] Add Large Digit Clock to apps --- apps.json | 14 +++++- apps/clock-blob-icon.js | 1 + apps/clock-blob.js | 108 ++++++++++++++++++++++++++++++++++++++++ apps/clock-blob.json | 7 +++ apps/clock-blob.png | Bin 0 -> 817 bytes 5 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 apps/clock-blob-icon.js create mode 100644 apps/clock-blob.js create mode 100644 apps/clock-blob.json create mode 100644 apps/clock-blob.png diff --git a/apps.json b/apps.json index aae4fd940..09271c01a 100644 --- a/apps.json +++ b/apps.json @@ -514,6 +514,18 @@ {"name": "+promodo","url": "promodoro.json"}, {"name": "-promodo","url": "promodoro.js"}, {"name": "*promodo","url": "promodoro-icon.js","evaluate": true} - ] + ] +}, + { "id": "blobclk", + "name": "Large Digit Clock", + "icon": "clock-blob.png", + "description": "A clock with big digits", + "tags": "clock", + "type":"clock", + "storage": [ + {"name":"+blobclk","url":"clock-blob.json"}, + {"name":"-blobclk","url":"clock-blob.js"}, + {"name":"*blobclk","url":"clock-blob-icon.js","evaluate":true} + ] } ] diff --git a/apps/clock-blob-icon.js b/apps/clock-blob-icon.js new file mode 100644 index 000000000..860689824 --- /dev/null +++ b/apps/clock-blob-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/AH4AUmYAOCw0DC58wFyowHC/4X/C9mIxAGKC5IPBCIoXWnAXOB4ODAQQXTGQQXCJoyPMC4ggDC6IVBC6JKFC6JZDC6SODCgQXQFwalCSAoXJXAgXSdo4XOCIi/CL54XvABwX/C/4XtgYWPmAXFGCAWGAH4A/ABgA=")) diff --git a/apps/clock-blob.js b/apps/clock-blob.js new file mode 100644 index 000000000..0bb8b8d2e --- /dev/null +++ b/apps/clock-blob.js @@ -0,0 +1,108 @@ +(function(){ + const buf = Graphics.createArrayBuffer(144,200,1,{msb:true}); + const NUMBERS = [ + [1,1,1,1,3,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1],//0 + [0,1,1,1,3,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1],//1 + [1,1,1,1,3,0,0,1,1,1,2,1,1,1,4,1,1,1,0,0,1,1,1,1,1],//2 + [1,1,1,1,3,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1],//3 + [1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,5,1,1,1,1,0,0,1,1,1],//4 + [1,1,1,1,1,1,1,1,0,0,5,1,1,1,3,0,0,1,1,1,1,1,1,1,1],//5 + [1,1,1,1,1,1,1,1,0,0,1,1,1,1,3,1,1,0,1,1,1,1,1,1,1],//6 + [1,1,1,1,3,0,0,1,1,1,0,2,1,1,1,0,1,1,1,0,0,1,1,1,0],//7 + [1,1,1,1,3,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1],//8 + [1,1,1,1,3,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1] //9 + ]; + let intervalRef = null; + let digits = [-1,-1,-1,-1,-1,-1]; + function flip() { + g.setColor(1,1,1); + g.drawImage({width:buf.getWidth(),height:buf.getHeight(),buffer:buf.buffer},55,26); + try { if (drawWidgets) { drawWidgets();} } catch(err) {} + } + function drawPixel(ox,oy,x,y,r,p) { + let x1 = ox+x*(r*2+1); + let y1 = oy+y*(r*2+1); + let xmid = x1+r; + let ymid = y1+r; + let x2 = xmid+r; + let y2 = ymid+r; + if (p > 0) { + if (p > 1) { + buf.setColor(0,0,0); + buf.fillRect(x1,y1,x2,y2); + } + buf.setColor(1,1,1); + } else { + buf.setColor(0,0,0); + } + if (p < 2) { + buf.fillRect(x1,y1,x2,y2); + } else if (p === 2) { + buf.fillPoly([xmid,y1,x2,y1,x2,y2,x1,y2,x1,ymid]); + } else if (p === 3) { + buf.fillPoly([x1,y1,xmid,y1,x2,ymid,x2,y2,x1,y2]); + } else if (p === 4) { + buf.fillPoly([x1,y1,x2,y1,x2,ymid,xmid,y2,x1,y2]); + } else if (p === 5) { + buf.fillPoly([x1,y1,x2,y1,x2,y2,xmid,y2,x1,ymid]); + } + } + function redraw() { + let time = new Date(); + let hours = time.getHours(); + let mins = time.getMinutes(); + let secs = time.getSeconds(); + + let newDigits = [Math.floor(hours/10),hours%10,Math.floor(mins/10),mins%10,Math.floor(secs/10),secs%10]; + + for (var p = 0;p<25;p++) { + var px = p%5; + var py = Math.floor(p/5); + if (digits[0] === -1 || NUMBERS[newDigits[0]][p] !== NUMBERS[digits[0]][p] ) { + drawPixel(0,20,px,py,6,NUMBERS[newDigits[0]][p]); + } + if (digits[1] === -1 || NUMBERS[newDigits[1]][p] !== NUMBERS[digits[1]][p] ) { + drawPixel(78,20,px,py,6,NUMBERS[newDigits[1]][p]); + } + if (digits[2] === -1 || NUMBERS[newDigits[2]][p] !== NUMBERS[digits[2]][p] ) { + drawPixel(0,92,px,py,6,NUMBERS[newDigits[2]][p]); + } + if (digits[3] === -1 || NUMBERS[newDigits[3]][p] !== NUMBERS[digits[3]][p] ) { + drawPixel(78,92,px,py,6,NUMBERS[newDigits[3]][p]); + } + if (digits[4] === -1 || NUMBERS[newDigits[4]][p] !== NUMBERS[digits[4]][p] ) { + drawPixel(69,164,px,py,3,NUMBERS[newDigits[4]][p]); + } + if (digits[5] === -1 || NUMBERS[newDigits[5]][p] !== NUMBERS[digits[5]][p] ) { + drawPixel(108,164,px,py,3,NUMBERS[newDigits[5]][p]); + } + } + digits = newDigits; + flip(); + } + function clearTimers() { + if(intervalRef) {clearInterval(intervalRef);} + } + function startTimers() { + g.clear(); + digits = [-1,-1,-1,-1,-1,-1]; + intervalRef = setInterval(redraw,1000); + redraw(); + } + startTimers(); + Bangle.on('lcdPower',function(on) { + if (on) { + g.clear(); + startTimers(); + try { if (drawWidgets) { drawWidgets();} } catch(err) {} + } else { + clearTimers(); + } + }); + Bangle.on('faceUp',function(up){ + if (up && !Bangle.isLCDOn()) { + clearTimers(); + Bangle.setLCDPower(true); + } + }); +})(); diff --git a/apps/clock-blob.json b/apps/clock-blob.json new file mode 100644 index 000000000..63b095a42 --- /dev/null +++ b/apps/clock-blob.json @@ -0,0 +1,7 @@ +{ + "name":"Large Digit Clock", + "type":"clock", + "icon":"*blobclk", + "src":"-blobclk", + "sortorder":-10 +} diff --git a/apps/clock-blob.png b/apps/clock-blob.png new file mode 100644 index 0000000000000000000000000000000000000000..738465d9d58a98ceab4432bf057fb195e74252f4 GIT binary patch literal 817 zcmV-11J3-3P)C^6G0fppWSW|Ol&F*O(f9+L4}L-Km=o=h*3=Rz{QV~ z2g9LvF8mV&4<1TlVq&5PJ!upqr6LD0Bqr7vT0V*f#R|dNFVdEFx8tF8%i5i7Gi3DC6`Tr@<2)~p0k{g_NPQ&9BthV_aMDPBTjLU~6V*Ub zydOYwP2^Px2Sla3&^6G`{ZNbZw1LIU8!8?E2yoQGi=(tS)c^`*vo9dP04=6vpx!mF zg^d=_GH@U;4H%7Sz-R>4frJ3Fi!sawWB3)%0sxNL8_?Hb$Au0%IE{P!c1FVRlMvFm zyxjKK-N~eb$p9gM#}~$jP+ZZzx|zo6W*Wh83hv9T)bW#_BMR|*fvJS%SL0>kcQdyV z$9yQE8cSwGc)vthrd5S$1>OZp;xBgEar0~otQHvW|_JSrWF{!cUt{omeS6( z@a4OB!XLp-vGxbMTM&G?#xlJEU60ZC%cZ(M;W(s-#nU3D7h(Vk+1G0YbTbg$&f&$! zE&2cXQ+7rC^`{83Vk!H2p^E`2PcS|cmXAiK&5CooHgGH@;%z|x>;pO&kO+at7e?S` zs&GM`!%$zVVn4j{*CzXb#w(@wYmQVJoE7tU;0?pSmXzCW_d0Ri38n`50im#G>g&6@7PM@rmWl@QY=u10*lIPmWSdpd>ciLNEIpD+y=jcLGW zvmLN#FFq!A9#@ACmW5kayJ(}Gk3{cVj)QeNodfad_z vzme3I1VEk%lHj^@l3O=meiIWDlPdTNBzOBJm;l>x00000NkvXXu0mjfr~ZC* literal 0 HcmV?d00001 From 59dc02648f3ca0cfedf4bcd8038befa127bff1fc Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Sat, 16 Nov 2019 21:29:40 +0000 Subject: [PATCH 2/2] Shorten clock title so it fits in menu --- apps/clock-blob.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/clock-blob.json b/apps/clock-blob.json index 63b095a42..b548acd80 100644 --- a/apps/clock-blob.json +++ b/apps/clock-blob.json @@ -1,5 +1,5 @@ { - "name":"Large Digit Clock", + "name":"Large Clock", "type":"clock", "icon":"*blobclk", "src":"-blobclk",