From 9aa746fbc311d4ee61bc62c3f661ae5b169f925d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 24 Jun 2021 15:45:49 +0100 Subject: [PATCH] Modified to use setUI, theme and different screens --- apps.json | 6 ++--- apps/de-stress/ChangeLog | 2 ++ apps/de-stress/app.js | 32 +++++++++--------------- apps/devstopwatch/ChangeLog | 1 + apps/devstopwatch/app.js | 49 ++++++++++++++++++------------------- 5 files changed, 42 insertions(+), 48 deletions(-) create mode 100644 apps/de-stress/ChangeLog diff --git a/apps.json b/apps.json index 0ff053b8c..7151661fb 100644 --- a/apps.json +++ b/apps.json @@ -1531,9 +1531,9 @@ "name": "Dev Stopwatch", "shortName":"Dev Stopwatch", "icon": "app.png", - "version":"0.02", + "version":"0.03", "description": "Stopwatch with 5 laps supported (cyclically replaced)", - "tags": "stopwatch, chrono, timer, chronometer", + "tags": "stopwatch,chrono,timer,chronometer,b2", "allow_emulator":true, "storage": [ {"name":"devstopwatch.app.js","url":"app.js"}, @@ -2814,7 +2814,7 @@ "name": "De-Stress", "shortName":"De-Stress", "icon": "app.png", - "version":"0.01", + "version":"0.02", "description": "Simple haptic heartbeat", "storage": [ {"name":"de-stress.app.js","url":"app.js"}, diff --git a/apps/de-stress/ChangeLog b/apps/de-stress/ChangeLog new file mode 100644 index 000000000..fcd7580b1 --- /dev/null +++ b/apps/de-stress/ChangeLog @@ -0,0 +1,2 @@ +0.01: New App! +0.02: Adjust for different screen types and themes diff --git a/apps/de-stress/app.js b/apps/de-stress/app.js index 445e853c5..b292fe601 100644 --- a/apps/de-stress/app.js +++ b/apps/de-stress/app.js @@ -1,29 +1,21 @@ +g.setBgColor(0).clear(); -//g.clear(); - -var img = { - width : 100, height : 100, bpp : 8, - transparent : 254, - buffer : require("heatshrink").decompress(atob("/wA/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AglYAGE/44gHz4nnHKtPumez3C4WezFzp49ZLAgoCE4WeugnaHStPG4QAHzw9DE/Y6VHJQ9YMJwnEMk46CF4lzfglPug9WCAWYDQl0E4tzN4gLCMVC5Cp+YGoOezxBCubKHExxUEuiFCEoInECAhkjMQuYLArCFGwLLEHpjsGMIRpEfAsrMkwhBFAQ6BHJA9EKApDBHpAJBQYhPBE5iZBzAsDMb4gBEwg6MJhBkIYorgBPQiMMUAhkeHgkrug7ObI5qBHwhiGZYomOEojGeJQVzTx5kOMQ6JREAR3CDIJkcHobwEMiw+CAAYJEMSYWCAgRjcDgI4CYyiiDXopiFBooAWRwJkaHwjGVKwdzH4rADuhiXZAaICMbbtGHy2YBQ+YRDCiEMbidCULBkDLIwIIdqbmCp5jZPwIfDAYQAXXwNPzwACIQLQIACt0ZDIZBTwRFBHjWeHoSJCETlPc4ZjdAYYA7L4Jj/Mf5jCEYQDDAHhEEMbzH+McBfCMf4ADzxjep+YL/1PMb10MYQDCAHd0MYV0MbdzEYoA7UYdPMTBkCc4hj9leeAYRjbL4aIDAHN0UwRjeL4WYZHlPzBnCMbZkBQojtCAG6gEp5ibZARfCdwjG3ugDBzzGcMYTIEFAQA1ujGFMbjIFeAgA0HobGeZA9PAgYAyG4jGfZAyPBzBizf4LGjMggtCFAJpDAFw0FMURjCeAd0AgYAup90AgZjjMgWYFYZkwGImYMUhkDeYdPuZituZiDzximMYUrFwj6DAFF0TAg6CMcpkCSYpkqMQtPMVBkDuZktMQtzMVRkDLwZkoMQoFBMVZkJp5ijX4JizMhFPMkQjBMWpkHIAKjEADTrGMWZkDuY8DuZkdMQKKEMWpkDUIxFEACocGdoJi1MhCqBAwgATLYLkEMXJkDIY4GEAB+ep9PC4aDBMXRkJukruhiRCgxi+MglzJAtPMR7cGNIJi+MglPJYhSBzBhLzB0FzwWBMX5lGMghVGAAtzld0bwph/MhNzWYzKGNwR2Euhi/MhhTHA4ZrHA4Rh/Mp10YIlzA4JoCBQjE/ZTK8BA45i/MqtzX4jE/Mj0rYQjECBYZP/MrFPMoWep5h/ZT90ujE/MsZh/MsZB/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/ACg")) -}; +var img = require("heatshrink").decompress(atob("plB4X/ln7A4OGmMs5dVAANa1WlAoQADBI9W1QAByoJNtWv4f61ISEtWrBI2q4EAgeqCQgJHq2sLoU6IYdaBIg5CrWAn2q2EDF4dq4EO1W8gQcCtUD1fP9cA9QSC1cA9f/9XADgWohxBBh2whQvBq2gAwMAh+wlQSB1k7IIXogYvBrXAlYJC9k6DYOw9gIChXA9JBC0AJCncOytWwAtBAAMDF4RBDAAMOgWVrXDwDjD9kKy2gIIcAgXD0taDYgvCRIJBDF4OA0trhwIDJgK2B4BKDAAXptcLA4kC4HrD4IJE8HptE4BAhfBLAJBEgEslISGL4JOBBAoSB1ksBIs6/70DBIgSHh+q+AIFnASIABASU0EgCR0IhWgEp4SBHCBxJLzusXowAIaBISLhYSO8EptcOCR2w9NagXACJkDwGlrXDwASMgXDCQOA2ASMh0C0tW2HgCRkLh2Vq2glASMlEKytV1iFN9k6qtVtEOORcD2EpCQNqOwJwL4GpCQNa4GgCRUKgelCQJyBlgSKnBwBCQWgnZdLOAQAB1BfKLoMqCIVVtYHBXZPA9ISDL4PsCRE7LoZfDnRKJLoYAC1kOTI8CDoIREJgMA1gSGFwJKEJgaGH9hKFTIaGGPQKVEAAeogbTFhXASogADtXAlYSE9cDeYRMG2A5EG4MOJQxMC1g5EG4M6JQ4AB1Q5E9ED1QRIHIatBG5Y5EVoM6G5Y5DnXDCwJvIHIsD32AG5Y5C1aUBgHqG5atDLwI3MHIReCG5hgD4aUKHI2+G5xgC1RcNAAdpBJA")) function hr(){ - -Bangle.buzz(100,0.1).then(()=>{ - g.clear(); - return new Promise(resolve=>setTimeout(resolve,250)); // wait 250ms -}).then(()=>{ - return Bangle.buzz(150); -}).then(()=>{ - g.drawImage(img, 25, 40, {scale:2}); -}); - + Bangle.buzz(100,0.1).then(()=>{ + g.clear(); + return new Promise(resolve=>setTimeout(resolve,250)); // wait 250ms + }).then(()=>{ + return Bangle.buzz(150); + }).then(()=>{ + g.drawImage(img, g.getWidth()/2 - 76, g.getHeight()/2 - 65, {scale:2}); + }); } setInterval(hr, 2000); g.flip(); -setWatch(Bangle.showLauncher, BTN2, { repeat: false, edge: "falling" }); - - +// TODO - not clock but we still want a press to show launcher when button pressed +Bangle.setUI("clock"); diff --git a/apps/devstopwatch/ChangeLog b/apps/devstopwatch/ChangeLog index c6d24e9bc..e2b392fe9 100644 --- a/apps/devstopwatch/ChangeLog +++ b/apps/devstopwatch/ChangeLog @@ -1,2 +1,3 @@ 0.01: App created 0.02: Persist state to storage to enable stopwatch to continue in the background +0.03: Modified to use setUI, theme and different screens diff --git a/apps/devstopwatch/app.js b/apps/devstopwatch/app.js index 665ba084e..83bb693a9 100644 --- a/apps/devstopwatch/app.js +++ b/apps/devstopwatch/app.js @@ -2,13 +2,16 @@ const EMPTY_LAP = '--:--:---'; const EMPTY_H = '00:00:000'; const MAX_LAPS = 6; const XY_CENTER = g.getWidth() / 2; +const big = g.getWidth()>200; const Y_CHRONO = 40; -const Y_HEADER = 80; -const Y_LAPS = 125; -const Y_BTN3 = 225; +const Y_HEADER = big?80:60; +const Y_LAPS = big?125:90; +const H_LAPS = big?15:8; +const Y_BTN3 = big?225:165; const FONT = '6x8'; const CHRONO = '/* C H R O N O */'; + var reset = false; var currentLap = ''; var chronoInterval; @@ -22,11 +25,11 @@ var state = require("Storage").readJSON("devstopwatch.state.json",1) || { laps: [EMPTY_LAP, EMPTY_LAP, EMPTY_LAP, EMPTY_LAP, EMPTY_LAP, EMPTY_LAP, EMPTY_LAP], }; -// Set laps. -setWatch(() => { - +// Show launcher when button pressed +Bangle.setUI("clockupdown", btn=>{ + if (btn==0) { reset = false; - + if (state.started) { changeLap(); } else { @@ -34,13 +37,9 @@ setWatch(() => { chronoInterval = setInterval(chronometer, 10); } } -}, BTN1, { repeat: true, edge: 'rising' }); - -// Reset chronometre. -setWatch(() => { resetChrono(); }, BTN3, { repeat: true, edge: 'rising' }); - -// Show launcher when middle button pressed. -setWatch(Bangle.showLauncher, BTN2, { repeat: false, edge: 'falling' }); +} + if (btn==1) resetChrono(); +}); function resetChrono() { state.laps = [EMPTY_H, EMPTY_H, EMPTY_LAP, EMPTY_LAP, EMPTY_LAP, EMPTY_LAP, EMPTY_LAP]; @@ -106,33 +105,33 @@ function printChrono() { var print = ''; - g.setFont(FONT, 2); + g.setFont(FONT, big?2:1); print = CHRONO; g.drawString(print, XY_CENTER, Y_CHRONO, true); - g.setColor(0, 220, 0); - g.setFont(FONT, 3); + g.setColor("#0e0"); + g.setFont(FONT, big?3:2); print = ` T ${state.laps[0]}\n`; print += ` C ${state.laps[1]}\n`; g.drawString(print, XY_CENTER, Y_HEADER, true); - g.setColor(255, 255, 255); - g.setFont(FONT, 2); + g.setColor(g.theme.fg); + g.setFont(FONT, big?2:1); for (var i = 2; i < MAX_LAPS + 1; i++) { - g.setColor(255, 255, 255); + g.setColor(g.theme.fg); let suffix = ' '; if (state.currentLapIndex === i) { let suffix = '*'; - g.setColor(255, 200, 0); + g.setColor("#f70"); } const lapLine = `L${i - 1} ${state.laps[i]} ${suffix}\n`; - g.drawString(lapLine, XY_CENTER, Y_LAPS + (15 * (i - 1)), true); + g.drawString(lapLine, XY_CENTER, Y_LAPS + (H_LAPS * (i - 1)), true); } - g.setColor(255, 255, 255); + g.setColor(g.theme.fg); g.setFont(FONT, 1); print = 'Press 3 to reset'; g.drawString(print, XY_CENTER, Y_BTN3, true); @@ -166,7 +165,7 @@ E.on('kill', function(){ }); if(state.started){ - chronoInterval = setInterval(chronometer, 10); + chronoInterval = setInterval(chronometer, 10); } else { - resetChrono(); + resetChrono(); }