diff --git a/common/reviews/api/tools.api.md b/common/reviews/api/tools.api.md index b89234a614..db9825d1c9 100644 --- a/common/reviews/api/tools.api.md +++ b/common/reviews/api/tools.api.md @@ -2606,9 +2606,23 @@ enum KeyboardBindings { // (undocumented) Alt = 18, // (undocumented) + AltMeta = 1891, + // (undocumented) Ctrl = 17, // (undocumented) - Shift = 16 + CtrlAlt = 1718, + // (undocumented) + CtrlMeta = 1791, + // (undocumented) + Meta = 91, + // (undocumented) + Shift = 16, + // (undocumented) + ShiftAlt = 1618, + // (undocumented) + ShiftCtrl = 1617, + // (undocumented) + ShiftMeta = 1691 } // @public (undocumented) diff --git a/packages/streaming-image-volume-loader/src/sharedArrayBufferImageLoader.ts b/packages/streaming-image-volume-loader/src/sharedArrayBufferImageLoader.ts index e6365286a0..de45a0fe4f 100644 --- a/packages/streaming-image-volume-loader/src/sharedArrayBufferImageLoader.ts +++ b/packages/streaming-image-volume-loader/src/sharedArrayBufferImageLoader.ts @@ -129,6 +129,8 @@ function getTransferSyntaxForContentType(contentType: string): string { 'image/x-jls': '1.2.840.10008.1.2.4.80', 'image/jp2': '1.2.840.10008.1.2.4.90', 'image/jpx': '1.2.840.10008.1.2.4.92', + 'image/jphc': '3.2.840.10008.1.2.4.96', + 'image/jls': '1.2.840.10008.1.2.4.80', }; if (params['transfer-syntax']) { diff --git a/packages/tools/src/enums/ToolBindings.ts b/packages/tools/src/enums/ToolBindings.ts index 548f1aecca..21f5424ddd 100644 --- a/packages/tools/src/enums/ToolBindings.ts +++ b/packages/tools/src/enums/ToolBindings.ts @@ -25,6 +25,13 @@ enum KeyboardBindings { Shift = 16, Ctrl = 17, Alt = 18, + Meta = 91, + ShiftCtrl = 1617, + ShiftAlt = 1618, + ShiftMeta = 1691, + CtrlAlt = 1718, + CtrlMeta = 1791, + AltMeta = 1891, } export { MouseBindings, KeyboardBindings }; diff --git a/packages/tools/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts b/packages/tools/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts index a670b0ad9c..6fac058a64 100644 --- a/packages/tools/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts +++ b/packages/tools/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts @@ -2,6 +2,7 @@ import { ToolGroupManager } from '../../store'; import { MouseBindings, ToolModes } from '../../enums'; import { keyEventListener } from '../../eventListeners'; import { EventTypes } from '../../types'; +import getMouseModifier from './getMouseModifier'; const { Active } = ToolModes; @@ -22,7 +23,9 @@ export default function getActiveToolForMouseEvent( const mouseEvent = evt.detail.event; // If any keyboard modifier key is also pressed - const modifierKey = keyEventListener.getModifierKey(); + // Use the actual key if set, otherwise get the key from the mouse event. + const modifierKey = + keyEventListener.getModifierKey() || getMouseModifier(mouseEvent); const toolGroup = ToolGroupManager.getToolGroupForViewport( viewportId, diff --git a/packages/tools/src/eventDispatchers/shared/getMouseModifier.ts b/packages/tools/src/eventDispatchers/shared/getMouseModifier.ts new file mode 100644 index 0000000000..43259b849c --- /dev/null +++ b/packages/tools/src/eventDispatchers/shared/getMouseModifier.ts @@ -0,0 +1,30 @@ +import { KeyboardBindings as kb } from '../../enums'; + +/** + * Gets the mouse modifier key from a mouse event. + * Supports Shift, Ctrl, Alt, in singly and in combinations of 2 + * Supports Meta singly. + */ +const getMouseModifierKey = (evt) => { + // The logic is a hard coded key mapping + if (evt.shiftKey) { + if (evt.ctrlKey) return kb.ShiftCtrl; + if (evt.altKey) return kb.ShiftAlt; + if (evt.metaKey) return kb.ShiftMeta; + return kb.Shift; + } + if (evt.ctrlKey) { + if (evt.altKey) return kb.CtrlAlt; + if (evt.metaKey) return kb.CtrlMeta; + return kb.Ctrl; + } + if (evt.altKey) { + return (evt.metaKey && kb.AltMeta) || kb.Alt; + } + if (evt.metaKey) { + kb.Meta; + } + return undefined; +}; + +export default getMouseModifierKey; diff --git a/packages/tools/src/utilities/segmentation/triggerSegmentationRender.ts b/packages/tools/src/utilities/segmentation/triggerSegmentationRender.ts index 8971e315aa..6dd5b3fc3d 100644 --- a/packages/tools/src/utilities/segmentation/triggerSegmentationRender.ts +++ b/packages/tools/src/utilities/segmentation/triggerSegmentationRender.ts @@ -129,6 +129,10 @@ class SegmentationRenderingEngine { const segmentationDisplayToolInstance = toolGroup.getToolInstance( SegmentationDisplayTool.toolName ) as SegmentationDisplayTool; + if (!segmentationDisplayToolInstance) { + console.warn('No segmentation tool found inside', toolGroupId); + return; + } function onSegmentationRender(evt: Types.EventTypes.ImageRenderedEvent) { const { element, viewportId, renderingEngineId } = evt.detail;