Browse Source

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.
Jonas Jenwald 8 years ago
parent
commit
92529e2b11
  1. 46
      web/pdf_thumbnail_view.js
  2. 9
      web/pdf_thumbnail_viewer.js

46
web/pdf_thumbnail_view.js

@ -32,35 +32,52 @@ var THUMBNAIL_CANVAS_BORDER_WIDTH = 1; // px
* but increases the overall memory usage. The default value is false. * but increases the overall memory usage. The default value is false.
*/ */
/** const TempImageFactory = (function TempImageFactoryClosure() {
* @class let tempCanvasCache = null;
* @implements {IRenderableView}
*/ return {
var PDFThumbnailView = (function PDFThumbnailViewClosure() { getCanvas(width, height) {
function getTempCanvas(width, height) { let tempCanvas = tempCanvasCache;
var tempCanvas = PDFThumbnailView.tempImageCache;
if (!tempCanvas) { if (!tempCanvas) {
tempCanvas = document.createElement('canvas'); tempCanvas = document.createElement('canvas');
PDFThumbnailView.tempImageCache = tempCanvas; tempCanvasCache = tempCanvas;
} }
tempCanvas.width = width; tempCanvas.width = width;
tempCanvas.height = height; tempCanvas.height = height;
// Since this is a temporary canvas, we need to fill the canvas with a white // Since this is a temporary canvas, we need to fill it with a white
// background ourselves. `_getPageDrawContext` uses CSS rules for this. // background ourselves. `_getPageDrawContext` uses CSS rules for this.
if (typeof PDFJSDev === 'undefined' || if (typeof PDFJSDev === 'undefined' ||
PDFJSDev.test('MOZCENTRAL || FIREFOX || GENERIC')) { PDFJSDev.test('MOZCENTRAL || FIREFOX || GENERIC')) {
tempCanvas.mozOpaque = true; tempCanvas.mozOpaque = true;
} }
var ctx = tempCanvas.getContext('2d', {alpha: false}); let ctx = tempCanvas.getContext('2d', { alpha: false, });
ctx.save(); ctx.save();
ctx.fillStyle = 'rgb(255, 255, 255)'; ctx.fillStyle = 'rgb(255, 255, 255)';
ctx.fillRect(0, 0, width, height); ctx.fillRect(0, 0, width, height);
ctx.restore(); ctx.restore();
return tempCanvas; 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() {
/** /**
* @constructs PDFThumbnailView * @constructs PDFThumbnailView
* @param {PDFThumbnailViewOptions} options * @param {PDFThumbnailViewOptions} options
@ -358,7 +375,8 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
var MAX_NUM_SCALING_STEPS = 3; var MAX_NUM_SCALING_STEPS = 3;
var reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS; var reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;
var reducedHeight = canvas.height << 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'); var reducedImageCtx = reducedImage.getContext('2d');
while (reducedWidth > img.width || reducedHeight > img.height) { while (reducedWidth > img.width || reducedHeight > img.height) {
@ -405,11 +423,13 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
}, },
}; };
PDFThumbnailView.cleanup = function() {
TempImageFactory.destroyCanvas();
};
return PDFThumbnailView; return PDFThumbnailView;
})(); })();
PDFThumbnailView.tempImageCache = null;
export { export {
PDFThumbnailView, PDFThumbnailView,
}; };

9
web/pdf_thumbnail_viewer.js

@ -104,14 +104,7 @@ var PDFThumbnailViewer = (function PDFThumbnailViewerClosure() {
}, },
cleanup: function PDFThumbnailViewer_cleanup() { cleanup: function PDFThumbnailViewer_cleanup() {
var tempCanvas = PDFThumbnailView.tempImageCache; PDFThumbnailView.cleanup();
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;
}, },
/** /**

Loading…
Cancel
Save