Add method for testing whether the canvas size is valid

This is a way to detect whether a canvas exceeds the maximum
dimensions if these are limited on the target device. See
https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html
for limitations on iOS devices.
This commit is contained in:
ahocevar
2014-04-02 16:44:39 +02:00
parent 72e5a347b9
commit 4dce59fe95

View File

@@ -1,5 +1,6 @@
goog.provide('ol.renderer.canvas.Layer');
goog.require('goog.array');
goog.require('goog.vec.Mat4');
goog.require('ol.layer.Layer');
goog.require('ol.render.Event');
@@ -20,6 +21,12 @@ ol.renderer.canvas.Layer = function(mapRenderer, layer) {
goog.base(this, mapRenderer, layer);
/**
* @private
* @type {ImageData}
*/
this.testImageData_ = null;
/**
* @private
* @type {!goog.vec.Mat4.Number}
@@ -163,3 +170,30 @@ ol.renderer.canvas.Layer.prototype.getTransform = function(frameState) {
-view2DState.rotation,
-view2DState.center[0], -view2DState.center[1]);
};
/**
* @param {CanvasRenderingContext2D} context Context.
* @param {ol.Size} size Size.
* @return {boolean} True when the canvas with the current size does not exceed
* the maximum dimensions.
* @protected
*/
ol.renderer.canvas.Layer.prototype.testCanvasSize = function(context, size) {
var x = size[0] - 1;
var y = size[1] - 1;
var originalImageData = context.getImageData(x, y, 1, 1);
if (goog.isNull(this.testImageData_)) {
this.testImageData_ = context.createImageData(1, 1);
var data = this.testImageData_.data;
data[0] = 42;
data[1] = 84;
data[2] = 126;
data[3] = 255;
}
context.putImageData(this.testImageData_, x, y);
var result = context.getImageData(x, y, 1, 1);
var good = goog.array.equals(this.testImageData_.data, result.data);
context.putImageData(originalImageData, x, y);
return good;
};