1
0
Fork 0

banglerun: Use offscreen buffer for flickerless updates

master
Gordon Williams 2020-07-17 08:23:13 +01:00
parent 81bca5ca04
commit 8b0e70b117
3 changed files with 46 additions and 40 deletions

View File

@ -1447,7 +1447,7 @@
"name": "BangleRun",
"shortName": "BangleRun",
"icon": "banglerun.png",
"version": "0.03",
"version": "0.04",
"description": "An app for running sessions.",
"tags": "run,running,fitness,outdoors",
"allow_emulator": false,

View File

@ -1,3 +1,4 @@
0.01: First release
0.02: Bugfix time: Reset minutes to 0 when hitting 60
0.03: Fix distance >=10 km (fix #529)
0.04: Use offscreen buffer for flickerless updates

View File

@ -174,6 +174,11 @@ let gpsReady = false;
let hrmReady = false;
let running = false;
let b = Graphics.createArrayBuffer(240,210,2,{msb:true});
let bpal = new Uint16Array([0,0xF800,0x07E0,0xFFFF]);
let COL = { RED:1,GREEN:2,WHITE:3 };
let bimg = {width:240,height:210,bpp:2,buffer:b.buffer,palette:bpal};
function formatClock(date) {
return ('0' + date.getHours()).substr(-2) + ':' + ('0' + date.getMinutes()).substr(-2);
}
@ -200,60 +205,60 @@ function formatSpeed(kmh) {
}
function drawBackground() {
g.setColor(running ? 0x00E0 : 0x0000);
g.fillRect(0, 30, 240, 240);
b.clear();
g.setColor(0xFFFF);
g.setFontAlign(0, -1, 0);
g.setFont('6x8', 2);
b.setColor(COL.WHITE);
b.setFontAlign(0, -1, 0);
b.setFont('6x8', 2);
g.drawString('DISTANCE', 120, 50);
g.drawString('TIME', 60, 100);
g.drawString('PACE', 180, 100);
g.drawString('STEPS', 60, 150);
g.drawString('STP/m', 180, 150);
g.drawString('SPEED', 40, 200);
g.drawString('HEART', 120, 200);
g.drawString('CADENCE', 200, 200);
b.drawString('DISTANCE', 120, 20);
b.drawString('TIME', 60, 70);
b.drawString('PACE', 180, 70);
b.drawString('STEPS', 60, 120);
b.drawString('STP/m', 180, 120);
b.drawString('SPEED', 40, 170);
b.drawString('HEART', 120, 170);
b.drawString('CADENCE', 200, 170);
}
function draw() {
const totSpeed = totTime ? 3.6 * totDist / totTime : 0;
const totCadence = totTime ? Math.round(60 * totSteps / totTime) : 0;
g.setColor(running ? 0x00E0 : 0x0000);
g.fillRect(0, 30, 240, 50);
g.fillRect(0, 70, 240, 100);
g.fillRect(0, 120, 240, 150);
g.fillRect(0, 170, 240, 200);
g.fillRect(0, 220, 240, 240);
b.clearRect(0, 00, 240, 20);
b.clearRect(0, 40, 240, 70);
b.clearRect(0, 90, 240, 120);
b.clearRect(0, 140, 240, 170);
b.clearRect(0, 190, 240, 210);
g.setFont('6x8', 2);
b.setFont('6x8', 2);
g.setFontAlign(-1, -1, 0);
g.setColor(gpsReady ? 0x07E0 : 0xF800);
g.drawString(' GPS', 6, 30);
b.setFontAlign(-1, -1, 0);
b.setColor(gpsReady ? COL.GREEN : COL.RED);
b.drawString(' GPS', 6, 0);
g.setFontAlign(1, -1, 0);
g.setColor(0xFFFF);
g.drawString(formatClock(new Date()), 234, 30);
b.setFontAlign(1, -1, 0);
b.setColor(COL.WHITE);
b.drawString(formatClock(new Date()), 234, 0);
g.setFontAlign(0, -1, 0);
g.setFontVector(20);
g.drawString(formatDistance(totDist), 120, 70);
g.drawString(formatTime(totTime), 60, 120);
g.drawString(formatSpeed(totSpeed), 180, 120);
g.drawString(totSteps, 60, 170);
g.drawString(totCadence, 180, 170);
b.setFontAlign(0, -1, 0);
b.setFontVector(20);
b.drawString(formatDistance(totDist), 120, 40);
b.drawString(formatTime(totTime), 60, 90);
b.drawString(formatSpeed(totSpeed), 180, 90);
b.drawString(totSteps, 60, 140);
b.drawString(totCadence, 180, 140);
g.setFont('6x8', 2);
g.drawString(formatSpeed(speed), 40, 220);
b.setFont('6x8', 2);
b.drawString(formatSpeed(speed), 40,190);
g.setColor(hrmReady ? 0x07E0 : 0xF800);
g.drawString(heartRate, 120, 220);
b.setColor(hrmReady ? COL.GREEN : COL.RED);
b.drawString(heartRate, 120, 190);
g.setColor(0xFFFF);
g.drawString(cadence, 200, 220);
b.setColor(COL.WHITE);
b.drawString(cadence, 200, 190);
g.drawImage(bimg,0,30);
}
function handleGps(coords) {