Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DO NOT MERGE] Debugging Windows integration test #18859

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions src/display/display_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -1103,12 +1103,8 @@ function setLayerDimensions(

const w = `var(--scale-factor) * ${pageWidth}px`,
h = `var(--scale-factor) * ${pageHeight}px`;
const widthStr = useRound
? `round(down, ${w}, var(--scale-round-x, 1px))`
: `calc(${w})`,
heightStr = useRound
? `round(down, ${h}, var(--scale-round-y, 1px))`
: `calc(${h})`;
const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`,
heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`;

if (!mustFlip || viewport.rotation % 180 === 0) {
style.width = widthStr;
Expand Down
2 changes: 1 addition & 1 deletion test/integration/highlight_editor_spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1830,7 +1830,7 @@
await closePages(pages);
});

it("must check that an existing highlight is ignored on hovering", async () => {
fit("must check that an existing highlight is ignored on hovering", async () => {

Check failure on line 1833 in test/integration/highlight_editor_spec.mjs

View workflow job for this annotation

GitHub Actions / Lint (lts/*)

Unexpected fit
await Promise.all(
pages.map(async ([browserName, page]) => {
await switchToHighlight(page);
Expand Down
74 changes: 0 additions & 74 deletions test/integration/viewer_spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,7 @@ import {
createPromise,
getSpanRectFromText,
loadAndWait,
scrollIntoView,
waitForPageRendered,
} from "./test_utils.mjs";
import { PNG } from "pngjs";

describe("PDF viewer", () => {
describe("Zoom origin", () => {
Expand Down Expand Up @@ -368,75 +365,4 @@ describe("PDF viewer", () => {
});
});
});

describe("Canvas fits the page", () => {
let pages;

beforeAll(async () => {
pages = await loadAndWait(
"issue18694.pdf",
".textLayer .endOfContent",
"page-width"
);
});

afterAll(async () => {
await closePages(pages);
});

it("must check that canvas perfectly fits the page whatever the zoom level is", async () => {
await Promise.all(
pages.map(async ([browserName, page]) => {
const debug = false;

// The pdf has a single page with a red background.
// We set the viewer background to red, because when screenshoting
// some part of the viewer background can be visible.
// But here we don't care about the viewer background: we only
// care about the page background and the canvas default color.

await page.evaluate(() => {
document.body.style.background = "#ff0000";
const toolbar = document.querySelector(".toolbar");
toolbar.style.display = "none";
});
await page.waitForSelector(".toolbar", { visible: false });
await page.evaluate(() => {
const p = document.querySelector(`.page[data-page-number="1"]`);
p.style.border = "none";
});

for (let i = 0; ; i++) {
const handle = await waitForPageRendered(page);
await page.evaluate(() => window.PDFViewerApplication.zoomOut());
await awaitPromise(handle);
await scrollIntoView(page, `.page[data-page-number="1"]`);

const element = await page.$(`.page[data-page-number="1"]`);
const png = await element.screenshot({
type: "png",
path: debug ? `foo${i}.png` : "",
});
const pageImage = PNG.sync.read(Buffer.from(png));
let buffer = new Uint32Array(pageImage.data.buffer);

// Search for the first red pixel.
const j = buffer.indexOf(0xff0000ff);
buffer = buffer.slice(j);

expect(buffer.every(x => x === 0xff0000ff))
.withContext(`In ${browserName}, in the ${i}th zoom in`)
.toBe(true);

const currentScale = await page.evaluate(
() => window.PDFViewerApplication.pdfViewer.currentScale
);
if (currentScale <= 0.1) {
break;
}
}
})
);
});
});
});
Binary file removed test/pdfs/issue18694.pdf
Binary file not shown.
14 changes: 0 additions & 14 deletions test/unit/ui_utils_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import {
backtrackBeforeAllVisibleElements,
binarySearchFirstItem,
calcRound,
getPageSizeInches,
getVisibleElements,
isPortraitOrientation,
Expand Down Expand Up @@ -628,17 +627,4 @@ describe("ui_utils", function () {
});
});
});

describe("calcRound", function () {
it("should handle different browsers/environments correctly", function () {
if (
typeof window !== "undefined" &&
window.navigator?.userAgent?.includes("Firefox")
) {
expect(calcRound(1.6)).not.toEqual(1.6);
} else {
expect(calcRound(1.6)).toEqual(1.6);
}
});
});
});
31 changes: 5 additions & 26 deletions web/pdf_page_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import {
} from "pdfjs-lib";
import {
approximateFraction,
calcRound,
DEFAULT_SCALE,
floorToDivide,
RenderingStates,
Expand Down Expand Up @@ -128,10 +127,6 @@ class PDFPageView {

#previousRotation = null;

#scaleRoundX = 1;

#scaleRoundY = 1;

#renderError = null;

#renderingState = RenderingStates.INITIAL;
Expand Down Expand Up @@ -1051,27 +1046,11 @@ class PDFPageView {
const sfx = approximateFraction(outputScale.sx);
const sfy = approximateFraction(outputScale.sy);

const canvasWidth = (canvas.width = floorToDivide(
calcRound(width * outputScale.sx),
sfx[0]
));
const canvasHeight = (canvas.height = floorToDivide(
calcRound(height * outputScale.sy),
sfy[0]
));
const pageWidth = floorToDivide(calcRound(width), sfx[1]);
const pageHeight = floorToDivide(calcRound(height), sfy[1]);
outputScale.sx = canvasWidth / pageWidth;
outputScale.sy = canvasHeight / pageHeight;

if (this.#scaleRoundX !== sfx[1]) {
div.style.setProperty("--scale-round-x", `${sfx[1]}px`);
this.#scaleRoundX = sfx[1];
}
if (this.#scaleRoundY !== sfy[1]) {
div.style.setProperty("--scale-round-y", `${sfy[1]}px`);
this.#scaleRoundY = sfy[1];
}
canvas.width = floorToDivide(width * outputScale.sx, sfx[0]);
canvas.height = floorToDivide(height * outputScale.sy, sfy[0]);
const { style } = canvas;
style.width = floorToDivide(width, sfx[1]) + "px";
style.height = floorToDivide(height, sfy[1]) + "px";

// Add the viewport so it's known what it was originally drawn with.
this.#viewportMap.set(canvas, viewport);
Expand Down
5 changes: 0 additions & 5 deletions web/pdf_viewer.css
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,6 @@
canvas {
margin: 0;
display: block;
width: 100%;
height: 100%;

&[hidden] {
display: none;
Expand All @@ -104,9 +102,6 @@
}

.pdfViewer .page {
--scale-round-x: 1px;
--scale-round-y: 1px;

direction: ltr;
width: 816px;
height: 1056px;
Expand Down
20 changes: 0 additions & 20 deletions web/ui_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -836,25 +836,6 @@ function toggleExpandedBtn(button, toggle, view = null) {
view?.classList.toggle("hidden", !toggle);
}

// In Firefox, the css calc function uses f32 precision but the Chrome or Safari
// are using f64 one. So in order to have the same rendering in all browsers, we
// need to use the right precision in order to have correct dimensions.
const calcRound =
typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")
? Math.fround
: (function () {
if (
typeof PDFJSDev !== "undefined" &&
PDFJSDev.test("LIB") &&
typeof document === "undefined"
) {
return x => x;
}
const e = document.createElement("div");
e.style.width = "round(down, calc(1.6666666666666665 * 792px), 1px)";
return e.style.width === "calc(1320px)" ? Math.fround : x => x;
})();

export {
animationStarted,
apiPageLayoutToViewerModes,
Expand All @@ -863,7 +844,6 @@ export {
AutoPrintRegExp,
backtrackBeforeAllVisibleElements, // only exported for testing
binarySearchFirstItem,
calcRound,
CursorTool,
DEFAULT_SCALE,
DEFAULT_SCALE_DELTA,
Expand Down
Loading