don't waste coordinate space by using a smaller renderer extent and updating it on moveend. r=bartvde (closes #3359)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@12163 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
ahocevar
2011-07-11 17:07:15 +00:00
parent fdd7843a6a
commit 6ef5e395d1
5 changed files with 83 additions and 22 deletions

View File

@@ -38,10 +38,14 @@ OpenLayers.Renderer.NG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
* To be extended by subclasses - here we set positioning related styles
* on HTML elements, subclasses have to do the same for renderer specific
* elements (e.g. viewBox, width and height of the rendererRoot)
*
* Parameters:
* zoomChanged - {Boolean} Has the zoom changed? If so, subclasses may have
* to update feature styles/dimensions.
*/
updateDimensions: function() {
updateDimensions: function(zoomChanged) {
var mapExtent = this.map.getExtent();
var renderExtent = this.map.getMaxExtent();
var renderExtent = mapExtent.scale(3);
this.setExtent(renderExtent, true);
var res = this.getResolution();
var div = this.rendererRoot.parentNode;

View File

@@ -73,8 +73,11 @@ OpenLayers.Renderer.SVG2 = OpenLayers.Class(OpenLayers.Renderer.NG, {
/**
* Method: updateDimensions
*
* Parameters:
* zoomChanged - {Boolean}
*/
updateDimensions: function() {
updateDimensions: function(zoomChanged) {
OpenLayers.Renderer.NG.prototype.updateDimensions.apply(this, arguments);
var res = this.getResolution();
@@ -92,19 +95,21 @@ OpenLayers.Renderer.SVG2 = OpenLayers.Class(OpenLayers.Renderer.NG, {
this.rendererRoot.setAttributeNS(null, "width", width / res);
this.rendererRoot.setAttributeNS(null, "height", height / res);
// update styles for the new resolution
var i, len;
var nodes = this.vectorRoot.childNodes;
for (i=0, len=nodes.length; i<len; ++i) {
this.setStyle(nodes[i]);
}
var textNodes = this.textRoot.childNodes;
var label;
for (i=0, len=textNodes.length; i<len; ++i) {
label = textNodes[i];
this.drawText(label, label._style,
new OpenLayers.Geometry.Point(label._x, label._y)
);
if (zoomChanged === true) {
// update styles for the new resolution
var i, len;
var nodes = this.vectorRoot.childNodes;
for (i=0, len=nodes.length; i<len; ++i) {
this.setStyle(nodes[i]);
}
var textNodes = this.textRoot.childNodes;
var label;
for (i=0, len=textNodes.length; i<len; ++i) {
label = textNodes[i];
this.drawText(label, label._style,
new OpenLayers.Geometry.Point(label._x, label._y)
);
}
}
},