20 lines
571 B
TypeScript
20 lines
571 B
TypeScript
import type { Dispatch } from "@commands/dispatcher";
|
|
import type { GlobalWheelConsumer, WheelInputEvent } from "./pointer";
|
|
|
|
export function handleViewportWheel(options: {
|
|
event: WheelInputEvent;
|
|
globalConsumer: GlobalWheelConsumer;
|
|
dispatch: Dispatch;
|
|
currentZoom: number;
|
|
}): boolean {
|
|
if (options.globalConsumer(options.event)) return true;
|
|
|
|
const zoomFactor = Math.exp(-options.event.delta.y * 0.001);
|
|
options.dispatch("viewport.zoomAroundPoint", {
|
|
zoom: options.currentZoom * zoomFactor,
|
|
point: options.event.position,
|
|
});
|
|
|
|
return true;
|
|
}
|