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:
parent
c62bcb55ac
commit
0eba15b43a
@ -92,18 +92,37 @@ const DEFAULT_CACHE_SIZE = 10;
|
||||
* @property {IL10n} l10n - Localization service.
|
||||
*/
|
||||
|
||||
function PDFPageViewBuffer(size) {
|
||||
const data = [];
|
||||
this.push = function (view) {
|
||||
const i = data.indexOf(view);
|
||||
class PDFPageViewBuffer {
|
||||
#data = [];
|
||||
|
||||
#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) {
|
||||
data.splice(i, 1);
|
||||
}
|
||||
data.push(view);
|
||||
if (data.length > size) {
|
||||
if (data.length > this.#size) {
|
||||
data.shift().destroy();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 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`
|
||||
* is larger than `newSize`, some of those pages will be destroyed anyway.
|
||||
*/
|
||||
this.resize = function (newSize, idsToKeep = null) {
|
||||
size = newSize;
|
||||
resize(newSize, idsToKeep = null) {
|
||||
this.#size = newSize;
|
||||
|
||||
const data = this.#data;
|
||||
if (idsToKeep) {
|
||||
moveToEndOfArray(data, function (page) {
|
||||
return idsToKeep.has(page.id);
|
||||
});
|
||||
}
|
||||
while (data.length > size) {
|
||||
while (data.length > this.#size) {
|
||||
data.shift().destroy();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
this.has = function (view) {
|
||||
return data.includes(view);
|
||||
};
|
||||
|
||||
if (
|
||||
typeof PDFJSDev === "undefined" ||
|
||||
PDFJSDev.test("!PRODUCTION || TESTING")
|
||||
) {
|
||||
Object.defineProperty(this, "_buffer", {
|
||||
get() {
|
||||
return data.slice();
|
||||
},
|
||||
});
|
||||
has(view) {
|
||||
return this.#data.includes(view);
|
||||
}
|
||||
}
|
||||
|
||||
@ -156,6 +166,8 @@ function isSameScale(oldScale, newScale) {
|
||||
* Simple viewer control to display PDF content/pages.
|
||||
*/
|
||||
class BaseViewer {
|
||||
#buffer = 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
|
||||
// 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);
|
||||
|
||||
@ -684,7 +696,7 @@ class BaseViewer {
|
||||
this._currentScale = UNKNOWN_SCALE;
|
||||
this._currentScaleValue = null;
|
||||
this._pageLabels = null;
|
||||
this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
|
||||
this.#buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
|
||||
this._location = null;
|
||||
this._pagesRotation = 0;
|
||||
this._optionalContentConfigPromise = null;
|
||||
@ -1153,7 +1165,7 @@ class BaseViewer {
|
||||
return;
|
||||
}
|
||||
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);
|
||||
|
||||
@ -1304,7 +1316,7 @@ class BaseViewer {
|
||||
return false;
|
||||
}
|
||||
const pageView = this._pages[pageNumber - 1];
|
||||
return this._buffer.has(pageView);
|
||||
return this.#buffer.has(pageView);
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user