1
0
Fork 0

gpstrek - Completely stop drawing during input events

master
Martin Boonk 2023-05-22 16:40:30 +02:00
parent 5f25972211
commit e4a973e3cb
1 changed files with 18 additions and 6 deletions

View File

@ -228,20 +228,24 @@ let prependTimeoutQueue = function (func, data){
timeoutQueue.unshift({f:func,d:data});
};
let processTimeoutQueue = function(){
queueProcessing = true;
addToTimeoutQueue(()=>{queueProcessing=false;});
let runNextTimeout = function(){
if (timeoutQueue.length > 0){
let current = timeoutQueue.shift();
let id = setTimeout(()=>{
current.f(current.d);
activeTimeouts = activeTimeouts.filter((c)=>c!=id);
processTimeoutQueue();
runNextTimeout();
},0);
activeTimeouts.push(id);
}
};
let processTimeoutQueue = function(){
queueProcessing = true;
addToTimeoutQueue(()=>{queueProcessing=false;});
runNextTimeout();
};
let clearTimeoutQueue = function(){
timeoutQueue = [];
for (let c of activeTimeouts){
@ -738,6 +742,7 @@ let onAction = function(_,xy){
clearTimeoutQueue();
forceMapRedraw = true;
if (WIDGETS.gpstrek.getState().route && global.screen == 1){
stopDrawing();
if (xy && xy.y > Bangle.appRect.y+Bangle.appRect.h-g.getHeight()*0.2 && xy.y <= Bangle.appRect.y2){
if (xy.x < Bangle.appRect.x + Bangle.appRect.w/2)
if (isMapOverview) {
@ -758,7 +763,7 @@ let onAction = function(_,xy){
mapOverviewY = g.getHeight()/2;
}
}
if (scheduleDraw) drawInTimeout();
startDrawing();
} else {
nextScreen();
}
@ -768,9 +773,10 @@ let onSwipe = function(dirLR,dirUD){
clearTimeoutQueue();
forceMapRedraw = true;
if (WIDGETS.gpstrek.getState().route && global.screen == 1 && isMapOverview){
stopDrawing();
if (dirLR) mapOverviewX += SETTINGS.overviewScroll*dirLR;
if (dirUD) mapOverviewY += SETTINGS.overviewScroll*dirUD;
if (scheduleDraw) drawInTimeout();
startDrawing();
} else {
if (dirLR < 0) {
nextScreen();
@ -1116,6 +1122,12 @@ let stopDrawing = function(){
scheduleDraw = false;
};
let startDrawing = function(){
scheduleDraw = true;
draw();
drawInTimeout();
};
let drawInTimeout = function(){
if (global.drawTimeout) clearTimeout(drawTimeout);
drawTimeout = setTimeout(()=>{