diff --git a/Packages/viewerbase/client/components/viewer/imageControls/imageControls.html b/Packages/viewerbase/client/components/viewer/imageControls/imageControls.html index 8dd8ced6a..2a27ab718 100644 --- a/Packages/viewerbase/client/components/viewer/imageControls/imageControls.html +++ b/Packages/viewerbase/client/components/viewer/imageControls/imageControls.html @@ -1,7 +1,11 @@ \ No newline at end of file diff --git a/Packages/viewerbase/client/components/viewer/imageControls/imageControls.js b/Packages/viewerbase/client/components/viewer/imageControls/imageControls.js index c2237ae8f..a77a2d385 100644 --- a/Packages/viewerbase/client/components/viewer/imageControls/imageControls.js +++ b/Packages/viewerbase/client/components/viewer/imageControls/imageControls.js @@ -1,6 +1,20 @@ const slideTimeoutTime = 40; let slideTimeout; +Template.imageControls.onRendered(() => { + const instance = Template.instance(); + + Meteor.defer(() => { + // Set the current imageSlider width to its parent's height + // (because webkit is stupid and can't style vertical sliders) + const $slider = instance.$('#imageSlider'); + const $element = $slider.parents().eq(2).siblings('.imageViewerViewport'); + const viewportHeight = $element.height(); + + $slider.width(viewportHeight - 20); + }); +}) + Template.imageControls.events({ 'input #imageSlider, change #imageSlider': function(e) { // Note that we throttle requests to prevent the diff --git a/Packages/viewerbase/client/components/viewer/imageControls/imageControls.styl b/Packages/viewerbase/client/components/viewer/imageControls/imageControls.styl index a96cd96eb..647a147af 100644 --- a/Packages/viewerbase/client/components/viewer/imageControls/imageControls.styl +++ b/Packages/viewerbase/client/components/viewer/imageControls/imageControls.styl @@ -17,6 +17,7 @@ $imageSliderCursor = grab padding: 5px #scrollbar + height: calc(100% - 20px); margin-top: 5px width: 31px diff --git a/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js b/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js index 0b1f345b6..480a731a2 100644 --- a/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js +++ b/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js @@ -86,32 +86,6 @@ function loadDisplaySetIntoViewport(data, templateData) { imageIds: imageIds }; - // Show or hide the image scrollbar depending - // on the number of images in the stack - var currentOverlay = $(element).siblings('.imageViewerViewportOverlay'); - var imageControls = currentOverlay.find('.imageControls'); - currentOverlay.find('.imageControls').height($(element).height()); - - if (stack.imageIds.length === 1) { - imageControls.hide(); - currentOverlay.find('.topright, .bottomright').css('right', '3px'); - } else { - imageControls.show(); - currentOverlay.find('.topright, .bottomright').css('right', '39px'); - - // Update the maximum value of the slider - var currentImageSlider = currentOverlay.find('#imageSlider'); - currentImageSlider.attr('max', stack.imageIds.length); - currentImageSlider.val(1); - - // Set it's width to its parent's height - // (because webkit is stupid and can't style vertical sliders) - var scrollbar = currentOverlay.find('#scrollbar'); - scrollbar.height(scrollbar.parent().height() - 20); - var overlayHeight = currentImageSlider.parent().height(); - currentImageSlider.width(overlayHeight); - } - // Get the current image ID for the stack that will be rendered imageId = imageIds[stack.currentImageIdIndex]; @@ -296,11 +270,6 @@ function loadDisplaySetIntoViewport(data, templateData) { var stack = toolData.data[0]; - // Update the imageSlider value - var currentOverlay = $(element).siblings('.imageViewerViewportOverlay'); - var currentImageSlider = currentOverlay.find('#imageSlider'); - currentImageSlider.val(stack.currentImageIdIndex + 1); - // If this viewport is displaying a stack of images, save the current image // index in the stack to the global ViewerData object, as well as the Meteor Session. var stack = cornerstoneTools.getToolState(element, 'stack'); @@ -319,27 +288,6 @@ function loadDisplaySetIntoViewport(data, templateData) { // Set a random value for the Session variable in order to trigger an overlay update Session.set('CornerstoneNewImage' + viewportIndex, Random.id()); - function OnStackScroll(e, eventData) { - // Get the element and stack data - var element = e.target; - var toolData = cornerstoneTools.getToolState(element, 'stack'); - if (!toolData || !toolData.data || !toolData.data.length) { - return; - } - - var stack = toolData.data[0]; - - // Update the imageSlider value - var currentOverlay = $(element).siblings('.imageViewerViewportOverlay'); - var currentImageSlider = currentOverlay.find('#imageSlider'); - currentImageSlider.val(stack.currentImageIdIndex + 1); - } - - $(element).off('CornerstoneStackScroll', OnStackScroll); - if (stack.imageIds.length > 1) { - $(element).on('CornerstoneStackScroll', OnStackScroll); - } - // Define a function to trigger an event whenever a new viewport is being used // This is used to update the value of the "active viewport", when the user interacts // with a new viewport element diff --git a/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.html b/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.html index 16a6ae714..f581a1084 100644 --- a/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.html +++ b/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.html @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.js b/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.js index 9b119756e..f39f0a38f 100644 --- a/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.js +++ b/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.js @@ -219,9 +219,6 @@ Template.viewportOverlay.helpers({ imageIndex: function() { return getInstance.call(this, 'index'); }, - numImages: function() { - return getSeries.call(this, 'numImages'); - }, imageIndex: function() { Session.get('CornerstoneNewImage' + this.viewportIndex); var stack = getStackDataIfNotEmpty(this.viewportIndex); diff --git a/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.styl b/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.styl index d50355baa..b89bd8a1d 100644 --- a/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.styl +++ b/Packages/viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.styl @@ -30,4 +30,8 @@ $viewportTagPadding = 20px .priorIndicator font-weight: bold - color: yellow \ No newline at end of file + color: yellow + + &.controlsVisible + .topright, .bottomright + right: "calc(%s + 19px)" % $viewportTagPadding \ No newline at end of file diff --git a/Packages/viewerbase/lib/toolManager.js b/Packages/viewerbase/lib/toolManager.js index d74c96e36..81137bae3 100644 --- a/Packages/viewerbase/lib/toolManager.js +++ b/Packages/viewerbase/lib/toolManager.js @@ -37,13 +37,19 @@ function configureTools() { cornerstoneTools.toolColors.setActiveColor('#00ffff'); //rgb(0, 255, 0)' // Set the configuration values for the text annotation (Arrow) tool - var annotateConfig = { + const annotateConfig = { getTextCallback: getAnnotationTextCallback, changeTextCallback: changeAnnotationTextCallback, drawHandles: false, arrowFirst: true }; cornerstoneTools.arrowAnnotate.setConfiguration(annotateConfig); + + const zoomConfig = { + minScale: 0.05, + maxScale: 10 + }; + cornerstoneTools.zoom.setConfiguration(zoomConfig); } toolManager = {