Convert PDFPageViewBuffer to a standard class

This patch makes use of private `class` fields, to ensure that the previously "private" properties remain as such.
This commit is contained in:
Jonas Jenwald 2021-11-06 10:09:59 +01:00
parent c62bcb55ac
commit 0eba15b43a

View File

@ -92,18 +92,37 @@ const DEFAULT_CACHE_SIZE = 10;
* @property {IL10n} l10n - Localization service. * @property {IL10n} l10n - Localization service.
*/ */
function PDFPageViewBuffer(size) { class PDFPageViewBuffer {
const data = []; #data = [];
this.push = function (view) {
const i = data.indexOf(view); #size = 0;
constructor(size) {
this.#size = size;
if (
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("!PRODUCTION || TESTING")
) {
Object.defineProperty(this, "_buffer", {
get() {
return this.#data.slice();
},
});
}
}
push(view) {
const data = this.#data,
i = data.indexOf(view);
if (i >= 0) { if (i >= 0) {
data.splice(i, 1); data.splice(i, 1);
} }
data.push(view); data.push(view);
if (data.length > size) { if (data.length > this.#size) {
data.shift().destroy(); data.shift().destroy();
} }
}; }
/** /**
* After calling resize, the size of the buffer will be `newSize`. * After calling resize, the size of the buffer will be `newSize`.
@ -112,31 +131,22 @@ function PDFPageViewBuffer(size) {
* `idsToKeep` has no impact on the final size of the buffer; if `idsToKeep` * `idsToKeep` has no impact on the final size of the buffer; if `idsToKeep`
* is larger than `newSize`, some of those pages will be destroyed anyway. * is larger than `newSize`, some of those pages will be destroyed anyway.
*/ */
this.resize = function (newSize, idsToKeep = null) { resize(newSize, idsToKeep = null) {
size = newSize; this.#size = newSize;
const data = this.#data;
if (idsToKeep) { if (idsToKeep) {
moveToEndOfArray(data, function (page) { moveToEndOfArray(data, function (page) {
return idsToKeep.has(page.id); return idsToKeep.has(page.id);
}); });
} }
while (data.length > size) { while (data.length > this.#size) {
data.shift().destroy(); data.shift().destroy();
} }
}; }
this.has = function (view) { has(view) {
return data.includes(view); return this.#data.includes(view);
};
if (
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("!PRODUCTION || TESTING")
) {
Object.defineProperty(this, "_buffer", {
get() {
return data.slice();
},
});
} }
} }
@ -156,6 +166,8 @@ function isSameScale(oldScale, newScale) {
* Simple viewer control to display PDF content/pages. * Simple viewer control to display PDF content/pages.
*/ */
class BaseViewer { class BaseViewer {
#buffer = null;
#scrollModePageState = null; #scrollModePageState = null;
/** /**
@ -518,7 +530,7 @@ class BaseViewer {
} }
// Add the page to the buffer at the start of drawing. That way it can be // Add the page to the buffer at the start of drawing. That way it can be
// evicted from the buffer and destroyed even if we pause its rendering. // evicted from the buffer and destroyed even if we pause its rendering.
this._buffer.push(pageView); this.#buffer.push(pageView);
}; };
this.eventBus._on("pagerender", this._onBeforeDraw); this.eventBus._on("pagerender", this._onBeforeDraw);
@ -684,7 +696,7 @@ class BaseViewer {
this._currentScale = UNKNOWN_SCALE; this._currentScale = UNKNOWN_SCALE;
this._currentScaleValue = null; this._currentScaleValue = null;
this._pageLabels = null; this._pageLabels = null;
this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); this.#buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
this._location = null; this._location = null;
this._pagesRotation = 0; this._pagesRotation = 0;
this._optionalContentConfigPromise = null; this._optionalContentConfigPromise = null;
@ -1153,7 +1165,7 @@ class BaseViewer {
return; return;
} }
const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1); const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);
this._buffer.resize(newCacheSize, visible.ids); this.#buffer.resize(newCacheSize, visible.ids);
this.renderingQueue.renderHighestPriority(visible); this.renderingQueue.renderHighestPriority(visible);
@ -1304,7 +1316,7 @@ class BaseViewer {
return false; return false;
} }
const pageView = this._pages[pageNumber - 1]; const pageView = this._pages[pageNumber - 1];
return this._buffer.has(pageView); return this.#buffer.has(pageView);
} }
cleanup() { cleanup() {