From 543b85cd10adaf4ce9a22aac0a4adf0f17c0c230 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Tue, 19 Mar 2024 12:07:09 +0100 Subject: [PATCH 1/2] fixed double tapping on touch devices circumvents zoomOnDoubleClick --- packages/system/src/xypanzoom/XYPanZoom.ts | 10 ++++++++++ packages/system/src/xypanzoom/filter.ts | 5 ----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/system/src/xypanzoom/XYPanZoom.ts b/packages/system/src/xypanzoom/XYPanZoom.ts index 372e6134..88ec5b59 100644 --- a/packages/system/src/xypanzoom/XYPanZoom.ts +++ b/packages/system/src/xypanzoom/XYPanZoom.ts @@ -69,6 +69,7 @@ export function XYPanZoom({ ); const d3ZoomHandler = d3Selection.on('wheel.zoom')!; + const d3DblClickZoomHandler = d3Selection.on('dblclick.zoom')!; d3ZoomInstance.wheelDelta(wheelDelta); function setTransform(transform: ZoomTransform, options?: PanZoomTransformOptions) { @@ -165,6 +166,15 @@ export function XYPanZoom({ lib, }); d3ZoomInstance.filter(filter); + + // We cannot add zoomOnDoubleClick to the filter above because + // if double tapping on touch screens circumvents the filter and + // dblclick.zoom is triggered on the selection directly + if (zoomOnDoubleClick) { + d3Selection.on('dblclick.zoom', d3DblClickZoomHandler); + } else { + d3Selection.on('dblclick.zoom', null); + } } function destroy() { diff --git a/packages/system/src/xypanzoom/filter.ts b/packages/system/src/xypanzoom/filter.ts index 3e2cec14..4cde936b 100644 --- a/packages/system/src/xypanzoom/filter.ts +++ b/packages/system/src/xypanzoom/filter.ts @@ -48,11 +48,6 @@ export function createFilter({ return false; } - // if zoom on double click is disabled, we prevent the double click event - if (!zoomOnDoubleClick && event.type === 'dblclick') { - return false; - } - // if the target element is inside an element with the nowheel class, we prevent zooming if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') { return false; From 3acf2e7038662125de47605418694e28e939d28f Mon Sep 17 00:00:00 2001 From: peterkogo Date: Tue, 19 Mar 2024 12:09:26 +0100 Subject: [PATCH 2/2] type --- packages/system/src/xypanzoom/XYPanZoom.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/system/src/xypanzoom/XYPanZoom.ts b/packages/system/src/xypanzoom/XYPanZoom.ts index 88ec5b59..a7e73a7c 100644 --- a/packages/system/src/xypanzoom/XYPanZoom.ts +++ b/packages/system/src/xypanzoom/XYPanZoom.ts @@ -168,8 +168,8 @@ export function XYPanZoom({ d3ZoomInstance.filter(filter); // We cannot add zoomOnDoubleClick to the filter above because - // if double tapping on touch screens circumvents the filter and - // dblclick.zoom is triggered on the selection directly + // double tapping on touch screens circumvents the filter and + // dblclick.zoom is fired on the selection directly if (zoomOnDoubleClick) { d3Selection.on('dblclick.zoom', d3DblClickZoomHandler); } else {