Compare commits

..

9 Commits

Author SHA1 Message Date
Bart van den Eijnden
f4a4090814 set correct VERSION_NUMBER 2013-07-09 11:26:12 +02:00
ahocevar
49dd5a4fd8 Merge pull request #1019 from ahocevar/chrome-optimized
Deal with recent Chrome optimizations to avoid failing TileManager and tests
2013-07-09 11:23:27 +02:00
ahocevar
d020e8f666 Merge pull request #1018 from ahocevar/tilemanager-image-only
UTFGrid examples broken because of TileManager. r=@bartvde
2013-07-09 11:22:52 +02:00
Bart van den Eijnden
c8d4105d23 set VERSION_NUMBER to 2.13 final 2013-06-17 14:03:59 +02:00
Bart van den Eijnden
d60d1e5789 update version number to rc7 2013-06-07 10:53:30 +02:00
Bart van den Eijnden
afaee6880d Merge pull request #1003 from openlayers/notilemgrtest
Whenever we run tests *with* the tileManager, we cannot inspect any grid...(r=@ahocevar)
2013-06-07 10:51:48 +02:00
ahocevar
cc69b73dcf Revert "Merge pull request #708 from mpriour/displayEvent"
This reverts commit 0b3f582e10, reversing
changes made to 74103ec3e0.

The reason for reverting this is a regression. See #997.
2013-06-07 10:51:13 +02:00
ahocevar
fe0ffbf56e Fixing dependencies
This avoids undefined this.tileManager.addMap, and re-adds the TileManager
to the mobile build profile.
2013-06-07 09:08:54 +02:00
ahocevar
f4f72d5eeb TileManager dependency management
If the build does not contain TileManager.js, do not create a TileManager
instance for the map. If the build does not contain Layer/Grid.js, do not
try to add Grid layer instances to the list of layers managed by the
TileManager.
2013-06-07 09:08:30 +02:00
13 changed files with 94 additions and 143 deletions

View File

@@ -29,6 +29,7 @@ OpenLayers/Protocol/HTTP.js
OpenLayers/Protocol/WFS.js
OpenLayers/Protocol/WFS/v1_0_0.js
OpenLayers/Strategy/Fixed.js
OpenLayers/TileManager.js
[exclude]

View File

@@ -426,4 +426,4 @@
* When asking questions or reporting issues, make sure to include the output of
* OpenLayers.VERSION_NUMBER in the question or issue-description.
*/
OpenLayers.VERSION_NUMBER="Release 2.13-rc6";
OpenLayers.VERSION_NUMBER="Release 2.13.1";

View File

