diff --git a/lib/OpenLayers/Renderer/SVG.js b/lib/OpenLayers/Renderer/SVG.js index 464ccd337a..bf5d227312 100644 --- a/lib/OpenLayers/Renderer/SVG.js +++ b/lib/OpenLayers/Renderer/SVG.js @@ -19,13 +19,12 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { xmlns: "http://www.w3.org/2000/svg", /** - * Property: maxPixel + * Constant: MAX_PIXEL * {Integer} Firefox has a limitation where values larger or smaller than * about 15000 in an SVG document lock the browser up. This * works around it. */ - maxPixel: 15000, - + MAX_PIXEL: 15000, /** * Property: localResolution @@ -68,6 +67,22 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { return supported; }, + /** + * Method: inValidRange + * See #669 for more information + * Parameters: + * x - {Integer} + * y - {Integer} + * + * Returns: + * {Boolean} Whether or not the 'x' and 'y' coordinates are in the + * valid range. + */ + inValidRange: function(x, y) { + return (x >= -this.MAX_PIXEL && x <= this.MAX_PIXEL && + y >= -this.MAX_PIXEL && y <= this.MAX_PIXEL); + }, + /** * Method: setExtent * @@ -340,11 +355,8 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { var resolution = this.getResolution(); var x = (geometry.x / resolution + this.left); var y = (geometry.y / resolution - this.top); - var draw = true; - if (x < -this.maxPixel || x > this.maxPixel) { draw = false; } - if (y < -this.maxPixel || y > this.maxPixel) { draw = false; } - if (draw) { + if (this.inValidRange(x, y)) { node.setAttributeNS(null, "cx", x); node.setAttributeNS(null, "cy", y); node.setAttributeNS(null, "r", radius); @@ -419,14 +431,11 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { * geometry - {} */ drawRectangle: function(node, geometry) { - // This needs to be reworked - var resolution=this.getResolution(); + var resolution = this.getResolution(); var x = (geometry.x / resolution + this.left); var y = (geometry.y / resolution - this.top); - var draw = true; - if (x < -this.maxPixel || x > this.maxPixel) { draw = false; } - if (y < -this.maxPixel || y > this.maxPixel) { draw = false; } - if (draw) { + + if (this.inValidRange(x, y)) { node.setAttributeNS(null, "x", x); node.setAttributeNS(null, "y", y); node.setAttributeNS(null, "width", geometry.width / resolution); @@ -436,8 +445,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { node.setAttributeNS(null, "y", ""); node.setAttributeNS(null, "width", 0); node.setAttributeNS(null, "height", 0); - } - + } }, @@ -541,11 +549,12 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { var resolution = this.getResolution(); var x = (point.x / resolution + this.left); var y = (point.y / resolution - this.top); - if (x < -this.maxPixel || x > this.maxPixel) { return false; } - if (y < -this.maxPixel || y > this.maxPixel) { return false; } - var string = x + "," + y; - return string; - + + if (this.inValidRange(x, y)) { + return x + "," + y; + } else { + return false; + } }, CLASS_NAME: "OpenLayers.Renderer.SVG"