Skip to content

Commit

Permalink
[Editor] Take into account the page translation when computing the qu…
Browse files Browse the repository at this point in the history
…adpoints when saving an highlight

It fixes #18360.
  • Loading branch information
calixteman committed Jul 2, 2024
1 parent c280c52 commit 576aaf7
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/display/editor/highlight.js
Original file line number Diff line number Diff line change
Expand Up @@ -671,12 +671,13 @@ class HighlightEditor extends AnnotationEditor {
return null;
}
const [pageWidth, pageHeight] = this.pageDimensions;
const [pageX, pageY] = this.pageTranslation;
const boxes = this.#boxes;
const quadPoints = new Float32Array(boxes.length * 8);
let i = 0;
for (const { x, y, width, height } of boxes) {
const sx = x * pageWidth;
const sy = (1 - y - height) * pageHeight;
const sx = x * pageWidth + pageX;
const sy = (1 - y - height) * pageHeight + pageY;
// The specifications say that the rectangle should start from the bottom
// left corner and go counter-clockwise.
// But when opening the file in Adobe Acrobat it appears that this isn't
Expand Down
35 changes: 35 additions & 0 deletions test/integration/highlight_editor_spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1302,6 +1302,41 @@ describe("Highlight Editor", () => {
});
});

describe("Quadpoints must be correct when they're in a translated page", () => {
let pages;

beforeAll(async () => {
pages = await loadAndWait("issue18360.pdf", ".annotationEditorLayer");
});

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

it("must check that the quadpoints for an highlight are almost correct", async () => {
await Promise.all(
pages.map(async ([browserName, page]) => {
await switchToHighlight(page);

const rect = await getSpanRectFromText(page, 1, "Hello World");
await page.mouse.click(
rect.x + rect.width / 4,
rect.y + rect.height / 2,
{ count: 2, delay: 100 }
);

await page.waitForSelector(getEditorSelector(0));
await waitForSerialized(page, 1);
const quadPoints = await getFirstSerialized(page, e => e.quadPoints);
const expected = [148, 624, 176, 624, 148, 637, 176, 637];
expect(quadPoints.every((x, i) => Math.abs(x - expected[i]) <= 5))
.withContext(`In ${browserName} (got ${quadPoints})`)
.toBeTrue();
})
);
});
});

describe("Editor must be unselected when the color picker is Escaped", () => {
let pages;

Expand Down
1 change: 1 addition & 0 deletions test/pdfs/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -652,3 +652,4 @@
!bug1539074.pdf
!bug1539074.1.pdf
!issue18305.pdf
!issue18360.pdf
Binary file added test/pdfs/issue18360.pdf
Binary file not shown.

0 comments on commit 576aaf7

Please sign in to comment.