Address review comments: Introduce new CanvasGraphics.putBinaryImageData and make sure feature detection work always
This commit is contained in:
parent
01d2929401
commit
cf7d4503d6
@ -3,29 +3,6 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// Some browsers can use UInt8Array directly as imageData.
|
|
||||||
PDFJS.FEATURE_CANVAS_UINT_IMAGE_DATA = false;
|
|
||||||
if (typeof window !== 'undefined') {
|
|
||||||
window.addEventListener('load', function featureCanvasUIntImgaData() {
|
|
||||||
var canvas = document.createElement('canvas');
|
|
||||||
canvas.width = 1;
|
|
||||||
canvas.height = 1;
|
|
||||||
var ctx = canvas.getContext('2d');
|
|
||||||
|
|
||||||
try {
|
|
||||||
ctx.putImageData({
|
|
||||||
width: 1,
|
|
||||||
height: 1,
|
|
||||||
data: new Uint8Array(4)
|
|
||||||
}, 0, 0);
|
|
||||||
} catch (e) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PDFJS.FEATURE_CANVAS_UINT_IMAGE_DATA = true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// <canvas> contexts store most of the state we need natively.
|
// <canvas> contexts store most of the state we need natively.
|
||||||
// However, PDF needs a bit more state, which we store here.
|
// However, PDF needs a bit more state, which we store here.
|
||||||
|
|
||||||
@ -810,27 +787,16 @@ var CanvasGraphics = (function canvasGraphics() {
|
|||||||
|
|
||||||
var tmpCanvas = new this.ScratchCanvas(w, h);
|
var tmpCanvas = new this.ScratchCanvas(w, h);
|
||||||
var tmpCtx = tmpCanvas.getContext('2d');
|
var tmpCtx = tmpCanvas.getContext('2d');
|
||||||
var tmpImgData;
|
this.putBinaryImageData(tmpCtx, imgData, w, h);
|
||||||
|
|
||||||
if (PDFJS.FEATURE_CANVAS_UINT_IMAGE_DATA) {
|
|
||||||
tmpImgData = imgData;
|
|
||||||
} else {
|
|
||||||
tmpImgData = tmpCtx.getImageData(0, 0, w, h);
|
|
||||||
|
|
||||||
// Copy over the imageData pixel by pixel.
|
|
||||||
var tmpImgDataPixels = tmpImgData.data;
|
|
||||||
var len = tmpImgDataPixels.length;
|
|
||||||
|
|
||||||
while (len--) {
|
|
||||||
tmpImgDataPixels[len] = imgData.data[len];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tmpCtx.putImageData(tmpImgData, 0, 0);
|
|
||||||
ctx.drawImage(tmpCanvas, 0, -h);
|
ctx.drawImage(tmpCanvas, 0, -h);
|
||||||
this.restore();
|
this.restore();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
putBinaryImageData: function canvasPutBinaryImageData() {
|
||||||
|
//
|
||||||
|
},
|
||||||
|
|
||||||
// Marked content
|
// Marked content
|
||||||
|
|
||||||
markPoint: function canvasGraphicsMarkPoint(tag) {
|
markPoint: function canvasGraphicsMarkPoint(tag) {
|
||||||
@ -891,3 +857,38 @@ var CanvasGraphics = (function canvasGraphics() {
|
|||||||
return constructor;
|
return constructor;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
if (!isWorker) {
|
||||||
|
// Feature detection if the browser can use an Uint8Array directly as imgData.
|
||||||
|
var canvas = document.createElement('canvas');
|
||||||
|
canvas.width = 1;
|
||||||
|
canvas.height = 1;
|
||||||
|
var ctx = canvas.getContext('2d');
|
||||||
|
|
||||||
|
try {
|
||||||
|
ctx.putImageData({
|
||||||
|
width: 1,
|
||||||
|
height: 1,
|
||||||
|
data: new Uint8Array(4)
|
||||||
|
}, 0, 0);
|
||||||
|
|
||||||
|
CanvasGraphics.prototype.putBinaryImageData =
|
||||||
|
function CanvasGraphicsPutBinaryImageDataNative(ctx, imgData) {
|
||||||
|
ctx.putImageData(imgData, 0, 0);
|
||||||
|
};
|
||||||
|
} catch (e) {
|
||||||
|
CanvasGraphics.prototype.putBinaryImageData =
|
||||||
|
function CanvasGraphicsPutBinaryImageDataShim(ctx, imgData, w, h) {
|
||||||
|
var tmpImgData = ctx.getImageData(0, 0, w, h);
|
||||||
|
|
||||||
|
// Copy over the imageData pixel by pixel.
|
||||||
|
var tmpImgDataPixels = tmpImgData.data;
|
||||||
|
var len = tmpImgDataPixels.length;
|
||||||
|
|
||||||
|
while (len--) {
|
||||||
|
tmpImgDataPixels[len] = imgData.data[len];
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.putImageData(tmpImgData, 0, 0);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
var globalScope = (typeof window === 'undefined') ? this : window;
|
var globalScope = (typeof window === 'undefined') ? this : window;
|
||||||
|
|
||||||
|
var isWorker = (typeof window == 'undefined');
|
||||||
|
|
||||||
var ERRORS = 0, WARNINGS = 1, TODOS = 5;
|
var ERRORS = 0, WARNINGS = 1, TODOS = 5;
|
||||||
var verbosity = WARNINGS;
|
var verbosity = WARNINGS;
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var isWorker = (typeof window == 'undefined');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum time to wait for a font to be loaded by font-face rules.
|
* Maximum time to wait for a font to be loaded by font-face rules.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user