diff --git a/webapp/src/App.vue b/webapp/src/App.vue index e3c6443c..917f5dcd 100644 --- a/webapp/src/App.vue +++ b/webapp/src/App.vue @@ -250,14 +250,14 @@ export default { event.target.parentNode.classList.contains("scrollTarget") || event.target.classList.contains("scrollTarget") ) { - const z_steps = event.deltaY / 100; + const z_rel = event.deltaY / 100; // Emit a signal to move, acted on by panelControl.vue - eventBus.emit("globalMoveStepEvent", { - x_steps: 0, - y_steps: 0, - z_steps: z_steps, - absolute: false, - }); + const navigationStepSize = this.$store.state.navigationStepSize; + const z = z_rel * navigationStepSize.z; + // Don't use `jog() due to variable size of jogs here and the rate limiting in + // `jog()`. No need to invert on z, as navigationInvert.z isn't exposed. + this.invokeAction("stage", "jog", { x: 0, y: 0, z: z }); + eventBus.emit("globalUpdatePositionEvent"); } }, @@ -265,20 +265,26 @@ export default { // Manually debounce extra requests from keyboard repeat rate. // This is used rather than and interval in case of missing a repeat. const now = Date.now(); + const navigationInvert = this.$store.state.navigationInvert; if (now - this.lastJogTime < this.jogTime) { return; } this.lastJogTime = now; this.invokeAction("stage", "jog", { - x: x * this.jogDistance, - y: y * this.jogDistance, + x: x * this.jogDistance * (navigationInvert.x ? -1 : 1), + y: y * this.jogDistance * (navigationInvert.y ? -1 : 1), z: z * this.jogDistance, }); + eventBus.emit("globalUpdatePositionEvent"); }, jogStop() { this.invokeAction("stage", "jog", { stop: true }); + this.lastJogTime = 0; + setTimeout(() => { + eventBus.emit("globalUpdatePositionEvent"); + }, 100); }, updateJogFromKeys() { diff --git a/webapp/src/components/tabContentComponents/controlComponents/positionControl.vue b/webapp/src/components/tabContentComponents/controlComponents/positionControl.vue index 000a74dd..dda20aeb 100644 --- a/webapp/src/components/tabContentComponents/controlComponents/positionControl.vue +++ b/webapp/src/components/tabContentComponents/controlComponents/positionControl.vue @@ -94,7 +94,6 @@ export default { // A global signal listener to perform a move action in pixels eventBus.on("globalMoveInImageCoordinatesEvent", this.onMoveImage); // A global signal listener to perform a move in multiples of a step size - eventBus.on("globalMoveStepEvent", this.onMoveStep); // Update the current position in text boxes await this.updatePosition(); @@ -105,7 +104,6 @@ export default { eventBus.off("globalMoveEvent", this.move); eventBus.off("globalUpdatePositionEvent", this.updatePosition); eventBus.off("globalMoveInImageCoordinatesEvent", this.onMoveImage); - eventBus.off("globalMoveStepEvent", this.onMoveStep); }, methods: { @@ -117,15 +115,6 @@ export default { this.moveInImageCoordinatesRequest(payload.x, payload.y, payload.absolute); }, - onMoveStep(payload) { - const navigationStepSize = this.$store.state.navigationStepSize; - const navigationInvert = this.$store.state.navigationInvert; - const x = payload.x_steps * navigationStepSize.x * (navigationInvert.x ? -1 : 1); - const y = payload.y_steps * navigationStepSize.y * (navigationInvert.y ? -1 : 1); - const z = payload.z_steps * navigationStepSize.z * (navigationInvert.z ? -1 : 1); - this.invokeAction("stage", "jog", { x: x, y: y, z: z }); - }, - async move(payload) { const { x, y, z, absolute } = payload; // Move the stage, by updating the controls and starting a move task diff --git a/webapp/src/components/tabContentComponents/controlComponents/stageControlButtons.vue b/webapp/src/components/tabContentComponents/controlComponents/stageControlButtons.vue index f88b9524..b8882bac 100644 --- a/webapp/src/components/tabContentComponents/controlComponents/stageControlButtons.vue +++ b/webapp/src/components/tabContentComponents/controlComponents/stageControlButtons.vue @@ -65,6 +65,8 @@