2023-11-01 05:59:56 +00:00
|
|
|
//load fonts
|
|
|
|
require("FontSinclair").add(Graphics);
|
|
|
|
require("FontTeletext5x9Ascii").add(Graphics);
|
|
|
|
|
|
|
|
//const
|
|
|
|
|
|
|
|
const numbers = {
|
|
|
|
"0": "Twelve",
|
|
|
|
"1": "One",
|
|
|
|
"2": "Two",
|
|
|
|
"3": "Three",
|
|
|
|
"4": "Four",
|
|
|
|
"5": "Five",
|
|
|
|
"6": "Six",
|
|
|
|
"7": "Seven",
|
|
|
|
"8": "Eight",
|
|
|
|
"9": "Nine",
|
|
|
|
"10": "Ten",
|
|
|
|
"11": "Eleven",
|
|
|
|
"12": "Twelve",
|
|
|
|
"13": "One",
|
|
|
|
"14": "Two",
|
|
|
|
"15": "Three",
|
|
|
|
"16": "Four",
|
|
|
|
"17": "Five",
|
|
|
|
"18": "Six",
|
|
|
|
"19": "Seven",
|
|
|
|
"20": "Eight",
|
|
|
|
"21": "Nine",
|
|
|
|
"22": "Ten",
|
|
|
|
"23": "Eleven",
|
|
|
|
"24": "Twelve",
|
|
|
|
};
|
|
|
|
|
2023-11-02 12:32:38 +00:00
|
|
|
const minutesByQuarterString = {
|
|
|
|
0: "O'Clock",
|
|
|
|
15: "Fifteen",
|
|
|
|
30: "Thirty",
|
|
|
|
45: "Fourty-Five"
|
|
|
|
};
|
|
|
|
|
2023-11-01 05:59:56 +00:00
|
|
|
const width = g.getWidth();
|
|
|
|
const height = g.getHeight();
|
|
|
|
let idTimeout = null;
|
|
|
|
|
|
|
|
const getNearestHour = (hours, minutes) => {
|
|
|
|
if (minutes > 49){
|
|
|
|
return hours + 1;
|
|
|
|
}
|
|
|
|
return hours;
|
|
|
|
};
|
|
|
|
|
2023-11-02 12:32:38 +00:00
|
|
|
const getApproximatePrefix = (minutes, minutesByQuarter) => {
|
|
|
|
if (minutes === minutesByQuarter){
|
2023-11-01 05:59:56 +00:00
|
|
|
return " exactly";
|
2023-11-02 12:32:38 +00:00
|
|
|
} else if (minutesByQuarter - minutes < -5){
|
|
|
|
return " after";
|
|
|
|
} else if (minutesByQuarter - minutes < 0){
|
|
|
|
return " just after";
|
|
|
|
} else if (minutesByQuarter - minutes > 5){
|
|
|
|
return " before";
|
|
|
|
} else {
|
|
|
|
return " nearly";
|
2023-11-01 05:59:56 +00:00
|
|
|
}
|
2023-11-02 12:32:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const getMinutesByQuarter = minutes => {
|
|
|
|
if (minutes < 10){
|
|
|
|
return 0;
|
|
|
|
} else if (minutes < 20) {
|
|
|
|
return 15;
|
|
|
|
} else if (minutes < 40){
|
|
|
|
return 30;
|
|
|
|
} else {
|
|
|
|
return 45;
|
2023-11-01 05:59:56 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const drawTime = () => {
|
|
|
|
//Grab time vars
|
|
|
|
var date = Date();
|
|
|
|
var hour = date.getHours();
|
|
|
|
var minutes = date.getMinutes();
|
2023-11-02 12:32:38 +00:00
|
|
|
var minutesByQuarter = getMinutesByQuarter(minutes);
|
2023-11-01 05:59:56 +00:00
|
|
|
|
|
|
|
//reset graphics
|
|
|
|
g.clear();
|
|
|
|
g.reset();
|
|
|
|
|
2023-11-02 12:32:38 +00:00
|
|
|
g.setBgColor(0,0,0);
|
|
|
|
g.clearRect(0, 0, width, height);
|
|
|
|
g.setFont("Vector", 22);
|
2023-11-01 05:59:56 +00:00
|
|
|
g.setColor(1,1,1);
|
2023-11-02 12:32:38 +00:00
|
|
|
g.drawString("It's" + getApproximatePrefix(minutes, minutesByQuarter), (width - g.stringWidth("It's" + getApproximatePrefix(minutes, minutesByQuarter)))/2, height * 0.25, false);
|
|
|
|
g.setFont("Vector", 30);
|
|
|
|
g.drawString(numbers[getNearestHour(hour, minutes)], (width - g.stringWidth(numbers[getNearestHour(hour, minutes)]))/2, height * 0.45, false);
|
|
|
|
g.setFont("Vector", 22);
|
|
|
|
g.drawString(minutesByQuarterString[minutesByQuarter], (width - g.stringWidth(minutesByQuarterString[minutesByQuarter]))/2, height * 0.7, false);
|
2023-11-01 05:59:56 +00:00
|
|
|
let d = Date();
|
|
|
|
let t = d.getSeconds()*1000 + d.getMilliseconds();
|
|
|
|
idTimeout = setTimeout(drawTime, 60000 - t);
|
|
|
|
};
|
|
|
|
|
|
|
|
g.clear();
|
|
|
|
drawTime();
|
|
|
|
|
|
|
|
Bangle.on('lcdPower', function(on){
|
|
|
|
if (on) {
|
|
|
|
drawTime();
|
|
|
|
} else {
|
|
|
|
if(idTimeout) {
|
|
|
|
clearTimeout(idTimeout);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
//var secondInterval = setInterval(draw, 1000);
|
|
|
|
// Stop updates when LCD is off, restart when on
|
|
|
|
//Bangle.on('lcdPower',on=>{
|
|
|
|
// if (secondInterval) clearInterval(secondInterval);
|
|
|
|
// secondInterval = undefined;
|
|
|
|
// if (on) {
|
|
|
|
// secondInterval = setInterval(draw, 1000);
|
|
|
|
// g.clear();
|
|
|
|
// draw(); // draw immediately
|
|
|
|
// }
|
|
|
|
//});
|
|
|
|
|
|
|
|
// Show launcher when button pressed
|
|
|
|
Bangle.setUI("clock");
|
|
|
|
Bangle.loadWidgets();
|
|
|
|
Bangle.drawWidgets();
|