2021-12-22 20:18:55 +00:00
|
|
|
// Clock with large digits using the "Anton" bold font
|
|
|
|
|
2022-01-12 22:57:44 +00:00
|
|
|
const SETTINGSFILE = "antonclk.json";
|
2021-12-22 20:18:55 +00:00
|
|
|
|
2021-09-23 10:42:58 +00:00
|
|
|
Graphics.prototype.setFontAnton = function(scale) {
|
2022-01-05 21:21:55 +00:00
|
|
|
// Actual height 69 (68 - 0)
|
|
|
|
g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAA/gAAAAAAAAAAP/gAAAAAAAAAH//gAAAAAAAAB///gAAAAAAAAf///gAAAAAAAP////gAAAAAAD/////gAAAAAA//////gAAAAAP//////gAAAAH///////gAAAB////////gAAAf////////gAAP/////////gAD//////////AA//////////gAA/////////4AAA////////+AAAA////////gAAAA///////wAAAAA//////8AAAAAA//////AAAAAAA/////gAAAAAAA////4AAAAAAAA///+AAAAAAAAA///gAAAAAAAAA//wAAAAAAAAAA/8AAAAAAAAAAA/AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////AAAAAB///////8AAAAH////////AAAAf////////wAAA/////////4AAB/////////8AAD/////////+AAH//////////AAP//////////gAP//////////gAP//////////gAf//////////wAf//////////wAf//////////wAf//////////wA//8AAAAAB//4A//wAAAAAAf/4A//gAAAAAAP/4A//gAAAAAAP/4A//gAAAAAAP/4A//wAAAAAAf/4A///////////4Af//////////wAf//////////wAf//////////wAf//////////wAP//////////gAP//////////gAH//////////AAH//////////AAD/////////+AAB/////////8AAA/////////4AAAP////////gAAAD///////+AAAAAf//////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAP/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/AAAAAAAAAAA//AAAAAAAAAAA/+AAAAAAAAAAB/8AAAAAAAAAAD//////////gAH//////////gAP//////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4AAAAB/gAAD//4AAAAf/gAAP//4AAAB//gAA///4AAAH//gAB///4AAAf//gAD///4AAA///gAH///4AAD///gAP///4AAH///gAP///4AAP///gAf///4AAf///gAf///4AB////gAf///4AD////gA////4AH////gA////4Af////gA////4A/////gA//wAAB/////gA//gAAH/////gA//gAAP/////gA//gAA///8//gA//gAD///w//gA//wA////g//gA////////A//gA///////8A//gA///////4A//gAf//////wA//gAf//////gA//gAf/////+AA//gAP/////8AA//gAP/////4AA//gAH/////gAA//gAD/////AAA//gAB////8AAA//gAA////wAAA//gAAP///AAAA//gAAD//8AAAA//gAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/+AAAAAD/wAAB//8AAAAP/wAAB///AAAA//wAAB///wAAB//wAAB///4AAD//wAAB///8AAH//wAAB///+AAP//wAAB///+AAP//wAAB////AAf//wAAB////AAf//wAAB////gAf//wAAB////gA///wAAB////gA///wAAB////gA///w//AAf//wA//4A//AAA//wA//gA//AAAf/wA//gB//gAAf/wA//gB//gAAf/wA//gD//wAA//wA//wH//8AB//wA///////////gA///////////gA///////////gA///////////gAf//////////AAf//////////AAP//////////AAP/////////+AAH/////////8AAH///+/////4AAD///+f////wAAA///8P////gAAAf//4H///+AAAAH//gB///wAAAAAP4AAH/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAA//wAAAAAAAAAP//wAAAAAAAAB///wAAAAAAAAf///wAAAAAAAH////wAAAAAAA/////wAAAAAAP/////wAAAAAB//////wAAAAAf//////wAAAAH///////wAAAA////////wAAAP////////wAAA///////H/wAAA//////wH/wAAA/////8AH/wAAA/////AAH/wAAA////gAAH/wAAA///4AAAH/wAAA//+AAAAH/wAAA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gAAAAAAAAH/4AAAAAAAAAAH/wAAAAAAAAAAH/wAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//8AAA/////+B///AAA/////+B///wAA/////+B///4AA/////+B///8AA/////+B///8AA/////+B///+AA/////+B////AA/////+B////AA/////+B////AA/////+B////gA/////+B////gA/////+B////gA/////+A////gA//gP/gAAB//wA//gf/AAAA//wA//gf/AAAAf/wA//g//AAAAf/wA//g//AAAA//wA//g//gAAA//wA//g//+AAP//wA//g////////gA//g////////gA//g////////gA//g////////gA//g////////AA//gf///////AA//gf//////+AA//gP//////+AA//gH//////8AA//gD//////4AA//gB//////wAA//gA//////AAAAAAAH////8AAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////gAAAAB///////+AAAAH////////gAAAf////////4AAB/////////8AAD/////////+AAH//////////AAH//////////gAP//////////gAP//////////gAf//////////wAf//////////wAf//////////wAf//////////wAf//////////4A//wAD/4AAf/4A//gAH/wAAP/4A//gAH/wAAP/4A//gAP/wAAP/4A//gAP/4AAf/4A//wAP/+AD//4A///wP//////4Af//4P//////wAf//4P//////wAf//4P//////wAf//4P//////wAP//4P//////gAP//4H//////gAH//4H//////AAH//4D/////+AAD//4D/////8AAB//4B/////4AAA//4A/////wAAAP/4AP////AAAAB/4AD///4AAAAAAAAAH/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//AAAAAAAAAAA//
|
|
|
|
};
|
|
|
|
|
|
|
|
Graphics.prototype.setFontAntonSmall = function(scale) {
|
|
|
|
// Actual height 53 (52 - 0)
|
|
|
|
g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAf8AAAAAAAAf8AAAAAAAAf8AAAAAAAAf8AAAAAAAAf8AAAAAAAAf8AAAAAAAAf8AAAAAAAAf8AAAAAAAAf8AAAAAAAAf8AAAAAAAAAAAAAAAAAAAAMAAAAAAAAD8AAAAAAAA/8AAAAAAAf/8AAAAAAH//8AAAAAB///8AAAAA////8AAAAP////8AAAD/////8AAB//////8AAf//////8AH///////4A///////+AA///////AAA//////wAAA/////8AAAA////+AAAAA////gAAAAA///4AAAAAA//8AAAAAAA//AAAAAAAA/wAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/////wAAA//////8AAB//////+AAH///////gAH///////gAP///////wAf///////4Af///////4A////////8A////////8A////////8A//AAAAD/8A/8AAAAA/8A/8AAAAA/8A/8AAAAA/8A/+AAAAB/8A////////8A////////8A////////8Af///////4Af///////4AP///////wAP///////wAH///////gAD///////AAA//////8AAAP/////wAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAA/4AAAAAAAA/4AAAAAAAB/wAAAAAAAB/wAAAAAAAD/wAAAAAAAD/gAAAAAAAH///////8AP///////8A////////8A////////8A////////8A////////8A////////8A////////8A////////8A////////8A////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4AAAP8AA//4AAA/8AB//4AAH/8AH//4AAP/8AP//4AA//8AP//4AB//8Af//4AD//8Af//4AP//8A///4Af//8A///4A///8A///4D///8A//AAH///8A/8AAP///8A/8AA//+/8A/8AD//8/8A/+Af//w/8A//////g/8A/////+A/8A/////8A/8Af////4A/8Af////wA/8AP////AA/8AP///+AA/8AH///8AA/8AD///wAA/8AA///AAA/8AAP/4AAA/8AAAAAAAAAAAAAAAAAAAAAAH4AAf/gAAA/4AAf/8AAD/4AAf//AAH/4AAf//gAP/4AAf//wAP/4AAf//wAf/4AAf//4Af/4AAf//4A//4AAf//8A//4AAf//8A//4AAP//8A//A/8AB/8A/8A/8AA/8A/8B/8AA/8A/8B/8AA/8A/+D//AB/8A////////8A////////8A////////8Af///////4Af///////4Af///////wAP///////gAH//9////gAD//4///+AAB//wf//4AAAP/AH//gAAAAAAAAAAAAAAAAAAAAAAAAAAAH/wAAAAAAB//wAAAAAAP//wAAAAAD///wAAAAA////wAAAAH////wAAAB/////wAAAf/////wAAD//////wAA///////wAA/////h/wAA////wB/wAA///8AB/wAA///AAB/wAA//gAAB/wAA////////8A////////8A////////8A////////8A////////8A////////8A////////8A////////8A////////8A////////8A////////8AAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4AA////4P/+AA////4P//AA////4P//gA////4P//wA////4P//wA////4P//4A////4P//4A////4P//8A////4P//8A////4P//8A/8H/AAB/8A/8H+AAA/8A/8P+AAA/8A/8P+AAA/8A/8P/gAD/8A/8P/////8A/8P/////8A/8P/////8A/8P/////4A/8H/////4A/8H/////wA/8D/////wA/8B/////gA/8A////+AA/8AP///4AAAAAB///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////wAAAf/////8AAB///////AAH///////gAP///////wAP///////wAf///////4Af///////4A////////8A////////8A////////8A/+AH/AB/8A/8AP+AA/8A/4Af+AA/8A/8Af+AA/8A/8Af/gH/8A//4f////8A//4f////8A//4f////8Af/4f////4Af/4f////4AP/4P////wAP/4P////gAH/4H////AAD/4D///+AAB/4B///4AAAP4AP//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8AAAAAAAA/8AAAAAAAA/8AAAAAB8A/8AAAAB/8A/8AAAAf/8A/8AAAH//8A/8AAA///8A/8AAH///8A/8AA////8A/8AD////8A/8Af////8A/8B/////8A/8P/////8A/8//////8A////////AA///////AAA//////gAAA/////4AAAA/////AAAAA////4AAAAA////AAAAAA///8AAAAAA///gAAAAAA//+AAAAAAA//wAAAAAAA/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/gD//gAAA//4P//8AAD//8f///AAH//+////gAH///////wAP///////4AP///////8Af///////8Af///////+Af///////+A////////+A//B//AB/+A/+A/+AA/+A/8Af+AA/+A/+Af+AA/+A//A//AB/+A////////+Af///////+Af///////+Af///////8Af///////8AP///////4AH///////4AH//+////wAD//+////AAA//4P//+AAAP/gH//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//gAfgAAA///8A/8AAB///+A//AAH////A//gAH////g//wAP////g//wAf////w//4Af////w//4A/////w//8A/////w//8A/////w//8A//gP/wA/8A/8AD/wA/8A/8AD/wAf8A/8AD/gA/8A/+AH/AB/8A////////8A////////8A////////8Af///////4Af///////4Af///////wAP///////wAH///////gAD//////+AAA//////4AAAP/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AA/4AAAAP+AA/4AAAAP+AA/4AAAAP+AA/4AAAAP+AA/4AAAAP+AA/4AAAAP+AA/4AAAAP+AA/4AAAAP+AA/4AAAAP+AA/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DhgeFB4eHh4eHh4eDw=="), 60 + (scale << 8) + (1 << 16));
|
2021-12-22 20:18:55 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// variables defined from settings
|
2022-01-05 21:21:55 +00:00
|
|
|
var secondsMode;
|
2021-12-25 20:55:23 +00:00
|
|
|
var secondsColoured;
|
2022-01-05 21:21:55 +00:00
|
|
|
var secondsWithColon;
|
|
|
|
var dateOnMain;
|
2021-12-25 20:55:23 +00:00
|
|
|
var dateOnSecs;
|
2021-12-22 20:18:55 +00:00
|
|
|
var weekDay;
|
2022-01-09 23:11:24 +00:00
|
|
|
var calWeek;
|
2021-12-22 20:18:55 +00:00
|
|
|
var upperCase;
|
2021-12-26 18:42:04 +00:00
|
|
|
var vectorFont;
|
2021-09-23 10:42:58 +00:00
|
|
|
|
2021-12-22 20:18:55 +00:00
|
|
|
// dynamic variables
|
2021-09-23 10:42:58 +00:00
|
|
|
var drawTimeout;
|
2021-12-25 20:55:23 +00:00
|
|
|
var queueMillis = 1000;
|
|
|
|
var secondsScreen = true;
|
2021-12-22 20:18:55 +00:00
|
|
|
|
2022-01-12 22:57:44 +00:00
|
|
|
var isBangle1 = (process.env.HWVERSION == 1);
|
2021-12-22 20:18:55 +00:00
|
|
|
|
2022-01-09 23:11:24 +00:00
|
|
|
//For development purposes
|
|
|
|
/*
|
2021-12-22 20:18:55 +00:00
|
|
|
require('Storage').writeJSON(SETTINGSFILE, {
|
2022-01-09 23:11:24 +00:00
|
|
|
secondsMode: "Unlocked", // "Never", "Unlocked", "Always"
|
2021-12-25 20:55:23 +00:00
|
|
|
secondsColoured: true,
|
2022-01-05 21:21:55 +00:00
|
|
|
secondsWithColon: true,
|
|
|
|
dateOnMain: "Long", // "Short", "Long", "ISO8601"
|
|
|
|
dateOnSecs: "Year", // "No", "Year", "Weekday", LEGACY: true/false
|
2021-12-22 20:18:55 +00:00
|
|
|
weekDay: true,
|
2022-01-09 23:11:24 +00:00
|
|
|
calWeek: true,
|
2022-01-05 21:21:55 +00:00
|
|
|
upperCase: true,
|
|
|
|
vectorFont: true,
|
2021-12-22 20:18:55 +00:00
|
|
|
});
|
2022-01-09 23:11:24 +00:00
|
|
|
*/
|
2021-12-22 20:18:55 +00:00
|
|
|
|
2022-01-09 23:11:24 +00:00
|
|
|
// OR (also for development purposes)
|
|
|
|
/*
|
2021-12-25 20:55:23 +00:00
|
|
|
require('Storage').erase(SETTINGSFILE);
|
2022-01-09 23:11:24 +00:00
|
|
|
*/
|
2021-12-25 20:55:23 +00:00
|
|
|
|
|
|
|
// Load settings
|
2021-12-22 20:18:55 +00:00
|
|
|
function loadSettings() {
|
2022-01-12 22:57:44 +00:00
|
|
|
// Helper function default setting
|
|
|
|
function def (value, def) {return value !== undefined ? value : def;}
|
|
|
|
|
2021-12-22 20:18:55 +00:00
|
|
|
var settings = require('Storage').readJSON(SETTINGSFILE, true) || {};
|
2022-01-05 21:21:55 +00:00
|
|
|
secondsMode = def(settings.secondsMode, "Never");
|
|
|
|
secondsColoured = def(settings.secondsColoured, true);
|
|
|
|
secondsWithColon = def(settings.secondsWithColon, true);
|
|
|
|
dateOnMain = def(settings.dateOnMain, "Long");
|
|
|
|
dateOnSecs = def(settings.dateOnSecs, "Year");
|
2021-12-25 20:55:23 +00:00
|
|
|
weekDay = def(settings.weekDay, true);
|
2022-01-09 23:11:24 +00:00
|
|
|
calWeek = def(settings.calWeek, false);
|
2021-12-25 20:55:23 +00:00
|
|
|
upperCase = def(settings.upperCase, true);
|
2021-12-26 18:42:04 +00:00
|
|
|
vectorFont = def(settings.vectorFont, false);
|
2022-01-05 21:21:55 +00:00
|
|
|
|
|
|
|
// Legacy
|
|
|
|
if (dateOnSecs === true)
|
|
|
|
dateOnSecs = "Year";
|
|
|
|
if (dateOnSecs === false)
|
|
|
|
dateOnSecs = "No";
|
2021-12-22 20:18:55 +00:00
|
|
|
}
|
2021-09-23 10:42:58 +00:00
|
|
|
|
2021-12-25 20:55:23 +00:00
|
|
|
// schedule a draw for the next second or minute
|
2021-09-23 10:42:58 +00:00
|
|
|
function queueDraw() {
|
|
|
|
if (drawTimeout) clearTimeout(drawTimeout);
|
|
|
|
drawTimeout = setTimeout(function() {
|
|
|
|
drawTimeout = undefined;
|
|
|
|
draw();
|
2021-12-22 20:18:55 +00:00
|
|
|
}, queueMillis - (Date.now() % queueMillis));
|
2021-09-23 10:42:58 +00:00
|
|
|
}
|
|
|
|
|
2021-12-22 20:18:55 +00:00
|
|
|
function updateState() {
|
|
|
|
if (Bangle.isLCDOn()) {
|
2022-01-05 21:21:55 +00:00
|
|
|
if ((secondsMode === "Unlocked" && !Bangle.isLocked()) || secondsMode === "Always") {
|
2021-12-25 20:55:23 +00:00
|
|
|
secondsScreen = true;
|
|
|
|
queueMillis = 1000;
|
2021-12-22 20:18:55 +00:00
|
|
|
} else {
|
2021-12-25 20:55:23 +00:00
|
|
|
secondsScreen = false;
|
|
|
|
queueMillis = 60000;
|
2021-12-22 20:18:55 +00:00
|
|
|
}
|
|
|
|
draw(); // draw immediately, queue redraw
|
|
|
|
} else { // stop draw timer
|
|
|
|
if (drawTimeout) clearTimeout(drawTimeout);
|
|
|
|
drawTimeout = undefined;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function isoStr(date) {
|
2022-04-02 09:52:53 +00:00
|
|
|
return date.getFullYear() + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + ("0" + date.getDate()).slice(-2);
|
2021-12-22 20:18:55 +00:00
|
|
|
}
|
|
|
|
|
2022-01-12 22:57:44 +00:00
|
|
|
var calWeekBuffer = [false,false,false]; //buffer tz, date, week no (once calculated until other tz or date is requested)
|
2022-01-09 23:11:24 +00:00
|
|
|
function ISO8601calWeek(date) { //copied from: https://gist.github.com/IamSilviu/5899269#gistcomment-3035480
|
2022-01-12 22:57:44 +00:00
|
|
|
dateNoTime = date; dateNoTime.setHours(0,0,0,0);
|
|
|
|
if (calWeekBuffer[0] === date.getTimezoneOffset() && calWeekBuffer[1] === dateNoTime) return calWeekBuffer[2];
|
|
|
|
calWeekBuffer[0] = date.getTimezoneOffset();
|
|
|
|
calWeekBuffer[1] = dateNoTime;
|
2022-01-09 23:11:24 +00:00
|
|
|
var tdt = new Date(date.valueOf());
|
|
|
|
var dayn = (date.getDay() + 6) % 7;
|
|
|
|
tdt.setDate(tdt.getDate() - dayn + 3);
|
|
|
|
var firstThursday = tdt.valueOf();
|
|
|
|
tdt.setMonth(0, 1);
|
|
|
|
if (tdt.getDay() !== 4) {
|
|
|
|
tdt.setMonth(0, 1 + ((4 - tdt.getDay()) + 7) % 7);
|
|
|
|
}
|
2022-01-12 22:57:44 +00:00
|
|
|
calWeekBuffer[2] = 1 + Math.ceil((firstThursday - tdt) / 604800000);
|
|
|
|
return calWeekBuffer[2];
|
2022-01-09 23:11:24 +00:00
|
|
|
}
|
|
|
|
|
2021-12-22 20:18:55 +00:00
|
|
|
function doColor() {
|
2021-12-25 20:55:23 +00:00
|
|
|
return !isBangle1 && !Bangle.isLocked() && secondsColoured;
|
2021-12-22 20:18:55 +00:00
|
|
|
}
|
2021-09-23 10:42:58 +00:00
|
|
|
|
2021-12-26 18:42:04 +00:00
|
|
|
// Actually draw the watch face
|
2021-09-23 10:42:58 +00:00
|
|
|
function draw() {
|
2021-12-25 20:55:23 +00:00
|
|
|
var x = g.getWidth() / 2;
|
2022-01-05 21:21:55 +00:00
|
|
|
var y = g.getHeight() / 2 - (secondsMode !== "Never" ? 24 : (vectorFont ? 12 : 0));
|
2021-10-06 09:15:16 +00:00
|
|
|
g.reset();
|
2022-01-05 21:21:55 +00:00
|
|
|
/* This is to mark the widget areas during development.
|
|
|
|
g.setColor("#888")
|
|
|
|
.fillRect(0, 0, g.getWidth(), 23)
|
|
|
|
.fillRect(0, g.getHeight() - 23, g.getWidth(), g.getHeight()).reset();
|
|
|
|
/* */
|
|
|
|
g.clearRect(0, 24, g.getWidth(), g.getHeight() - 24); // clear whole background (w/o widgets)
|
2021-12-26 18:42:04 +00:00
|
|
|
var date = new Date(); // Actually the current date, this one is shown
|
|
|
|
var timeStr = require("locale").time(date, 1); // Hour and minute
|
|
|
|
g.setFontAlign(0, 0).setFont("Anton").drawString(timeStr, x, y); // draw time
|
2021-12-25 20:55:23 +00:00
|
|
|
if (secondsScreen) {
|
2022-01-05 21:21:55 +00:00
|
|
|
y += 65;
|
2022-04-02 09:51:59 +00:00
|
|
|
var secStr = (secondsWithColon ? ":" : "") + ("0" + date.getSeconds()).slice(-2);
|
2021-12-22 20:18:55 +00:00
|
|
|
if (doColor())
|
2021-12-25 20:55:23 +00:00
|
|
|
g.setColor(0, 0, 1);
|
2022-01-05 21:21:55 +00:00
|
|
|
g.setFont("AntonSmall");
|
|
|
|
if (dateOnSecs !== "No") { // A bit of a complex drawing with seconds on the right and date on the left
|
2021-12-26 18:42:04 +00:00
|
|
|
g.setFontAlign(1, 0).drawString(secStr, g.getWidth() - (isBangle1 ? 32 : 2), y); // seconds
|
2022-01-05 21:21:55 +00:00
|
|
|
y -= (vectorFont ? 15 : 13);
|
|
|
|
x = g.getWidth() / 4 + (isBangle1 ? 12 : 4) + (secondsWithColon ? 0 : g.stringWidth(":") / 2);
|
|
|
|
var dateStr2 = (dateOnMain === "ISO8601" ? isoStr(date) : require("locale").date(date, 1));
|
2021-12-25 20:55:23 +00:00
|
|
|
var year;
|
|
|
|
var md;
|
|
|
|
var yearfirst;
|
2021-12-26 18:42:04 +00:00
|
|
|
if (dateStr2.match(/\d\d\d\d$/)) { // formatted date ends with year
|
2022-01-05 21:21:55 +00:00
|
|
|
year = (dateOnSecs === "Year" ? dateStr2.slice(-4) : require("locale").dow(date, 1));
|
2021-12-25 20:55:23 +00:00
|
|
|
md = dateStr2.slice(0, -4);
|
2021-12-26 18:42:04 +00:00
|
|
|
if (!md.endsWith(".")) // keep separator before the year only if it is a dot (31.12. but 31/12)
|
2021-12-25 20:55:23 +00:00
|
|
|
md = md.slice(0, -1);
|
|
|
|
yearfirst = false;
|
2021-12-26 18:42:04 +00:00
|
|
|
} else { // formatted date begins with year
|
|
|
|
if (!dateStr2.match(/^\d\d\d\d/)) // if year position cannot be detected...
|
|
|
|
dateStr2 = isoStr(date); // ...use ISO date format instead
|
2022-01-05 21:21:55 +00:00
|
|
|
year = (dateOnSecs === "Year" ? dateStr2.slice(0, 4) : require("locale").dow(date, 1));
|
2021-12-26 18:42:04 +00:00
|
|
|
md = dateStr2.slice(5); // never keep separator directly after year
|
2021-12-25 20:55:23 +00:00
|
|
|
yearfirst = true;
|
|
|
|
}
|
2022-01-05 21:21:55 +00:00
|
|
|
if (dateOnSecs === "Weekday" && upperCase)
|
|
|
|
year = year.toUpperCase();
|
2021-12-26 18:42:04 +00:00
|
|
|
g.setFontAlign(0, 0);
|
|
|
|
if (vectorFont)
|
|
|
|
g.setFont("Vector", 24);
|
|
|
|
else
|
|
|
|
g.setFont("6x8", 2);
|
2021-12-25 20:55:23 +00:00
|
|
|
if (doColor())
|
|
|
|
g.setColor(1, 0, 0);
|
2021-12-26 18:42:04 +00:00
|
|
|
g.drawString(md, x, (yearfirst ? y + (vectorFont ? 26 : 16) : y));
|
|
|
|
g.drawString(year, x, (yearfirst ? y : y + (vectorFont ? 26 : 16)));
|
2021-12-25 20:55:23 +00:00
|
|
|
} else {
|
2021-12-26 18:42:04 +00:00
|
|
|
g.setFontAlign(0, 0).drawString(secStr, x, y); // Just the seconds centered
|
2021-12-22 20:18:55 +00:00
|
|
|
}
|
2021-12-26 18:42:04 +00:00
|
|
|
} else { // No seconds screen: Show date and optionally day of week
|
2022-01-05 21:21:55 +00:00
|
|
|
y += (vectorFont ? 50 : (secondsMode !== "Never") ? 52 : 40);
|
|
|
|
var dateStr = (dateOnMain === "ISO8601" ? isoStr(date) : require("locale").date(date, (dateOnMain === "Long" ? 0 : 1)));
|
2021-12-22 20:18:55 +00:00
|
|
|
if (upperCase)
|
2021-12-25 20:55:23 +00:00
|
|
|
dateStr = dateStr.toUpperCase();
|
2021-12-26 18:42:04 +00:00
|
|
|
g.setFontAlign(0, 0);
|
|
|
|
if (vectorFont)
|
|
|
|
g.setFont("Vector", 24);
|
|
|
|
else
|
|
|
|
g.setFont("6x8", 2);
|
2021-12-25 20:55:23 +00:00
|
|
|
g.drawString(dateStr, x, y);
|
2022-01-12 22:57:44 +00:00
|
|
|
if (calWeek || weekDay) {
|
|
|
|
var dowcwStr = "";
|
2022-01-09 23:11:24 +00:00
|
|
|
if (calWeek)
|
2022-04-02 09:51:59 +00:00
|
|
|
dowcwStr = " #" + ("0" + ISO8601calWeek(date)).slice(-2);
|
2022-01-12 22:57:44 +00:00
|
|
|
if (weekDay)
|
|
|
|
dowcwStr = require("locale").dow(date, calWeek ? 1 : 0) + dowcwStr; //weekDay e.g. Monday or weekDayShort #<calWeek> e.g. Mon #01
|
|
|
|
else //week #01
|
|
|
|
dowcwStr = /*LANG*/"week" + dowcwStr;
|
2021-12-22 20:18:55 +00:00
|
|
|
if (upperCase)
|
2022-01-12 22:57:44 +00:00
|
|
|
dowcwStr = dowcwStr.toUpperCase();
|
|
|
|
g.drawString(dowcwStr, x, y + (vectorFont ? 26 : 16));
|
2021-12-22 20:18:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// queue next draw
|
2021-10-06 09:15:16 +00:00
|
|
|
queueDraw();
|
2021-09-23 10:42:58 +00:00
|
|
|
}
|
|
|
|
|
2021-12-22 20:18:55 +00:00
|
|
|
// Init the settings of the app
|
|
|
|
loadSettings();
|
2021-09-23 10:42:58 +00:00
|
|
|
// Clear the screen once, at startup
|
|
|
|
g.clear();
|
2021-12-22 20:18:55 +00:00
|
|
|
// Set dynamic state and perform initial drawing
|
|
|
|
updateState();
|
|
|
|
// Register hooks for LCD on/off event and screen lock on/off event
|
2021-12-25 20:55:23 +00:00
|
|
|
Bangle.on('lcdPower', on => {
|
|
|
|
updateState();
|
|
|
|
});
|
|
|
|
Bangle.on('lock', on => {
|
|
|
|
updateState();
|
|
|
|
});
|
2021-10-06 09:15:16 +00:00
|
|
|
// Show launcher when middle button pressed
|
|
|
|
Bangle.setUI("clock");
|
2021-09-23 10:42:58 +00:00
|
|
|
// Load widgets
|
|
|
|
Bangle.loadWidgets();
|
|
|
|
Bangle.drawWidgets();
|
2021-12-22 20:18:55 +00:00
|
|
|
|
2021-12-26 18:42:04 +00:00
|
|
|
// end of file
|