Skip to content

Commit

Permalink
Merge pull request #14298 from Snuffleupagus/issue-10906
Browse files Browse the repository at this point in the history
Center pages vertically in PresentationMode (issue 10906)
  • Loading branch information
timvandermeij authored Nov 24, 2021
2 parents 9739323 + f7b1da4 commit a2c380c
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 34 deletions.
64 changes: 46 additions & 18 deletions web/base_viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,24 +159,14 @@ class PDFPageViewBuffer {
}
}

function isSameScale(oldScale, newScale) {
if (newScale === oldScale) {
return true;
}
if (Math.abs(newScale - oldScale) < 1e-15) {
// Prevent unnecessary re-rendering of all pages when the scale
// changes only because of limited numerical precision.
return true;
}
return false;
}

/**
* Simple viewer control to display PDF content/pages.
*/
class BaseViewer {
#buffer = null;

#previousContainerHeight = 0;

#scrollModePageState = null;

/**
Expand Down Expand Up @@ -751,7 +741,20 @@ class BaseViewer {
if (this._spreadMode === SpreadMode.NONE) {
// Finally, append the new page to the viewer.
const pageView = this._pages[pageNumber - 1];
viewer.appendChild(pageView.div);

if (this.isInPresentationMode) {
const spread = document.createElement("div");
spread.className = "spread";
const dummyPage = document.createElement("div");
dummyPage.className = "dummyPage";
dummyPage.style.height = `${this.container.clientHeight}px`;

spread.appendChild(dummyPage);
spread.appendChild(pageView.div);
viewer.appendChild(spread);
} else {
viewer.appendChild(pageView.div);
}

state.pages.push(pageView);
} else {
Expand Down Expand Up @@ -828,10 +831,29 @@ class BaseViewer {
scrollIntoView(pageDiv, pageSpot);
}

/**
* Prevent unnecessary re-rendering of all pages when the scale changes
* only because of limited numerical precision.
*/
#isSameScale(newScale) {
if (
this.isInPresentationMode &&
this.container.clientHeight !== this.#previousContainerHeight
) {
// Ensure that the current page remains centered vertically if/when
// the window is resized while PresentationMode is active.
return false;
}
return (
newScale === this._currentScale ||
Math.abs(newScale - this._currentScale) < 1e-15
);
}

_setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {
this._currentScaleValue = newValue.toString();

if (isSameScale(this._currentScale, newScale)) {
if (this.#isSameScale(newScale)) {
if (preset) {
this.eventBus.dispatch("scalechanging", {
source: this,
Expand Down Expand Up @@ -886,6 +908,8 @@ class BaseViewer {
if (this.defaultRenderingQueue) {
this.update();
}

this.#previousContainerHeight = this.container.clientHeight;
}

/**
Expand All @@ -911,11 +935,15 @@ class BaseViewer {
if (!currentPage) {
return;
}
const noPadding = this.isInPresentationMode || this.removePageBorders;
let hPadding = noPadding ? 0 : SCROLLBAR_PADDING;
let vPadding = noPadding ? 0 : VERTICAL_PADDING;
let hPadding = SCROLLBAR_PADDING,
vPadding = VERTICAL_PADDING;

if (!noPadding && this._scrollMode === ScrollMode.HORIZONTAL) {
if (this.isInPresentationMode) {
hPadding = vPadding = 4;
} else if (this.removePageBorders) {
hPadding = vPadding = 0;
}
if (this._scrollMode === ScrollMode.HORIZONTAL) {
[hPadding, vPadding] = [vPadding, hPadding]; // Swap the padding values.
}
const pageWidthScale =
Expand Down
29 changes: 14 additions & 15 deletions web/pdf_viewer.css
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
@import url(xfa_layer_builder.css);

:root {
--pdfViewer-padding-bottom: none;
--pdfViewer-padding-bottom: 0;
--page-margin: 1px auto -8px;
--page-border: 9px solid transparent;
--spreadHorizontalWrapped-margin-LR: -3.5px;
Expand Down Expand Up @@ -55,6 +55,12 @@
background-color: rgba(255, 255, 255, 1);
}

.pdfViewer .dummyPage {
position: relative;
width: 0;
/* The height is set via JS, see `BaseViewer.#ensurePageViewVisible`. */
}

.pdfViewer.removePageBorders .page {
margin: 0 auto 10px;
border: none;
Expand Down Expand Up @@ -90,6 +96,7 @@
}

.spread .page,
.spread .dummyPage,
.pdfViewer.scrollHorizontal .page,
.pdfViewer.scrollWrapped .page,
.pdfViewer.scrollHorizontal .spread,
Expand Down Expand Up @@ -135,22 +142,14 @@
}

.pdfPresentationMode .pdfViewer {
margin-left: 0;
margin-right: 0;
padding-bottom: 0;
}

.pdfPresentationMode .pdfViewer .page,
.pdfPresentationMode .pdfViewer .spread {
display: block;
}

.pdfPresentationMode .pdfViewer .page,
.pdfPresentationMode .pdfViewer.removePageBorders .page {
margin-left: auto;
margin-right: auto;
.pdfPresentationMode .spread {
margin: 0;
}

.pdfPresentationMode:fullscreen .pdfViewer .page {
margin-bottom: 100%;
border: 0;
.pdfPresentationMode .pdfViewer .page {
margin: 0 auto;
border: 2px solid transparent;
}
1 change: 0 additions & 1 deletion web/viewer.css
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,6 @@ select {

#viewerContainer.pdfPresentationMode:fullscreen {
top: 0;
border-top: 2px solid rgba(0, 0, 0, 0);
background-color: rgba(0, 0, 0, 1);
width: 100%;
height: 100%;
Expand Down

0 comments on commit a2c380c

Please sign in to comment.