From ff75d912664103b9c34d22eb97e434aae20b0758 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 11 Nov 2019 13:01:47 +0000 Subject: [PATCH] analog clock --- apps.json | 12 +++++++ apps/clock-analog-icon.js | 1 + apps/clock-analog.js | 69 ++++++++++++++++++++++++++++++++++++++ apps/clock-analog.json | 6 ++++ apps/clock-analog.png | Bin 0 -> 1685 bytes apps/clock-morphing.js | 1 - 6 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 apps/clock-analog-icon.js create mode 100644 apps/clock-analog.js create mode 100644 apps/clock-analog.json create mode 100644 apps/clock-analog.png diff --git a/apps.json b/apps.json index 0321ad954..96d8a9e9d 100644 --- a/apps.json +++ b/apps.json @@ -48,6 +48,18 @@ {"name":"*wclock","url":"clock-word-icon.js","evaluate":true} ] }, + { "id": "aclock", + "name": "Analog Clock", + "icon": "clock-analog.png", + "description": "An Analog Clock", + "tags": "clock", + "type":"clock", + "storage": [ + {"name":"+aclock","url":"clock-analog.json"}, + {"name":"-aclock","url":"clock-analog.js"}, + {"name":"*aclock","url":"clock-analog-icon.js","evaluate":true} + ] + }, { "id": "trex", "name": "T-Rex", "icon": "trex.png", diff --git a/apps/clock-analog-icon.js b/apps/clock-analog-icon.js new file mode 100644 index 000000000..c58536d24 --- /dev/null +++ b/apps/clock-analog-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwghC/AE8IxAAEwAWVDB4WIDBwWJAAIWPmf//8zDBpFDwYVBAAc4JJYWJDAoXKn4SC+EPAgXzC5JGCx4qDC4n//BIIEIRCEC4v/GBBdHC4xhCIw5dDC5BhCJAgXCRQoXGJAQXEUhAXHJAyNGC5KRCC7p2FC5B4CC5kggQXOBwvyBQMvSA4XL+EIwCoIC8ZHCgYXNO44LBBIiPPCAIwFC5DXGAAMwGAjvPGA4XIwYXHGALBDnAXFhCQHGAaOFwAXGPA4bFC4xIMIxIXDJBJGEC4xICSJCNEIwowEMJBdCFwwXEMJBdCC5BICDA4WDIw4wEAAMzCoMzBAgWIDAwAGCxRJEAAxFJDBgWNDBAWPAH4AYA==")) diff --git a/apps/clock-analog.js b/apps/clock-analog.js new file mode 100644 index 000000000..8e6650508 --- /dev/null +++ b/apps/clock-analog.js @@ -0,0 +1,69 @@ +g.clear(); + +var minuteDate = new Date(); +var secondDate = new Date(); + +function line(angle, r1,r2) { + var a = angle*Math.PI/180; + g.drawLine( + 120+Math.sin(a)*r1, + 120-Math.cos(a)*r1, + 120+Math.sin(a)*r2, + 120-Math.cos(a)*r2); +} +function hand(angle, r1,r2) { + var a = angle*Math.PI/180; + var r3 = 3; + var p = Math.PI/2; + g.fillPoly([ + 120+Math.sin(a)*r1, + 120-Math.cos(a)*r1, + 120+Math.sin(a+p)*r3, + 120-Math.cos(a+p)*r3, + 120+Math.sin(a)*r2, + 120-Math.cos(a)*r2, + 120+Math.sin(a-p)*r3, + 120-Math.cos(a-p)*r3]); +} + +function drawAll() { + g.clear(); + g.setColor(0,0,0.3); + for (var i=0;i<60;i++) + line(360*i/60, 92, 95); + secondDate = minuteDate = new Date(); + onSecond(); + onMinute(); +} + +function onSecond() { + g.setColor(0,0,0.3); + line(360*secondDate.getSeconds()/60, 92, 95); + g.setColor(1,0,0); + secondDate = new Date(); + line(360*secondDate.getSeconds()/60, 92, 95); + g.setColor(1,1,1); + +} + +function onMinute() { + g.setColor(0,0,0); + hand(360*minuteDate.getHours()/12, -10, 50); + hand(360*minuteDate.getMinutes()/60, -10, 85); + oldMinute = new Date(); + g.setColor(1,1,1); + hand(360*minuteDate.getHours()/12, -10, 50); + hand(360*minuteDate.getMinutes()/60, -10, 85); +} + +setInterval(onSecond,1000); +setInterval(onMinute,60*1000); +drawAll(); + +Bangle.on('lcdPower',function(on) { + if (on) { + g.clear(); + drawAll(); + drawWidgets(); + } +}); diff --git a/apps/clock-analog.json b/apps/clock-analog.json new file mode 100644 index 000000000..049d47406 --- /dev/null +++ b/apps/clock-analog.json @@ -0,0 +1,6 @@ +{ + "name":"Analog Clock","type":"clock", + "icon":"*aclock", + "src":"-aclock", + "sortorder":-10 +} diff --git a/apps/clock-analog.png b/apps/clock-analog.png new file mode 100644 index 0000000000000000000000000000000000000000..88665ca3fdce41eb4419445d80009c077c1bc5d9 GIT binary patch literal 1685 zcmV;G25R|!54pw=@cUrbEw+z@E+p#AraW7MN$zx)*o{p*K@g-J5L)*%4^lKL<^| z06YpfvmN{_q9EQxi$2e)+Xt;0TPLu)^C2WVfFjGbsWFJ4ftnTXSux6-!0SN={%{LY zJZ9GIv1{DvE2PR>z!Hy}1uh4(?KS|;OvE@68K)~W%KlSfK06sA980?VcjD96Q(Zlg zI|3gC^N9=xfVpW{s9c0! z{k3v{GM9t*Di=|l=(~k?JN(J)k`vG!Taio~x-`LCOUnO~;HOaLa?pD9BHZzZfe)wF zn9RnU!0wLuOeU#mY^o?>Nx~H89@iA+@zlaOYV%{X?K92vNoGJ>hatl*&UfOPR?G$V-gk5|8zhCmM~?*w{ENZ`rbiXf$fsPeNi7;!;(| zYz9h=Qn|}vdElm|Cbn-scMI6IZ5vHZO_u#EbSqB{L8+=^c8tc&o5!B8@zbKUwRQ5# zi_P%DYXI!pwac=fLc0>4#G~q@zszL;F?HlhIr#x}ea6pUQtB%(Bzft5;8c z*|ZLxUq9(56e1W5TJkeAp^z4YR2>rnvfn86M8+)*3b1kGMmB8NKuJjnKA#V_+f5`A zp|-Zx5{biO%Ep)Ut2$-91;G-Qdy z&!I6TH1VsdlSn|y?~LO9Q{e;^tEjB3q`ke}GKo%gY&||UFe9MJFOA}-Cqs-Re}HF< z%F0RtfdI2-&z>gH*VmU+e3C|e=&|6-HH19`zb9= z$Vt

XIA3`JKN<4Vzeqt<+RKr|O#L0iibo)7F2EMA+GDxoDOYse%V+IdU>Sc!&@i zZ!yy~Cs0$}3*t><)7HO^5gbZerkODgoEhPz?t%D5Dc_*(wxeeHDc;2PO~8pMF``S> z{&bk5S>%OGaV$E)qd)f$iO<@D*e13lvq?^%?xuf`;z?uEKy-pNKmJYMe?a1BWSrU` zy6IPa3-Ls%qHpTE(1TU2z)oY+FX1s(9{7W=PY-7wt%3t*M!4<39~=xTiA%~I)Kmph z*`~kD>BrY0`M}t8GCD!c58b@neSAhaBC1PXIedcqzVBurs#Xx?$N1&b>3n2f+#MTk zLvWAURqV9$%!S3QDe;nT%j|MH64QDAY;jjPZKg*=cdVxFrnL8%%n$aC4*O)SQr4Sw z&$4OU>GN=lw}7iWd6c{3%j-R3bMjkV8sz43(zovj|s Communications before sending (function(){ // make our own scope so this is GC'd when intervals are cleared // Offscreen buffer var buf = Graphics.createArrayBuffer(240,86,1,{msb:true});