Re-factor how PDFPresentationMode
, internally, tracks the current PresentationModeState
With the changes in the previous patch, we can simplify the state-tracking by using the `PresentationModeState`-values directly in the `PDFPresentationMode` class.
This commit is contained in:
parent
8d61b7c088
commit
bde6d9ffba
@ -41,6 +41,8 @@ const SWIPE_ANGLE_THRESHOLD = Math.PI / 6;
|
||||
*/
|
||||
|
||||
class PDFPresentationMode {
|
||||
#state = PresentationModeState.UNKNOWN;
|
||||
|
||||
#args = null;
|
||||
|
||||
/**
|
||||
@ -51,7 +53,6 @@ class PDFPresentationMode {
|
||||
this.pdfViewer = pdfViewer;
|
||||
this.eventBus = eventBus;
|
||||
|
||||
this.active = false;
|
||||
this.contextMenuOpen = false;
|
||||
this.mouseScrollTimeStamp = 0;
|
||||
this.mouseScrollDelta = 0;
|
||||
@ -63,25 +64,21 @@ class PDFPresentationMode {
|
||||
* @returns {Promise<boolean>} Indicating if the request was successful.
|
||||
*/
|
||||
async request() {
|
||||
if (
|
||||
this.switchInProgress ||
|
||||
this.active ||
|
||||
!this.pdfViewer.pagesCount ||
|
||||
!this.container.requestFullscreen
|
||||
) {
|
||||
const { container, pdfViewer } = this;
|
||||
|
||||
if (this.active || !pdfViewer.pagesCount || !container.requestFullscreen) {
|
||||
return false;
|
||||
}
|
||||
this.#addFullscreenChangeListeners();
|
||||
this.#setSwitchInProgress();
|
||||
this.#notifyStateChange();
|
||||
this.#notifyStateChange(PresentationModeState.CHANGING);
|
||||
|
||||
const promise = this.container.requestFullscreen();
|
||||
const promise = container.requestFullscreen();
|
||||
|
||||
this.#args = {
|
||||
pageNumber: this.pdfViewer.currentPageNumber,
|
||||
scaleValue: this.pdfViewer.currentScaleValue,
|
||||
scrollMode: this.pdfViewer.scrollMode,
|
||||
spreadMode: this.pdfViewer.spreadMode,
|
||||
pageNumber: pdfViewer.currentPageNumber,
|
||||
scaleValue: pdfViewer.currentScaleValue,
|
||||
scrollMode: pdfViewer.scrollMode,
|
||||
spreadMode: pdfViewer.spreadMode,
|
||||
};
|
||||
|
||||
try {
|
||||
@ -89,12 +86,18 @@ class PDFPresentationMode {
|
||||
return true;
|
||||
} catch (reason) {
|
||||
this.#removeFullscreenChangeListeners();
|
||||
this.#resetSwitchInProgress();
|
||||
this.#notifyStateChange();
|
||||
this.#notifyStateChange(PresentationModeState.NORMAL);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
get active() {
|
||||
return (
|
||||
this.#state === PresentationModeState.CHANGING ||
|
||||
this.#state === PresentationModeState.FULLSCREEN
|
||||
);
|
||||
}
|
||||
|
||||
#mouseWheel(evt) {
|
||||
if (!this.active) {
|
||||
return;
|
||||
@ -134,31 +137,14 @@ class PDFPresentationMode {
|
||||
}
|
||||
}
|
||||
|
||||
#notifyStateChange() {
|
||||
let state = PresentationModeState.NORMAL;
|
||||
if (this.switchInProgress) {
|
||||
state = PresentationModeState.CHANGING;
|
||||
} else if (this.active) {
|
||||
state = PresentationModeState.FULLSCREEN;
|
||||
}
|
||||
this.eventBus.dispatch("presentationmodechanged", {
|
||||
source: this,
|
||||
state,
|
||||
});
|
||||
}
|
||||
#notifyStateChange(state) {
|
||||
this.#state = state;
|
||||
|
||||
#setSwitchInProgress() {
|
||||
this.switchInProgress = true;
|
||||
}
|
||||
|
||||
#resetSwitchInProgress() {
|
||||
this.switchInProgress = false;
|
||||
this.eventBus.dispatch("presentationmodechanged", { source: this, state });
|
||||
}
|
||||
|
||||
#enter() {
|
||||
this.active = true;
|
||||
this.#resetSwitchInProgress();
|
||||
this.#notifyStateChange();
|
||||
this.#notifyStateChange(PresentationModeState.FULLSCREEN);
|
||||
this.container.classList.add(ACTIVE_SELECTOR);
|
||||
|
||||
// Ensure that the correct page is scrolled into view when entering
|
||||
@ -187,9 +173,8 @@ class PDFPresentationMode {
|
||||
// Ensure that the correct page is scrolled into view when exiting
|
||||
// Presentation Mode, by waiting until fullscreen mode is disabled.
|
||||
setTimeout(() => {
|
||||
this.active = false;
|
||||
this.#removeFullscreenChangeListeners();
|
||||
this.#notifyStateChange();
|
||||
this.#notifyStateChange(PresentationModeState.NORMAL);
|
||||
|
||||
this.pdfViewer.scrollMode = this.#args.scrollMode;
|
||||
this.pdfViewer.spreadMode = this.#args.spreadMode;
|
||||
|
Loading…
x
Reference in New Issue
Block a user