From e4a973e3cb55373387cc03a917cced1fec5cfc20 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 22 May 2023 16:40:30 +0200 Subject: [PATCH] gpstrek - Completely stop drawing during input events --- apps/gpstrek/app.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/apps/gpstrek/app.js b/apps/gpstrek/app.js index 7a343fb7b..9713b6498 100644 --- a/apps/gpstrek/app.js +++ b/apps/gpstrek/app.js @@ -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(()=>{