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:
@@ -1,5 +1,6 @@
|
|||||||
goog.provide('ol.renderer.canvas.Layer');
|
goog.provide('ol.renderer.canvas.Layer');
|
||||||
|
|
||||||
|
goog.require('goog.array');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('goog.vec.Mat4');
|
||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
goog.require('ol.render.Event');
|
goog.require('ol.render.Event');
|
||||||
@@ -20,6 +21,12 @@ ol.renderer.canvas.Layer = function(mapRenderer, layer) {
|
|||||||
|
|
||||||
goog.base(this, mapRenderer, layer);
|
goog.base(this, mapRenderer, layer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {ImageData}
|
||||||
|
*/
|
||||||
|
this.testImageData_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {!goog.vec.Mat4.Number}
|
||||||
@@ -163,3 +170,30 @@ ol.renderer.canvas.Layer.prototype.getTransform = function(frameState) {
|
|||||||
-view2DState.rotation,
|
-view2DState.rotation,
|
||||||
-view2DState.center[0], -view2DState.center[1]);
|
-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;
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user