From ff13a755802c1dd6a67478b022e28a8928207dfa Mon Sep 17 00:00:00 2001 From: Stergios Mekras Date: Tue, 15 Mar 2022 17:09:14 +0100 Subject: [PATCH] Add 3bit/4bit background choice --- apps/smclock/ChangeLog | 1 + apps/smclock/README.md | 4 +++- apps/smclock/app.js | 15 ++++++++++++++- apps/smclock/screenshot1.png | Bin 2399 -> 2134 bytes apps/smclock/settings.js | 1 + 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/apps/smclock/ChangeLog b/apps/smclock/ChangeLog index 0300d5ceb..f0b5c5bde 100644 --- a/apps/smclock/ChangeLog +++ b/apps/smclock/ChangeLog @@ -2,3 +2,4 @@ 0.02: Add battery level 0.03: Fix battery display when full 0.04: Add support for settings +0.05: Add ability to change background (3bit or 4bit) diff --git a/apps/smclock/README.md b/apps/smclock/README.md index 635292d0c..7a099f268 100644 --- a/apps/smclock/README.md +++ b/apps/smclock/README.md @@ -10,7 +10,9 @@ It shows battery level in the upper left corner, date information in the upper r **Analog Clock:** -**Human Readable Date:** When the setting is on, the date is shown in a more human-friendly format (e.g. "Oct 2"), otherwise the date is shown in a standard format (e.g. "02/10"). Default is off. +**Background:** When the setting is set as "3bit", a background with more accurate colors is chosen for the watchface. Otherwise, it uses a background following the 16-bit Mac Color Palette. + +**Date Format:** When the setting is set as "Long", the date is shown in a more human-friendly format (e.g. "Oct 2"), otherwise the date is shown in a standard format (e.g. "02/10"). Default is off. **Show Week Info:** When the setting is on, the weekday and week number are shown in the upper right box. When the setting is off, the full year is shown instead. Default is off. diff --git a/apps/smclock/app.js b/apps/smclock/app.js index 0ef886b04..297ddb894 100644 --- a/apps/smclock/app.js +++ b/apps/smclock/app.js @@ -1,5 +1,10 @@ const SETTINGSFILE = "smclock.json"; -const background = { +const image3bit = { + width : 176, height : 176, bpp : 3, + transparent : 1, + buffer : require("heatshrink").decompress(atob("/4A/AH4AC23btoCct/pkmSpICcIP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5Bp/4A/AH4AC/kAAH0/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5BpA=")) +}; +const image4bit = { width : 176, height : 176, bpp : 4, transparent : 1, buffer : require("heatshrink").decompress(atob("/4A/AH4Au1QAp1/2swApK/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K/5X/K+//AH4A/AF8AAH4AUK/5X/K/4A/K/5X/K/4A/K/5X/AH5X/K/5X/AH5X/K/5X/AH5X/K/4A/K/5X/K/4A/K/5X/K/4A/K/5X/AH5X/K/5X/AH5X/K/5X/AH5X/K/4A/K/5X/K/4A/K/5X/K/4A/K/5X/AH5X/K/5X/AH5X/K/5X/AH5X/K/4A/K/5X/K/4A/K/5X/K/4A/K/5X/AH5X/K/5X/AH5X/K/5X/AH5X/K/4A/K/5X/K/4A/K/5X/K/4A/K/5X/AH5X/K/5X/AH5X/K/5X/AH5X/K/4A/K/5X/K/4A/K/5X/K/AA==")) @@ -12,6 +17,7 @@ var batLevel = -1; var batColor = [0, 0, 0]; // settings variables +var backgroundImage; var dateFormat; var drawInterval; var pollInterval; @@ -25,6 +31,7 @@ function loadSettings() { function def(value, def) {return value !== undefined ? value : def;} var settings = require("Storage").readJSON(SETTINGSFILE, true) || {}; + backgroundImage = def(settings.backgroundImage, "3bit"); dateFormat = def(settings.dateFormat, "Short"); drawInterval = def(settings.drawInterval, 10); pollInterval = def(settings.pollInterval, 60); @@ -75,6 +82,12 @@ function getBatteryColor(level) { } function draw() { + var background; + if (backgroundImage == "3bit") { + background = image3bit; + } else { + background = image4bit; + } g.drawImage(background); const color = getBatteryColor(batLevel); diff --git a/apps/smclock/screenshot1.png b/apps/smclock/screenshot1.png index 70e28bac9a37874a76a86e903f557c7c7b8f6ce2..1a020c9ca825f3f0772854801037aa37d3e036bf 100644 GIT binary patch literal 2134 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 T#+MxJf`H4(&c&8(O-%U@oPSX3 diff --git a/apps/smclock/settings.js b/apps/smclock/settings.js index a6c7d1b98..ee4a35a26 100644 --- a/apps/smclock/settings.js +++ b/apps/smclock/settings.js @@ -52,6 +52,7 @@ writeSettings(); }, }, + "Background": stringInSettings("backgroundImage", ["3bit", "4bit"]), Date: stringInSettings("dateFormat", ["Long", "Short"]), "Draw Interval": { value: settings.drawInterval,