[api-minor] Add a new method, in OptionalContentConfig, to detect the initial Optional Content visibility state

This will allow us to improve the `PDFThumbnailView.setImage` handling in the viewer, and thanks to the added caching this should be reasonbly efficient.
This commit is contained in:
Jonas Jenwald 2022-07-24 13:14:54 +02:00
parent f3d76b42b3
commit ceb4f8a6ab

View File

@ -44,8 +44,12 @@ class OptionalContentGroup {
}
class OptionalContentConfig {
#cachedHasInitialVisibility = true;
#groups = new Map();
#initialVisibility = null;
#order = null;
constructor(data) {
@ -78,6 +82,12 @@ class OptionalContentConfig {
for (const off of data.off) {
this.#groups.get(off)._setVisible(INTERNAL, false);
}
// The following code must always run *last* in the constructor.
this.#initialVisibility = new Map();
for (const [id, group] of this.#groups) {
this.#initialVisibility.set(id, group.visible);
}
}
#evaluateVisibilityExpression(array) {
@ -195,6 +205,21 @@ class OptionalContentConfig {
return;
}
this.#groups.get(id)._setVisible(INTERNAL, !!visible);
this.#cachedHasInitialVisibility = null;
}
get hasInitialVisibility() {
if (this.#cachedHasInitialVisibility !== null) {
return this.#cachedHasInitialVisibility;
}
for (const [id, group] of this.#groups) {
const visible = this.#initialVisibility.get(id);
if (group.visible !== visible) {
return (this.#cachedHasInitialVisibility = false);
}
}
return (this.#cachedHasInitialVisibility = true);
}
getOrder() {