Don't clear the canvas
until re-rendering is finished when the scale
or rotation
is changed (issue 6467)
*This regressed in PR 4920.* The main motivation for PR 4920 was to quickly get rid of old canvases when pages are evicted from the `PDFPageViewBuffer` cache. However it inadvertently broke the use-case where the `canvas` is used as a preview, on scale or rotation changes, until the re-rendering is finished. Fixes 6467.
This commit is contained in:
parent
20b5814249
commit
1ae9ba1d64
@ -105,7 +105,7 @@ var PDFPageView = (function PDFPageViewClosure() {
|
||||
}
|
||||
},
|
||||
|
||||
reset: function PDFPageView_reset(keepAnnotations) {
|
||||
reset: function PDFPageView_reset(keepZoomLayer, keepAnnotations) {
|
||||
if (this.renderTask) {
|
||||
this.renderTask.cancel();
|
||||
}
|
||||
@ -117,12 +117,12 @@ var PDFPageView = (function PDFPageViewClosure() {
|
||||
div.style.height = Math.floor(this.viewport.height) + 'px';
|
||||
|
||||
var childNodes = div.childNodes;
|
||||
var currentZoomLayer = this.zoomLayer || null;
|
||||
var currentZoomLayerNode = (keepZoomLayer && this.zoomLayer) || null;
|
||||
var currentAnnotationNode = (keepAnnotations && this.annotationLayer &&
|
||||
this.annotationLayer.div) || null;
|
||||
for (var i = childNodes.length - 1; i >= 0; i--) {
|
||||
var node = childNodes[i];
|
||||
if (currentZoomLayer === node || currentAnnotationNode === node) {
|
||||
if (currentZoomLayerNode === node || currentAnnotationNode === node) {
|
||||
continue;
|
||||
}
|
||||
div.removeChild(node);
|
||||
@ -139,7 +139,7 @@ var PDFPageView = (function PDFPageViewClosure() {
|
||||
this.annotationLayer = null;
|
||||
}
|
||||
|
||||
if (this.canvas) {
|
||||
if (this.canvas && !currentZoomLayerNode) {
|
||||
// Zeroing the width and height causes Firefox to release graphics
|
||||
// resources immediately, which can greatly reduce memory consumption.
|
||||
this.canvas.width = 0;
|
||||
@ -190,7 +190,7 @@ var PDFPageView = (function PDFPageViewClosure() {
|
||||
if (this.zoomLayer) {
|
||||
this.cssTransform(this.zoomLayer.firstChild);
|
||||
}
|
||||
this.reset(true);
|
||||
this.reset(/* keepZoomLayer = */ true, true);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -401,6 +401,12 @@ var PDFPageView = (function PDFPageViewClosure() {
|
||||
}
|
||||
|
||||
if (self.zoomLayer) {
|
||||
// Zeroing the width and height causes Firefox to release graphics
|
||||
// resources immediately, which can greatly reduce memory consumption.
|
||||
var zoomLayerCanvas = self.zoomLayer.firstChild;
|
||||
zoomLayerCanvas.width = 0;
|
||||
zoomLayerCanvas.height = 0;
|
||||
|
||||
div.removeChild(self.zoomLayer);
|
||||
self.zoomLayer = null;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user