X-Git-Url: https://git-public.kairo.at/?p=lantea.git;a=blobdiff_plain;f=js%2Fmap.js;h=3cc00c5384c6fd6b97bbf00496a5d91404819f6b;hp=d269a9574aec018f21894c08aeb674341852a3e5;hb=6ddefbf98ebff13592de1d87a3bfc2796ac06d84;hpb=8389557a642218382b7294fde519389b72551388 diff --git a/js/map.js b/js/map.js index d269a95..3cc00c5 100644 --- a/js/map.js +++ b/js/map.js @@ -89,74 +89,101 @@ function initMap() { } } - var loopCnt = 0; - var getPersistentPrefs = function() { - if (mainDB) { - gWaitCounter++; - gPrefs.get("position", function(aValue) { - if (aValue) { - gPos = aValue; - gWaitCounter--; - } - }); - gWaitCounter++; - gPrefs.get("center_map", function(aValue) { - if (aValue === undefined) - document.getElementById("centerCheckbox").checked = true; - else - document.getElementById("centerCheckbox").checked = aValue; - setCentering(document.getElementById("centerCheckbox")); - gWaitCounter--; - }); - gWaitCounter++; - gPrefs.get("tracking_enabled", function(aValue) { - if (aValue === undefined) - document.getElementById("trackCheckbox").checked = true; - else - document.getElementById("trackCheckbox").checked = aValue; - gWaitCounter--; - }); - gWaitCounter++; - gTrackStore.getList(function(aTPoints) { - if (gDebug) - console.log(aTPoints.length + " points loaded."); - if (aTPoints.length) { - gTrack = aTPoints; - } - gWaitCounter--; - }); - } - else - setTimeout(getPersistentPrefs, 100); - loopCnt++; - if (loopCnt > 50) { - console.log("Loading prefs failed."); - } - }; - getPersistentPrefs(); - - gTrackCanvas.addEventListener("mouseup", mapEvHandler, false); - gTrackCanvas.addEventListener("mousemove", mapEvHandler, false); - gTrackCanvas.addEventListener("mousedown", mapEvHandler, false); - gTrackCanvas.addEventListener("mouseout", mapEvHandler, false); - - gTrackCanvas.addEventListener("touchstart", mapEvHandler, false); - gTrackCanvas.addEventListener("touchmove", mapEvHandler, false); - gTrackCanvas.addEventListener("touchend", mapEvHandler, false); - gTrackCanvas.addEventListener("touchcancel", mapEvHandler, false); - gTrackCanvas.addEventListener("touchleave", mapEvHandler, false); - - gTrackCanvas.addEventListener("wheel", mapEvHandler, false); - - document.getElementById("body").addEventListener("keydown", mapEvHandler, false); - - document.getElementById("copyright").innerHTML = - gMapStyles[gActiveMap].copyright; + console.log("map vars set, loading prefs..."); + loadPrefs(); +} - gLoadingTile = new Image(); - gLoadingTile.src = "style/loading.png"; - gWaitCounter++; - gLoadingTile.onload = function() { gWaitCounter--; }; +function loadPrefs(aEvent) { + if (aEvent && aEvent.type == "prefs-step") { + console.log("wait: " + gWaitCounter); + if (gWaitCounter == 0) { + gAction.removeEventListener(aEvent.type, loadPrefs, false); + gMapPrefsLoaded = true; + console.log("prefs loaded."); + + gTrackCanvas.addEventListener("mouseup", mapEvHandler, false); + gTrackCanvas.addEventListener("mousemove", mapEvHandler, false); + gTrackCanvas.addEventListener("mousedown", mapEvHandler, false); + gTrackCanvas.addEventListener("mouseout", mapEvHandler, false); + + gTrackCanvas.addEventListener("touchstart", mapEvHandler, false); + gTrackCanvas.addEventListener("touchmove", mapEvHandler, false); + gTrackCanvas.addEventListener("touchend", mapEvHandler, false); + gTrackCanvas.addEventListener("touchcancel", mapEvHandler, false); + gTrackCanvas.addEventListener("touchleave", mapEvHandler, false); + + gTrackCanvas.addEventListener("wheel", mapEvHandler, false); + + document.getElementById("body").addEventListener("keydown", mapEvHandler, false); + + document.getElementById("copyright").innerHTML = + gMapStyles[gActiveMap].copyright; + + gLoadingTile = new Image(); + gLoadingTile.src = "style/loading.png"; + gLoadingTile.onload = function() { + var throwEv = new CustomEvent("mapinit-done"); + gAction.dispatchEvent(throwEv); + }; + } + } + else { + if (aEvent) + gAction.removeEventListener(aEvent.type, loadPrefs, false); + gAction.addEventListener("prefs-step", loadPrefs, false); + gWaitCounter++; + gPrefs.get("position", function(aValue) { + if (aValue) { + gPos = aValue; + } + gWaitCounter--; + var throwEv = new CustomEvent("prefs-step"); + gAction.dispatchEvent(throwEv); + }); + gWaitCounter++; + gPrefs.get("center_map", function(aValue) { + if (aValue === undefined) + document.getElementById("centerCheckbox").checked = true; + else + document.getElementById("centerCheckbox").checked = aValue; + setCentering(document.getElementById("centerCheckbox")); + gWaitCounter--; + var throwEv = new CustomEvent("prefs-step"); + gAction.dispatchEvent(throwEv); + }); + gWaitCounter++; + gPrefs.get("tracking_enabled", function(aValue) { + if (aValue === undefined) + document.getElementById("trackCheckbox").checked = true; + else + document.getElementById("trackCheckbox").checked = aValue; + gWaitCounter--; + var throwEv = new CustomEvent("prefs-step"); + gAction.dispatchEvent(throwEv); + }); + gWaitCounter++; + var trackLoadStarted = false; + gTrackStore.getListStepped(function(aTPoint) { + if (aTPoint) { + // Add in front and return new length. + var tracklen = gTrack.unshift(aTPoint); + // Redraw track every 100 values (initial paint will do first anyhow). + if (tracklen % 100 == 0) + drawTrack(); + } + else { + // Last point received. + drawTrack(); + } + if (!trackLoadStarted) { + // We have the most recent point, if present, rest will load async. + trackLoadStarted = true; + gWaitCounter--; + var throwEv = new CustomEvent("prefs-step"); + gAction.dispatchEvent(throwEv); + } + }); + } } function resizeAndDraw() { @@ -339,6 +366,10 @@ function drawMap(aPixels, aOverdraw) { } } } + drawTrack(); +} + +function drawTrack() { gLastDrawnPoint = null; gCurPosMapCache = undefined; gTrackContext.clearRect(0, 0, gTrackCanvas.width, gTrackCanvas.height); @@ -740,7 +771,7 @@ function endTracking() { function clearTrack() { gTrack = []; gTrackStore.clear(); - drawMap({left: 0, right: 0, top: 0, bottom: 0}); + drawTrack(); } var gTileService = {