From 75163f663592cdccd84de613316d93674e7a6690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 15 Nov 2007 15:31:48 +0000 Subject: [PATCH] avoid code duplication in Renderer/SVG.js, thanks fredj for the patch (closes #1144) git-svn-id: http://svn.openlayers.org/trunk/openlayers@5188 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Renderer/SVG.js | 49 ++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 20 deletions(-) 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"