Rotate map canvas after composition
This commit is contained in:
@@ -11,6 +11,7 @@ goog.require('ol.RendererType');
|
||||
goog.require('ol.array');
|
||||
goog.require('ol.css');
|
||||
goog.require('ol.dom');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.layer.Image');
|
||||
goog.require('ol.layer.Layer');
|
||||
goog.require('ol.layer.Tile');
|
||||
@@ -45,6 +46,12 @@ ol.renderer.canvas.Map = function(container, map) {
|
||||
*/
|
||||
this.context_ = ol.dom.createCanvasContext2D();
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {CanvasRenderingContext2D}
|
||||
*/
|
||||
this.renderContext_ = ol.dom.createCanvasContext2D();
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {HTMLCanvasElement}
|
||||
@@ -56,6 +63,24 @@ ol.renderer.canvas.Map = function(container, map) {
|
||||
this.canvas_.className = ol.css.CLASS_UNSELECTABLE;
|
||||
goog.dom.insertChildAt(container, this.canvas_, 0);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {HTMLCanvasElement}
|
||||
*/
|
||||
this.renderCanvas_ = this.renderContext_.canvas;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Coordinate}
|
||||
*/
|
||||
this.pixelCenter_ = [0, 0];
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Extent}
|
||||
*/
|
||||
this.pixelExtent_ = ol.extent.createEmpty();
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {boolean}
|
||||
@@ -156,14 +181,27 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
|
||||
return;
|
||||
}
|
||||
|
||||
var context = this.context_;
|
||||
var width = frameState.size[0] * frameState.pixelRatio;
|
||||
var height = frameState.size[1] * frameState.pixelRatio;
|
||||
if (this.canvas_.width != width || this.canvas_.height != height) {
|
||||
this.canvas_.width = width;
|
||||
this.canvas_.height = height;
|
||||
var context;
|
||||
var pixelRatio = frameState.pixelRatio;
|
||||
var width = frameState.size[0] * pixelRatio;
|
||||
var height = frameState.size[1] * pixelRatio;
|
||||
this.canvas_.width = width;
|
||||
this.canvas_.height = height;
|
||||
|
||||
var rotation = frameState.viewState.rotation;
|
||||
var pixelExtent;
|
||||
if (rotation) {
|
||||
context = this.renderContext_;
|
||||
pixelExtent = ol.extent.getForViewAndSize(this.pixelCenter_, pixelRatio,
|
||||
rotation, frameState.size, this.pixelExtent_);
|
||||
var renderWidth = ol.extent.getWidth(pixelExtent);
|
||||
var renderHeight = ol.extent.getHeight(pixelExtent);
|
||||
this.renderCanvas_.width = renderWidth + 0.5;
|
||||
this.renderCanvas_.height = renderHeight + 0.5;
|
||||
this.renderContext_.translate(Math.round((renderWidth - width) / 2),
|
||||
Math.round((renderHeight - height) / 2));
|
||||
} else {
|
||||
context.clearRect(0, 0, this.canvas_.width, this.canvas_.height);
|
||||
context = this.context_;
|
||||
}
|
||||
|
||||
this.calculateMatrices2D(frameState);
|
||||
@@ -190,6 +228,15 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
|
||||
}
|
||||
}
|
||||
|
||||
if (rotation) {
|
||||
this.context_.translate(width / 2, height / 2);
|
||||
this.context_.rotate(rotation);
|
||||
this.context_.drawImage(this.renderCanvas_,
|
||||
Math.round(pixelExtent[0]), Math.round(pixelExtent[1]));
|
||||
this.context_.rotate(-rotation);
|
||||
this.context_.translate(-width / 2, -height / 2);
|
||||
}
|
||||
|
||||
this.dispatchComposeEvent_(
|
||||
ol.render.EventType.POSTCOMPOSE, frameState);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user