Add image rotation and scaling to ol.render.canvas.Immediate

This commit is contained in:
Tom Payne
2013-12-19 15:36:55 +01:00
parent fe2f028777
commit bfba52aef4

View File

@@ -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);
}
};