1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 14:48:08 +02:00

[Editor] Avoid to have a stamp editor resizing itself

Fixes #18715.
This commit is contained in:
Calixte Denizet 2024-09-09 15:26:33 +02:00
parent a1b45d6e69
commit 3f23bcbecc
3 changed files with 50 additions and 8 deletions

View file

@ -659,11 +659,7 @@ class AnnotationEditor {
parentScale,
pageDimensions: [pageWidth, pageHeight],
} = this;
const scaledWidth = pageWidth * parentScale;
const scaledHeight = pageHeight * parentScale;
return FeatureTest.isCSSRoundSupported
? [Math.round(scaledWidth), Math.round(scaledHeight)]
: [scaledWidth, scaledHeight];
return [pageWidth * parentScale, pageHeight * parentScale];
}
/**

View file

@ -553,7 +553,6 @@ class StampEditor extends AnnotationEditor {
const [parentWidth, parentHeight] = this.parentDimensions;
this.width = width / parentWidth;
this.height = height / parentHeight;
this.setDims(width, height);
if (this._initialOptions?.isCentered) {
this.center();
} else {

View file

@ -41,6 +41,7 @@ import {
waitForSelectedEditor,
waitForSerialized,
waitForStorageEntries,
waitForTimeout,
waitForUnselectedEditor,
} from "./test_utils.mjs";
import { fileURLToPath } from "url";
@ -150,8 +151,8 @@ describe("Stamp Editor", () => {
const ratio = await page.evaluate(
() => window.pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS
);
expect(bitmap.width).toEqual(Math.round(242 * ratio));
expect(bitmap.height).toEqual(Math.round(80 * ratio));
expect(Math.abs(bitmap.width - 242 * ratio) < 1).toBeTrue();
expect(Math.abs(bitmap.height - 80 * ratio) < 1).toBeTrue();
await clearAll(page);
})
@ -1097,4 +1098,50 @@ describe("Stamp Editor", () => {
}
});
});
describe("No auto-resize", () => {
let pages;
beforeAll(async () => {
pages = await loadAndWait("empty.pdf", ".annotationEditorLayer", 67);
});
afterAll(async () => {
await closePages(pages);
});
it("must check that a stamp editor isn't resizing itself", async () => {
// Run sequentially to avoid clipboard issues.
const editorSelector = getEditorSelector(0);
for (const [, page] of pages) {
await switchToStamp(page);
await copyImage(page, "../images/firefox_logo.png", 0);
await page.waitForSelector(editorSelector);
await waitForSerialized(page, 1);
}
await Promise.all(
pages.map(async ([browserName, page]) => {
const getDims = () =>
page.evaluate(sel => {
const bbox = document.querySelector(sel).getBoundingClientRect();
return `${bbox.width}::${bbox.height}`;
}, editorSelector);
const initialDims = await getDims();
for (let i = 0; i < 50; i++) {
// We want to make sure that the editor doesn't resize itself, so we
// check every 10ms that the dimensions are the same.
// eslint-disable-next-line no-restricted-syntax
await waitForTimeout(10);
const dims = await getDims();
expect(dims).withContext(`In ${browserName}`).toEqual(initialDims);
}
})
);
});
});
});