restore previous scroll behavior

fixes #1432
pull/1437/head
Mikael Finstad 4 years ago
parent 3c079a02c5
commit cf789a9fb0
No known key found for this signature in database
GPG Key ID: 25AB36E3E81CBC26

@ -189,27 +189,46 @@ const Timeline = memo(({
return (relX / target.offsetWidth) * durationSafe; return (relX / target.offsetWidth) * durationSafe;
}, [durationSafe]); }, [durationSafe]);
const handleTap = useCallback((e) => { const mouseDownRef = useRef();
if (e.nativeEvent.buttons === 1) { // primary button
seekAbs((getMouseTimelinePos(e.nativeEvent))); const handleScrub = useCallback((e) => seekAbs((getMouseTimelinePos(e))), [seekAbs, getMouseTimelinePos]);
}
}, [seekAbs, getMouseTimelinePos]);
useEffect(() => { useEffect(() => {
setHoveringTime(); setHoveringTime();
}, [playerTime, commandedTime]); }, [playerTime, commandedTime]);
const onMouseDown = useCallback((e) => {
if (e.nativeEvent.buttons !== 1) return; // not primary button
handleScrub(e.nativeEvent);
mouseDownRef.current = e.target;
function onMouseMove(e2) {
if (mouseDownRef.current == null) return;
seekAbs(getMouseTimelinePos(e2));
}
function onMouseUp() {
mouseDownRef.current = undefined;
window.removeEventListener('mouseup', onMouseUp);
window.removeEventListener('mousemove', onMouseMove);
}
// https://github.com/mifi/lossless-cut/issues/1432
// https://stackoverflow.com/questions/11533098/how-to-catch-mouse-up-event-outside-of-element
// https://stackoverflow.com/questions/6073505/what-is-the-difference-between-screenx-y-clientx-y-and-pagex-y
window.addEventListener('mouseup', onMouseUp, { once: true });
window.addEventListener('mousemove', onMouseMove);
}, [getMouseTimelinePos, handleScrub, seekAbs]);
const onMouseMove = useCallback((e) => { const onMouseMove = useCallback((e) => {
// eslint-disable-next-line no-bitwise if (!mouseDownRef.current) { // no button pressed
// const isButtonPressed = (index) => ((e.nativeEvent.buttons >> index) & 1);
if (e.nativeEvent.buttons === 0) { // no button pressed
setHoveringTime(getMouseTimelinePos(e.nativeEvent)); setHoveringTime(getMouseTimelinePos(e.nativeEvent));
e.preventDefault();
} else if (e.nativeEvent.buttons === 1) { // primary button
handleTap(e);
e.preventDefault();
} }
}, [getMouseTimelinePos, handleTap]); e.preventDefault();
}, [getMouseTimelinePos]);
const onMouseOut = useCallback(() => setHoveringTime(), []); const onMouseOut = useCallback(() => setHoveringTime(), []);
const contextMenuTemplate = useMemo(() => [ const contextMenuTemplate = useMemo(() => [
@ -222,7 +241,7 @@ const Timeline = memo(({
// eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/mouse-events-have-key-events // eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/mouse-events-have-key-events
<div <div
style={{ position: 'relative' }} style={{ position: 'relative' }}
onMouseDown={handleTap} onMouseDown={onMouseDown}
onMouseMove={onMouseMove} onMouseMove={onMouseMove}
onMouseOut={onMouseOut} onMouseOut={onMouseOut}
> >

Loading…
Cancel
Save