Skip to content

Commit

Permalink
Merge pull request #15578 from calixteman/15571
Browse files Browse the repository at this point in the history
[Editor] Ink editors must have their dimensions in percents after having been resized
  • Loading branch information
calixteman authored Oct 15, 2022
2 parents 06599f4 + 9e2bc88 commit e0cf25d
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/display/editor/editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,24 @@ class AnnotationEditor {
this.div.style.height = `${(100 * height) / parentHeight}%`;
}

fixDims() {
const { style } = this.div;
const { height, width } = style;
const widthPercent = width.endsWith("%");
const heightPercent = height.endsWith("%");
if (widthPercent && heightPercent) {
return;
}

const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions;
if (!widthPercent) {
style.width = `${(100 * parseFloat(width)) / parentWidth}%`;
}
if (!heightPercent) {
style.height = `${(100 * parseFloat(height)) / parentHeight}%`;
}
}

/**
* Get the translation used to position this editor when it's created.
* @returns {Array<number>}
Expand Down
15 changes: 15 additions & 0 deletions src/display/editor/ink.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ import { opacityToHex } from "./tools.js";
// so each dimension must be greater than RESIZER_SIZE.
const RESIZER_SIZE = 16;

// Some dimensions aren't in percent and that leads to some errors
// when the page is zoomed (see #15571).
const TIME_TO_WAIT_BEFORE_FIXING_DIMS = 100;

/**
* Basic draw editor in order to generate an Ink annotation.
*/
Expand Down Expand Up @@ -599,9 +603,20 @@ class InkEditor extends AnnotationEditor {
* Create the resize observer.
*/
#createObserver() {
let timeoutId = null;
this.#observer = new ResizeObserver(entries => {
const rect = entries[0].contentRect;
if (rect.width && rect.height) {
// Workaround for:
// https://bugzilla.mozilla.org/show_bug.cgi?id=1795536
if (timeoutId !== null) {
clearTimeout(timeoutId);
}
timeoutId = setTimeout(() => {
this.fixDims();
timeoutId = null;
}, TIME_TO_WAIT_BEFORE_FIXING_DIMS);

this.setDimensions(rect.width, rect.height);
}
});
Expand Down

0 comments on commit e0cf25d

Please sign in to comment.