From dc779cc78ef85018f493c61124fdee60bb02737b Mon Sep 17 00:00:00 2001 From: Denis Buzdalov Date: Mon, 11 Mar 2024 21:52:53 +0300 Subject: [PATCH] [ new ] Create a copy of the `andark` named `andark_w` w/ updated icons --- apps/andark_w/ChangeLog | 1 + apps/andark_w/README.md | 17 ++++ apps/andark_w/andark_w_icon.png | Bin 0 -> 1359 bytes apps/andark_w/andark_w_screen.png | Bin 0 -> 3710 bytes apps/andark_w/app.js | 124 ++++++++++++++++++++++++++++++ apps/andark_w/app_icon.js | 1 + apps/andark_w/metadata.json | 16 ++++ 7 files changed, 159 insertions(+) create mode 100644 apps/andark_w/ChangeLog create mode 100644 apps/andark_w/README.md create mode 100644 apps/andark_w/andark_w_icon.png create mode 100644 apps/andark_w/andark_w_screen.png create mode 100644 apps/andark_w/app.js create mode 100644 apps/andark_w/app_icon.js create mode 100644 apps/andark_w/metadata.json diff --git a/apps/andark_w/ChangeLog b/apps/andark_w/ChangeLog new file mode 100644 index 000000000..102a6612d --- /dev/null +++ b/apps/andark_w/ChangeLog @@ -0,0 +1 @@ +0.01: Release based on andark v0.04 diff --git a/apps/andark_w/README.md b/apps/andark_w/README.md new file mode 100644 index 000000000..bf86b52a8 --- /dev/null +++ b/apps/andark_w/README.md @@ -0,0 +1,17 @@ +# Analog Clock with widgets + +## Features + +* second hand +* date +* battery percentage +* swipeable widgets + +![logo](andark_w_screen.png) + +## Changes from the original Analog Clock (`andark`) + +* behaves correctly on the light theme (no change in the image) +* date, battery and numbers are printed above hands +* hour hand is slighly shorter to improve readability when minute hand is behind a number +* widgets are loaded and are swipeable from the top diff --git a/apps/andark_w/andark_w_icon.png b/apps/andark_w/andark_w_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ab9cb0ac3a88ab199c32c0509094fb9a70f2f4c0 GIT binary patch literal 1359 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt3#k#FX`Y^13>-iXP$eS^10zTc z5HljNnHZTFn1Nz#Kr94ggVcbq6eBB`?g6r;q3kI@wgyxUNRJ^S69X@ho&&^2K(+{w zUIoON?GU^60ofqH0fy#G3}6*7+TGJPK*31Q&_K`F45;70$i&LP*vimI!O+CY#N5i* z7-&D^0)&e|CfP@sJO{e3CDYkCz|+}Tp`a)~Ei)&TfuUkf?L=FT!wxb>a_)=I+hw_|`Qk{9t_a=E0H| zN~-_#HMewpeXv9R{X5%t_ZXe_o-tXi&6cq%cbQP3;pA9R=Jg*I^E1zI@JO3xsP5@m zA`}1p!^f|Br#4&7|6Sa2WzJEC`5rRKZJEOP0_SsXu|2PSWT1UY>!anz9iHMUbx(FZ z`Y8Rp=`_=Mp4l(2*c8r)(Al!_(y=ueSw}7(5e&Vo8GoW;P0_taYo@MVQ|bTjP=a54 z55CV^ z`{&A%=^{PMclG-|8*;IfHM*TG+}AI=ypZX~{6_7)PuE{*yy<@_TUWP;lfv1aONXEUlk!Ssw3CNSe4}F^0Z8QuSO*ym#ngaMsU;Nv3I`4GY;TWr%cei~$TQj$88xMoK&%-&* zhGIW-PFXlkYGR5k4>B^#kXfG}Q@hATp=)`Gr`D?NlLXGMuvAW%RPKB+{HT&ypVP7c zwJTA7rV9p$vYy+SEmQRj7@tjkKP6?#75}HnB)}lzRdv&EkE|SvFSYO=T9&yte$m%r+tyF<;Lv{ z1`-mJT2D;2wsu&m^kVW^rq7laUf)zMDpC1ey8B>chO+(Ed-s;qRdLOkd-8>i?M-E; zw>5kvR(T8|1}vg{g?(4niTJurYVUSkxPL$MTCoig4As>RJ9VO}($BbE%R8Mj={$3L zyHkDb)QJf^J9Y`JEzOnKEL>mLWj1}XiDK7;?Wa?J{yp8D$Z%qDPp66HT&BPKY=w63 z-lEL({d*gug0kltnfjV7`)B*zy|2!9;ANopae29hn`fkBZglw^zt1VFSryIi@^|m1 zUI!tD5)t2t>mz*^hPo{;H}hJ!zhvtxNyfPfC2r;uqrIkXbyvzXdB-|m@OOij!2Ko> W>FawkpLPM0BZH@_pUXO@geCw}5)PUG literal 0 HcmV?d00001 diff --git a/apps/andark_w/andark_w_screen.png b/apps/andark_w/andark_w_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..1f0e5b089fcd851c7f03add436ef478ff8ff3667 GIT binary patch literal 3710 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 literal 0 HcmV?d00001 diff --git a/apps/andark_w/app.js b/apps/andark_w/app.js new file mode 100644 index 000000000..865e3e708 --- /dev/null +++ b/apps/andark_w/app.js @@ -0,0 +1,124 @@ +const c={"x":g.getWidth()/2,"y":g.getHeight()/2}; +let zahlpos=[]; +let unlock = false; + +function zeiger(len,dia,tim){ + const x =c.x+ Math.cos(tim)*len/2, + y =c.y + Math.sin(tim)*len/2, + d={"d":3,"x":dia/2*Math.cos(tim+Math.PI/2),"y":dia/2*Math.sin(tim+Math.PI/2)}, + pol=[c.x-d.x,c.y-d.y,c.x+d.x,c.y+d.y,x+d.x,y+d.y,x-d.x,y-d.y]; + return pol; + +} + +function draw(){ + const d=new Date(); + let m=d.getMinutes(), h=d.getHours(), s=d.getSeconds(); + //draw black rectangle in the middle to clear screen from scale and hands + g.setColor(0,0,0); + g.fillRect(10,10,2*c.x-10,2*c.x-10); + g.setColor(1,1,1); + + if(h>12){ + h=h-12; + } + //calculates the position of the minute, second and hour hand + h=2*Math.PI/12*(h+m/60)-Math.PI/2; + //more accurate + //m=2*Math.PI/60*(m+s/60)-Math.PI/2; + m=2*Math.PI/60*(m)-Math.PI/2; + + s=2*Math.PI/60*s-Math.PI/2; + g.setFontAlign(0,0); + g.setFont("Vector",10); + let dateStr = " "+require("locale").date(d)+" "; + g.drawString(dateStr, c.x, c.y+20, true); + // g.drawString(d.getDate(),1.4*c.x,c.y,true); + g.drawString(Math.round(E.getBattery()/5)*5+"%",c.x,c.y+40,true); + drawlet(); + //g.setColor(1,0,0); + const hz = zeiger(100,5,h); + g.fillPoly(hz,true); + // g.setColor(1,1,1); + const minz = zeiger(150,5,m); + g.fillPoly(minz,true); + if (unlock){ + const sekz = zeiger(150,2,s); + g.fillPoly(sekz,true); + } + g.fillCircle(c.x,c.y,4); + + + +} +//draws the scale once the app is startet +function drawScale(){ + for(let i=-14;i<47;i++){ + const win=i*2*Math.PI/60; + let d=2; + if(i%5==0){d=5;} + g.fillPoly(zeiger(300,d,win),true); + g.setColor(0,0,0); + g.fillRect(10,10,2*c.x-10,2*c.x-10); + g.setColor(1,1,1); + } +} + +//draws the numbers on the screen + +function drawlet(){ + g.setFont("Vector",20); + for(let i = 0;i<12;i++){ + g.drawString(zahlpos[i][0],zahlpos[i][1],zahlpos[i][2]); + } +} +//calcultes the Position of the numbers when app starts and saves them in an array +function setlet(){ + let sk=1; + for(let i=-10;i<50;i+=5){ + let win=i*2*Math.PI/60; + let xsk =c.x+2+Math.cos(win)*(c.x-10), + ysk =c.y+2+Math.sin(win)*(c.x-10); + if(sk==3){xsk-=10;} + if(sk==6){ysk-=10;} + if(sk==9){xsk+=10;} + if(sk==12){ysk+=10;} + if(sk==10){xsk+=3;} + zahlpos.push([sk,xsk,ysk]); + sk+=1; + } +} +setlet(); +// Clear the screen once, at startup +g.setBgColor(0,0,0); +g.clear(); +drawScale(); +draw(); + +let secondInterval= setInterval(draw, 1000); +// Stop updates when LCD is off, restart when on + +Bangle.on('lcdPower',on=>{ + if (secondInterval) clearInterval(secondInterval); + secondInterval = undefined; + if (on) { + secondInterval = setInterval(draw, 1000); + draw(); // draw immediately + } +}); +Bangle.on('lock',on=>{ + if (secondInterval) clearInterval(secondInterval); + secondInterval = undefined; + if (!on) { + secondInterval = setInterval(draw, 1000); + unlock = true; + draw(); // draw immediately + }else{ + secondInterval = setInterval(draw, 60000); + unlock = false; + draw(); + } + }); + +// Show launcher when middle button pressed +Bangle.setUI("clock"); diff --git a/apps/andark_w/app_icon.js b/apps/andark_w/app_icon.js new file mode 100644 index 000000000..e755d50f8 --- /dev/null +++ b/apps/andark_w/app_icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+CiHXAhARMADoiHFRAzVJMQrMF7pseAH630RWw2Q67+EAAQnRMSYoFAYQwPNrAnGF9wuXP4xUHAY4tKZR4NEF54hRF6xNCJ4QFFF8bVXF6rmVF/avJGC7LNDqIaYF/4v/DUgvZDAQcTCYkHh0Og4FEhwMCAoovfEYQvpEYoECMwQ1GF9abCF8IkBAYQ2CBQgYEFyYvGKgYDDF4omSeCQoDGQgviXYiSERw4vjGxAvoS4guceBIvsMAaHDF8YwFAE4vvSA4v/SHgjCABgkkF74waX9zxuGYYw/GGAA==")) diff --git a/apps/andark_w/metadata.json b/apps/andark_w/metadata.json new file mode 100644 index 000000000..471dd0eb1 --- /dev/null +++ b/apps/andark_w/metadata.json @@ -0,0 +1,16 @@ +{ "id": "andark_w", + "name": "Analog Dark with widgets support", + "shortName":"AnDarkW", + "version":"0.01", + "description": "analog clock face with swipeable widgets", + "icon": "andark_w_icon.png", + "type": "clock", + "tags": "clock", + "supports" : ["BANGLEJS2"], + "screenshots": [{"url":"andark_w_screen.png"}], + "readme": "README.md", + "storage": [ + {"name":"andark_w.app.js","url":"app.js"}, + {"name":"andark_w.img","url":"app_icon.js","evaluate":true} + ] +}