Slight improvements to rendering

pull/218/head
Markus Deibel 2020-03-27 06:23:43 +01:00 committed by GitHub
parent 84f56faadf
commit e799dfd206
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 128 additions and 110 deletions

View File

@ -5,96 +5,29 @@ const Setter = {
LOWER: 'lower' LOWER: 'lower'
}; };
const shortBuzzTimeInMs = 100; const shortBuzzTimeInMs = 50;
const longBuzzTimeInMs = 200; const longBuzzTimeInMs = 200;
let upperLimit = 130; let upperLimit = 90;
let lowerLimit = 100; let upperLimitChanged = true;
let lowerLimit = 50;
let lowerLimitChanged = true;
let limitSetter = Setter.NONE; let limitSetter = Setter.NONE;
let currentHeartRate = 0; let currentHeartRate = 0;
let hrConfidence = -1; let hrConfidence = -1;
let hrOrConfidenceChanged = true;
let setterHighlightTimeout; let setterHighlightTimeout;
function renderUpperLimitBackground() {
g.setColor(1,0,0);
g.fillRect(125,40, 210, 70);
g.fillRect(180,70, 210, 200);
//Round top left corner
g.fillEllipse(115,40,135,70);
//Round top right corner
g.setColor(0,0,0);
g.fillRect(205,40, 210, 45);
g.setColor(1,0,0);
g.fillEllipse(190,40,210,50);
//Round inner corner
g.fillRect(174,71, 179, 76);
g.setColor(0,0,0);
g.fillEllipse(160,71,179,82);
//Round bottom
g.setColor(1,0,0);
g.fillEllipse(180,190, 210, 210);
}
function renderCurrentHearRateBackground() {
g.setColor(1,1,1);
g.fillRect(45, 110, 165, 140);
g.setColor(0,0,0);
g.setFontVector(13);
g.drawString("Current:" , 65,117);
}
function renderLowerLimitBackground() {
g.setColor(0,0,1);
g.fillRect(10, 180, 100, 210);
g.fillRect(10, 50, 40, 180);
//Rounded top
g.setColor(0,0,1);
g.fillEllipse(10,40, 40, 60);
//Round bottom right corner
g.setColor(0,0,1);
g.fillEllipse(90,180,110,210);
//Round inner corner
g.setColor(0,0,1);
g.fillRect(40,175,45,180);
g.setColor(0,0,0);
g.fillEllipse(41,170,60,179);
//Round bottom left corner
g.setColor(0,0,0);
g.fillRect(10,205, 15, 210);
g.setColor(0,0,1);
g.fillEllipse(10,200,30,210);
}
function renderButtonIcons() {
g.setColor(1,1,1);
g.setFontVector(14);
// + for Btn1
g.drawString("+", 222,50);
// Home for Btn2
g.drawLine(220, 118, 227, 110);
g.drawLine(227, 110, 234, 118);
g.drawPoly([222,117,222,125,232,125,232,117], false);
g.drawRect(226,120,229,125);
// - for Btn3
g.drawString("-", 222,170);
}
function drawTrainingHeartRate() { function drawTrainingHeartRate() {
//Only redraw if the display is on //Only redraw if the display is on
if (Bangle.isLCDOn()) { if (Bangle.isLCDOn()) {
renderButtonIcons();
renderUpperLimit(); renderUpperLimit();
renderCurrentHeartRate(); renderCurrentHeartRate();
@ -108,18 +41,50 @@ function drawTrainingHeartRate() {
} }
function renderUpperLimit() { function renderUpperLimit() {
if(limitSetter === Setter.UPPER){ if(!upperLimitChanged) { return; }
g.setColor(1, 1, 0);
} else {
g.setColor(1, 1, 1);
}
g.setColor(255,0,0);
g.fillRect(125,40, 210, 70);
g.fillRect(180,70, 210, 200);
//Round top left corner
g.fillEllipse(115,40,135,70);
//Round top right corner
g.setColor(0,0,0);
g.fillRect(205,40, 210, 45);
g.setColor(255,0,0);
g.fillEllipse(190,40,210,50);
//Round inner corner
g.fillRect(174,71, 179, 76);
g.setColor(0,0,0);
g.fillEllipse(160,71,179,82);
//Round bottom
g.setColor(255,0,0);
g.fillEllipse(180,190, 210, 210);
if(limitSetter === Setter.UPPER){
g.setColor(255,255, 0);
} else {
g.setColor(255,255,255);
}
g.setFontVector(10); g.setFontVector(10);
g.drawString("Upper : " + upperLimit, 130,50); g.drawString("Upper : " + upperLimit, 130,50);
upperLimitChanged = false;
} }
function renderCurrentHeartRate() { function renderCurrentHeartRate() {
if(!hrOrConfidenceChanged) { return; }
g.setColor(255,255,255);
g.fillRect(45, 110, 165, 140);
g.setColor(0,0,0);
g.setFontVector(13); g.setFontVector(13);
g.drawString("Current:" , 65,117);
g.setFontAlign(1, -1, 0); g.setFontAlign(1, -1, 0);
g.drawString(currentHeartRate, 155, 117); g.drawString(currentHeartRate, 155, 117);
@ -128,6 +93,32 @@ function renderCurrentHeartRate() {
} }
function renderLowerLimit() { function renderLowerLimit() {
if(!lowerLimitChanged) { return; }
g.setColor(0,0,255);
g.fillRect(10, 180, 100, 210);
g.fillRect(10, 50, 40, 180);
//Rounded top
g.setColor(0,0,255);
g.fillEllipse(10,40, 40, 60);
//Round bottom right corner
g.setColor(0,0,255);
g.fillEllipse(90,180,110,210);
//Round inner corner
g.setColor(0,0,255);
g.fillRect(40,175,45,180);
g.setColor(0,0,0);
g.fillEllipse(41,170,60,179);
//Round bottom left corner
g.setColor(0,0,0);
g.fillRect(10,205, 15, 210);
g.setColor(0,0,255);
g.fillEllipse(10,200,30,210);
if(limitSetter === Setter.LOWER){ if(limitSetter === Setter.LOWER){
g.setColor(255,255, 0); g.setColor(255,255, 0);
} else { } else {
@ -135,9 +126,13 @@ function renderLowerLimit() {
} }
g.setFontVector(10); g.setFontVector(10);
g.drawString("Lower : " + lowerLimit, 20,190); g.drawString("Lower : " + lowerLimit, 20,190);
lowerLimitChanged = false;
} }
function renderConfidenceBars(){ function renderConfidenceBars(){
if(!hrOrConfidenceChanged) { return; }
if(hrConfidence >= 85){ if(hrConfidence >= 85){
g.setColor(0, 255, 0); g.setColor(0, 255, 0);
} else if (hrConfidence >= 50) { } else if (hrConfidence >= 50) {
@ -152,6 +147,24 @@ function renderConfidenceBars(){
g.fillRect(165, 110, 175, 140); g.fillRect(165, 110, 175, 140);
} }
function renderButtonIcons() {
g.setColor(255,255,255);
g.setFontVector(14);
// + for Btn1
g.drawString("+", 222,50);
// Home for Btn2
g.drawLine(220, 118, 227, 110);
g.drawLine(227, 110, 234, 118);
g.drawPoly([222,117,222,125,232,125,232,117], false);
g.drawRect(226,120,229,125);
// - for Btn3
g.drawString("-", 222,165);
}
function buzz() function buzz()
{ {
if(currentHeartRate > upperLimit) if(currentHeartRate > upperLimit)
@ -161,7 +174,7 @@ function buzz()
setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs); setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs);
} }
if(currentHeartRate < upperLimit) if(currentHeartRate < lowerLimit)
{ {
Bangle.buzz(longBuzzTimeInMs); Bangle.buzz(longBuzzTimeInMs);
setTimeout(() => { Bangle.buzz(longBuzzTimeInMs); }, longBuzzTimeInMs); setTimeout(() => { Bangle.buzz(longBuzzTimeInMs); }, longBuzzTimeInMs);
@ -169,6 +182,7 @@ function buzz()
} }
function onHrm(hrm){ function onHrm(hrm){
hrOrConfidenceChanged = (currentHeartRate !== hrm.bpm || hrConfidence !== hrm.confidence);
currentHeartRate = hrm.bpm; currentHeartRate = hrm.bpm;
hrConfidence = hrm.confidence; hrConfidence = hrm.confidence;
} }
@ -178,6 +192,10 @@ function setLimitSetterToLower() {
limitSetter = Setter.LOWER; limitSetter = Setter.LOWER;
console.log("Limit setter is lower"); console.log("Limit setter is lower");
upperLimitChanged = true;
lowerLimitChanged = true;
renderUpperLimit(); renderUpperLimit();
renderLowerLimit(); renderLowerLimit();
} }
@ -187,6 +205,10 @@ function setLimitSetterToUpper() {
limitSetter = Setter.UPPER; limitSetter = Setter.UPPER;
console.log("Limit setter is upper"); console.log("Limit setter is upper");
upperLimitChanged = true;
lowerLimitChanged = true;
renderLowerLimit(); renderLowerLimit();
renderUpperLimit(); renderUpperLimit();
} }
@ -194,6 +216,10 @@ function setLimitSetterToUpper() {
function setLimitSetterToNone() { function setLimitSetterToNone() {
limitSetter = Setter.NONE; limitSetter = Setter.NONE;
console.log("Limit setter is none"); console.log("Limit setter is none");
upperLimitChanged = true;
lowerLimitChanged = true;
renderLowerLimit(); renderLowerLimit();
renderUpperLimit(); renderUpperLimit();
} }
@ -205,10 +231,12 @@ function incrementLimit(){
upperLimit++; upperLimit++;
renderUpperLimit(); renderUpperLimit();
console.log("Upper limit: " + upperLimit); console.log("Upper limit: " + upperLimit);
upperLimitChanged = true;
} else if(limitSetter === Setter.LOWER) { } else if(limitSetter === Setter.LOWER) {
lowerLimit++; lowerLimit++;
renderLowerLimit(); renderLowerLimit();
console.log("Lower limit: " + lowerLimit); console.log("Lower limit: " + lowerLimit);
lowerLimitChanged = true;
} }
} }
@ -219,10 +247,12 @@ function decrementLimit(){
upperLimit--; upperLimit--;
renderUpperLimit(); renderUpperLimit();
console.log("Upper limit: " + upperLimit); console.log("Upper limit: " + upperLimit);
upperLimitChanged = true;
} else if(limitSetter === Setter.LOWER) { } else if(limitSetter === Setter.LOWER) {
lowerLimit--; lowerLimit--;
renderLowerLimit(); renderLowerLimit();
console.log("Lower limit: " + lowerLimit); console.log("Lower limit: " + lowerLimit);
lowerLimitChanged = true;
} }
} }
@ -246,35 +276,23 @@ Bangle.on('lcdPower', (on) => {
if (on) { if (on) {
Bangle.drawWidgets(); Bangle.drawWidgets();
// call your app function here // call your app function here
renderLowerLimitBackground();
renderCurrentHearRateBackground();
renderUpperLimitBackground();
renderButtonIcons();
drawTrainingHeartRate(); drawTrainingHeartRate();
} }
}); });
g.clear();
Bangle.loadWidgets();
Bangle.drawWidgets();
renderLowerLimitBackground();
renderCurrentHearRateBackground();
renderUpperLimitBackground();
renderButtonIcons();
setWatch(switchOffApp, BTN2, {repeat:false,edge:"falling"});
setWatch(incrementLimit, BTN1, {edge:"rising", debounce:50, repeat:true});
setWatch(decrementLimit, BTN3, {edge:"rising", debounce:50, repeat:true});
setWatch(setLimitSetterToLower, BTN4, {edge:"rising", debounce:50, repeat:true});
setWatch(setLimitSetterToUpper, BTN5, { edge: "rising", debounce: 50, repeat: true });
Bangle.setHRMPower(1); Bangle.setHRMPower(1);
Bangle.on('HRM', onHrm); Bangle.on('HRM', onHrm);
setWatch(incrementLimit, BTN1, {edge:"rising", debounce:50, repeat:true});
setWatch(switchOffApp, BTN2, {repeat:false,edge:"falling"});
setWatch(decrementLimit, BTN3, {edge:"rising", debounce:50, repeat:true});
setWatch(setLimitSetterToLower, BTN4, {edge:"rising", debounce:50, repeat:true});
setWatch(setLimitSetterToUpper, BTN5, { edge: "rising", debounce: 50, repeat: true });
g.clear();
Bangle.loadWidgets();
Bangle.drawWidgets();
drawTrainingHeartRate();
// refesh every sec // refesh every sec
setInterval(drawTrainingHeartRate, 1000); setInterval(drawTrainingHeartRate, 1000);