Merge pull request #8002 from mukulmishra18/refactor-canvas

[api-minor] Fix #7798: Refactor scratch canvas usage.
This commit is contained in:
Yury Delendik 2017-02-06 07:45:41 -06:00 committed by GitHub
commit d842c9c6b0
6 changed files with 64 additions and 25 deletions

View file

@ -60,9 +60,9 @@ var warn = sharedUtil.warn;
var FontFaceObject = displayFontLoader.FontFaceObject;
var FontLoader = displayFontLoader.FontLoader;
var CanvasGraphics = displayCanvas.CanvasGraphics;
var createScratchCanvas = displayCanvas.createScratchCanvas;
var Metadata = displayMetadata.Metadata;
var getDefaultSetting = displayDOMUtils.getDefaultSetting;
var DOMCanvasFactory = displayDOMUtils.DOMCanvasFactory;
var DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536
@ -696,6 +696,9 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
* called each time the rendering is paused. To continue
* rendering call the function that is the first argument
* to the callback.
* @property {Object} canvasFactory - (optional) The factory that will be used
* when creating canvases. The default value is
* {DOMCanvasFactory}.
*/
/**
@ -804,6 +807,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
var renderingIntent = (params.intent === 'print' ? 'print' : 'display');
var renderInteractiveForms = (params.renderInteractiveForms === true ?
true : /* Default */ false);
var canvasFactory = params.canvasFactory || new DOMCanvasFactory();
if (!this.intentStates[renderingIntent]) {
this.intentStates[renderingIntent] = Object.create(null);
@ -833,7 +837,8 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
this.objs,
this.commonObjs,
intentState.operatorList,
this.pageNumber);
this.pageNumber,
canvasFactory);
internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print';
if (!intentState.renderTasks) {
intentState.renderTasks = [];
@ -1726,6 +1731,12 @@ var WorkerTransport = (function WorkerTransportClosure() {
return Promise.reject(new Error('Worker was destroyed'));
}
if (typeof document === 'undefined') {
// Make sure that this code is not executing in node.js, as
// it's using DOM image, and there is no library to support that.
return Promise.reject(new Error('"document" is not defined.'));
}
var imageUrl = data[0];
var components = data[1];
if (components !== 3 && components !== 1) {
@ -1741,7 +1752,9 @@ var WorkerTransport = (function WorkerTransportClosure() {
var size = width * height;
var rgbaLength = size * 4;
var buf = new Uint8Array(size * components);
var tmpCanvas = createScratchCanvas(width, height);
var tmpCanvas = document.createElement('canvas');
tmpCanvas.width = width;
tmpCanvas.height = height;
var tmpCtx = tmpCanvas.getContext('2d');
tmpCtx.drawImage(img, 0, 0);
var data = tmpCtx.getImageData(0, 0, width, height).data;
@ -2029,7 +2042,7 @@ var RenderTask = (function RenderTaskClosure() {
var InternalRenderTask = (function InternalRenderTaskClosure() {
function InternalRenderTask(callback, params, objs, commonObjs, operatorList,
pageNumber) {
pageNumber, canvasFactory) {
this.callback = callback;
this.params = params;
this.objs = objs;
@ -2037,6 +2050,7 @@ var InternalRenderTask = (function InternalRenderTaskClosure() {
this.operatorListIdx = null;
this.operatorList = operatorList;
this.pageNumber = pageNumber;
this.canvasFactory = canvasFactory;
this.running = false;
this.graphicsReadyCallback = null;
this.graphicsReady = false;
@ -2067,7 +2081,8 @@ var InternalRenderTask = (function InternalRenderTaskClosure() {
var params = this.params;
this.gfx = new CanvasGraphics(params.canvasContext, this.commonObjs,
this.objs, params.imageLayer);
this.objs, this.canvasFactory,
params.imageLayer);
this.gfx.beginDrawing(params.transform, params.viewport, transparency);
this.operatorListIdx = 0;