diff --git a/src/ol/render/canvas/canvasimmediate.js b/src/ol/render/canvas/canvasimmediate.js index 17cb36bcea..9736439c03 100644 --- a/src/ol/render/canvas/canvasimmediate.js +++ b/src/ol/render/canvas/canvasimmediate.js @@ -5,11 +5,13 @@ goog.provide('ol.render.canvas.Immediate'); goog.require('goog.asserts'); +goog.require('goog.vec.Mat4'); goog.require('ol.color'); goog.require('ol.extent'); goog.require('ol.render.IRender'); goog.require('ol.render.canvas'); goog.require('ol.style.Text'); +goog.require('ol.vec.Mat4'); @@ -106,6 +108,12 @@ ol.render.canvas.Immediate = function(context, pixelRatio, extent, transform) { */ this.pixelCoordinates_ = []; + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.tmpLocalTransform_ = goog.vec.Mat4.createNumber(); + }; @@ -126,6 +134,7 @@ ol.render.canvas.Immediate.prototype.drawImages_ = function(geometry) { goog.asserts.assert(goog.isDef(state.width)); var pixelCoordinates = ol.geom.transformSimpleGeometry2D( geometry, this.transform_, this.pixelCoordinates_); + var localTransform = this.tmpLocalTransform_; var i, ii; for (i = 0, ii = pixelCoordinates.length; i < ii; i += 2) { var x = pixelCoordinates[i] - state.anchorX; @@ -134,8 +143,22 @@ ol.render.canvas.Immediate.prototype.drawImages_ = function(geometry) { x = (x + 0.5) | 0; y = (y + 0.5) | 0; } + if (state.scale != 1 || state.rotation !== 0) { + ol.vec.Mat4.makeTransform2D(localTransform, + x, y, state.scale, state.scale, state.rotation, -x, -y); + context.setTransform( + goog.vec.Mat4.getElement(localTransform, 0, 0), + goog.vec.Mat4.getElement(localTransform, 1, 0), + goog.vec.Mat4.getElement(localTransform, 0, 1), + goog.vec.Mat4.getElement(localTransform, 1, 1), + goog.vec.Mat4.getElement(localTransform, 0, 3), + goog.vec.Mat4.getElement(localTransform, 1, 3)); + } context.drawImage(state.image, x, y, state.width, state.height); } + if (state.scale != 1 || state.rotation !== 0) { + context.setTransform(1, 0, 0, 1, 0, 0); + } };