From 0c90fc1954750e101caaba267dbbfe705f65d6e7 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 19:13:18 +0100 Subject: [PATCH 01/21] Changed to layout Changes what circle is seconds and minutes --- apps/rclock/rclock.app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index f8b27c4fb..e9992b368 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -67,7 +67,7 @@ const drawMinArc = function (sections, color) { g.setColor(color); - rad = (settings.circle.height / 2) - 20; + rad = (settings.circle.height / 2) - 40; r1 = getArcXY(settings.circle.middle, settings.circle.center, rad, sections * (360 / 60) - 90); //g.setPixel(r[0],r[1]); r2 = getArcXY(settings.circle.middle, settings.circle.center, rad - settings.circle.width, sections * (360 / 60) - 90); @@ -79,7 +79,7 @@ const drawSecArc = function (sections, color) { g.setColor(color); - rad = (settings.circle.height / 2) - 40; + rad = (settings.circle.height / 2) - 20; r1 = getArcXY(settings.circle.middle, settings.circle.center, rad, sections * (360 / 60) - 90); //g.setPixel(r[0],r[1]); r2 = getArcXY(settings.circle.middle, settings.circle.center, rad - settings.circle.width, sections * (360 / 60) - 90); From 8548d8d316e9819588ec957928f2b8d3d9a5a54c Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 19:16:22 +0100 Subject: [PATCH 02/21] Added new version --- apps/rclock/ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/rclock/ChangeLog b/apps/rclock/ChangeLog index 3ac5530cd..2f2924553 100644 --- a/apps/rclock/ChangeLog +++ b/apps/rclock/ChangeLog @@ -1,4 +1,5 @@ 0.01: First published version of app 0.02: Added support for locale and 12H clock 0.03: Added HR indication to clock -0.04: Update font size and alignment \ No newline at end of file +0.04: Update font size and alignment +0.05: Changes whcihc circle show minutes and seconds \ No newline at end of file From 55d2f457548a4b25a598d588c9ace67c3bf17682 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 19:21:20 +0100 Subject: [PATCH 03/21] Change colors --- apps/rclock/rclock.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index e9992b368..a7a6ba4c2 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -38,7 +38,7 @@ }, circle: { colormin: 0x606060, - colorsec: 0x656565, + colorsec: 0x606060, width: 10, middle: screen.middle, center: screen.center, From fca637a328704edee3a726f7e14ad6e08ef85a68 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 19:31:12 +0100 Subject: [PATCH 04/21] Spelling and color --- apps/rclock/ChangeLog | 2 +- apps/rclock/rclock.app.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/rclock/ChangeLog b/apps/rclock/ChangeLog index 2f2924553..6c89b7900 100644 --- a/apps/rclock/ChangeLog +++ b/apps/rclock/ChangeLog @@ -2,4 +2,4 @@ 0.02: Added support for locale and 12H clock 0.03: Added HR indication to clock 0.04: Update font size and alignment -0.05: Changes whcihc circle show minutes and seconds \ No newline at end of file +0.05: Changes which circle show minutes and seconds diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index a7a6ba4c2..d8b726cfd 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -37,8 +37,8 @@ center: screen.center, }, circle: { - colormin: 0x606060, - colorsec: 0x606060, + colormin: 0xffffff, + colorsec: 0xffffff, width: 10, middle: screen.middle, center: screen.center, From 7fe9f03f71796b01619fd72c065c5ae70cd93a14 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 19:34:31 +0100 Subject: [PATCH 05/21] Test color --- apps/rclock/rclock.app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index d8b726cfd..c2ea5473e 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -37,8 +37,8 @@ center: screen.center, }, circle: { - colormin: 0xffffff, - colorsec: 0xffffff, + colormin: '#ffffff', + colorsec: '#ffffff', width: 10, middle: screen.middle, center: screen.center, From e2780176c4d15ccdb0b4f4074a0492c09b1d9957 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 19:45:06 +0100 Subject: [PATCH 06/21] Changes to colors --- apps/rclock/rclock.app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index c2ea5473e..fcacd39ae 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -23,14 +23,14 @@ // Ssettings const settings = { time: { - color: 0xD6ED17, + color: '#D6ED17', font: 'Vector', size: 60, middle: screen.middle, center: screen.center, }, date: { - color: 0xD6ED17, + color: '#D6ED17', font: 'Vector', size: 15, middle: screen.height-17, // at bottom of screen @@ -45,7 +45,7 @@ height: screen.height }, hr: { - color: 0x333333, + color: '#333333', size: 10, x: screen.center, y: screen.middle + 45 From a015fa97cf10bbcc829ca3de380cf5bac53bacfb Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 19:46:06 +0100 Subject: [PATCH 07/21] New version --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 0dcc81a25..dff98f4dc 100644 --- a/apps.json +++ b/apps.json @@ -1703,7 +1703,7 @@ "name": "Round clock with seconds, minutes and date", "shortName":"Round Clock", "icon": "app.png", - "version":"0.04", + "version":"0.05", "description": "Designed round clock with ticks for minutes and seconds and heart rate indication", "tags": "clock", "type": "clock", From f695fd6c1de76363c5083badd5ae14d1b8099a98 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 19:52:15 +0100 Subject: [PATCH 08/21] Fix --- apps/rclock/rclock.app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index fcacd39ae..2d7614d48 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -110,12 +110,12 @@ // Reset seconds if (seconds == 59) { g.setColor('#000000'); - g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2) - 40); + g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2) - 20); } // Reset minutes if (minutes == 59 && seconds == 59) { g.setColor('#000000'); - g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2) - 20); + g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2) - 40); } //Get date as a string From 78c97904b2e6a7a840c40c5175f624a5b8a1f5b2 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 20:27:15 +0100 Subject: [PATCH 09/21] Fix of reset --- apps.json | 4 ++-- apps/rclock/ChangeLog | 2 +- apps/rclock/rclock.app.js | 16 ++++++++++------ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps.json b/apps.json index dff98f4dc..41ef925a1 100644 --- a/apps.json +++ b/apps.json @@ -1701,9 +1701,9 @@ { "id": "rclock", "name": "Round clock with seconds, minutes and date", - "shortName":"Round Clock", + "shortName": "Round Clock", "icon": "app.png", - "version":"0.05", + "version": "0.05", "description": "Designed round clock with ticks for minutes and seconds and heart rate indication", "tags": "clock", "type": "clock", diff --git a/apps/rclock/ChangeLog b/apps/rclock/ChangeLog index 6c89b7900..61bf493c1 100644 --- a/apps/rclock/ChangeLog +++ b/apps/rclock/ChangeLog @@ -2,4 +2,4 @@ 0.02: Added support for locale and 12H clock 0.03: Added HR indication to clock 0.04: Update font size and alignment -0.05: Changes which circle show minutes and seconds +0.05: Changes which circle show minutes and seconds \ No newline at end of file diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index 2d7614d48..db8534a0a 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -107,15 +107,19 @@ first = false; } - // Reset seconds + // Reset if (seconds == 59) { - g.setColor('#000000'); - g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2) - 20); - } - // Reset minutes - if (minutes == 59 && seconds == 59) { g.setColor('#000000'); g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2) - 40); + minutes = currentTime.getMinutes(); + seconds = currentTime.getSeconds(); + for (count = 0; count <= minutes; count++) { + drawMinArc(count, settings.circle.colormin); + } + + for (count = 0; count <= seconds; count++) { + drawSecArc(count, settings.circle.colorsec); + } } //Get date as a string From 65efae98f3ae0c2621acb21e2318cfd27baa9f0d Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 20:36:51 +0100 Subject: [PATCH 10/21] Fix --- apps/rclock/rclock.app.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index db8534a0a..d904a5177 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -110,9 +110,7 @@ // Reset if (seconds == 59) { g.setColor('#000000'); - g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2) - 40); - minutes = currentTime.getMinutes(); - seconds = currentTime.getSeconds(); + g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2) - 20); for (count = 0; count <= minutes; count++) { drawMinArc(count, settings.circle.colormin); } From 9a4d1ab4073eaeace97fbc4eb2b6eed730fe68bd Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 20:40:04 +0100 Subject: [PATCH 11/21] Fix --- apps/rclock/rclock.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index d904a5177..30cf42b43 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -110,7 +110,7 @@ // Reset if (seconds == 59) { g.setColor('#000000'); - g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2) - 20); + g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2)); for (count = 0; count <= minutes; count++) { drawMinArc(count, settings.circle.colormin); } From d0c05a94b39582d5fa723d32beac91c9606910ae Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 20:43:35 +0100 Subject: [PATCH 12/21] Test --- apps/rclock/rclock.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index 30cf42b43..f102c6dbc 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -109,7 +109,7 @@ // Reset if (seconds == 59) { - g.setColor('#000000'); + g.setColor('#0000FF'); g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2)); for (count = 0; count <= minutes; count++) { drawMinArc(count, settings.circle.colormin); From 309a59cf1adca7464a6cec3baf9da3835dc240f4 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 20:53:26 +0100 Subject: [PATCH 13/21] Fix --- apps/rclock/rclock.app.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index f102c6dbc..45a5b1165 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -114,10 +114,6 @@ for (count = 0; count <= minutes; count++) { drawMinArc(count, settings.circle.colormin); } - - for (count = 0; count <= seconds; count++) { - drawSecArc(count, settings.circle.colorsec); - } } //Get date as a string From 861e94548bb2ceedcac0cd3c49030d4e5e8907f6 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 22 Mar 2021 20:57:11 +0100 Subject: [PATCH 14/21] Fix --- apps/rclock/rclock.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index 45a5b1165..3f96efa48 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -108,7 +108,7 @@ } // Reset - if (seconds == 59) { + if (seconds == 0) { g.setColor('#0000FF'); g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2)); for (count = 0; count <= minutes; count++) { From 9af705ed0fa7cd3042229add8d6e4b84f001d540 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 29 Mar 2021 19:09:00 +0200 Subject: [PATCH 15/21] Fix --- apps/rclock/rclock.app.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/rclock/rclock.app.js b/apps/rclock/rclock.app.js index 3f96efa48..ceaffe910 100644 --- a/apps/rclock/rclock.app.js +++ b/apps/rclock/rclock.app.js @@ -74,7 +74,7 @@ //g.setPixel(r[0],r[1]); g.drawLine(r1[0], r1[1], r2[0], r2[1]); g.setColor('#333333'); - g.drawCircle(settings.circle.middle, settings.circle.center, rad - settings.circle.width - 4) + g.drawCircle(settings.circle.middle, settings.circle.center, rad - settings.circle.width - 4); }; const drawSecArc = function (sections, color) { @@ -86,7 +86,7 @@ //g.setPixel(r[0],r[1]); g.drawLine(r1[0], r1[1], r2[0], r2[1]); g.setColor('#333333'); - g.drawCircle(settings.circle.middle, settings.circle.center, rad - settings.circle.width - 4) + g.drawCircle(settings.circle.middle, settings.circle.center, rad - settings.circle.width - 4); }; const drawClock = function () { @@ -108,8 +108,8 @@ } // Reset - if (seconds == 0) { - g.setColor('#0000FF'); + if (seconds == 59) { + g.setColor('#000000'); g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2)); for (count = 0; count <= minutes; count++) { drawMinArc(count, settings.circle.colormin); From 68c04698f5c7591aecd93eca8b3f461d9e7cae57 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 29 Mar 2021 19:49:19 +0200 Subject: [PATCH 16/21] First version --- apps.json | 14 +++ apps/fclock/ChangeLog | 5 + apps/fclock/app-icon.js | 1 + apps/fclock/fclock.app.js | 219 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 239 insertions(+) create mode 100644 apps/fclock/ChangeLog create mode 100644 apps/fclock/app-icon.js create mode 100644 apps/fclock/fclock.app.js diff --git a/apps.json b/apps.json index b531ebb3e..5aa915176 100644 --- a/apps.json +++ b/apps.json @@ -1712,6 +1712,20 @@ {"name":"rclock.img","url":"app-icon.js","evaluate":true} ] }, + { + "id": "fclock", + "name": "", + "shortName": "Clock", + "icon": "app.png", + "version": "0.01", + "description": "", + "tags": "clock", + "type": "clock", + "storage": [ + {"name":"fclock.app.js","url":"fclock.app.js"}, + {"name":"fclock.img","url":"app-icon.js","evaluate":true} + ] + }, { "id": "hamloc", "name": "QTH Locator / Maidenhead Locator System", "shortName": "QTH Locator", diff --git a/apps/fclock/ChangeLog b/apps/fclock/ChangeLog new file mode 100644 index 000000000..61bf493c1 --- /dev/null +++ b/apps/fclock/ChangeLog @@ -0,0 +1,5 @@ +0.01: First published version of app +0.02: Added support for locale and 12H clock +0.03: Added HR indication to clock +0.04: Update font size and alignment +0.05: Changes which circle show minutes and seconds \ No newline at end of file diff --git a/apps/fclock/app-icon.js b/apps/fclock/app-icon.js new file mode 100644 index 000000000..62f5310d5 --- /dev/null +++ b/apps/fclock/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+If4A/AH4AXqwBEF9VWlYxEAoIAllYuGGwIxnSxAwkR4InCFIbGmF4TCCGAYEBSgK/kXYQxFetDzCLYhgjeBQ3EGE69ESwgwoZYiSpMAgCEGFRfqYQrDblRfRMDdU0QFDp2iAAN4HIowBLYYwXvHG4w0D4wtB0QDBGApcCGYqLSEgIvEAwIqCHQNUYArdaKwIlBRwYpDGgIvEL4QxBYDIvEAAhpBpxZaF6BeBvAIFL4qVXF44uIF4pffFxI0GF7ouKlbrClaNXF4wEB0VUAAUqF4qTEF7heBAAhjDLQS+CL7MqqgECLgZfNGDIAORIaNZACCOBLIbvaFxy/ERtDpCAgYCDF1DsnFgS2ERk4sBF4hhBMYgAiE4bsDF0zAKMFABBXkxZEX4QunWwS4CFtCMEFsN4AAOiAYcAqgGB0UqgGip2iqgvcD4IuCAYgwBAoINBAIN4F7gkBAAplCGgVUNQhfcqlOAAIDCgEqAQIBBAoKXBAQIAL")) \ No newline at end of file diff --git a/apps/fclock/fclock.app.js b/apps/fclock/fclock.app.js new file mode 100644 index 000000000..823fac80c --- /dev/null +++ b/apps/fclock/fclock.app.js @@ -0,0 +1,219 @@ +{ + var minutes; + var seconds; + var hours; + var date; + var first = true; + var locale = require('locale'); + var _12hour = (require("Storage").readJSON("setting.json", 1) || {})["12hour"] || false; + + //HR variables + var id = 0; + var grow = true; + var size=10; + + //Screen dimensions + const screen = { + width: g.getWidth(), + height: g.getWidth(), + middle: g.getWidth() / 2, + center: g.getHeight() / 2, + }; + + // Ssettings + const settings = { + time: { + color: '#D6ED17', + font: 'Vector', + size: 60, + middle: screen.middle, + center: screen.center, + }, + date: { + color: '#D6ED17', + font: 'Vector', + size: 15, + middle: screen.height-17, // at bottom of screen + center: screen.center, + }, + circle: { + colormin: '#ffffff', + colorsec: '#ffffff', + width: 10, + middle: screen.middle, + center: screen.center, + height: screen.height + }, + hr: { + color: '#333333', + size: 10, + x: screen.center, + y: screen.middle + 45 + } + }; + + const dateStr = function (date) { + return locale.date(new Date(), 1); + }; + + const getArcXY = function (centerX, centerY, radius, angle) { + var s, r = []; + s = 2 * Math.PI * angle / 360; + r.push(centerX + Math.round(Math.cos(s) * radius)); + r.push(centerY + Math.round(Math.sin(s) * radius)); + + return r; + }; + + const drawMin = function (sections, color) { + g.setFontAlign(0, 0, 0); + g.setColor(settings.time.color); + g.setFont(settings.time.font, settings.time.size/2); + g.drawString(timestr, settings.time.center, settings.time.middle); + }; + + const drawSec = function (sections, color) { + g.setFontAlign(0, 0, 0); + g.setColor(settings.time.color); + g.setFont(settings.time.font, settings.time.size/4); + g.drawString(timestr, settings.time.center+20, settings.time.middle); + }; + + const drawClock = function () { + + currentTime = new Date(); + + //Set to initial time when started + if (first == true) { + minutes = currentTime.getMinutes(); + seconds = currentTime.getSeconds(); + for (count = 0; count <= minutes; count++) { + drawMin(count, settings.circle.colormin); + } + + for (count = 0; count <= seconds; count++) { + drawSec(count, settings.circle.colorsec); + } + first = false; + } + + // Reset + if (seconds == 59) { + g.setColor('#000000'); + g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2)); + for (count = 0; count <= minutes; count++) { + drawMin(count, settings.circle.colormin); + } + } + + //Get date as a string + date = dateStr(currentTime); + + // Update minutes when needed + if (minutes != currentTime.getMinutes()) { + minutes = currentTime.getMinutes(); + drawMin(minutes, settings.circle.colormin); + } + + //Update seconds when needed + if (seconds != currentTime.getSeconds()) { + seconds = currentTime.getSeconds(); + drawSec(seconds, settings.circle.colorsec); + } + + //Write the time as configured in the settings + hours = currentTime.getHours(); + if (_12hour && hours > 13) { + hours = hours - 12; + } + + var meridian; + + if (typeof locale.meridian === "function") { + meridian = locale.meridian(new Date()); + } else { + meridian = ""; + } + + var timestr; + + if (meridian.length > 0 && _12hour) { + timestr = hours + " " + meridian; + } else { + timestr = hours; + } + g.setFontAlign(0, 0, 0); + g.setColor(settings.time.color); + g.setFont(settings.time.font, settings.time.size); + g.drawString(timestr, settings.time.center+20, settings.time.middle); + + //Write the date as configured in the settings + g.setColor(settings.date.color); + g.setFont(settings.date.font, settings.date.size); + g.drawString(date, settings.date.center, settings.date.middle); + }; + + //setInterval for HR visualisation + const newBeats = function (hr) { + if (id != 0) { + changeInterval(id, 6e3 / hr.bpm); + } else { + id = setInterval(drawHR, 6e3 / hr.bpm); + } + }; + + //visualize HR with circles pulsating + const drawHR = function () { + if (grow && size < settings.hr.size) { + size++; + } + + if (!grow && size > 3) { + size--; + } + + if (size == settings.hr.size || size == 3) { + grow = !grow; + } + + if (grow) { + color = settings.hr.color; + g.setColor(color); + g.fillCircle(settings.hr.x, settings.hr.y, size); + } else { + color = "#000000"; + g.setColor(color); + g.drawCircle(settings.hr.x, settings.hr.y, size); + } + }; + + // clean app screen + g.clear(); + Bangle.loadWidgets(); + Bangle.drawWidgets(); + + //manage when things should be enabled and not + Bangle.on('lcdPower', function (on) { + if (on) { + Bangle.setHRMPower(1); + } else { + Bangle.setHRMPower(0); + } + }); + + // refesh every second + setInterval(drawClock, 1E3); + + //start HR monitor and update frequency of update + Bangle.setHRMPower(1); + Bangle.on('HRM', function (d) { + newBeats(d); + }); + + // draw now + drawClock(); + + // Show launcher when middle button pressed + setWatch(Bangle.showLauncher, BTN2, { repeat: false, edge: "falling" }); + +} \ No newline at end of file From 3c109a4126194a5bb17b5faf872de2f030c51d15 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 29 Mar 2021 19:53:28 +0200 Subject: [PATCH 17/21] Fixes --- apps.json | 2 +- apps/fclock/ChangeLog | 4 --- apps/fclock/app.png | Bin 0 -> 10357 bytes apps/fclock/fclock.app.js | 51 +++++++++++++++----------------------- 4 files changed, 21 insertions(+), 36 deletions(-) create mode 100644 apps/fclock/app.png diff --git a/apps.json b/apps.json index 5aa915176..23a51f6ca 100644 --- a/apps.json +++ b/apps.json @@ -1715,7 +1715,7 @@ { "id": "fclock", "name": "", - "shortName": "Clock", + "shortName": "F Clock", "icon": "app.png", "version": "0.01", "description": "", diff --git a/apps/fclock/ChangeLog b/apps/fclock/ChangeLog index 61bf493c1..a8f708a0a 100644 --- a/apps/fclock/ChangeLog +++ b/apps/fclock/ChangeLog @@ -1,5 +1 @@ 0.01: First published version of app -0.02: Added support for locale and 12H clock -0.03: Added HR indication to clock -0.04: Update font size and alignment -0.05: Changes which circle show minutes and seconds \ No newline at end of file diff --git a/apps/fclock/app.png b/apps/fclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..7950d4bc35e32dbf6c3f7c6fcf05de53bbbb29e1 GIT binary patch literal 10357 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 TkibuO00000NkvXXu0mjfp7a2c literal 0 HcmV?d00001 diff --git a/apps/fclock/fclock.app.js b/apps/fclock/fclock.app.js index 823fac80c..a3920e03a 100644 --- a/apps/fclock/fclock.app.js +++ b/apps/fclock/fclock.app.js @@ -23,14 +23,14 @@ // Ssettings const settings = { time: { - color: '#D6ED17', + color: '#dddddd', font: 'Vector', - size: 60, + size: 100, middle: screen.middle, center: screen.center, }, date: { - color: '#D6ED17', + color: '#dddddd', font: 'Vector', size: 15, middle: screen.height-17, // at bottom of screen @@ -46,9 +46,9 @@ }, hr: { color: '#333333', - size: 10, + size: 20, x: screen.center, - y: screen.middle + 45 + y: screen.middle + 65 } }; @@ -67,47 +67,36 @@ const drawMin = function (sections, color) { g.setFontAlign(0, 0, 0); + g.setColor('#000000'); + g.setFont(settings.time.font, settings.time.size/2); + g.drawString(sections-1, settings.time.center+50, settings.time.middle); g.setColor(settings.time.color); g.setFont(settings.time.font, settings.time.size/2); - g.drawString(timestr, settings.time.center, settings.time.middle); + g.drawString(sections, settings.time.center+50, settings.time.middle); }; const drawSec = function (sections, color) { g.setFontAlign(0, 0, 0); + g.setColor('#000000'); + g.setFont(settings.time.font, settings.time.size/4); + g.drawString(sections-1, settings.time.center+100, settings.time.middle); g.setColor(settings.time.color); g.setFont(settings.time.font, settings.time.size/4); - g.drawString(timestr, settings.time.center+20, settings.time.middle); + g.drawString(sections, settings.time.center+100, settings.time.middle); }; const drawClock = function () { currentTime = new Date(); - //Set to initial time when started - if (first == true) { - minutes = currentTime.getMinutes(); - seconds = currentTime.getSeconds(); - for (count = 0; count <= minutes; count++) { - drawMin(count, settings.circle.colormin); - } - - for (count = 0; count <= seconds; count++) { - drawSec(count, settings.circle.colorsec); - } - first = false; - } - - // Reset - if (seconds == 59) { - g.setColor('#000000'); - g.fillCircle(settings.circle.middle, settings.circle.center, (settings.circle.height / 2)); - for (count = 0; count <= minutes; count++) { - drawMin(count, settings.circle.colormin); - } - } - //Get date as a string date = dateStr(currentTime); + + if(seconds==59) { + g.clear(); + Bangle.loadWidgets(); + Bangle.drawWidgets(); + } // Update minutes when needed if (minutes != currentTime.getMinutes()) { @@ -145,7 +134,7 @@ g.setFontAlign(0, 0, 0); g.setColor(settings.time.color); g.setFont(settings.time.font, settings.time.size); - g.drawString(timestr, settings.time.center+20, settings.time.middle); + g.drawString(timestr, settings.time.center-40, settings.time.middle); //Write the date as configured in the settings g.setColor(settings.date.color); From 6d9478aad66441b3451156b818e1dc5de6d44b19 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 29 Mar 2021 20:02:38 +0200 Subject: [PATCH 18/21] Updated name --- apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 23a51f6ca..77f2dfc1f 100644 --- a/apps.json +++ b/apps.json @@ -1714,11 +1714,11 @@ }, { "id": "fclock", - "name": "", + "name": "fclock", "shortName": "F Clock", "icon": "app.png", "version": "0.01", - "description": "", + "description": "Simple design of a digital clock", "tags": "clock", "type": "clock", "storage": [ From bec44e9d5d9a63c538d7606b03ba9eadaf203234 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 29 Mar 2021 20:15:10 +0200 Subject: [PATCH 19/21] Fix to get min and sec right --- apps/fclock/fclock.app.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/fclock/fclock.app.js b/apps/fclock/fclock.app.js index a3920e03a..46989a56a 100644 --- a/apps/fclock/fclock.app.js +++ b/apps/fclock/fclock.app.js @@ -65,24 +65,33 @@ return r; }; + const getFormated = function(val) { + if (val<10) { + val='0'+val; + } + + return val; + }; + const drawMin = function (sections, color) { + g.setFontAlign(0, 0, 0); g.setColor('#000000'); g.setFont(settings.time.font, settings.time.size/2); - g.drawString(sections-1, settings.time.center+50, settings.time.middle); + g.drawString(getFormated(sections-1), settings.time.center+50, settings.time.middle); g.setColor(settings.time.color); g.setFont(settings.time.font, settings.time.size/2); - g.drawString(sections, settings.time.center+50, settings.time.middle); + g.drawString(getFormated(sections), settings.time.center+50, settings.time.middle); }; const drawSec = function (sections, color) { g.setFontAlign(0, 0, 0); g.setColor('#000000'); g.setFont(settings.time.font, settings.time.size/4); - g.drawString(sections-1, settings.time.center+100, settings.time.middle); + g.drawString(getFormated(sections-1), settings.time.center+100, settings.time.middle); g.setColor(settings.time.color); g.setFont(settings.time.font, settings.time.size/4); - g.drawString(sections, settings.time.center+100, settings.time.middle); + g.drawString(getFormated(sections), settings.time.center+100, settings.time.middle); }; const drawClock = function () { From 57c45ae63122e02338720f86534b739524f83323 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 5 Apr 2021 16:08:06 +0200 Subject: [PATCH 20/21] Try to fix that it drains battery --- apps/fclock/fclock.app.js | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/apps/fclock/fclock.app.js b/apps/fclock/fclock.app.js index 46989a56a..044cde71f 100644 --- a/apps/fclock/fclock.app.js +++ b/apps/fclock/fclock.app.js @@ -56,15 +56,6 @@ return locale.date(new Date(), 1); }; - const getArcXY = function (centerX, centerY, radius, angle) { - var s, r = []; - s = 2 * Math.PI * angle / 360; - r.push(centerX + Math.round(Math.cos(s) * radius)); - r.push(centerY + Math.round(Math.sin(s) * radius)); - - return r; - }; - const getFormated = function(val) { if (val<10) { val='0'+val; @@ -103,8 +94,6 @@ if(seconds==59) { g.clear(); - Bangle.loadWidgets(); - Bangle.drawWidgets(); } // Update minutes when needed From 0eb8fc8fb3d9f805094b18a8d426002ef2148747 Mon Sep 17 00:00:00 2001 From: Fredrik Lautrup Date: Mon, 5 Apr 2021 16:22:16 +0200 Subject: [PATCH 21/21] Added images --- apps/fclock/app-icon.js | 2 +- apps/fclock/app.png | Bin 10357 -> 6575 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fclock/app-icon.js b/apps/fclock/app-icon.js index 62f5310d5..ba506d3ac 100644 --- a/apps/fclock/app-icon.js +++ b/apps/fclock/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwxH+If4A/AH4AXqwBEF9VWlYxEAoIAllYuGGwIxnSxAwkR4InCFIbGmF4TCCGAYEBSgK/kXYQxFetDzCLYhgjeBQ3EGE69ESwgwoZYiSpMAgCEGFRfqYQrDblRfRMDdU0QFDp2iAAN4HIowBLYYwXvHG4w0D4wtB0QDBGApcCGYqLSEgIvEAwIqCHQNUYArdaKwIlBRwYpDGgIvEL4QxBYDIvEAAhpBpxZaF6BeBvAIFL4qVXF44uIF4pffFxI0GF7ouKlbrClaNXF4wEB0VUAAUqF4qTEF7heBAAhjDLQS+CL7MqqgECLgZfNGDIAORIaNZACCOBLIbvaFxy/ERtDpCAgYCDF1DsnFgS2ERk4sBF4hhBMYgAiE4bsDF0zAKMFABBXkxZEX4QunWwS4CFtCMEFsN4AAOiAYcAqgGB0UqgGip2iqgvcD4IuCAYgwBAoINBAIN4F7gkBAAplCGgVUNQhfcqlOAAIDCgEqAQIBBAoKXBAQIAL")) \ No newline at end of file +require("heatshrink").decompress(atob("7OwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/8AAAAAAAB//AAAAAAAAAAAAAAAAAAAAAAAAAAD//AAAAAAAB//8AAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAB///wAAAAAAAAAAAAAAAAAAAAAAAAB//8AAAAAAB////AAAAAAAAAAAAAAAAAAAAAAAAB///AAAAAAB////8AAAAAAAAAAAAAAAAAAAAAAAA///wAAAAAB/////wAAAAAAAAAAAAAAAAAAAAAAA///8AAAAAB//////AAAAAAAAAAAAAAAAAAAAAAAf///AAAAAA//////4AAAAAAAAAAAAAAAAAAAAAAf///wAAAAAP/////+AAAAAAAAAAAAAAAAAAAAAAP///8AAAAAH//////wAAAAAAAAAAAAAAAAAAAAAP////AAAAAB//////8AAAAAAAAAAAAAAAAAAAAAH////wAAAAA///////gAAAAAAAAAAAAAAAAAAAAH////8AAAAAP//////4AAAAAAAAAAAAAAAAAAAAB//9//AAAAAH//AAH//AAAAAAAAAAAAAAAAAAAAAf/+f/wAAAAB//gAA//wAAAAAAAAAAAAAAAAAAAAH/+H/8AAAAA//wAAH/+AAAAAAAAAAAAAAAAAAAAB//B//AAAAAP/4AAA//gAAAAAAAAAAAAAAAAAAAAf/Af/wAAAAH/8AAAH/8AAAAAAAAAAAAAAAAAAAAH/gH/8AAAAB/+AAAA//AAAAAAAAAAAAAAAAAAAAB/gB//AAAAAf/gAAAAAAAAAAAAAAAAAAAAAAAAAAfwAf/wAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAHwAH/8AAAAB/+AAAAAAAAAAAAAAAAAAAAAAAAAAB4AB//AAAAAf/gAAAAAAAAP4AAAAD8AAAAAAAAAAYAAf/wAAAAH/4AAAAAAAAH+AAAAB/AAAAAAAAAAEAAH/8AAAAB/+AAAAAAAAH/gAAAAfwAAAAAAAAAAAAB//AAAAAf/gf/wAAAAD/4AAAAP8AAAAAAAAAAAAAf/wAAAAH/4f//AAAAD/+AAAAH/AAAAAAAAAAAAAH/8AAAAB/+f//8AAAB//gAAAD/wAAAAAAAAAAAAB//AAAAAf/v///wAAA/34AAAA/8AAAAAAAAAAAAAf/wAAAAH/7////AAAP5+AAAAf/AAAAAAAAAAAAAH/8AAAAB/+////8AAD8fgAAAP/wAAAAAAAAAAAAB//AAAAAf/v////wAA8H4AAAD/8AAAAAAAAAAAAAf/wAAAAH/7////+AAOB+AAAB+/AAAAAAAAAAAAAH/8AAAAB/+/////gACAfgAAA/vwAAAAAAAAAAAAB//AAAAAf/v////8AAAH4AAAfz8AAPAB/AAAAAAAf/wAAAAH/7/////AAAB+AAAH4/AAPwA/8AAAAAAH/8AAAAB/+/////4AAAfgAAD8PwAH8AP/AAAAAAB//AAAAAf/v////+AAAH4AAB/D8AB3AHB4AAAAAAf/wAAAAH/7wAB//wAAB+AAAfg/AARwAAOAAAAAAH/8AAAAB/+4AAP/8AAAfgAAPwPwAAcAADgAAAAAB//AAAAAf/sAAB//gAAH4AAH4D8AAHAAB4AAAAAAf/wAAAAH/6AAAP/4AAB+AAD+A/AABwAH8AAAAAAH/8AAAAB/+AAAB//AAAfgAA/APwAAcAB/AAAAAAB//AAAAAf/gAAAP/wAAH4AAfgD8AAHAAfwAAAAAAf/wAAAAH/4AAAD/8AAB+AAH///4ABwAA8AAAAAAH/8AAAAB/+AAAA//AAAfgAB///+AAcAAHgAAAAAB//AAAAAf/gAAAP/wAAH4AAf///gAHAAA4AAAAAAf/wAAAAH/4AAAD/8AAB+AAH///4ABwAAOAAAAAAH/8AAAAB/+AAAA//AAAfgAB///+AAcAcHAAAAAAB//AAAAAf/gAAAP/wAAH4AAf///gB/+D/wAAAAAAf/wAAAAH/4AAAD/8AAB+AAAAA/AAf/g/4AAAAAAH/8AAAAB/+AAAA//AAAfgAAAAPwAH/4D8AAAAAAB//AAAAAf/gAAAP/wAAH4AAAAD8AAAAAAAAAAAAAf/wAAAAH/4AAAD/8AP///wAAA/AAAAAAAAAAAAAH/8AAAAB/+AAAA//AD///8AAAPwAAAAAAAAAAAAB//AAAAAf/gAAAP/wA////AAAD8AAAAAAAAAAAAAf/wAAAAH/4AAAD/8AP///wAAA/AAAAAAAAAAAAAH/8AAAAB//AAAB//AD///8AAAPwAAAAAAAAAAAAB//AAAAAP/4AAA//gA////AAAD8AAAAAAAAAAAAAf/wAAAAD//AAAf/4AP///wAAA/AAAAAAAAAAAAAH/8AAAAAf/4AAP/8AAAAAAAAAAAAAAAAAAAAAAAB//AAAAAH//AAH//AAAAAAAAAAAAAAAAAAAAAAAAf/wAAAAA//4AD//gAAAAAAAAAAAAAAAAAAAAH///////8AAP//////4AAAAAAAAAAAAAAAAAAAAB////////AAB//////8AAAAAAAAAAAAAAAAAAAAAf///////wAAf//////AAAAAAAAAAAAAAAAAAAAAH///////8AAD//////gAAAAAAAAAAAAAAAAAAAAB////////AAA//////4AAAAAAAAAAAAAAAAAAAAAf///////wAAH/////8AAAAAAAAAAAAAAAAAAAAAH///////8AAA/////+AAAAAAAAAAAAAAAAAAAAAB////////AAAD////+AAAAAAAAAAAAAAAAAAAAAAf///////wAAAP///+AAAAAAAAAAAAAAAAAAAAAAH///////8AAAA///+AAAAAAAAAAAAAAAAAAAAAAB////////AAAAD//+AAAAAAAAAAAAAAAAAAAAAAAf///////wAAAAP/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8P4DDwDAMPB4PAwAAAAAAAAAAAAAAAAAAAAAAAAfj+Ax+BwDH4/H48AAAAAAAAAAAAAAAAAAAAAAAAGMgAYYwcBhjMZjLAAAAAAAAAAAAAAAAAAAAAAAABDIAGEMPAYAyGAwwAAAAAAAAAAAAAAAAAAAAAAAAQx8DBDGwMAYhgYMAAAAAAAAAAAAAAAAAAAAAAAAEM/AwQzMDAOIYODAAAAAAAAAAAAAAAAAAAAAAAABDAYYEM/hgHCGHAwAAAAAAAAAAAAAAAAAAAAAAAAQwGGBDP4YDAhjAMAAAAAAAAAAAAAAAAAAAAAAAAEMhjAQwMMBgIZgDAAAAAAAAAAAAAAAAAAAAAAAAB+PwwH4DDAfz8fz+AAAAAAAAAAAAAAAAAAAAAAAAPB4YA8AxgH8eH8/gAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")) \ No newline at end of file diff --git a/apps/fclock/app.png b/apps/fclock/app.png index 7950d4bc35e32dbf6c3f7c6fcf05de53bbbb29e1..6255b756cbe1295e0fd40e45f72b59179d78c6ab 100644 GIT binary patch literal 6575 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 literal 10357 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 TkibuO00000NkvXXu0mjfp7a2c