From 9a0cb1148039c30b7a001bfca548e4223137ecbb Mon Sep 17 00:00:00 2001 From: lonkaars Date: Sun, 23 May 2021 12:32:44 +0200 Subject: keyframes draggable :tada:g --- pages/editor.tsx | 66 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 34 insertions(+), 32 deletions(-) (limited to 'pages') diff --git a/pages/editor.tsx b/pages/editor.tsx index e1e164a..e3607e6 100644 --- a/pages/editor.tsx +++ b/pages/editor.tsx @@ -2,7 +2,7 @@ import { CSSProperties, ReactNode, useEffect, useRef, useState } from 'react'; import { animated, useSpring, useSprings } from 'react-spring'; import { useDrag } from 'react-use-gesture'; import create from 'zustand'; -import { loopSlide } from '../timeline'; +import { delaySlide, loopSlide, slide, speedChangeSlide } from '../timeline'; import { TimedVideoPlayer } from './present'; import AppBar from '@material-ui/core/AppBar'; @@ -49,41 +49,43 @@ var useFrame = create(set => ({ setFrame: (newFrame: number) => set(() => ({ currentFrame: newFrame })), })); -function TimelineEditor(props: { - player: TimedVideoPlayer; +function TimelineKeyframe(props: { + slide: slide | delaySlide | loopSlide | speedChangeSlide; }) { - var timelineZoom = getTimelineZoom((st: any) => st.zoom); - - var keyframes: Array<{ - html: ReactNode; - id: string; - }> = []; - var [keyframeSprings, _keyframeSpringsAPI] = useSprings( - props.player?.timeline?.slides.length || 0, - i => ({ - frame: props.player.timeline.slides[i].frame, + var ref = useRef(null); + var [spring, api] = useSpring( + () => ({ + frame: props.slide.frame, config: { mass: 0.5, tension: 500, friction: 20 }, }), ); - props.player?.timeline?.slides.forEach((slide, index) => { - var id = 'frame' + index; - var html = -
- {slide.type == 'loop' - ? - : } -
-
; - keyframes[index] = { - html, - id, - }; - }); + var timelineZoom = getTimelineZoom((st: any) => st.zoom); + + useDrag(({ xy: [x, _y] }) => { + var frame = Math.max(0, Math.round(getFrameAtOffset(x - 240, timelineZoom)) - 1); + console.log(frame); + api.start({ frame }); + }, { domTarget: ref, eventOptions: { passive: false } }); + + return +
+ {props.slide.type == 'loop' + ? + : } +
+
; +} + +function TimelineEditor(props: { + player: TimedVideoPlayer; +}) { + var timelineZoom = getTimelineZoom((st: any) => st.zoom); var timelineLabels = useTimelineLabels((st: any) => st.labels); var setTimelineLabels = useTimelineLabels((st: any) => st.setLabels); @@ -233,7 +235,7 @@ function TimelineEditor(props: {
kf.html)} + children={props.player?.timeline?.slides.map(slide => )} />
; -- cgit v1.2.3