Refactor the getTempCanvas
function in pdf_thumbnail_view.js
to a factory, in preparation for ES6 conversion of the thumbnail related code
This patch intends to simplify future ES6 refactoring of the thumbnail code, since the current code isn't going to work well together with proper `Class`es.
This commit is contained in:
parent
e51718711b
commit
92529e2b11
@ -32,35 +32,52 @@ var THUMBNAIL_CANVAS_BORDER_WIDTH = 1; // px
|
||||
* but increases the overall memory usage. The default value is false.
|
||||
*/
|
||||
|
||||
const TempImageFactory = (function TempImageFactoryClosure() {
|
||||
let tempCanvasCache = null;
|
||||
|
||||
return {
|
||||
getCanvas(width, height) {
|
||||
let tempCanvas = tempCanvasCache;
|
||||
if (!tempCanvas) {
|
||||
tempCanvas = document.createElement('canvas');
|
||||
tempCanvasCache = tempCanvas;
|
||||
}
|
||||
tempCanvas.width = width;
|
||||
tempCanvas.height = height;
|
||||
|
||||
// Since this is a temporary canvas, we need to fill it with a white
|
||||
// background ourselves. `_getPageDrawContext` uses CSS rules for this.
|
||||
if (typeof PDFJSDev === 'undefined' ||
|
||||
PDFJSDev.test('MOZCENTRAL || FIREFOX || GENERIC')) {
|
||||
tempCanvas.mozOpaque = true;
|
||||
}
|
||||
|
||||
let ctx = tempCanvas.getContext('2d', { alpha: false, });
|
||||
ctx.save();
|
||||
ctx.fillStyle = 'rgb(255, 255, 255)';
|
||||
ctx.fillRect(0, 0, width, height);
|
||||
ctx.restore();
|
||||
return tempCanvas;
|
||||
},
|
||||
|
||||
destroyCanvas() {
|
||||
let tempCanvas = tempCanvasCache;
|
||||
if (tempCanvas) {
|
||||
// Zeroing the width and height causes Firefox to release graphics
|
||||
// resources immediately, which can greatly reduce memory consumption.
|
||||
tempCanvas.width = 0;
|
||||
tempCanvas.height = 0;
|
||||
}
|
||||
tempCanvasCache = null;
|
||||
},
|
||||
};
|
||||
})();
|
||||
|
||||
/**
|
||||
* @class
|
||||
* @implements {IRenderableView}
|
||||
*/
|
||||
var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
||||
function getTempCanvas(width, height) {
|
||||
var tempCanvas = PDFThumbnailView.tempImageCache;
|
||||
if (!tempCanvas) {
|
||||
tempCanvas = document.createElement('canvas');
|
||||
PDFThumbnailView.tempImageCache = tempCanvas;
|
||||
}
|
||||
tempCanvas.width = width;
|
||||
tempCanvas.height = height;
|
||||
|
||||
// Since this is a temporary canvas, we need to fill the canvas with a white
|
||||
// background ourselves. `_getPageDrawContext` uses CSS rules for this.
|
||||
if (typeof PDFJSDev === 'undefined' ||
|
||||
PDFJSDev.test('MOZCENTRAL || FIREFOX || GENERIC')) {
|
||||
tempCanvas.mozOpaque = true;
|
||||
}
|
||||
|
||||
var ctx = tempCanvas.getContext('2d', {alpha: false});
|
||||
ctx.save();
|
||||
ctx.fillStyle = 'rgb(255, 255, 255)';
|
||||
ctx.fillRect(0, 0, width, height);
|
||||
ctx.restore();
|
||||
return tempCanvas;
|
||||
}
|
||||
|
||||
/**
|
||||
* @constructs PDFThumbnailView
|
||||
* @param {PDFThumbnailViewOptions} options
|
||||
@ -358,7 +375,8 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
||||
var MAX_NUM_SCALING_STEPS = 3;
|
||||
var reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;
|
||||
var reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS;
|
||||
var reducedImage = getTempCanvas(reducedWidth, reducedHeight);
|
||||
var reducedImage = TempImageFactory.getCanvas(reducedWidth,
|
||||
reducedHeight);
|
||||
var reducedImageCtx = reducedImage.getContext('2d');
|
||||
|
||||
while (reducedWidth > img.width || reducedHeight > img.height) {
|
||||
@ -405,11 +423,13 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
||||
},
|
||||
};
|
||||
|
||||
PDFThumbnailView.cleanup = function() {
|
||||
TempImageFactory.destroyCanvas();
|
||||
};
|
||||
|
||||
return PDFThumbnailView;
|
||||
})();
|
||||
|
||||
PDFThumbnailView.tempImageCache = null;
|
||||
|
||||
export {
|
||||
PDFThumbnailView,
|
||||
};
|
||||
|
@ -104,14 +104,7 @@ var PDFThumbnailViewer = (function PDFThumbnailViewerClosure() {
|
||||
},
|
||||
|
||||
cleanup: function PDFThumbnailViewer_cleanup() {
|
||||
var tempCanvas = PDFThumbnailView.tempImageCache;
|
||||
if (tempCanvas) {
|
||||
// Zeroing the width and height causes Firefox to release graphics
|
||||
// resources immediately, which can greatly reduce memory consumption.
|
||||
tempCanvas.width = 0;
|
||||
tempCanvas.height = 0;
|
||||
}
|
||||
PDFThumbnailView.tempImageCache = null;
|
||||
PDFThumbnailView.cleanup();
|
||||
},
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user