diff --git a/apps.json b/apps.json index 7bc56d181..7bfabbad3 100644 --- a/apps.json +++ b/apps.json @@ -1,4 +1,15 @@ [ + { "id": "clck3x2", + "name": "3x2 Pixel Clock", + "icon": "clock3x2.png", + "description": "This is a simple clock using minimalistic 3x2 pixel numerical digits", + "tags": "clock", + "storage": [ + {"name":"+clck3x2","url":"clock3x2.json"}, + {"name":"-clck3x2","url":"clock3x2.js"}, + {"name":"*clck3x2","url":"clock3x2-icon.js","evaluate":true} + ] + }, { "id": "boot", "name": "Bootloader", "icon": "bootloader.png", @@ -529,7 +540,7 @@ {"name": "-pomodo","url": "pomodoro.js"}, {"name": "*pomodo","url": "pomodoro-icon.js","evaluate": true} ] -}, + }, { "id": "blobclk", "name": "Large Digit Clock", "icon": "clock-blob.png", diff --git a/apps/clck3x2/clock3x2-icon.js b/apps/clck3x2/clock3x2-icon.js new file mode 100644 index 000000000..5ef420d1e --- /dev/null +++ b/apps/clck3x2/clock3x2-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwgRC/AH4A/gED/k/5/wh/wgAFCBcg7NgAVBh/zDoYLkHaAFqAH4A/AH4AW")); diff --git a/apps/clck3x2/clock3x2.js b/apps/clck3x2/clock3x2.js new file mode 100644 index 000000000..489458178 --- /dev/null +++ b/apps/clck3x2/clock3x2.js @@ -0,0 +1,104 @@ +(function(){ + + const ox=10; // x offset + const oy=80; + const pw=20; // pixel width + const ps=5; // pixel spacing + const ds=10; // digit spacing + const ms=20; // middle space + + const x00=ox; // digit 0, pixel 0, x position + const x01=x00+pw+ps; + const x10=x01+pw+ds; + const x11=x10+pw+ps; + const x20=x11+pw+ms; + const x21=x20+pw+ps; + const x30=x21+pw+ds; + const x31=x30+pw+ps; + const xSpace=[[x00,x01], // all pixel x spacing + [x10,x11], + [x20,x21], + [x30,x31]]; + + const y0=oy; // y spacing + const y1=y0+pw+ps; + const y2=y1+pw+ps; + const ySpace=[y0, y1, y2]; + + const pixels = [[[0,0], // digit on/off pixels + [1,1], + [1,1]], + [[0,1], // digit 1 + [0,1], + [0,1]], + [[0,1], + [1,0], + [1,1]], + [[1,1], + [0,1], + [1,1]], + [[1,0], + [1,1], + [0,1]], + [[1,1], + [1,0], + [0,1]], + [[1,0], + [1,1], + [1,1]], + [[1,1], + [0,1], + [0,1]], + [[1,1], + [1,1], + [1,1]], + [[1,1], + [1,1], + [0,1]]]; + + let idTimeout = null; + + function drawTime() { + g.clear(); + drawWidgets(); + + let d = Date(); + let h = d.getHours(); + let m = d.getMinutes(); + let digits = [Math.floor(h/10), h%10, Math.floor(m/10), m%10]; // time digits + + for (let id=0; id<4; id++){ + for (let xp=0; xp<2; xp++){ + for (let yp=0; yp<3; yp++){ + if (pixels[digits[id]][yp][xp]==1){ + g.fillRect(xSpace[id][xp], ySpace[yp], xSpace[id][xp]+pw, ySpace[yp]+pw); + } + } + } + } + + let t = d.getSeconds()*1000 + d.getMilliseconds(); + let delta = (60000 - t) % 60000; // time till next minute + idTimeout = setTimeout(drawTime, delta); + } + + Bangle.on('gesture', function(gesture) { + if (gesture && !Bangle.isLCDOn()) { + Bangle.setLCDPower(true); + } + }); + + // special function to handle display switch on + Bangle.on('lcdPower', function(on){ + if (on) { + drawTime(); + } else { + if(idTimeout) { + clearTimeout(idTimeout); + } + } + }); + + drawTime(); + +})(); diff --git a/apps/clck3x2/clock3x2.json b/apps/clck3x2/clock3x2.json new file mode 100644 index 000000000..2d445787e --- /dev/null +++ b/apps/clck3x2/clock3x2.json @@ -0,0 +1,6 @@ +{ + "name":"Clock 3x2 Pix", + "type":"clock", + "icon":"*clck3x2", + "src":"-clck3x2" +} diff --git a/apps/clck3x2/clock3x2.png b/apps/clck3x2/clock3x2.png new file mode 100644 index 000000000..fe3272ce2 Binary files /dev/null and b/apps/clck3x2/clock3x2.png differ