Skip to content

Commit 2ffbffd

Browse files
Refactor and move canvas scroll calculations to getMouseRelativeCanvas
1 parent 0c87fb7 commit 2ffbffd

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

Diff for: packages/core/src/canvas/index.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,12 @@ export default class CanvasModule extends Module<CanvasConfig> {
501501
*/
502502
getMouseRelativeCanvas(ev: MouseEvent | { clientX: number; clientY: number }, opts: any) {
503503
const zoom = this.getZoomDecimal();
504-
const { top = 0, left = 0 } = this.getCanvasView().getPosition(opts) ?? {};
504+
const canvasPos = this.getCanvasView().getPosition(opts) ?? { top: 0, left: 0 };
505+
const canvasScroll = this.getCanvasView().getCanvasScroll();
506+
const { top, left } = {
507+
top: canvasPos.top + canvasScroll.scrollTop,
508+
left: canvasPos.left + canvasScroll.scrollLeft,
509+
};
505510

506511
return {
507512
y: ev.clientY * zoom + top,

Diff for: packages/core/src/canvas/view/CanvasView.ts

+18-13
Original file line numberDiff line numberDiff line change
@@ -459,19 +459,7 @@ export default class CanvasView extends ModuleView<Canvas> {
459459
const frame = this.frame?.el;
460460
const winEl = el?.ownerDocument.defaultView;
461461
const frEl = winEl ? (winEl.frameElement as HTMLElement) : frame;
462-
const frmOff = this.offset(frEl || frame);
463-
const canvasScroll = this.config.scrollableCanvas
464-
? {
465-
scrollTop: this.el.scrollTop,
466-
scrollLeft: this.el.scrollLeft,
467-
}
468-
: { scrollTop: 0, scrollLeft: 0 };
469-
470-
this.frmOff = {
471-
...frmOff,
472-
top: frmOff.top + canvasScroll.scrollTop,
473-
left: frmOff.left + canvasScroll.scrollLeft,
474-
};
462+
this.frmOff = this.offset(frEl || frame);
475463
}
476464

477465
return this.frmOff;
@@ -575,6 +563,23 @@ export default class CanvasView extends ModuleView<Canvas> {
575563
};
576564
}
577565

566+
/**
567+
* Returns the scroll position of the canvas.
568+
*
569+
* If the canvas is scrollable, returns the current `scrollTop` and `scrollLeft` values.
570+
* Otherwise, returns an object with `scrollTop` and `scrollLeft` both set to 0.
571+
*
572+
* @returns An object containing the vertical and horizontal scroll positions.
573+
*/
574+
getCanvasScroll(): { scrollTop: number; scrollLeft: number } {
575+
return this.config.scrollableCanvas
576+
? {
577+
scrollTop: this.el.scrollTop,
578+
scrollLeft: this.el.scrollLeft,
579+
}
580+
: { scrollTop: 0, scrollLeft: 0 };
581+
}
582+
578583
/**
579584
* Update javascript of a specific component passed by its View
580585
* @param {ModuleView} view Component's View

0 commit comments

Comments
 (0)