diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2020-06-30 17:03:31 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2020-06-30 17:03:31 +0200 |
| commit | 7bc1723499503800cbdd446b27e202898fc32b9e (patch) | |
| tree | 03480b0dae36c6e97ad524ff667a01d2efe43c82 /animism-align/frontend/views/align/components | |
| parent | bd57b5abf5fc73d5e61d80be1ee509b7afc97ff7 (diff) | |
cursor
Diffstat (limited to 'animism-align/frontend/views/align/components')
| -rw-r--r-- | animism-align/frontend/views/align/components/cursor.component.js | 25 | ||||
| -rw-r--r-- | animism-align/frontend/views/align/components/timeline.component.js | 31 |
2 files changed, 54 insertions, 2 deletions
diff --git a/animism-align/frontend/views/align/components/cursor.component.js b/animism-align/frontend/views/align/components/cursor.component.js new file mode 100644 index 0000000..c92f807 --- /dev/null +++ b/animism-align/frontend/views/align/components/cursor.component.js @@ -0,0 +1,25 @@ +import React, { Component } from 'react' + +import { ZOOM_STEPS } from '../constants' +import { clamp, timestamp } from '../../../util' + +const Cursor = ({ timeline }) => { + const { start_ts, zoom, cursor_ts, duration } = timeline + const secondsPerPixel = ZOOM_STEPS[zoom] * 0.1 + const y = (cursor_ts - start_ts) / secondsPerPixel + return ( + <div + className='cursor' + style={{ + top: y, + }} + > + <div className='line' /> + <div className='tickLabel'> + {timestamp(cursor_ts, 1)} + </div> + </div> + ) +} + +export default Cursor
\ No newline at end of file diff --git a/animism-align/frontend/views/align/components/timeline.component.js b/animism-align/frontend/views/align/components/timeline.component.js index eb851b7..86175cf 100644 --- a/animism-align/frontend/views/align/components/timeline.component.js +++ b/animism-align/frontend/views/align/components/timeline.component.js @@ -8,6 +8,7 @@ import actions from '../../../actions' import Waveform from './waveform.component' import Ticks from './ticks.component' +import Cursor from './cursor.component' import { ZOOM_STEPS } from '../constants' import { clamp } from '../../../util' @@ -16,6 +17,7 @@ class Timeline extends Component { constructor(props){ super(props) this.handleKeydown = this.handleKeydown.bind(this) + this.handleMouseMove = this.handleMouseMove.bind(this) this.handleWheel = this.handleWheel.bind(this) } componentDidMount() { @@ -40,17 +42,42 @@ class Timeline extends Component { handleWheel(e) { let { start_ts, zoom, duration } = this.props.timeline let secondsPerPixel = ZOOM_STEPS[zoom] * 0.1 // 0.1 sec / step - let widthTimeDuration = window.innerWidth * secondsPerPixel // secs per pixel + let widthTimeDuration = window.innerHeight * secondsPerPixel // secs per pixel start_ts = clamp(start_ts + e.deltaY * ZOOM_STEPS[zoom], 0, Math.max(0, duration - widthTimeDuration / 2)) console.log(start_ts) actions.align.setScrollPosition(start_ts) } + handleMouseMove(e) { + const { start_ts, zoom, duration } = this.props.timeline + const y = e.pageY + const height = window.innerHeight + + let secondsPerPixel = ZOOM_STEPS[zoom] * 0.1 + let widthTimeDuration = height * secondsPerPixel + + let timeMin = start_ts + let timeMax = Math.min(start_ts + widthTimeDuration, duration) + let timeWidth = timeMax - timeMin + + let cursor_ts = y * secondsPerPixel + start_ts + cursor_ts = clamp(cursor_ts, 0, timeMax) + + actions.align.setCursor(cursor_ts) + + // let pixelMin = timeMin / secondsPerPixel + // const ts = + } render() { return ( - <div className='timeline' onWheel={this.handleWheel}> + <div + className='timeline' + onWheel={this.handleWheel} + onMouseMove={this.handleMouseMove} + > <Waveform /> <Ticks timeline={this.props.timeline} /> + <Cursor timeline={this.props.timeline} /> </div> ) } |