@@ -743,6 +743,12 @@ OpenLayers.Layer = OpenLayers.Class({
this.visibility = visibility;
this.display(visibility);
this.redraw();
if (this.map != null) {
this.map.events.triggerEvent("changelayer", {
layer: this,
property: "visibility"
});
}
this.events.triggerEvent("visibilitychanged");
}
},
@@ -759,11 +765,6 @@ OpenLayers.Layer = OpenLayers.Class({
display: function(display) {
if (display != (this.div.style.display != "none")) {
this.div.style.display = (display && this.calculateInRange()) ? "block" : "none";
if(this.map){
this.map.events.triggerEvent("changelayer", {
layer: this, property: "visibility"
});
}
}
},

View File

@@ -10,7 +10,6 @@
* @requires OpenLayers/Events.js
* @requires OpenLayers/Tween.js
* @requires OpenLayers/Projection.js
* @requires OpenLayers/TileManager.js
*/
/**
@@ -376,11 +375,12 @@ OpenLayers.Map = OpenLayers.Class({
/**
* APIProperty: tileManager
* {<OpenLayers.TileManager>|Object} By default the map will use the TileManager
* to queue image requests and to cache tile image elements. To create a
* map without a TileManager configure the map with tileManager: null.
* To create a TileManager with non-default options, supply the options
* instead or alternatively supply an instance of {<OpenLayers.TileManager>}.
* {<OpenLayers.TileManager>|Object} By default, and if the build contains
* TileManager.js, the map will use the TileManager to queue image requests
* and to cache tile image elements. To create a map without a TileManager
* configure the map with tileManager: null. To create a TileManager with
* non-default options, supply the options instead or alternatively supply
* an instance of {<OpenLayers.TileManager>}.
*/
/**
@@ -614,7 +614,7 @@ OpenLayers.Map = OpenLayers.Class({
{includeXY: true}
);
if (this.tileManager !== null) {
if (OpenLayers.TileManager && this.tileManager !== null) {
if (!(this.tileManager instanceof OpenLayers.TileManager)) {
this.tileManager = new OpenLayers.TileManager(this.tileManager);
}
@@ -2038,7 +2038,9 @@ OpenLayers.Map = OpenLayers.Class({
if (!inRange) {
layer.display(false);
}
this.events.triggerEvent("changelayer", {
layer: layer, property: "visibility"
});
}
if (inRange && layer.visibility) {
layer.moveTo(bounds, zoomChanged, options.dragging);

View File

@@ -7,7 +7,7 @@ var OpenLayers = {
/**
* Constant: VERSION_NUMBER
*/
VERSION_NUMBER: "Release 2.13-rc6",
VERSION_NUMBER: "Release 2.13.1",
/**
* Constant: singleFile

View File

@@ -314,11 +314,17 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
* Creates the content for the frame on the tile.
*/
initImage: function() {
if (!this.url && !this.imgDiv) {
// fast path out - if there is no tile url and no previous image
this.isLoading = false;
return;
}
this.events.triggerEvent('beforeload');
this.layer.div.appendChild(this.getTile());
this.events.triggerEvent(this._loadEvent);
var img = this.getImage();
if (this.url && OpenLayers.Util.isEquivalentUrl(img.src, this.url)) {
var src = img.getAttribute('src') || '';
if (this.url && OpenLayers.Util.isEquivalentUrl(src, this.url)) {
this._loadTimeout = window.setTimeout(
OpenLayers.Function.bind(this.onImageLoad, this), 0
);

View File

@@ -5,10 +5,11 @@
/**
* @requires OpenLayers/Layer/Grid.js
* @requires OpenLayers/Util.js
* @requires OpenLayers/BaseTypes.js
* @requires OpenLayers/BaseTypes/Element.js
* @requires OpenLayers/Layer/Grid.js
* @requires OpenLayers/Tile/Image.js
*/
/**
@@ -117,7 +118,7 @@ OpenLayers.TileManager = OpenLayers.Class({
* map - {<OpenLayers.Map>}
*/
addMap: function(map) {
if (this._destroyed) {
if (this._destroyed || !OpenLayers.Layer.Grid) {
return;
}
this.maps.push(map);
@@ -143,7 +144,7 @@ OpenLayers.TileManager = OpenLayers.Class({
* map - {<OpenLayers.Map>}
*/
removeMap: function(map) {
if (this._destroyed) {
if (this._destroyed || !OpenLayers.Layer.Grid) {
return;
}
window.clearTimeout(this.tileQueueId[map.id]);
@@ -222,7 +223,7 @@ OpenLayers.TileManager = OpenLayers.Class({
for (j=layer.grid[i].length-1; j>=0; --j) {
tile = layer.grid[i][j];
this.addTile({tile: tile});
if (tile.url) {
if (tile.url && !tile.imgDiv) {
this.manageTileCache({object: tile});
}
}
@@ -254,9 +255,6 @@ OpenLayers.TileManager = OpenLayers.Class({
for (j=layer.grid[i].length-1; j>=0; --j) {
tile = layer.grid[i][j];
this.unloadTile({object: tile});
if (tile.url) {
this.manageTileCache({object: tile});
}
}
}
}
@@ -301,13 +299,18 @@ OpenLayers.TileManager = OpenLayers.Class({
* evt - {Object} The listener argument
*/
addTile: function(evt) {
evt.tile.events.on({
beforedraw: this.queueTileDraw,
beforeload: this.manageTileCache,
loadend: this.addToCache,
unload: this.unloadTile,
scope: this
});
if (evt.tile instanceof OpenLayers.Tile.Image) {
evt.tile.events.on({
beforedraw: this.queueTileDraw,
beforeload: this.manageTileCache,
loadend: this.addToCache,
unload: this.unloadTile,
scope: this
});
} else {
// Layer has the wrong tile type, so don't handle it any longer
this.removeLayer({layer: evt.tile.layer});
}
},
/**
@@ -384,25 +387,23 @@ OpenLayers.TileManager = OpenLayers.Class({
manageTileCache: function(evt) {
var tile = evt.object;
var img = this.tileCache[tile.url];
// only use image from cache if it is not on a layer already
if (img && (!img.parentNode ||
OpenLayers.Element.hasClass(img.parentNode, 'olBackBuffer'))) {
if (tile.layer.backBuffer) {
if (tile.layer.backBuffer === img.parentNode) {
// cached image is on the target layer's backbuffer already,
// so nothing to do here
return;
}
img.style.opacity = 0;
img.style.visibility = 'hidden';
}
// Only backbuffer tiles have an id, so we don't want one here
img.id = null;
tile.setImage(img);
// LRU - move tile to the end of the array to mark it as the most
// recently used
OpenLayers.Util.removeItem(this.tileCacheIndex, tile.url);
this.tileCacheIndex.push(tile.url);
if (img) {
// if image is on its layer's backbuffer, remove it from backbuffer
if (img.parentNode &&
OpenLayers.Element.hasClass(img.parentNode, 'olBackBuffer')) {
img.parentNode.removeChild(img);
img.id = null;
}
// only use image from cache if it is not on a layer already
if (!img.parentNode) {
img.style.visibility = 'hidden';
img.style.opacity = 0;
tile.setImage(img);
// LRU - move tile to the end of the array to mark it as the most
// recently used
OpenLayers.Util.removeItem(this.tileCacheIndex, tile.url);
this.tileCacheIndex.push(tile.url);
}
}
},

View File

@@ -858,44 +858,6 @@
"setOpacity() does not trigger changelayer if the opacity value is the same");
}
function test_display(t) {
t.plan(9);
var map, layer, log;
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer("", {
alwaysInRange: true,
visibility: true
});
map.addLayer(layer);
log = [];
map.events.register('changelayer', t, function(event) {
log.push({
layer: event.layer,
property: event.property
});
});
layer.display(false);
t.eq(layer.div.style.display, "none", "display() set layer's display style to correct value");
t.eq(layer.getVisibility(), true, "display() does not affect layer's visibility state");
t.eq(log.length, 1, "display() triggers changelayer once");
t.ok(log[0].layer == layer, "changelayer listener called with expected layer");
t.eq(log[0].property, "visibility", "changelayer listener called with expected property");
layer.visibility = false;
layer.display(true);
t.eq(layer.div.style.display, "block", "display() set layer's display style to correct value");
t.eq(layer.getVisibility(), false, "display() does not affect layer's visibility state");
layer.setVisibility(true);
// This call must not trig the event because the opacity value is the same.
log = [];
layer.display(true);
t.eq(log.length, 0, "display() does not trigger changelayer if the display value is the same");
layer.setVisibility(false);
t.eq(log.length, 1, "changelayer event called only once. setVisibility doesn't fire any extra changelayer events");
}
/******
*

View File

@@ -682,7 +682,7 @@
t.plan( 9 );
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {tileManager: null});
layer = new OpenLayers.Layer.Grid(name, url, params);
map.addLayer(layer);
layer.destroy();
@@ -1135,27 +1135,26 @@
map.addLayer(layer);
map.zoomToMaxExtent();
t.delay_call(1, function() {
layer.mergeNewParams({foo: 'bar'});
var tile = layer.grid[1][1];
t.ok(OpenLayers.Element.hasClass(tile.imgDiv, 'olTileReplacing'), 'tile is marked for being replaced');
t.ok(document.getElementById(tile.id + '_bb'), 'backbuffer created for tile');
// simulate a css declaration where '.olTileReplacing' sets display
// to none.
tile.imgDiv.style.display = 'none';
tile.onImageLoad();
t.ok(!OpenLayers.Element.hasClass(tile.imgDiv, 'olTileReplacing'), 'tile replaced, no longer marked');
t.ok(!document.getElementById(tile.id + '_bb'), 'backbuffer removed for tile');
layer.mergeNewParams({foo: 'baz'});
tile = layer.grid[1][1];
// simulate a css declaration where '.olTileReplacing' does not set
// display to none.
tile.imgDiv.style.display = 'block';
tile.onImageLoad();
t.ok(!OpenLayers.Element.hasClass(tile.imgDiv, 'olTileReplacing'), 'tile replaced, no longer marked');
t.ok(document.getElementById(tile.id + '_bb'), 'backbuffer not removed for visible tile');
});
layer.grid[1][1].onImageLoad();
layer.mergeNewParams({foo: 'bar'});
var tile = layer.grid[1][1];
t.ok(OpenLayers.Element.hasClass(tile.imgDiv, 'olTileReplacing'), 'tile is marked for being replaced');
t.ok(document.getElementById(tile.id + '_bb'), 'backbuffer created for tile');
// simulate a css declaration where '.olTileReplacing' sets display
// to none.
tile.imgDiv.style.display = 'none';
tile.onImageLoad();
t.ok(!OpenLayers.Element.hasClass(tile.imgDiv, 'olTileReplacing'), 'tile replaced, no longer marked');
t.ok(!document.getElementById(tile.id + '_bb'), 'backbuffer removed for tile');
layer.mergeNewParams({foo: 'baz'});
tile = layer.grid[1][1];
// simulate a css declaration where '.olTileReplacing' does not set
// display to none.
tile.imgDiv.style.display = 'block';
tile.onImageLoad();
t.ok(!OpenLayers.Element.hasClass(tile.imgDiv, 'olTileReplacing'), 'tile replaced, no longer marked');
t.ok(document.getElementById(tile.id + '_bb'), 'backbuffer not removed for visible tile');
}
function test_backbuffer_replace_singleTile(t) {

View File

@@ -984,22 +984,14 @@
}
function test_Map_moveTo(t) {
t.plan(12);
t.plan(2);
map = new OpenLayers.Map('map');
var baseLayer = new OpenLayers.Layer.WMS("Test Layer",
"http://octo.metacarta.com/cgi-bin/mapserv?",
{map: "/mapdata/vmap_wms.map", layers: "basic"},
{maxResolution: 'auto', maxExtent: new OpenLayers.Bounds(-10,-10,10,10)});
var testLayer = new OpenLayers.Layer("",{maxResolution: 0.1, minResolution: 0.03, isBaseLayer: false, visibility: true});
var log = [];
map.events.register('changelayer', t, function(event) {
log.push({
layer: event.layer,
property: event.property
});
});
map.events.on({
baseLayer.events.on({
move: function() {
t.ok(true, "move listener called");
},
@@ -1013,20 +1005,10 @@
}
});
map.addLayer(baseLayer);
map.addLayer(testLayer);
log = [];
var ll = new OpenLayers.LonLat(-100,-150);
map.moveTo(ll, 2);
t.ok(map.getCenter().equals(new OpenLayers.LonLat(0,0)), "safely sets out-of-bounds lonlat");
t.eq(testLayer.div.style.display, "none", "moveTo out of resolution range set layer's display style to correct value");
t.eq(log.length, 1, "Map.moveTo out of resolution range triggers changelayer once");
t.ok(log[0].layer == testLayer, "changelayer listener called with expected layer");
t.eq(log[0].property, "visibility", "changelayer listener called with expected property");
map.moveTo(new OpenLayers.LonLat(0,0), 0);
t.eq(testLayer.div.style.display, "block", "moveTo in to resolution range set layer's display style to correct value");
map.destroy();
}

View File

@@ -282,7 +282,7 @@
format: 'image/png'};
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {tileManager: null});
var layer = new OpenLayers.Layer.WMS(name, url, params, {gutter: gutter});
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0,0), 5);
@@ -296,7 +296,7 @@
map.destroy();
var gutter = 15;
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {tileManager: null});
var layer = new OpenLayers.Layer.WMS(name, url, params, {gutter: gutter});
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0,0), 5);
@@ -320,7 +320,7 @@
function test_createBackBuffer(t) {
t.plan(3);
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {tileManager: null});
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"../../img/blank.gif", {layers: 'basic'});
map.addLayer(layer);
@@ -345,7 +345,7 @@
function test_onImageLoad(t) {
t.plan(3);
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {tileManager: null});
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"../../img/blank.gif", {layers: 'basic'}, {opacity: 0.5});
map.addLayer(layer);
@@ -382,12 +382,9 @@
t.delay_call(5, function() {
var tile = layer.grid[0][0];
if (tile.isLoading) {
t.ok(false, "test_getCanvasContext timeout");
} else {
t.ok(tile.getCanvasContext() instanceof CanvasRenderingContext2D,
"getCanvasContext() returns CanvasRenderingContext2D instance");
}
tile.onImageLoad();
t.ok(tile.getCanvasContext() instanceof CanvasRenderingContext2D,
"getCanvasContext() returns CanvasRenderingContext2D instance");
map.destroy();
});
}

View File

@@ -23,7 +23,7 @@
t.debug_print("Can't test google reprojection in Opera or Safari.");
} else if(validkey) {
t.plan(5);
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {tileManager: null});
var layer = new OpenLayers.Layer.Google("Google");
map.addLayer(layer);
layer = new OpenLayers.Layer.MapServer(name, url, params, {reproject: true, isBaseLayer: false, buffer: 2});
@@ -42,7 +42,7 @@
window.location.host);
}
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {tileManager: null});
layer = new OpenLayers.Layer.MapServer(name, url, params, {buffer:2});
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0,0), 5);

View File

@@ -23,7 +23,7 @@
} else if(validkey) {
t.plan(5);
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {tileManager: null});
var layer = new OpenLayers.Layer.Google("Google");
map.addLayer(layer);
var wmslayer = new OpenLayers.Layer.WMS(name, url, params,
@@ -43,7 +43,7 @@
window.location.host);
}
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {tileManager: null});
layer = new OpenLayers.Layer.WMS(name, url, params, {buffer: 2});
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0,0), 5);