From 3841155621d9d2dfcdbe54e0d9d91eff9e0e246d Mon Sep 17 00:00:00 2001 From: ahocevar Date: Mon, 6 Apr 2009 21:21:18 +0000 Subject: [PATCH] fixed aspect ratio rendering in IE to not break rotation any more. r=pgiraud (closes #1836) git-svn-id: http://svn.openlayers.org/trunk/openlayers@9217 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Renderer/VML.js | 71 +++++++++++++++++----------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/lib/OpenLayers/Renderer/VML.js b/lib/OpenLayers/Renderer/VML.js index 60ab01612a..73ffc7a7e8 100644 --- a/lib/OpenLayers/Renderer/VML.js +++ b/lib/OpenLayers/Renderer/VML.js @@ -198,24 +198,38 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { if (node._geometryClass == "OpenLayers.Geometry.Point") { if (style.externalGraphic) { - this.drawGraphic(node, geometry, style); if (style.graphicTitle) { node.title=style.graphicTitle; } + var width = style.graphicWidth || style.graphicHeight; + var height = style.graphicHeight || style.graphicWidth; + width = width ? width : style.pointRadius*2; + height = height ? height : style.pointRadius*2; + + var resolution = this.getResolution(); + var xOffset = (style.graphicXOffset != undefined) ? + style.graphicXOffset : -(0.5 * width); + var yOffset = (style.graphicYOffset != undefined) ? + style.graphicYOffset : -(0.5 * height); + + node.style.left = ((geometry.x/resolution - this.offset.x)+xOffset).toFixed(); + node.style.top = ((geometry.y/resolution - this.offset.y)-(yOffset+height)).toFixed(); + node.style.width = width + "px"; + node.style.height = height + "px"; + node.style.flip = "y"; + // modify style/options for fill and stroke styling below style.fillColor = "none"; options.isStroked = false; } else if (this.isComplexSymbol(style.graphicName)) { var cache = this.importSymbol(style.graphicName); - var symbolExtent = cache.extent; - var width = symbolExtent.getWidth(); - var height = symbolExtent.getHeight(); node.setAttribute("path", cache.path); - node.setAttribute("coordorigin", symbolExtent.left + "," + - symbolExtent.bottom); - node.setAttribute("coordsize", width + "," + height); - var ratio = width / height; - this.drawGraphic(node, geometry, style, ratio); + node.setAttribute("coordorigin", cache.left + "," + + cache.bottom); + var size = cache.size; + node.setAttribute("coordsize", size + "," + size); + this.drawCircle(node, geometry, style.pointRadius); + node.style.flip = "y"; } else { this.drawCircle(node, geometry, style.pointRadius); } @@ -626,33 +640,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { return false; }, - /** - * Method: drawGraphic - * - * Parameters: - * node - {DOMElement} - * geometry - {} - * style - {Object} - * ratio - {Number} - */ - drawGraphic: function(node, geometry, style, ratio) { - var diameter = style.pointRadius * 2; - var width = style.graphicWidth || diameter; - var height = style.graphicHeight || (ratio ? diameter / ratio : diameter); - var resolution = this.getResolution(); - var xOffset = (style.graphicXOffset != undefined) ? - style.graphicXOffset : -(0.5 * width); - var yOffset = (style.graphicYOffset != undefined) ? - style.graphicYOffset : -(0.5 * height); - - node.style.left = ((geometry.x/resolution - this.offset.x)+xOffset).toFixed(); - node.style.top = ((geometry.y/resolution - this.offset.y)-(yOffset+height)).toFixed(); - node.style.width = width + "px"; - node.style.height = height + "px"; - node.style.flip = "y"; - }, - /** * Method: drawLineString * Render a linestring. @@ -875,10 +863,21 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { } pathitems.push("x e"); var path = pathitems.join(" "); + + var diff = (symbolExtent.getWidth() - symbolExtent.getHeight()) / 2; + if(diff > 0) { + symbolExtent.bottom = symbolExtent.bottom - diff; + symbolExtent.top = symbolExtent.top + diff; + } else { + symbolExtent.left = symbolExtent.left - diff; + symbolExtent.right = symbolExtent.right + diff; + } cache = { path: path, - extent: symbolExtent + size: symbolExtent.getWidth(), // equals getHeight() now + left: symbolExtent.left, + bottom: symbolExtent.bottom }; this.symbolCache[id] = cache;