From 1a6aa09a7708c943af3a1d920489311b3a0ee5da Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Thu, 5 Jun 2025 13:50:27 -0400 Subject: [PATCH] fix(touch): Allow for multi-touch in OHIF (#5099) --- bun.lock | 56 +++++++++---------- .../viewportToolsCustomization.ts | 4 +- modes/basic-dev-mode/src/index.ts | 4 +- modes/basic-test-mode/src/initToolGroups.ts | 15 ++--- modes/longitudinal/src/initToolGroups.js | 15 ++--- modes/preclinical-4d/src/initToolGroups.tsx | 4 +- modes/segmentation/src/initToolGroups.ts | 12 +++- modes/tmtv/src/initToolGroups.js | 4 +- platform/app/public/html-templates/index.html | 2 +- .../app/public/html-templates/rollbar.html | 2 +- 10 files changed, 63 insertions(+), 55 deletions(-) diff --git a/bun.lock b/bun.lock index c04e1905c..67b267182 100644 --- a/bun.lock +++ b/bun.lock @@ -40,7 +40,7 @@ }, "addOns/externals/devDependencies": { "name": "@externals/devDependencies", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@kitware/vtk.js": "32.12.0", @@ -127,14 +127,14 @@ }, "addOns/externals/dicom-microscopy-viewer": { "name": "@externals/dicom-microscopy-viewer", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "dicom-microscopy-viewer": "^0.46.1", }, }, "extensions/cornerstone": { "name": "@ohif/extension-cornerstone", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/adapters": "^3.15.6", @@ -173,7 +173,7 @@ }, "extensions/cornerstone-dicom-pmap": { "name": "@ohif/extension-cornerstone-dicom-pmap", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/adapters": "^3.15.6", @@ -196,7 +196,7 @@ }, "extensions/cornerstone-dicom-rt": { "name": "@ohif/extension-cornerstone-dicom-rt", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "react-color": "^2.19.3", @@ -216,7 +216,7 @@ }, "extensions/cornerstone-dicom-seg": { "name": "@ohif/extension-cornerstone-dicom-seg", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/adapters": "^3.15.6", @@ -239,7 +239,7 @@ }, "extensions/cornerstone-dicom-sr": { "name": "@ohif/extension-cornerstone-dicom-sr", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/adapters": "^3.15.6", @@ -261,7 +261,7 @@ }, "extensions/cornerstone-dynamic-volume": { "name": "@ohif/extension-cornerstone-dynamic-volume", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/core": "^3.15.6", @@ -283,7 +283,7 @@ }, "extensions/default": { "name": "@ohif/extension-default", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/calculate-suv": "^1.1.0", @@ -306,7 +306,7 @@ }, "extensions/dicom-microscopy": { "name": "@ohif/extension-dicom-microscopy", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/codec-charls": "^1.2.3", @@ -331,7 +331,7 @@ }, "extensions/dicom-pdf": { "name": "@ohif/extension-dicom-pdf", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", @@ -348,7 +348,7 @@ }, "extensions/dicom-video": { "name": "@ohif/extension-dicom-video", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", @@ -365,7 +365,7 @@ }, "extensions/measurement-tracking": { "name": "@ohif/extension-measurement-tracking", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@ohif/ui": "platform/ui", @@ -391,7 +391,7 @@ }, "extensions/test-extension": { "name": "@ohif/extension-test", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", @@ -408,7 +408,7 @@ }, "extensions/tmtv": { "name": "@ohif/extension-tmtv", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", @@ -425,7 +425,7 @@ }, "modes/basic-dev-mode": { "name": "@ohif/mode-basic-dev-mode", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -445,7 +445,7 @@ }, "modes/basic-test-mode": { "name": "@ohif/mode-test", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -467,7 +467,7 @@ }, "modes/longitudinal": { "name": "@ohif/mode-longitudinal", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -490,7 +490,7 @@ }, "modes/microscopy": { "name": "@ohif/mode-microscopy", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -502,7 +502,7 @@ }, "modes/preclinical-4d": { "name": "@ohif/mode-preclinical-4d", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", }, @@ -521,7 +521,7 @@ }, "modes/segmentation": { "name": "@ohif/mode-segmentation", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -565,7 +565,7 @@ }, "modes/tmtv": { "name": "@ohif/mode-tmtv", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -586,7 +586,7 @@ }, "platform/app": { "name": "@ohif/app", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/codec-charls": "^1.2.3", @@ -652,7 +652,7 @@ }, "platform/cli": { "name": "@ohif/cli", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/core": "7.24.7", "axios": "^1.8.4", @@ -673,7 +673,7 @@ }, "platform/core": { "name": "@ohif/core", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "dcmjs": "*", @@ -707,7 +707,7 @@ }, "platform/i18n": { "name": "@ohif/i18n", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@babel/runtime": "^7.20.13", "i18next-locize-backend": "^2.0.0", @@ -732,7 +732,7 @@ }, "platform/ui": { "name": "@ohif/ui", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@testing-library/react": "^13.1.0", "browser-detect": "^0.2.28", @@ -792,7 +792,7 @@ }, "platform/ui-next": { "name": "@ohif/ui-next", - "version": "3.11.0-beta.39", + "version": "3.11.0-beta.47", "dependencies": { "@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-checkbox": "^1.1.1", diff --git a/extensions/cornerstone/src/customizations/viewportToolsCustomization.ts b/extensions/cornerstone/src/customizations/viewportToolsCustomization.ts index e8da3a1c3..b9a8cbffa 100644 --- a/extensions/cornerstone/src/customizations/viewportToolsCustomization.ts +++ b/extensions/cornerstone/src/customizations/viewportToolsCustomization.ts @@ -14,11 +14,11 @@ export default { }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], enabled: [ diff --git a/modes/basic-dev-mode/src/index.ts b/modes/basic-dev-mode/src/index.ts index 29bb13c83..c1663580e 100644 --- a/modes/basic-dev-mode/src/index.ts +++ b/modes/basic-dev-mode/src/index.ts @@ -70,11 +70,11 @@ function modeFactory({ modeConfiguration }) { }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], passive: [ diff --git a/modes/basic-test-mode/src/initToolGroups.ts b/modes/basic-test-mode/src/initToolGroups.ts index 45742848b..ba5ec9d5a 100644 --- a/modes/basic-test-mode/src/initToolGroups.ts +++ b/modes/basic-test-mode/src/initToolGroups.ts @@ -29,11 +29,11 @@ function initDefaultToolGroup(extensionManager, toolGroupService, commandsManage }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], passive: [ @@ -115,11 +115,12 @@ function initSRToolGroup(extensionManager, toolGroupService, commandsManager) { { mouseButton: Enums.MouseBindings.Secondary, }, + { numTouchPoints: 2 }, ], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], passive: [ @@ -165,11 +166,11 @@ function initMPRToolGroup(extensionManager, toolGroupService, commandsManager) { }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], passive: [ @@ -254,11 +255,11 @@ function initVolume3DToolGroup(extensionManager, toolGroupService) { }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.Pan, - bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }], + bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }, { numTouchPoints: 3 }], }, ], }; diff --git a/modes/longitudinal/src/initToolGroups.js b/modes/longitudinal/src/initToolGroups.js index 6e155b331..ef9029864 100644 --- a/modes/longitudinal/src/initToolGroups.js +++ b/modes/longitudinal/src/initToolGroups.js @@ -31,11 +31,11 @@ function initDefaultToolGroup(extensionManager, toolGroupService, commandsManage }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], passive: [ @@ -140,11 +140,12 @@ function initSRToolGroup(extensionManager, toolGroupService) { { mouseButton: Enums.MouseBindings.Secondary, }, + { numTouchPoints: 2 }, ], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], passive: [ @@ -191,11 +192,11 @@ function initMPRToolGroup(extensionManager, toolGroupService, commandsManager) { }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], passive: [ @@ -293,11 +294,11 @@ function initVolume3DToolGroup(extensionManager, toolGroupService) { }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.Pan, - bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }], + bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }, { numTouchPoints: 3 }], }, ], }; diff --git a/modes/preclinical-4d/src/initToolGroups.tsx b/modes/preclinical-4d/src/initToolGroups.tsx index 956f3a996..aa8c4c83d 100644 --- a/modes/preclinical-4d/src/initToolGroups.tsx +++ b/modes/preclinical-4d/src/initToolGroups.tsx @@ -31,11 +31,11 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager, se }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], passive: [ diff --git a/modes/segmentation/src/initToolGroups.ts b/modes/segmentation/src/initToolGroups.ts index 9ff051690..47e796276 100644 --- a/modes/segmentation/src/initToolGroups.ts +++ b/modes/segmentation/src/initToolGroups.ts @@ -16,8 +16,14 @@ function createTools(utilityModule) { active: [ { toolName: toolNames.WindowLevel, bindings: [{ mouseButton: Enums.MouseBindings.Primary }] }, { toolName: toolNames.Pan, bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }] }, - { toolName: toolNames.Zoom, bindings: [{ mouseButton: Enums.MouseBindings.Secondary }] }, - { toolName: toolNames.StackScroll, bindings: [{ mouseButton: Enums.MouseBindings.Wheel }] }, + { + toolName: toolNames.Zoom, + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], + }, + { + toolName: toolNames.StackScroll, + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], + }, ], passive: [ { @@ -178,7 +184,7 @@ function initVolume3DToolGroup(extensionManager, toolGroupService) { }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.Pan, diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index 5e64f814b..4c959be00 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -19,11 +19,11 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) { }, { toolName: toolNames.Zoom, - bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }, { numTouchPoints: 2 }], }, { toolName: toolNames.StackScroll, - bindings: [{ mouseButton: Enums.MouseBindings.Wheel }], + bindings: [{ mouseButton: Enums.MouseBindings.Wheel }, { numTouchPoints: 3 }], }, ], passive: [ diff --git a/platform/app/public/html-templates/index.html b/platform/app/public/html-templates/index.html index adfbeec98..ed7679217 100644 --- a/platform/app/public/html-templates/index.html +++ b/platform/app/public/html-templates/index.html @@ -4,7 +4,7 @@