From 66a9f8b6cb497708ffc2fdb25f1fc6225054e5fd Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 9 Oct 2024 11:22:43 +0100 Subject: [PATCH] updated pebblepp with fix for bottom line and other improvements --- apps/pebblepp/ChangeLog | 5 ++++- apps/pebblepp/app.js | 30 ++++++++++++++++++++---------- apps/pebblepp/metadata.json | 6 +++--- apps/pebblepp/screenshot2.png | Bin 0 -> 4060 bytes apps/pebblepp/settings.js | 30 +++++++++++++++++++----------- 5 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 apps/pebblepp/screenshot2.png diff --git a/apps/pebblepp/ChangeLog b/apps/pebblepp/ChangeLog index 4d81b17d8..b44914451 100644 --- a/apps/pebblepp/ChangeLog +++ b/apps/pebblepp/ChangeLog @@ -7,4 +7,7 @@ 0.06: Use the clockbg library to allow custom image backgrounds 0.07: Fix automatic coloring of middle of clockinfo images if clockinfo image goes right to the top or left 0.08: Use new clockinfo lib with function to render images wirh borders -0.09: Add date on the bottom \ No newline at end of file +0.09: Add date on the bottom +0.10: Fix size of bottom bar after 0.09 + Make date toggleable with settings + Optional border around clockinfos (available from settings) \ No newline at end of file diff --git a/apps/pebblepp/app.js b/apps/pebblepp/app.js index 2aa50b7de..7c01fcade 100644 --- a/apps/pebblepp/app.js +++ b/apps/pebblepp/app.js @@ -20,7 +20,7 @@ Graphics.prototype.setFontLECO1976Regular14 = function() { { const SETTINGS_FILE = "pebblepp.json"; -let settings = require("Storage").readJSON(SETTINGS_FILE,1)|| {'theme':'System', 'showlock':false}; +let settings = Object.assign({'theme':'System', 'showdate':true, 'clkinfoborder': false}, require("Storage").readJSON(SETTINGS_FILE,1)||{}); let background = require("clockbg"); let theme; let drawTimeout; @@ -28,8 +28,8 @@ let drawTimeout; const h = g.getHeight(); const w = g.getWidth(); //const ha = 2*h/5 - 4; -const h2 = 3*h/5 - 10; -const h3 = 7*h/8; +const h2 = Math.round(3*h/5) - 10; +const h3 = Math.round(7*h/8); let draw = function() { let locale = require("locale"); @@ -37,10 +37,12 @@ let draw = function() { let time = locale.time(date, 1); g.reset(); - g.setBgColor(theme.bg).clearRect(0, h2, w, h3); - g.setColor(theme.fg).fillRect(w / 2 - 30, h3 + 5, w / 2 + 30, h); // refresh date background - g.setFontLECO1976Regular22().setFontAlign(0, -1); - g.setColor(theme.bg).drawString(date.getDate() + "." + (date.getMonth() + 1), w / 2, h3 + 5); + g.setBgColor(theme.bg).clearRect(0, h2, w, h3); // clear area where clock is + if (settings.showdate) { + g.setColor(theme.fg).fillRect(w / 2 - 30, h3 + 5, w / 2 + 30, h); // refresh date background + g.setFontLECO1976Regular22().setFontAlign(0, -1); + g.setColor(theme.bg).drawString(date.getDate() + "." + (date.getMonth() + 1), w / 2, h3 + 5); + } g.setFontLECO1976Regular42().setFontAlign(0, -1); g.setColor(theme.fg); g.drawString(time, w/2, h2 + 8); @@ -89,7 +91,10 @@ let clockInfoDraw = (itm, info, options) => { if (info.img) { // draw the image // TODO: we could replace certain images with our own ones here... y = options.y+8; - require("clock_info").drawFilledImage(info.img,midx-24,y,{scale:2}); + if (settings.clkinfoborder) + require("clock_info").drawBorderedImage(info.img,midx-24,y,{scale:2}); + else + require("clock_info").drawFilledImage(info.img,midx-24,y,{scale:2}); } g.setFontLECO1976Regular22().setFontAlign(0, 0); var txt = info.text.toString().toUpperCase(); @@ -100,6 +105,11 @@ let clockInfoDraw = (itm, info, options) => { txt = l.slice(0,2).join("\n") + (l.length>2)?"...":""; } y = options.y+options.h-12; + if (settings.clkinfoborder) { + g.setColor(theme.bg) + g.drawString(txt, midx-2, y).drawString(txt, midx+2, y).drawString(txt, midx, y-2).drawString(txt, midx, y+2); + g.setColor(theme.fg); + } g.drawString(txt, midx, y); // draw the text }; @@ -134,7 +144,7 @@ Bangle.loadWidgets(); require("widget_utils").swipeOn(); // hide widgets, make them visible with a swipe background.fillRect(Bangle.appRect); // start off with completely clear background // background contrast bar -g.setColor(theme.fg).fillRect(0, h2 - 6, w, h3 + 5); +g.setColor(theme.fg).fillRect(0, h2 - 6, w, h3 + 6); draw(); -} +} \ No newline at end of file diff --git a/apps/pebblepp/metadata.json b/apps/pebblepp/metadata.json index eb74fda25..c2187483c 100644 --- a/apps/pebblepp/metadata.json +++ b/apps/pebblepp/metadata.json @@ -2,10 +2,10 @@ "id": "pebblepp", "name": "Pebble++ Clock", "shortName": "Pebble++", - "version": "0.09", - "description": "A pebble style clock (based on the 'Pebble Clock' app) but with two configurable ClockInfo items at the top", + "version": "0.10", + "description": "A Pebble style clock (based on the 'Pebble Clock' app) but with two configurable ClockInfo items at the top and custom backgrounds. Date/theme/borders be reconfigured using settings page.", "icon": "app.png", - "screenshots": [{"url":"screenshot.png"}], + "screenshots": [{"url":"screenshot.png"},{"url":"screenshot2.png"}], "type": "clock", "tags": "clock,clkinfo,clockbg", "supports": ["BANGLEJS2"], diff --git a/apps/pebblepp/screenshot2.png b/apps/pebblepp/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..6b53a017f2f4ee9cb4e19bb129f523456f994228 GIT binary patch literal 4060 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 literal 0 HcmV?d00001 diff --git a/apps/pebblepp/settings.js b/apps/pebblepp/settings.js index f477b9ab8..f2384577e 100644 --- a/apps/pebblepp/settings.js +++ b/apps/pebblepp/settings.js @@ -2,19 +2,13 @@ const SETTINGS_FILE = "pebblepp.json"; // Initialize with default settings... - let s = {'theme':'System', 'showlock':false} - + let settings = {'theme':'System', 'showdate':true, 'clkinfoborder':false} // ...and overwrite them with any saved values // This way saved values are preserved if a new version adds more settings const storage = require('Storage'); - let settings = storage.readJSON(SETTINGS_FILE, 1) || s; - const saved = settings || {}; - for (const key in saved) { - s[key] = saved[key] - } + settings = Object.assign(settings, storage.readJSON(SETTINGS_FILE, 1)||{}); function save() { - settings = s; storage.write(SETTINGS_FILE, settings); } @@ -24,13 +18,27 @@ '': { 'title': 'Pebble++ Clock' }, /*LANG*/'< Back': back, /*LANG*/'Theme': { - value: 0 | theme_options.indexOf(s.theme), + value: 0 | theme_options.indexOf(settings.theme), min: 0, max: theme_options.length - 1, format: v => theme_options[v], onchange: v => { - s.theme = theme_options[v]; + settings.theme = theme_options[v]; + save(); + } + }, + /*LANG*/'Show Date': { + value: !!settings.showdate, + onchange: v => { + settings.showdate = v; + save(); + } + }, + /*LANG*/'ClockInfo border': { + value: !!settings.clkinfoborder, + onchange: v => { + settings.clkinfoborder = v; save(); } } }); -}); +}) \ No newline at end of file