from pRegroup-done-2019 マウスポインタの位置を中心としたズーム

  • ズームは現状、画面中心を起点としているが、人間にとって自然なのはマウスポインタの位置を中心としたズーム

こんな感じ ts

export function zoomAroundMousePointer(
  initZoom: number, initCenter: paper.Point,
  zoomCenter: paper.Point, scale: number,
) {
  const v = initCenter.subtract(zoomCenter);
  let newZoom = initZoom * scale;
  let newCenter = initCenter.add(v.multiply((1 - scale) / scale));
  return [newZoom, newCenter];
}

Shift+ドラッグだけではなく、マウスホイールやMacBookでの二本指上下スワイプにも対応するため括り出した。