From a0b8a41d5da350aba422e41c739a5eb736675c6b Mon Sep 17 00:00:00 2001 From: ahocevar Date: Tue, 29 Jul 2008 15:12:48 +0000 Subject: [PATCH] made coordsize positive for vector renderers; seems to fixe some strange behavior in the vml renderer, and brings a performance gain by using this.size instead of calculating the size from extent and resolution every time. r=euzuro (closes #1157) git-svn-id: http://svn.openlayers.org/trunk/openlayers@7586 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Renderer/SVG.js | 10 ++++++++-- lib/OpenLayers/Renderer/VML.js | 17 +++++++++++++---- tests/Renderer/SVG.html | 3 ++- tests/Renderer/VML.html | 5 +++-- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/lib/OpenLayers/Renderer/SVG.js b/lib/OpenLayers/Renderer/SVG.js index e816e8238d..61bf3dca0f 100644 --- a/lib/OpenLayers/Renderer/SVG.js +++ b/lib/OpenLayers/Renderer/SVG.js @@ -121,7 +121,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { // Set the viewbox -- the left/top will be pixels-dragged-since-res change, // the width/height will be pixels. var extentString = left + " " + top + " " + - extent.getWidth() / resolution + " " + extent.getHeight() / resolution; + this.size.w + " " + this.size.h; //var extentString = extent.left / resolution + " " + -extent.top / resolution + " " + this.rendererRoot.setAttributeNS(null, "viewBox", extentString); }, @@ -154,7 +154,13 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { var nodeType = null; switch (geometry.CLASS_NAME) { case "OpenLayers.Geometry.Point": - nodeType = style.externalGraphic ? "image" : "circle"; + if (style.externalGraphic) { + nodeType = "image"; + } else if (style.graphicName) { + nodeType = "use"; + } else { + nodeType = "circle"; + } break; case "OpenLayers.Geometry.Rectangle": nodeType = "rect"; diff --git a/lib/OpenLayers/Renderer/VML.js b/lib/OpenLayers/Renderer/VML.js index 3050d4a9f5..14a31f76e1 100644 --- a/lib/OpenLayers/Renderer/VML.js +++ b/lib/OpenLayers/Renderer/VML.js @@ -79,12 +79,15 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { var resolution = this.getResolution(); var org = extent.left/resolution + " " + - extent.top/resolution; + (extent.top/resolution - this.size.h); this.root.setAttribute("coordorigin", org); - var size = extent.getWidth()/resolution + " " + - -extent.getHeight()/resolution; + var size = this.size.w + " " + this.size.h; this.root.setAttribute("coordsize", size); + + // flip the VML display Y axis upside down so it + // matches the display Y axis of the map + this.root.style.flip = "y"; }, @@ -120,7 +123,13 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { var nodeType = null; switch (geometry.CLASS_NAME) { case "OpenLayers.Geometry.Point": - nodeType = style.externalGraphic ? "olv:rect" : "olv:oval"; + if (style.externalGraphic) { + nodeType = "olv:rect"; + } else if (style.graphicName) { + nodeType = "olv:group"; + } else { + nodeType = "olv:oval"; + } break; case "OpenLayers.Geometry.Rectangle": nodeType = "olv:rect"; diff --git a/tests/Renderer/SVG.html b/tests/Renderer/SVG.html index 1b4061d7e6..e573168683 100644 --- a/tests/Renderer/SVG.html +++ b/tests/Renderer/SVG.html @@ -59,6 +59,7 @@ } var r = new OpenLayers.Renderer.SVG(document.body); + r.setSize(new OpenLayers.Size(4,4)); r.map = { getResolution: function() { return 0.5; @@ -78,7 +79,7 @@ // test extent changes var extent = new OpenLayers.Bounds(4,3,2,1); r.setExtent(extent); - t.eq(r.rendererRoot.getAttributeNS(null, "viewBox"), "6 6 -4 -4", "rendererRoot viewBox is correct after a new setExtent"); + t.eq(r.rendererRoot.getAttributeNS(null, "viewBox"), "6 6 4 4", "rendererRoot viewBox is correct after a new setExtent"); OpenLayers.Renderer.Elements.prototype.setExtent = OpenLayers.Renderer.Elements.prototype._setExtent; diff --git a/tests/Renderer/VML.html b/tests/Renderer/VML.html index 6569f8f213..5f2e513cf5 100644 --- a/tests/Renderer/VML.html +++ b/tests/Renderer/VML.html @@ -59,6 +59,7 @@ } var r = new OpenLayers.Renderer.VML(document.body); + r.setSize(new OpenLayers.Size(4,4)); r.map = { getResolution: function() { return 0.5; @@ -70,8 +71,8 @@ t.eq(g_SetExtent, true, "Elements.setExtent() called"); - t.ok(r.root.coordorigin == "2,8", "coordorigin is correct"); - t.ok(r.root.coordsize == "4,-4", "coordsize is correct"); + t.ok(r.root.coordorigin == "2,4", "coordorigin is correct"); + t.ok(r.root.coordsize == "4,4", "coordsize is correct"); OpenLayers.Renderer.Elements.prototype.setExtent = OpenLayers.Renderer.Elements.prototype._setExtent;