From 7b8762b5ce26f475effe5deb33b49e6c007afee4 Mon Sep 17 00:00:00 2001 From: Hairo Date: Sun, 21 Jan 2024 18:43:16 -0400 Subject: [PATCH 1/3] [Rebble] add fullscreen option --- apps/rebble/ChangeLog | 1 + apps/rebble/metadata.json | 2 +- apps/rebble/rebble.app.js | 133 +++++++++++++++++++++++++-------- apps/rebble/rebble.settings.js | 12 ++- 4 files changed, 114 insertions(+), 34 deletions(-) diff --git a/apps/rebble/ChangeLog b/apps/rebble/ChangeLog index 78ba0c5da..bde6fda82 100644 --- a/apps/rebble/ChangeLog +++ b/apps/rebble/ChangeLog @@ -14,3 +14,4 @@ 0.14: cleanup code and fix fastload issue 0.15: fix draw before widget hide 0.16: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps +0.17: Add fullscreen option (on by default) to show widgets, adjust sidebar 1 and 2 when fullscreen is off diff --git a/apps/rebble/metadata.json b/apps/rebble/metadata.json index 6242236c8..449185e87 100644 --- a/apps/rebble/metadata.json +++ b/apps/rebble/metadata.json @@ -2,7 +2,7 @@ "id": "rebble", "name": "Rebble Clock", "shortName": "Rebble", - "version": "0.16", + "version": "0.17", "description": "A Pebble style clock, with configurable background, three sidebars including steps, day, date, sunrise, sunset, long live the rebellion", "readme": "README.md", "icon": "rebble.png", diff --git a/apps/rebble/rebble.app.js b/apps/rebble/rebble.app.js index 445c30125..06c344b2c 100644 --- a/apps/rebble/rebble.app.js +++ b/apps/rebble/rebble.app.js @@ -40,7 +40,7 @@ Graphics.prototype.setFontKdamThmor = function(scale) { } let loadSettings=function() { - settings = {'bg': '#0f0', 'color': 'Green', 'autoCycle': true,'sideTap':0}; + settings = {'bg': '#0f0', 'color': 'Green', 'autoCycle': true, 'fullScreen': true, 'sideTap':0}; //sideTap 0 = on | 1 = sidebar1... let tmp = require('Storage').readJSON(SETTINGS_FILE, 1) || settings; @@ -118,32 +118,60 @@ Graphics.prototype.setFontKdamThmor = function(scale) { if (drawCount % 60 == 0) updateSunRiseSunSet(location.lat, location.lon); - + g.reset(); - g.setColor(g.theme.bg); - g.fillRect(0, 0, w2, h); - g.setColor(settings.bg); - g.fillRect(w2, 0, w, h); + + if (settings.fullScreen) { + g.setColor(g.theme.bg); + g.fillRect(0, 0, w2, h); + g.setColor(settings.bg); + g.fillRect(w2, 0, w, h); - // time - g.setColor(g.theme.fg); - g.setFontKdamThmor(); - g.setFontAlign(0, -1); - g.drawString(hh, w2/2, 10 + 0); - g.drawString(mm, w2/2, 10 + h/2); + // time + g.setColor(g.theme.fg); + g.setFontKdamThmor(); + g.setFontAlign(0, -1); + g.drawString(hh, w2/2, 10 + 0); + g.drawString(mm, w2/2, 10 + h/2); - switch(sideBar) { - case 0: - drawSideBar1(); - break; - case 1: - drawSideBar2(); - break; - case 2: - drawSideBar3(); - break; + switch(sideBar) { + case 0: + drawSideBar1(); + break; + case 1: + drawSideBar2(); + break; + case 2: + drawSideBar3(); + break; + } + } else { + g.setColor(g.theme.bg); + g.fillRect(0, 24, 113, 176); + g.setColor(settings.bg); + g.fillRect(113, 24, 176, 176); + + // time + g.setColor(g.theme.fg); + g.setFontKdamThmor(); + g.setFontAlign(0, -1); + g.drawString(hh, 57, 24); + g.drawString(mm, 57, 100); + + switch(sideBar) { + case 0: + drawSideBar1Alt(); + break; + case 1: + drawSideBar2Alt(); + break; + case 2: + drawSideBar3(); + break; + } } + drawCount++; queueDraw(); } @@ -164,6 +192,16 @@ Graphics.prototype.setFontKdamThmor = function(scale) { drawDateAndCalendar(w3, h/2, dy, dd, mm); } + + let drawSideBar1Alt=function() { + let date = new Date(); + let dy= require("date_utils").dow(date.getDay(),1).toUpperCase(); + let dd= date.getDate(); + let mm= require("date_utils").month(date.getMonth()+1,1).toUpperCase(); + let yy = date.getFullYear(); + + drawDateAndCalendarAlt(145, 46, dy, dd, mm, yy); + } let drawSideBar2=function() { drawBattery(w2 + (w-w2-wb)/2, h/10, wb, 17); @@ -178,6 +216,14 @@ Graphics.prototype.setFontKdamThmor = function(scale) { setSmallFont(); g.setFontAlign(0, -1); g.drawString(formatSteps(), w3, 7*h/8); + } + + let drawSideBar2Alt=function() { + // steps + g.drawImage(boot_img, 113, 59, { scale: 1 }); + setSmallFont(); + g.setFontAlign(0, -1); + g.drawString(formatSteps(), 145, 122); } // sunrise, sunset times @@ -212,6 +258,28 @@ Graphics.prototype.setFontKdamThmor = function(scale) { g.setFontAlign(0, -1); g.drawString(mm.toUpperCase(), x, y + 70); } + + let drawDateAndCalendarAlt=function(x, y, dy, dd, mm, yy) { + // day + setTextColor(); + setSmallFont(); + g.setFontAlign(0, -1); + g.drawString(dy.toUpperCase(), x, y); + + drawCalendar(x - 18, y + 28, 35, 3, dd); + + // month + setTextColor(); + setSmallFont(); + g.setFontAlign(0, -1); + g.drawString(mm.toUpperCase(), x, y + 70); + + // year + setTextColor(); + setSmallFont(); + g.setFontAlign(0, -1); + g.drawString(yy, x, y + 94); + } // at x,y width:wi thicknes:th let drawCalendar=function(x,y,wi,th,str) { @@ -311,7 +379,10 @@ Graphics.prototype.setFontKdamThmor = function(scale) { if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; delete Graphics.prototype.setFontKdamThmor; - Bangle.removeListener('charging',chargingListener); + + if (settings.fullScreen) + Bangle.removeListener('charging',chargingListener); + } } let main=function(){ @@ -341,17 +412,17 @@ Graphics.prototype.setFontKdamThmor = function(scale) { }); } - - - Bangle.on('charging',chargingListener); - - Bangle.loadWidgets(); - require("widget_utils").hide(); + + if (settings.fullScreen) { + Bangle.on('charging',chargingListener); + require("widget_utils").hide(); + } else { + Bangle.drawWidgets(); + } + draw(); - } - main(); } diff --git a/apps/rebble/rebble.settings.js b/apps/rebble/rebble.settings.js index 46252d156..444faa75f 100644 --- a/apps/rebble/rebble.settings.js +++ b/apps/rebble/rebble.settings.js @@ -2,7 +2,7 @@ const SETTINGS_FILE = "rebble.json"; // initialize with default settings... - let localSettings = {'bg': '#0f0', 'color': 'Green', 'autoCycle': true, 'sideTap':0}; + let localSettings = {'bg': '#0f0', 'color': 'Green', 'autoCycle': true, 'fullScreen': true, 'sideTap':0}; //sideTap 0 = on| 1= sideBar1 | 2 = ... // ...and overwrite them with any saved values @@ -38,6 +38,14 @@ save(); }, }, + 'Fullscreen': { + value: localSettings.fullScreen, + onchange: (v) => { + localSettings.fullScreen = v; + save(); + showMenu(); + } + } 'Auto Cycle': { value: localSettings.autoCycle, onchange: (v) => { @@ -74,4 +82,4 @@ } showMenu(); -}) \ No newline at end of file +}) From 3bce4cfb75eaf174450631b3c9a98fd381fde87e Mon Sep 17 00:00:00 2001 From: Hairo Date: Sun, 21 Jan 2024 18:53:59 -0400 Subject: [PATCH 2/3] [Rebble] Fix build issues --- apps/rebble/rebble.app.js | 2 +- apps/rebble/rebble.settings.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/rebble/rebble.app.js b/apps/rebble/rebble.app.js index 06c344b2c..bc18d997d 100644 --- a/apps/rebble/rebble.app.js +++ b/apps/rebble/rebble.app.js @@ -380,7 +380,7 @@ Graphics.prototype.setFontKdamThmor = function(scale) { drawTimeout = undefined; delete Graphics.prototype.setFontKdamThmor; - if (settings.fullScreen) + if (settings.fullScreen) { Bangle.removeListener('charging',chargingListener); } } diff --git a/apps/rebble/rebble.settings.js b/apps/rebble/rebble.settings.js index 444faa75f..0048955c6 100644 --- a/apps/rebble/rebble.settings.js +++ b/apps/rebble/rebble.settings.js @@ -45,7 +45,7 @@ save(); showMenu(); } - } + }, 'Auto Cycle': { value: localSettings.autoCycle, onchange: (v) => { From 02cb97ee5d8a9ed71eab3c4354f4d5f923eb0858 Mon Sep 17 00:00:00 2001 From: Hairo Date: Sun, 21 Jan 2024 19:12:20 -0400 Subject: [PATCH 3/3] [Rebble] Update metadata and readme --- apps/rebble/README.md | 10 +++++++++- apps/rebble/metadata.json | 2 +- apps/rebble/screenshot_rebble_w1.png | Bin 0 -> 3474 bytes apps/rebble/screenshot_rebble_w2.png | Bin 0 -> 3397 bytes apps/rebble/screenshot_rebble_w3.png | Bin 0 -> 4111 bytes 5 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 apps/rebble/screenshot_rebble_w1.png create mode 100644 apps/rebble/screenshot_rebble_w2.png create mode 100644 apps/rebble/screenshot_rebble_w3.png diff --git a/apps/rebble/README.md b/apps/rebble/README.md index 0ecb51d7a..e55978dc4 100644 --- a/apps/rebble/README.md +++ b/apps/rebble/README.md @@ -10,14 +10,22 @@ * Tap top or bottom right to instantly cycle to the next sidebar * Uses pedometer widget to get latest step count * Dependant apps are installed when Rebble installs -* Uses the whole screen, widgets are made invisible but still run in the background +* When in fullscreen widgets are made invisible but still run in the background * The icon is James Dean - 'Rebel Without a Cause' +## Fullscreen + ![](screenshot_rebble.png) ![](screenshot_rebble2.png) ![](screenshot_rebble3.png) ![](screenshot_rebble4.png) +## With widgets + +![](screenshot_rebble_w1.png) +![](screenshot_rebble_w2.png) +![](screenshot_rebble_w3.png) + ## Future Enhancements * Support for Weather Icons in the Steps Sidebar diff --git a/apps/rebble/metadata.json b/apps/rebble/metadata.json index 449185e87..56fe014ff 100644 --- a/apps/rebble/metadata.json +++ b/apps/rebble/metadata.json @@ -7,7 +7,7 @@ "readme": "README.md", "icon": "rebble.png", "dependencies": {"mylocation":"app"}, - "screenshots": [{"url":"screenshot_rebble.png"}], + "screenshots": [{"url":"screenshot_rebble.png"}, {"url":"screenshot_rebble2.png"}, {"url":"screenshot_rebble3.png"}, {"url":"screenshot_rebble4.png"}, {"url":"screenshot_rebble_w1.png"}, {"url":"screenshot_rebble_w2.png"}, {"url":"screenshot_rebble_w3.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS2"], diff --git a/apps/rebble/screenshot_rebble_w1.png b/apps/rebble/screenshot_rebble_w1.png new file mode 100644 index 0000000000000000000000000000000000000000..0057e862bbdfe839499f2745e35b0d1e9166f49c GIT binary patch literal 3474 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 S?R5lu5#VI+Zr5N-y!;;l86+0~ literal 0 HcmV?d00001 diff --git a/apps/rebble/screenshot_rebble_w3.png b/apps/rebble/screenshot_rebble_w3.png new file mode 100644 index 0000000000000000000000000000000000000000..5754e43a498a7b68f1a96b28f9f2bb77bf59ea57 GIT binary patch literal 4111 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 N002ovPDHLkV1mT*#Wnx{ literal 0 HcmV?d00001