X-Git-Url: https://git-public.kairo.at/?p=lantea.git;a=blobdiff_plain;f=js%2Fmap.js;h=ffafab4f8dfd768837f8ea67446851ce9336e5e2;hp=ff5112a6ed0d02e63397db6a259c1db55e846e87;hb=d7ffc7b865337d9128b898ce8cad17ff242f793d;hpb=64dac5e1fc28b6084393c7e413b271c10cf21cfb diff --git a/js/map.js b/js/map.js index ff5112a..ffafab4 100644 --- a/js/map.js +++ b/js/map.js @@ -129,6 +129,8 @@ function loadPrefs(aEvent) { document.getElementById("body").addEventListener("keydown", mapEvHandler, false); + document.addEventListener("visibilitychange", visibilityEvHandler, false); + console.log("Events added."); document.getElementById("copyright").innerHTML = gMapStyles[gMap.activeMap].copyright; @@ -377,7 +379,9 @@ var gMap = { var imgObj = new Image(); imgObj.onload = function() { gMap.loadImageToTexture(imgObj, aTileKey); - window.requestAnimationFrame(function(aTimestamp) { gMap.drawGL() }); + if (document.hidden != true) { // Only draw if we're actually visible. + window.requestAnimationFrame(function(aTimestamp) { gMap.drawGL() }); + } URL.revokeObjectURL(imgURL); } imgObj.src = imgURL; @@ -386,7 +390,9 @@ var gMap = { } } } - window.requestAnimationFrame(function(aTimestamp) { gMap.drawGL() }); + if (document.hidden != true) { // Only draw if we're actually visible. + window.requestAnimationFrame(function(aTimestamp) { gMap.drawGL() }); + } }, drawGL: function() { @@ -645,13 +651,15 @@ function decodeIndex(encodedIdx) { } function drawTrack() { - gLastDrawnPoint = null; - gCurPosMapCache = undefined; - gTrackContext.clearRect(0, 0, gTrackCanvas.width, gTrackCanvas.height); - if (gTrack.length) { - for (var i = 0; i < gTrack.length; i++) { - drawTrackPoint(gTrack[i].coords.latitude, gTrack[i].coords.longitude, - (i + 1 >= gTrack.length)); + if (document.hidden != true) { // Only draw if we're actually visible. + gLastDrawnPoint = null; + gCurPosMapCache = undefined; + gTrackContext.clearRect(0, 0, gTrackCanvas.width, gTrackCanvas.height); + if (gTrack.length) { + for (var i = 0; i < gTrack.length; i++) { + drawTrackPoint(gTrack[i].coords.latitude, gTrack[i].coords.longitude, + (i + 1 >= gTrack.length)); + } } } } @@ -960,6 +968,15 @@ var mapEvHandler = { } }; +function visibilityEvHandler() { + // Immediately draw if we just got visible. + if (document.hidden != true) { + gMap.draw(); + } + // No need to handle the event where we become invisible as we care only draw + // when we are visible anyhow. +} + var geofake = { tracking: false, lastPos: {x: undefined, y: undefined}, @@ -1103,8 +1120,8 @@ var gTileService = { .replace("{x}", norm.x) .replace("{y}", norm.y) .replace("{z}", norm.z) - .replace("[a-c]", String.fromCharCode(97 + Math.floor(Math.random() * 2))) - .replace("[1-4]", 1 + Math.floor(Math.random() * 3)), + .replace("[a-c]", String.fromCharCode(97 + Math.floor(Math.random() * 3))) + .replace("[1-4]", 1 + Math.floor(Math.random() * 4)), true); XHR.responseType = "blob"; XHR.addEventListener("load", function () {