diff --git a/apps/90sclk/app.js b/apps/90sclk/app.js index 367d77502..6babbfec2 100644 --- a/apps/90sclk/app.js +++ b/apps/90sclk/app.js @@ -75,6 +75,9 @@ function getSteps() { function draw() { + // queue draw in one minute + queueDraw(); + var x = g.getWidth()/2; var y_offset = settings.fullscreen ? 0 : 10; var y = g.getHeight()/2-20 + y_offset; @@ -110,9 +113,6 @@ function draw() { } else { Bangle.drawWidgets(); } - - // queue draw in one minute - queueDraw(); } Bangle.loadWidgets(); diff --git a/apps/bwclk/README.md b/apps/bwclk/README.md index 49ee7f593..18c87d7e8 100644 --- a/apps/bwclk/README.md +++ b/apps/bwclk/README.md @@ -3,5 +3,14 @@ ![](screenshot.png) +In the settings, fullscreen mode can be enabled and disabled: + +![](screenshot_2.png) + +Additionally, in fullscreen mode a lock icon can be shown... + +## Thanks to +Lock icons created by Those Icons - Flaticon + ## Creator - [David Peer](https://github.com/peerdavid) diff --git a/apps/bwclk/app.js b/apps/bwclk/app.js index eb61221d9..b1f433c12 100644 --- a/apps/bwclk/app.js +++ b/apps/bwclk/app.js @@ -1,4 +1,25 @@ +const SETTINGS_FILE = "bwclk.setting.json"; const locale = require('locale'); +const storage = require('Storage'); + + +/* + * Load settings + */ +let settings = { + fullscreen: true, + showLock: true, +}; + +let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; +for (const key in saved_settings) { + settings[key] = saved_settings[key] +} + + +/* + * Assets + */ // Manrope font Graphics.prototype.setLargeFont = function(scale) { @@ -13,6 +34,12 @@ Graphics.prototype.setSmallFont = function(scale) { return this; }; +var imgLock = { + width : 16, height : 16, bpp : 1, + transparent : 0, + buffer : E.toArrayBuffer(atob("A8AH4A5wDDAYGBgYP/w//D/8Pnw+fD58Pnw//D/8P/w=")) +}; + // timeout used to update every minute var W = g.getWidth(); @@ -48,37 +75,23 @@ function getSteps() { function draw() { - // Hide widgets - for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";} + // queue draw in one minute + queueDraw(); // Draw background + var yOffset = settings.fullscreen ? 0 : 10; + var y = H/5*2 + yOffset; g.reset().clearRect(0,0,W,W); - g.setColor("#fff"); - g.fillRect(0,0,W,H/5*2); - - // Draw time - g.setColor("#fff"); - g.setLargeFont(); - g.setFontAlign(0,0); - var date = new Date(); - var timeStr = locale.time(date,1); - g.drawString(timeStr, W/2, H/5*2 + 40); - - // Draw Steps - g.setSmallFont(); - g.setFontAlign(0,0); - var lock = Bangle.isLocked() ? "L" : ""; - var steps = getSteps(); - g.drawString(steps + lock, W/2, H/5*4 + 10); + g.setColor("#000"); + g.fillRect(0,y,W,H); // Draw date + var date = new Date(); g.setColor("#000"); - var y = H/5+30; - g.setFontAlign(0,1); g.setLargeFont(); var dateStr = date.getDate(); - g.drawString(dateStr, W/2, y+7); + g.drawString(dateStr, W/2, y+5); var strW = g.stringWidth(dateStr); g.setSmallFont(); @@ -89,14 +102,37 @@ function draw() { var monthStr = locale.month(date, 1); g.drawString(monthStr, W/2+strW/2, y); - // queue draw in one minute - queueDraw(); + // Draw time + g.setColor("#fff"); + g.setLargeFont(); + g.setFontAlign(0,-1); + var timeStr = locale.time(date,1); + g.drawString(timeStr, W/2, y+10); + + // Draw Steps + y += H/5*2+10; + g.setSmallFont(); + g.setFontAlign(0,0); + g.drawString(getSteps(), W/2, y); + + // Draw lock + if(settings.showLock && Bangle.isLocked()){ + g.setColor("#000"); + g.drawImage(imgLock, 2, 2); + } + + // Draw widgets if not fullscreen + if(settings.fullscreen){ + for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";} + } else { + Bangle.drawWidgets(); + } } Bangle.loadWidgets(); // Clear the screen once, at startup -g.setTheme({bg:"#000",fg:"#fff",dark:false}).clear(); +g.setTheme({bg:"#fff",fg:"#000",dark:false}).clear(); // draw immediately at first, queue update draw(); // Stop updates when LCD is off, restart when on diff --git a/apps/bwclk/lock.png b/apps/bwclk/lock.png new file mode 100644 index 000000000..8c2c8407e Binary files /dev/null and b/apps/bwclk/lock.png differ diff --git a/apps/bwclk/metadata.json b/apps/bwclk/metadata.json index aefb1e531..3fe04c4d5 100644 --- a/apps/bwclk/metadata.json +++ b/apps/bwclk/metadata.json @@ -5,13 +5,14 @@ "description": "Black and white clock.", "readme": "README.md", "icon": "app.png", - "screenshots": [{"url":"screenshot.png"}], + "screenshots": [{"url":"screenshot.png"}, {"url":"screenshot_2.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS2"], "allow_emulator": true, "storage": [ {"name":"bwclk.app.js","url":"app.js"}, - {"name":"bwclk.img","url":"app-icon.js","evaluate":true} + {"name":"bwclk.img","url":"app-icon.js","evaluate":true}, + {"name":"bwclk.settings.js","url":"settings.js"} ] } diff --git a/apps/bwclk/screenshot.png b/apps/bwclk/screenshot.png index 84fb273b7..5a3c17c86 100644 Binary files a/apps/bwclk/screenshot.png and b/apps/bwclk/screenshot.png differ diff --git a/apps/bwclk/screenshot_2.png b/apps/bwclk/screenshot_2.png new file mode 100644 index 000000000..5ce483d7d Binary files /dev/null and b/apps/bwclk/screenshot_2.png differ diff --git a/apps/bwclk/settings.js b/apps/bwclk/settings.js new file mode 100644 index 000000000..e90a57ba2 --- /dev/null +++ b/apps/bwclk/settings.js @@ -0,0 +1,40 @@ +(function(back) { + const SETTINGS_FILE = "bwclk.setting.json"; + + // initialize with default settings... + const storage = require('Storage') + let settings = { + fullscreen: false, + showLock: true, + }; + let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; + for (const key in saved_settings) { + settings[key] = saved_settings[key] + } + + function save() { + storage.write(SETTINGS_FILE, settings) + } + + + E.showMenu({ + '': { 'title': 'BlackWhite Clock' }, + '< Back': back, + 'Show Lock': { + value: settings.showLock, + format: () => (settings.showLock ? 'Yes' : 'No'), + onchange: () => { + settings.showLock = !settings.showLock; + save(); + }, + }, + 'Full Screen': { + value: settings.fullscreen, + format: () => (settings.fullscreen ? 'Yes' : 'No'), + onchange: () => { + settings.fullscreen = !settings.fullscreen; + save(); + }, + } + }); + })