From d2692aa36c55214d51e9f921c3b8e9d68375b1ad Mon Sep 17 00:00:00 2001 From: charlestietjen Date: Thu, 2 Nov 2023 09:04:37 -0400 Subject: [PATCH] fixed incorrect hour drawn --- apps/approxclock/app.js | 56 +++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/apps/approxclock/app.js b/apps/approxclock/app.js index 4fdabc316..fd7730936 100644 --- a/apps/approxclock/app.js +++ b/apps/approxclock/app.js @@ -41,23 +41,25 @@ const minutesByQuarterString = { const width = g.getWidth(); const height = g.getHeight(); -let idTimeout = null; +let drawTimeout; const getNearestHour = (hours, minutes) => { - if (minutes > 49){ + if (minutes > 54) { return hours + 1; } return hours; }; const getApproximatePrefix = (minutes, minutesByQuarter) => { - if (minutes === minutesByQuarter){ + if (minutes === minutesByQuarter) { return " exactly"; - } else if (minutesByQuarter - minutes < -5){ + } else if (minutesByQuarter - minutes < -54) { + return " nearly"; + } else if (minutesByQuarter - minutes < -5) { return " after"; - } else if (minutesByQuarter - minutes < 0){ - return " just after"; - } else if (minutesByQuarter - minutes > 5){ + } else if (minutesByQuarter - minutes < 0) { + return " just after"; + } else if (minutesByQuarter - minutes > 5) { return " before"; } else { return " nearly"; @@ -65,51 +67,61 @@ const getApproximatePrefix = (minutes, minutesByQuarter) => { }; const getMinutesByQuarter = minutes => { - if (minutes < 10){ + if (minutes < 10) { return 0; } else if (minutes < 20) { return 15; - } else if (minutes < 40){ + } else if (minutes < 40) { return 30; - } else { + } else if (minutes < 55) { 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 = () => { //Grab time vars var date = Date(); var hour = date.getHours(); var minutes = date.getMinutes(); var minutesByQuarter = getMinutesByQuarter(minutes); - + //reset graphics g.clear(); g.reset(); - + //Build watch face - g.setBgColor(0,0,0); + g.setBgColor(0, 0, 0); g.clearRect(0, 0, width, height); g.setFont("Vector", 22); - 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.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.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.drawString(minutesByQuarterString[minutesByQuarter], (width - g.stringWidth(minutesByQuarterString[minutesByQuarter]))/2, height * 0.7, false); - let d = Date(); - let t = d.getSeconds()*1000 + d.getMilliseconds(); - idTimeout = setTimeout(drawTime, 60000 - t); + g.drawString(minutesByQuarterString[minutesByQuarter], (width - g.stringWidth(minutesByQuarterString[minutesByQuarter])) / 2, height * 0.7, false); + + queueDraw(); }; g.clear(); drawTime(); -Bangle.on('lcdPower', function(on){ +Bangle.on('lcdPower', function (on) { if (on) { drawTime(); } else { - if(idTimeout) { + if (idTimeout) { clearTimeout(idTimeout); } }