69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
goog.provide('ol.renderer.canvas.Layer');
|
|
|
|
goog.require('goog.vec.Mat4');
|
|
goog.require('ol.layer.Layer');
|
|
goog.require('ol.renderer.Layer');
|
|
|
|
|
|
|
|
/**
|
|
* @constructor
|
|
* @extends {ol.renderer.Layer}
|
|
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
* @param {ol.layer.Layer} layer Layer.
|
|
*/
|
|
ol.renderer.canvas.Layer = function(mapRenderer, layer) {
|
|
goog.base(this, mapRenderer, layer);
|
|
};
|
|
goog.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer);
|
|
|
|
|
|
/**
|
|
* @param {ol.FrameState} frameState Frame state.
|
|
* @param {ol.layer.LayerState} layerState Layer state.
|
|
* @param {CanvasRenderingContext2D} context Context.
|
|
*/
|
|
ol.renderer.canvas.Layer.prototype.composeFrame =
|
|
function(frameState, layerState, context) {
|
|
|
|
var image = this.getImage();
|
|
if (!goog.isNull(image)) {
|
|
var transform = this.getTransform();
|
|
context.globalAlpha = layerState.opacity;
|
|
|
|
// for performance reasons, context.setTransform is only used
|
|
// when the view is rotated. see http://jsperf.com/canvas-transform
|
|
if (frameState.view2DState.rotation === 0) {
|
|
var dx = goog.vec.Mat4.getElement(transform, 0, 3);
|
|
var dy = goog.vec.Mat4.getElement(transform, 1, 3);
|
|
var dw = image.width * goog.vec.Mat4.getElement(transform, 0, 0);
|
|
var dh = image.height * goog.vec.Mat4.getElement(transform, 1, 1);
|
|
context.drawImage(image, 0, 0, +image.width, +image.height,
|
|
Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh));
|
|
} else {
|
|
context.setTransform(
|
|
goog.vec.Mat4.getElement(transform, 0, 0),
|
|
goog.vec.Mat4.getElement(transform, 1, 0),
|
|
goog.vec.Mat4.getElement(transform, 0, 1),
|
|
goog.vec.Mat4.getElement(transform, 1, 1),
|
|
goog.vec.Mat4.getElement(transform, 0, 3),
|
|
goog.vec.Mat4.getElement(transform, 1, 3));
|
|
context.drawImage(image, 0, 0);
|
|
context.setTransform(1, 0, 0, 1, 0, 0);
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* @return {HTMLCanvasElement|HTMLVideoElement|Image} Canvas.
|
|
*/
|
|
ol.renderer.canvas.Layer.prototype.getImage = goog.abstractMethod;
|
|
|
|
|
|
/**
|
|
* @return {!goog.vec.Mat4.Number} Transform.
|
|
*/
|
|
ol.renderer.canvas.Layer.prototype.getTransform = goog.abstractMethod;
|