Add pixelRatio support for DOM vector renderer

Adds the scaling and transforms to support pixelRatio values other than
1.
This commit is contained in:
Andreas Hocevar
2015-01-12 22:14:52 +01:00
parent 5dca3e9b20
commit bbf074b70a
2 changed files with 31 additions and 10 deletions

View File

@@ -224,8 +224,9 @@ ol.renderer.dom.Map.prototype.renderFrame = function(frameState) {
(map.hasListener(ol.render.EventType.PRECOMPOSE) ||
map.hasListener(ol.render.EventType.POSTCOMPOSE))) {
var canvas = this.context_.canvas;
canvas.width = frameState.size[0];
canvas.height = frameState.size[1];
var pixelRatio = frameState.pixelRatio;
canvas.width = frameState.size[0] * pixelRatio;
canvas.height = frameState.size[1] * pixelRatio;
}
this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState);

View File

@@ -83,6 +83,12 @@ ol.renderer.dom.VectorLayer = function(mapRenderer, vectorLayer) {
*/
this.transform_ = goog.vec.Mat4.createNumber();
/**
* @private
* @type {goog.vec.Mat4.Number}
*/
this.elementTransform_ = goog.vec.Mat4.createNumber();
};
goog.inherits(ol.renderer.dom.VectorLayer, ol.renderer.dom.Layer);
@@ -97,22 +103,36 @@ ol.renderer.dom.VectorLayer.prototype.composeFrame =
goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector);
var viewState = frameState.viewState;
var viewCenter = viewState.center;
var viewRotation = viewState.rotation;
var viewResolution = viewState.resolution;
var pixelRatio = frameState.pixelRatio;
var viewWidth = frameState.size[0];
var viewHeight = frameState.size[1];
var imageWidth = viewWidth * pixelRatio;
var imageHeight = viewHeight * pixelRatio;
var transform = ol.vec.Mat4.makeTransform2D(this.transform_,
pixelRatio * frameState.size[0] / 2,
pixelRatio * frameState.size[1] / 2,
pixelRatio / viewState.resolution,
-pixelRatio / viewState.resolution,
-viewState.rotation,
-viewState.center[0], -viewState.center[1]);
pixelRatio * viewWidth / 2,
pixelRatio * viewHeight / 2,
pixelRatio / viewResolution,
-pixelRatio / viewResolution,
-viewRotation,
-viewCenter[0], -viewCenter[1]);
var context = this.context_;
// Clear the canvas and set the correct size
context.canvas.width = frameState.size[0];
context.canvas.height = frameState.size[1];
context.canvas.width = imageWidth;
context.canvas.height = imageHeight;
var elementTransform = ol.vec.Mat4.makeTransform2D(this.elementTransform_,
0, 0,
1 / pixelRatio, 1 / pixelRatio,
0,
-(imageWidth - viewWidth) / 2 * pixelRatio,
-(imageHeight - viewHeight) / 2 * pixelRatio);
ol.dom.transformElement2D(context.canvas, elementTransform, 6);
this.dispatchEvent_(ol.render.EventType.PRECOMPOSE, frameState, transform);