aboutsummaryrefslogtreecommitdiff
path: root/components/slideprops.tsx
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2021-07-26 11:44:06 +0200
committerlonkaars <loek@pipeframe.xyz>2021-07-26 11:44:06 +0200
commit9186cfc2f8da936f4d5c08515e8a2d6b1b1b1f3a (patch)
tree2b549d6405c2810e0dbb42e0e7abad568bfdfbde /components/slideprops.tsx
parent6fa23dc86b290c87051b96caf8a352e702b82399 (diff)
timecode input working more-ish (prevent page scroll on wheel event)
Diffstat (limited to 'components/slideprops.tsx')
-rw-r--r--components/slideprops.tsx48
1 files changed, 25 insertions, 23 deletions
diff --git a/components/slideprops.tsx b/components/slideprops.tsx
index ca357b3..aba5c07 100644
--- a/components/slideprops.tsx
+++ b/components/slideprops.tsx
@@ -8,7 +8,7 @@ import TextField from '@material-ui/core/TextField';
import TimecodeInput from '../components/timeinput';
import { globalState, slideAPIprops } from '../pages/editor';
import { TimedVideoPlayer } from '../pages/present';
-import { anySlide, delaySlide, loopSlide } from '../timeline';
+import { anySlide, delaySlide, loopBeginSlide, loopSlide, speedChangeSlide } from '../timeline';
interface SlidePropertiesPropsType {
slide: State<anySlide>;
@@ -18,33 +18,35 @@ interface SlidePropertiesPropsType {
select: (slides: anySlide[]) => void;
}
-function SlideTimestamp(props: SlidePropertiesPropsType) {
- return <TimecodeInput
- label='Timestamp'
- value={props.slide.frame.get()}
- update={(newValue: number) => {
- props.slide.frame.set(newValue);
- props.api.start({ frame: newValue });
- props.select([props.slide.attach(Downgraded).value]);
- props.global.update.refreshLiveTimeline.value();
- }}
- player={props.player}
- />;
-}
-
export default function SlideProperties(props: SlidePropertiesPropsType) {
- function updateProp<slideType extends anySlide>(key: keyof slideType) {
+ function updateProp<slideType extends anySlide>(key: keyof slideType, springKey?: keyof slideAPIprops) {
return (newValue: any) => { // TODO: better typing here
props.slide[key as keyof State<anySlide>].set(newValue);
+ var sel = [props.slide.attach(Downgraded).value];
+ if (springKey) props.api.start({ [springKey]: newValue });
+ if (sel[0].type == 'loop') {
+ sel.push(new loopBeginSlide(sel[0] as loopSlide));
+ sel.reverse();
+ }
+ props.select(sel);
props.global.update.refreshLiveTimeline.value();
};
}
+ function SlideTimestamp() {
+ return <TimecodeInput
+ label='Timestamp'
+ value={props.slide.frame.get()}
+ update={updateProp('frame', 'frame')}
+ player={props.player}
+ />;
+ }
+
return <div className='section'>
<span className='title'>Properties</span>
{{
'default': <>
- <SlideTimestamp {...props} />
+ <SlideTimestamp />
</>,
'loop': <>
<TextField
@@ -58,18 +60,18 @@ export default function SlideProperties(props: SlidePropertiesPropsType) {
<TimecodeInput
label='Start timestamp'
value={(props.slide as State<loopSlide>).beginFrame.get()}
- update={updateProp<loopSlide>('beginFrame')}
+ update={updateProp<loopSlide>('beginFrame', 'begin')}
player={props.player}
/>
<TimecodeInput
label='End timestamp'
value={(props.slide as State<loopSlide>).frame.get()}
- update={updateProp<loopSlide>('frame')}
+ update={updateProp<loopSlide>('frame', 'frame')}
player={props.player}
/>
</>,
'delay': <>
- <SlideTimestamp {...props} />
+ <SlideTimestamp />
<div className='spacer' />
<TextField
variant='filled'
@@ -82,7 +84,7 @@ export default function SlideProperties(props: SlidePropertiesPropsType) {
/>
</>,
'speedChange': <>
- <SlideTimestamp {...props} />
+ <SlideTimestamp />
<div className='spacer' />
<TextField
variant='filled'
@@ -90,8 +92,8 @@ export default function SlideProperties(props: SlidePropertiesPropsType) {
type='number'
InputLabelProps={{ shrink: true }}
InputProps={{ endAdornment: <InputAdornment position='end' children='fps' /> }}
- value={(props.slide as State<delaySlide>).delay.get()}
- onChange={event => updateProp<delaySlide>('delay')(Number(event.target.value))}
+ value={(props.slide as State<speedChangeSlide>).newFramerate.get()}
+ onChange={event => updateProp<speedChangeSlide>('newFramerate')(Number(event.target.value))}
/>
<div className='spacer' />
<TextField