mirror of https://github.com/espruino/BangleApps
186 lines
12 KiB
JavaScript
186 lines
12 KiB
JavaScript
Graphics.prototype.setFontAnton = function(scale) {
|
|
// 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//gAAAAAAAAAA//gAAAAAAAAAA//gAAAAAAADgA//gAAAAAAP/gA//gAAAAAH//gA//gAAAAB///gA//gAAAAP///gA//gAAAD////gA//gAAAf////gA//gAAB/////gA//gAAP/////gA//gAB//////gA//gAH//////gA//gA///////gA//gD///////gA//gf///////gA//h////////gA//n////////gA//////////gAA/////////AAAA////////wAAAA///////4AAAAA///////AAAAAA//////4AAAAAA//////AAAAAAA/////4AAAAAAA/////AAAAAAAA////8AAAAAAAA////gAAAAAAAA///+AAAAAAAAA///4AAAAAAAAA///AAAAAAAAAA//4AAAAAAAAAA/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//gB///wAAAAP//4H///+AAAA///8P////gAAB///+f////4AAD///+/////8AAH/////////+AAH//////////AAP//////////gAP//////////gAf//////////gAf//////////wAf//////////wAf//////////wA///////////wA//4D//wAB//4A//wB//gAA//4A//gA//gAAf/4A//gA//AAAf/4A//gA//gAAf/4A//wB//gAA//4A///P//8AH//4Af//////////wAf//////////wAf//////////wAf//////////wAf//////////gAP//////////gAP//////////AAH//////////AAD/////////+AAD///+/////8AAB///8f////wAAAf//4P////AAAAH//wD///8AAAAA/+AAf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//gAAAAAAAAB///+AA/+AAAAP////gA//wAAAf////wA//4AAB/////4A//8AAD/////8A//+AAD/////+A///AAH/////+A///AAP//////A///gAP//////A///gAf//////A///wAf//////A///wAf//////A///wAf//////A///wA///////AB//4A//4AD//AAP/4A//gAB//AAP/4A//gAA//AAP/4A//gAA/+AAP/4A//gAB/8AAP/4A//wAB/8AAf/4Af//////////wAf//////////wAf//////////wAf//////////wAf//////////wAP//////////gAP//////////gAH//////////AAH/////////+AAD/////////8AAB/////////4AAAf////////wAAAP////////AAAAB///////4AAAAAD/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAB/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("EiAnGicnJycnJycnEw=="), 78+(scale<<8)+(1<<16));
|
|
};
|
|
|
|
var SunCalc = require("suncalc"); // from modules folder
|
|
const LOCATION_FILE = "mylocation.json";
|
|
let location;
|
|
var sunRise = "--:--";
|
|
var sunSet = "--:--";
|
|
var sunIcons = "\0" + atob("DwyBAAAAAAAAAAgAOAD4A/gP+D/4//gAAAAA") + "\0" + atob("FQyDAAAAAAAAAAAAAAAABAAAAAAABAAIABAAAAABAAABAAAAAAABJAAAAABAAJJJIABAABAJJJJIBAAAAJJJJJIAAAAJJJJJJIAAJBJJJJJJBIAAJJJJJJIAAAAAAAAAAAAA") + "\0" + atob("DwyBAAAAAAAAA//j/4P+A/gD4AOAAgAAAAAA");
|
|
|
|
function loadLocation() {
|
|
location = require('Storage').readJSON(LOCATION_FILE, true) || {lat:51.5072,lon:0.1276,location:"London"};
|
|
}
|
|
|
|
function updateSunRiseSunSet(location) {
|
|
var times = SunCalc.getTimes(new Date(), location.lat, location.lon);
|
|
sunRise = require("locale").time(times.sunrise, 1);
|
|
sunSet = require("locale").time(times.sunset, 1);
|
|
}
|
|
|
|
var timerclk = require("timerclk.lib.js");
|
|
var settings = require('Storage').readJSON("timerclk.json", true) || {};
|
|
settings = Object.assign({
|
|
"timeFont":"Anton",
|
|
"timeFontSize":0,
|
|
"dateFont":"6x8",
|
|
"dateFontSize":2,
|
|
"dowFont":"6x8",
|
|
"dowFontSize":2,
|
|
"srssFont":"6x8",
|
|
"srssFontSize":2,
|
|
"specialFont":"6x8",
|
|
"specialFontSize":2,
|
|
"shortDate":true,
|
|
"showStopwatches":true,
|
|
"showTimers":true,
|
|
"showSrss":false,
|
|
}, settings.clock||{});
|
|
|
|
var stopwatches = [], timers = [];
|
|
if (settings.showStopwatches) {
|
|
stopwatches = require("Storage").readJSON("timerclk.stopwatch.json") || [];
|
|
stopwatches = stopwatches.filter(e=>e.start||e.time);
|
|
}
|
|
if (settings.showTimers) {
|
|
timers = require("Storage").readJSON("timerclk.timer.json") || [];
|
|
timers = timers.filter(e=>e.start||e.timeAdd);
|
|
}
|
|
|
|
// timeout used to update every minute
|
|
var drawTimeout;
|
|
var drawSpecialTimeout;
|
|
// border between time and date/dow
|
|
var dragBorder = g.getHeight()/2;
|
|
|
|
// schedule a draw for the next minute
|
|
function queueDraw(timeout, interval, func) {
|
|
if (timeout) clearTimeout(timeout);
|
|
timeout = setTimeout(function() {
|
|
timeout = undefined;
|
|
func();
|
|
}, interval - (Date.now() % interval));
|
|
}
|
|
|
|
function drawSpecial() {
|
|
var interval = 60000;
|
|
var stopwatch = 0, timer = 0, time;
|
|
var x = g.getWidth()/4;
|
|
g.setColor(g.theme.fg);
|
|
g.setFontAlign(0,0).setFont(settings.specialFont, settings.specialFontSize);
|
|
var y = Bangle.appRect.y + g.stringMetrics("00:00").height/2;
|
|
g.clearRect(Bangle.appRect.x, Bangle.appRect.y, Bangle.appRect.x2, Bangle.appRect.y+g.stringMetrics("00:00").height);
|
|
|
|
if (stopwatches.length) {
|
|
time = timerclk.getTime(stopwatches[stopwatch]);
|
|
g.drawString(timerclk.formatTime(time, true), x, y);
|
|
if (Math.floor(time/3600000) === 0) interval = 1000;
|
|
stopwatch++;
|
|
} else if (timers.length > 1) {
|
|
time = timers[timer].time - timerclk.getTime(timers[timer]);
|
|
g.drawString(timerclk.formatTime(time, true), x, y);
|
|
if (Math.floor(time/3600000) === 0) interval = 1000;
|
|
timer++;
|
|
}
|
|
x += g.getWidth()/2;
|
|
if (timers.length) {
|
|
time = timers[timer].time - timerclk.getTime(timers[timer]);
|
|
g.drawString(timerclk.formatTime(time, true), x, y);
|
|
if (Math.floor(time/3600000) === 0) interval = 1000;
|
|
} else if (stopwatches.length > 1) {
|
|
time = timerclk.getTime(stopwatches[stopwatch]);
|
|
g.drawString(timerclk.formatTime(time, true), x, y);
|
|
if (Math.floor(time/3600000) === 0) interval = 1000;
|
|
}
|
|
queueDraw(drawSpecialTimeout, interval, drawSpecial);
|
|
}
|
|
|
|
var drawCount=0;
|
|
|
|
function draw() {
|
|
if (drawCount++ % 60 == 0) {
|
|
updateSunRiseSunSet(location);
|
|
}
|
|
var x = g.getWidth()/2;
|
|
var y = g.getHeight()/2;
|
|
g.reset();
|
|
var date = new Date();
|
|
var timeStr = require("locale").time(date,1);
|
|
var dateStr = require("locale").date(date,settings.shortDate).toUpperCase();
|
|
var dowStr = require("locale").dow(date).toUpperCase();
|
|
var srssStr = sunRise + sunIcons + sunSet;
|
|
|
|
// draw time
|
|
if (settings.timeFont == "Anton") {
|
|
g.setFontAlign(0,0).setFont("Anton");
|
|
} else {
|
|
g.setFontAlign(0,0).setFont(settings.timeFont, settings.timeFontSize);
|
|
}
|
|
g.clearRect(Bangle.appRect.x, x-g.stringMetrics(timeStr).height/2, Bangle.appRect.x2, Bangle.appRect.y2); // clear the background
|
|
g.drawString(timeStr,x,y);
|
|
// draw date
|
|
y += g.stringMetrics(timeStr).height/2;
|
|
g.setFontAlign(0,0).setFont(settings.dateFont, settings.dateFontSize);
|
|
dragBorder = y;
|
|
y += g.stringMetrics(dateStr).height/2;
|
|
g.drawString(dateStr,x,y);
|
|
//draw day of week
|
|
y += g.stringMetrics(dateStr).height/2;
|
|
g.setFontAlign(0,0).setFont(settings.dowFont, settings.dowFontSize);
|
|
y += g.stringMetrics(dowStr).height/2;
|
|
g.drawString(dowStr,x,y);
|
|
if (settings.showSrss) {
|
|
// draw sun rise sun set
|
|
y += g.stringMetrics(dowStr).height/2;
|
|
g.setFontAlign(0,0).setFont(settings.srssFont, settings.srssFontSize);
|
|
y += g.stringMetrics(srssStr).height/2;
|
|
g.drawString(srssStr,x,y);
|
|
}
|
|
// queue draw in one minute
|
|
queueDraw(drawTimeout, 60000, draw);
|
|
}
|
|
|
|
if (process.env.HWVERSION==1) {
|
|
setWatch(()=>load("timerclk.stopwatch.js"), BTN4);
|
|
setWatch(()=>load("timerclk.timer.js"), BTN5);
|
|
setWatch(()=>load("timerclk.alarm.js"), BTN3);
|
|
setWatch(()=>load("timerclk.alarm.js"), BTN1);
|
|
} else {
|
|
var absY, lastX, lastY;
|
|
Bangle.on('drag', e=>{
|
|
if (!e.b) {
|
|
if (lastX > 50) { // right
|
|
if (absY < dragBorder) { // drag over time
|
|
load("timerclk.timer.js");
|
|
}else { // drag over date/dow
|
|
load("timerclk.alarm.js");
|
|
}
|
|
} else if (lastX < -50) { // left
|
|
if (absY < dragBorder) { // drag over time
|
|
load("timerclk.stopwatch.js");
|
|
}else { // drag over date/dow
|
|
load("timerclk.alarm.js");
|
|
}
|
|
} else if (lastY > 50) { // down
|
|
} else if (lastY < -50) { // up
|
|
}
|
|
lastX = 0;
|
|
lastY = 0;
|
|
} else {
|
|
lastX = lastX + e.dx;
|
|
lastY = lastY + e.dy;
|
|
absY = e.y;
|
|
}
|
|
});
|
|
}
|
|
|
|
Bangle.setUI("clock"); // Show launcher when middle button pressed
|
|
g.clear();
|
|
Bangle.loadWidgets();
|
|
Bangle.drawWidgets();
|
|
loadLocation();
|
|
draw();
|
|
if (stopwatches || timers) drawSpecial();
|