fixed incorrect hour drawn

master
charlestietjen 2023-11-02 09:04:37 -04:00
parent 117a7aa552
commit d2692aa36c
1 changed files with 34 additions and 22 deletions

View File

@ -41,23 +41,25 @@ const minutesByQuarterString = {
const width = g.getWidth(); const width = g.getWidth();
const height = g.getHeight(); const height = g.getHeight();
let idTimeout = null; let drawTimeout;
const getNearestHour = (hours, minutes) => { const getNearestHour = (hours, minutes) => {
if (minutes > 49){ if (minutes > 54) {
return hours + 1; return hours + 1;
} }
return hours; return hours;
}; };
const getApproximatePrefix = (minutes, minutesByQuarter) => { const getApproximatePrefix = (minutes, minutesByQuarter) => {
if (minutes === minutesByQuarter){ if (minutes === minutesByQuarter) {
return " exactly"; return " exactly";
} else if (minutesByQuarter - minutes < -5){ } else if (minutesByQuarter - minutes < -54) {
return " nearly";
} else if (minutesByQuarter - minutes < -5) {
return " after"; return " after";
} else if (minutesByQuarter - minutes < 0){ } else if (minutesByQuarter - minutes < 0) {
return " just after"; return " just after";
} else if (minutesByQuarter - minutes > 5){ } else if (minutesByQuarter - minutes > 5) {
return " before"; return " before";
} else { } else {
return " nearly"; return " nearly";
@ -65,51 +67,61 @@ const getApproximatePrefix = (minutes, minutesByQuarter) => {
}; };
const getMinutesByQuarter = minutes => { const getMinutesByQuarter = minutes => {
if (minutes < 10){ if (minutes < 10) {
return 0; return 0;
} else if (minutes < 20) { } else if (minutes < 20) {
return 15; return 15;
} else if (minutes < 40){ } else if (minutes < 40) {
return 30; return 30;
} else { } else if (minutes < 55) {
return 45; return 45;
} else {
return 0;
} }
}; };
// schedule a draw for the next minute
function queueDraw() {
if (drawTimeout) clearTimeout(drawTimeout);
drawTimeout = setTimeout(function () {
drawTimeout = undefined;
drawTime();
}, 60000 - (Date.now() % 60000));
}
const drawTime = () => { const drawTime = () => {
//Grab time vars //Grab time vars
var date = Date(); var date = Date();
var hour = date.getHours(); var hour = date.getHours();
var minutes = date.getMinutes(); var minutes = date.getMinutes();
var minutesByQuarter = getMinutesByQuarter(minutes); var minutesByQuarter = getMinutesByQuarter(minutes);
//reset graphics //reset graphics
g.clear(); g.clear();
g.reset(); g.reset();
//Build watch face //Build watch face
g.setBgColor(0,0,0); g.setBgColor(0, 0, 0);
g.clearRect(0, 0, width, height); g.clearRect(0, 0, width, height);
g.setFont("Vector", 22); g.setFont("Vector", 22);
g.setColor(1,1,1); g.setColor(1, 1, 1);
g.drawString("It's" + getApproximatePrefix(minutes, minutesByQuarter), (width - g.stringWidth("It's" + getApproximatePrefix(minutes, minutesByQuarter)))/2, height * 0.25, false); 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.setFont("Vector", 30);
g.drawString(numbers[getNearestHour(hour, minutes)], (width - g.stringWidth(numbers[getNearestHour(hour, minutes)]))/2, height * 0.45, false); g.drawString(numbers[getNearestHour(hour, minutes)], (width - g.stringWidth(numbers[getNearestHour(hour, minutes)])) / 2, height * 0.45, false);
g.setFont("Vector", 22); g.setFont("Vector", 22);
g.drawString(minutesByQuarterString[minutesByQuarter], (width - g.stringWidth(minutesByQuarterString[minutesByQuarter]))/2, height * 0.7, false); g.drawString(minutesByQuarterString[minutesByQuarter], (width - g.stringWidth(minutesByQuarterString[minutesByQuarter])) / 2, height * 0.7, false);
let d = Date();
let t = d.getSeconds()*1000 + d.getMilliseconds(); queueDraw();
idTimeout = setTimeout(drawTime, 60000 - t);
}; };
g.clear(); g.clear();
drawTime(); drawTime();
Bangle.on('lcdPower', function(on){ Bangle.on('lcdPower', function (on) {
if (on) { if (on) {
drawTime(); drawTime();
} else { } else {
if(idTimeout) { if (idTimeout) {
clearTimeout(idTimeout); clearTimeout(idTimeout);
} }
} }