Skip to content
Snippets Groups Projects
Unverified Commit 4ab92cf5 authored by Jack Reed's avatar Jack Reed Committed by GitHub
Browse files

Merge pull request #3146 from ProjectMirador/mouse-tracker

Move mouse  tracker  into the viewer
parents 6b84e92b 062b7273
No related branches found
No related tags found
No related merge requests found
...@@ -232,10 +232,13 @@ describe('OpenSeadragonViewer', () => { ...@@ -232,10 +232,13 @@ describe('OpenSeadragonViewer', () => {
let panTo; let panTo;
let zoomTo; let zoomTo;
let addHandler; let addHandler;
let innerTracker;
beforeEach(() => { beforeEach(() => {
panTo = jest.fn(); panTo = jest.fn();
zoomTo = jest.fn(); zoomTo = jest.fn();
addHandler = jest.fn(); addHandler = jest.fn();
innerTracker = {};
wrapper = shallow( wrapper = shallow(
<OpenSeadragonViewer <OpenSeadragonViewer
...@@ -257,6 +260,7 @@ describe('OpenSeadragonViewer', () => { ...@@ -257,6 +260,7 @@ describe('OpenSeadragonViewer', () => {
OpenSeadragon.mockImplementation(() => ({ OpenSeadragon.mockImplementation(() => ({
addHandler, addHandler,
addTiledImage: jest.fn().mockResolvedValue('event'), addTiledImage: jest.fn().mockResolvedValue('event'),
innerTracker,
viewport: { panTo, zoomTo }, viewport: { panTo, zoomTo },
})); }));
}); });
...@@ -279,6 +283,12 @@ describe('OpenSeadragonViewer', () => { ...@@ -279,6 +283,12 @@ describe('OpenSeadragonViewer', () => {
expect(addHandler).toHaveBeenCalledWith('animation-finish', expect.anything()); expect(addHandler).toHaveBeenCalledWith('animation-finish', expect.anything());
expect(addHandler).toHaveBeenCalledWith('animation-finish', wrapper.instance().onViewportChange); expect(addHandler).toHaveBeenCalledWith('animation-finish', wrapper.instance().onViewportChange);
}); });
it('adds a mouse-move handler', () => {
wrapper.instance().componentDidMount();
expect(innerTracker.moveHandler).toEqual(wrapper.instance().onCanvasMouseMove);
});
}); });
describe('componentDidUpdate', () => { describe('componentDidUpdate', () => {
...@@ -352,4 +362,16 @@ describe('OpenSeadragonViewer', () => { ...@@ -352,4 +362,16 @@ describe('OpenSeadragonViewer', () => {
); );
}); });
}); });
describe('onCanvasMouseMove', () => {
it('triggers an OSD event', () => {
const viewer = { raiseEvent: jest.fn() };
wrapper.setState({ viewer });
wrapper.instance().onCanvasMouseMove('event');
wrapper.instance().onCanvasMouseMove.flush();
expect(viewer.raiseEvent).toHaveBeenCalledWith('mouse-move', 'event');
});
});
}); });
...@@ -130,11 +130,7 @@ export class AnnotationsOverlay extends Component { ...@@ -130,11 +130,7 @@ export class AnnotationsOverlay extends Component {
viewer.removeHandler('canvas-click', this.onCanvasClick); viewer.removeHandler('canvas-click', this.onCanvasClick);
viewer.removeHandler('canvas-exit', this.onCanvasExit); viewer.removeHandler('canvas-exit', this.onCanvasExit);
viewer.removeHandler('update-viewport', this.onUpdateViewport); viewer.removeHandler('update-viewport', this.onUpdateViewport);
viewer.removeHandler('mouse-move', this.onCanvasMouseMove);
if (viewer.innerTracker
&& viewer.innerTracker.moveHandler === this.onCanvasMouseMove) {
viewer.innerTracker.moveHandler = null;
}
} }
/** */ /** */
...@@ -263,10 +259,7 @@ export class AnnotationsOverlay extends Component { ...@@ -263,10 +259,7 @@ export class AnnotationsOverlay extends Component {
viewer.addHandler('canvas-click', this.onCanvasClick); viewer.addHandler('canvas-click', this.onCanvasClick);
viewer.addHandler('canvas-exit', this.onCanvasExit); viewer.addHandler('canvas-exit', this.onCanvasExit);
viewer.addHandler('update-viewport', this.onUpdateViewport); viewer.addHandler('update-viewport', this.onUpdateViewport);
viewer.addHandler('mouse-move', this.onCanvasMouseMove);
if (viewer.innerTracker) {
viewer.innerTracker.moveHandler = this.onCanvasMouseMove;
}
this.updateCanvas = this.canvasUpdateCallback(); this.updateCanvas = this.canvasUpdateCallback();
} }
......
import React, { Component } from 'react'; import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import debounce from 'lodash/debounce';
import isEqual from 'lodash/isEqual'; import isEqual from 'lodash/isEqual';
import OpenSeadragon from 'openseadragon'; import OpenSeadragon from 'openseadragon';
import classNames from 'classnames'; import classNames from 'classnames';
...@@ -24,6 +25,7 @@ export class OpenSeadragonViewer extends Component { ...@@ -24,6 +25,7 @@ export class OpenSeadragonViewer extends Component {
this.ref = React.createRef(); this.ref = React.createRef();
this.apiRef = React.createRef(); this.apiRef = React.createRef();
OSDReferences.set(props.windowId, this.apiRef); OSDReferences.set(props.windowId, this.apiRef);
this.onCanvasMouseMove = debounce(this.onCanvasMouseMove.bind(this), 10);
this.onViewportChange = this.onViewportChange.bind(this); this.onViewportChange = this.onViewportChange.bind(this);
this.zoomToWorld = this.zoomToWorld.bind(this); this.zoomToWorld = this.zoomToWorld.bind(this);
this.osdUpdating = false; this.osdUpdating = false;
...@@ -62,6 +64,10 @@ export class OpenSeadragonViewer extends Component { ...@@ -62,6 +64,10 @@ export class OpenSeadragonViewer extends Component {
viewer.addHandler('animation-finish', () => { viewer.addHandler('animation-finish', () => {
this.osdUpdating = false; this.osdUpdating = false;
}); });
if (viewer.innerTracker) {
viewer.innerTracker.moveHandler = this.onCanvasMouseMove;
}
} }
/** /**
...@@ -126,10 +132,21 @@ export class OpenSeadragonViewer extends Component { ...@@ -126,10 +132,21 @@ export class OpenSeadragonViewer extends Component {
componentWillUnmount() { componentWillUnmount() {
const { viewer } = this.state; const { viewer } = this.state;
if (viewer.innerTracker
&& viewer.innerTracker.moveHandler === this.onCanvasMouseMove) {
viewer.innerTracker.moveHandler = null;
}
viewer.removeAllHandlers(); viewer.removeAllHandlers();
this.apiRef.current = undefined; this.apiRef.current = undefined;
} }
/** Shim to provide a mouse-move event coming from the viewer */
onCanvasMouseMove(event) {
const { viewer } = this.state;
viewer.raiseEvent('mouse-move', event);
}
/** /**
* Forward OSD state to redux * Forward OSD state to redux
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment