The 'drawn' property as we know it is only used in one case:
the case where you have a gridded layer with buffer set to 0 and where a new grid is initialized (initGriddedTiles) and it just so happens that there is an extra row/col of tiles to the right or bottom of the displayed map. Since the buffer is set to 0 we are instructed to *not* load any tiles which are off the grid, so this extra row/col's tiles do not get loaded.
However! in the case where the user then drags the map just a tiny bit up or left, that extra row of tiles is brought into view. They then need to be drawn, and this is the entire reason for the 'drawn' property and the following code snippet, at the end of the moveGriddedTiles() function:
if (this.buffer == 0) {
for (var r=0, rl=this.grid.length; r<rl; r++) {
var row = this.grid[r];
for (var c=0, cl=row.length; c<cl; c++) {
var tile = row[c];
if (!tile.drawn && H
tile.bounds.intersectsBounds(bounds, false)) {
tile.draw();
}
}
}
}
This border case I believe can be avoided by simply changing one line of the tile.draw() function:
var withinMapExtent = (mapExtent &&
this.bounds.intersectsBounds(mapExtent, false));
to
var withinMapExtent = (mapExtent &&
this.bounds.intersectsBounds(mapExtent, true));
which makes the bounds test *inclusive* and therefore yes will draw the last col/row of tiles. OK, the user said NO BUFFER, but we're only buffering one little tiny row/column and the whole point of OpenLayers in the first place is to be slippy and so it doesn't seem unreasonable to expect/hope the user to slip around.
And of course the bonus of this is that by changing that one line, we can eliminate a property that results in confusing code that noone can understand. To me, this seems like a win.