From d946ef39797d038ada0a4e9befc8cdebc40ae652 Mon Sep 17 00:00:00 2001 From: Shreeraj Jadhav Date: Fri, 19 Jan 2024 12:40:27 -0500 Subject: [PATCH] fix mouse bind events when change in viewport out-of-focus --- src/core/internal/ParentedView.tsx | 56 +++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/core/internal/ParentedView.tsx b/src/core/internal/ParentedView.tsx index b016419..95e877d 100644 --- a/src/core/internal/ParentedView.tsx +++ b/src/core/internal/ParentedView.tsx @@ -87,7 +87,43 @@ const ParentedView = forwardRef(function ParentedView( * 1. Switch to targeted renderer. * 2. Switch to this View's interactor style. */ - useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => { + const switchTarget = (): boolean => { + const rendererAPI = rendererRef.current; + if (!rendererAPI) return false; + + const interactor = getInteractor(); + + (interactor as FixedVTKRenderWindowInteractor).setCurrentRenderer( + rendererAPI.get() + ); + interactor.setInteractorStyle(getInteractorStyle()); + + const oldContainer = interactor.getContainer(); + const newContainer = containerRef.current; + if (oldContainer !== newContainer) { + if (oldContainer) { + interactor.unbindEvents(); + } + if (newContainer) { + console.log('sdj: parentView: bindEvents'); + interactor.bindEvents(newContainer); + } + /* + // clearTimeout(interactor.get('wheelTimeoutID')); + interactor.set( + { + wheelTimeoutID: 0, + }, + true + ); + */ + return true; + } + return false; + }; + + /* + useEventListener(containerRef, 'wheel', (ev: WheelEvent) => { const rendererAPI = rendererRef.current; if (!rendererAPI) return; @@ -105,10 +141,28 @@ const ParentedView = forwardRef(function ParentedView( interactor.unbindEvents(); } if (newContainer) { + console.log('sdj: parentView: bindEvents'); interactor.bindEvents(newContainer); } // forward event to interactor + interactor.handleWheel(ev); + } + }); + */ + + useEventListener(containerRef, 'wheel', (ev: WheelEvent) => { + if (switchTarget()) { + // forward event to interactor + const interactor = getInteractor(); + interactor.handleWheel(ev); + } + }); + + useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => { + if (switchTarget()) { + // forward event to interactor + const interactor = getInteractor(); interactor.handlePointerEnter(ev); } });