Move the PresentationMode-specific scrollWheel code from PDFViewerApplication
This commit is contained in:
parent
2dc1af8028
commit
95b2ec124b
@ -30,6 +30,8 @@ var PresentationMode = {
|
|||||||
//#if (GENERIC || CHROME)
|
//#if (GENERIC || CHROME)
|
||||||
prevCoords: { x: null, y: null },
|
prevCoords: { x: null, y: null },
|
||||||
//#endif
|
//#endif
|
||||||
|
mouseScrollTimeStamp: 0,
|
||||||
|
mouseScrollDelta: 0,
|
||||||
|
|
||||||
initialize: function presentationModeInitialize(options) {
|
initialize: function presentationModeInitialize(options) {
|
||||||
this.initialized = true;
|
this.initialized = true;
|
||||||
@ -146,6 +148,7 @@ var PresentationMode = {
|
|||||||
|
|
||||||
window.addEventListener('mousemove', this.mouseMove, false);
|
window.addEventListener('mousemove', this.mouseMove, false);
|
||||||
window.addEventListener('mousedown', this.mouseDown, false);
|
window.addEventListener('mousedown', this.mouseDown, false);
|
||||||
|
window.addEventListener('keydown', this.keyDown, false);
|
||||||
window.addEventListener('contextmenu', this.contextMenu, false);
|
window.addEventListener('contextmenu', this.contextMenu, false);
|
||||||
|
|
||||||
this.showControls();
|
this.showControls();
|
||||||
@ -175,10 +178,11 @@ var PresentationMode = {
|
|||||||
|
|
||||||
window.removeEventListener('mousemove', this.mouseMove, false);
|
window.removeEventListener('mousemove', this.mouseMove, false);
|
||||||
window.removeEventListener('mousedown', this.mouseDown, false);
|
window.removeEventListener('mousedown', this.mouseDown, false);
|
||||||
|
window.removeEventListener('keydown', this.keyDown, false);
|
||||||
window.removeEventListener('contextmenu', this.contextMenu, false);
|
window.removeEventListener('contextmenu', this.contextMenu, false);
|
||||||
|
|
||||||
this.hideControls();
|
this.hideControls();
|
||||||
PDFViewerApplication.clearMouseScrollState();
|
this.clearMouseScrollState();
|
||||||
this.container.removeAttribute('contextmenu');
|
this.container.removeAttribute('contextmenu');
|
||||||
this.contextMenuOpen = false;
|
this.contextMenuOpen = false;
|
||||||
|
|
||||||
@ -246,8 +250,79 @@ var PresentationMode = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
keyDown: function presentationModeKeyDown(evt) {
|
||||||
|
PresentationMode.clearMouseScrollState();
|
||||||
|
},
|
||||||
|
|
||||||
contextMenu: function presentationModeContextMenu(evt) {
|
contextMenu: function presentationModeContextMenu(evt) {
|
||||||
PresentationMode.contextMenuOpen = true;
|
PresentationMode.contextMenuOpen = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function flips the page in presentation mode if the user scrolls up
|
||||||
|
* or down with large enough motion and prevents page flipping too often.
|
||||||
|
* @param {number} mouseScrollDelta The delta value from the mouse event.
|
||||||
|
*/
|
||||||
|
mouseScroll: function presentationModeMouseScroll(mouseScrollDelta) {
|
||||||
|
if (!this.initialized) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var MOUSE_SCROLL_COOLDOWN_TIME = 50;
|
||||||
|
|
||||||
|
var currentTime = (new Date()).getTime();
|
||||||
|
var storedTime = this.mouseScrollTimeStamp;
|
||||||
|
|
||||||
|
// In case one page has already been flipped there is a cooldown time
|
||||||
|
// which has to expire before next page can be scrolled on to.
|
||||||
|
if (currentTime > storedTime &&
|
||||||
|
currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// In case the user decides to scroll to the opposite direction than before
|
||||||
|
// clear the accumulated delta.
|
||||||
|
if ((this.mouseScrollDelta > 0 && mouseScrollDelta < 0) ||
|
||||||
|
(this.mouseScrollDelta < 0 && mouseScrollDelta > 0)) {
|
||||||
|
this.clearMouseScrollState();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.mouseScrollDelta += mouseScrollDelta;
|
||||||
|
|
||||||
|
var PAGE_FLIP_THRESHOLD = 120;
|
||||||
|
if (Math.abs(this.mouseScrollDelta) >= PAGE_FLIP_THRESHOLD) {
|
||||||
|
|
||||||
|
var PageFlipDirection = {
|
||||||
|
UP: -1,
|
||||||
|
DOWN: 1
|
||||||
|
};
|
||||||
|
|
||||||
|
// In presentation mode scroll one page at a time.
|
||||||
|
var pageFlipDirection = (this.mouseScrollDelta > 0) ?
|
||||||
|
PageFlipDirection.UP :
|
||||||
|
PageFlipDirection.DOWN;
|
||||||
|
this.clearMouseScrollState();
|
||||||
|
var currentPage = PDFViewerApplication.page;
|
||||||
|
|
||||||
|
// In case we are already on the first or the last page there is no need
|
||||||
|
// to do anything.
|
||||||
|
if ((currentPage === 1 && pageFlipDirection === PageFlipDirection.UP) ||
|
||||||
|
(currentPage === PDFViewerApplication.pagesCount &&
|
||||||
|
pageFlipDirection === PageFlipDirection.DOWN)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PDFViewerApplication.page += pageFlipDirection;
|
||||||
|
this.mouseScrollTimeStamp = currentTime;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function clears the member attributes used with mouse scrolling in
|
||||||
|
* presentation mode.
|
||||||
|
*/
|
||||||
|
clearMouseScrollState: function presentationModeClearMouseScrollState() {
|
||||||
|
this.mouseScrollTimeStamp = 0;
|
||||||
|
this.mouseScrollDelta = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -111,8 +111,6 @@ var PDFViewerApplication = {
|
|||||||
updateScaleControls: true,
|
updateScaleControls: true,
|
||||||
isInitialViewSet: false,
|
isInitialViewSet: false,
|
||||||
animationStartedPromise: null,
|
animationStartedPromise: null,
|
||||||
mouseScrollTimeStamp: 0,
|
|
||||||
mouseScrollDelta: 0,
|
|
||||||
preferenceSidebarViewOnLoad: SidebarView.NONE,
|
preferenceSidebarViewOnLoad: SidebarView.NONE,
|
||||||
preferencePdfBugEnabled: false,
|
preferencePdfBugEnabled: false,
|
||||||
preferenceShowPreviousViewOnLoad: true,
|
preferenceShowPreviousViewOnLoad: true,
|
||||||
@ -1342,72 +1340,11 @@ var PDFViewerApplication = {
|
|||||||
PresentationMode.request();
|
PresentationMode.request();
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
scrollPresentationMode: function pdfViewScrollPresentationMode(delta) {
|
||||||
* This function flips the page in presentation mode if the user scrolls up
|
if (!this.supportsFullscreen) {
|
||||||
* or down with large enough motion and prevents page flipping too often.
|
|
||||||
*
|
|
||||||
* @this {PDFView}
|
|
||||||
* @param {number} mouseScrollDelta The delta value from the mouse event.
|
|
||||||
*/
|
|
||||||
mouseScroll: function pdfViewMouseScroll(mouseScrollDelta) {
|
|
||||||
var MOUSE_SCROLL_COOLDOWN_TIME = 50;
|
|
||||||
|
|
||||||
var currentTime = (new Date()).getTime();
|
|
||||||
var storedTime = this.mouseScrollTimeStamp;
|
|
||||||
|
|
||||||
// In case one page has already been flipped there is a cooldown time
|
|
||||||
// which has to expire before next page can be scrolled on to.
|
|
||||||
if (currentTime > storedTime &&
|
|
||||||
currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
PresentationMode.mouseScroll(delta);
|
||||||
// In case the user decides to scroll to the opposite direction than before
|
|
||||||
// clear the accumulated delta.
|
|
||||||
if ((this.mouseScrollDelta > 0 && mouseScrollDelta < 0) ||
|
|
||||||
(this.mouseScrollDelta < 0 && mouseScrollDelta > 0)) {
|
|
||||||
this.clearMouseScrollState();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.mouseScrollDelta += mouseScrollDelta;
|
|
||||||
|
|
||||||
var PAGE_FLIP_THRESHOLD = 120;
|
|
||||||
if (Math.abs(this.mouseScrollDelta) >= PAGE_FLIP_THRESHOLD) {
|
|
||||||
|
|
||||||
var PageFlipDirection = {
|
|
||||||
UP: -1,
|
|
||||||
DOWN: 1
|
|
||||||
};
|
|
||||||
|
|
||||||
// In presentation mode scroll one page at a time.
|
|
||||||
var pageFlipDirection = (this.mouseScrollDelta > 0) ?
|
|
||||||
PageFlipDirection.UP :
|
|
||||||
PageFlipDirection.DOWN;
|
|
||||||
this.clearMouseScrollState();
|
|
||||||
var currentPage = this.page;
|
|
||||||
|
|
||||||
// In case we are already on the first or the last page there is no need
|
|
||||||
// to do anything.
|
|
||||||
if ((currentPage === 1 && pageFlipDirection === PageFlipDirection.UP) ||
|
|
||||||
(currentPage === this.pagesCount &&
|
|
||||||
pageFlipDirection === PageFlipDirection.DOWN)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.page += pageFlipDirection;
|
|
||||||
this.mouseScrollTimeStamp = currentTime;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function clears the member attributes used with mouse scrolling in
|
|
||||||
* presentation mode.
|
|
||||||
*
|
|
||||||
* @this {PDFView}
|
|
||||||
*/
|
|
||||||
clearMouseScrollState: function pdfViewClearMouseScrollState() {
|
|
||||||
this.mouseScrollTimeStamp = 0;
|
|
||||||
this.mouseScrollDelta = 0;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
//#if GENERIC
|
//#if GENERIC
|
||||||
@ -1986,9 +1923,10 @@ function handleMouseWheel(evt) {
|
|||||||
|
|
||||||
if (PDFViewerApplication.pdfViewer.isInPresentationMode) {
|
if (PDFViewerApplication.pdfViewer.isInPresentationMode) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
PDFViewerApplication.mouseScroll(ticks * MOUSE_WHEEL_DELTA_FACTOR);
|
PDFViewerApplication.scrollPresentationMode(ticks *
|
||||||
|
MOUSE_WHEEL_DELTA_FACTOR);
|
||||||
} else if (evt.ctrlKey || evt.metaKey) {
|
} else if (evt.ctrlKey || evt.metaKey) {
|
||||||
// Only zoom the pages, not the entire viewer
|
// Only zoom the pages, not the entire viewer.
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
PDFViewerApplication[direction](Math.abs(ticks));
|
PDFViewerApplication[direction](Math.abs(ticks));
|
||||||
}
|
}
|
||||||
@ -2256,7 +2194,6 @@ window.addEventListener('keydown', function keydown(evt) {
|
|||||||
|
|
||||||
if (handled) {
|
if (handled) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
PDFViewerApplication.clearMouseScrollState();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user