scrubber progress, it's moving

This commit is contained in:
wil committed 2024-02-29 13:24:03 -05:00
1 parent d7b53c82b1
commit 329e2ed4f7
5 files changed
+69 -37

No files matched your search

@@ -1,47 +1,71 @@
import React, {
useRef,
// useState
useState,
PointerEvent
} from 'react';
import {
faGripDots
} from "@fortawesome/pro-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { QuickTrimData } from './types';
export default function TrimScrubber({
width
trimStart,
trimEnd,
width,
onChange
}:{
width:number
trimStart:number;
trimEnd: number;
boundingWidth: number;
width:number;
onChange:(val:QuickTrimData)=>void
}){
const ref = useRef<HTMLDivElement>(null);
const [{
leftOffset,
pointerStart
}, setState] = useState<{
leftOffset:number
pointerStart:number
}>({
leftOffset:0,
pointerStart: -1
});
const [left, setLeft] = useState<number>(0);
if(ref.current){
ref.current.style.cursor = pointerStart >= 0
? 'grabbing' : 'grab';
}
function handleScrubStart(e: PointerEvent<HTMLDivElement>){
setState((curr)=>({
...curr,
pointerStart: e.clientX
}));
}
function handleScrubEnd(e: PointerEvent<HTMLDivElement>){
setState((curr)=>({
...curr,
pointerStart: -1
}));
}
function handleScrubMove(e: PointerEvent<HTMLDivElement>){
if(pointerStart >= 0 && ref.current){
setLeft(e.clientX - ref.current.getBoundingClientRect().left);
}
}
return(
<div className="trim-scrubber"
ref={ref}
style={{width: width + "%"}}
// onPointerDown={()=>{
// if(trimZoneRef.current){
// trimZoneRef.current.style.cursor = 'grabbing';
// setTrimState((curr)=>({
// ...curr,
// isScrubbingTrim: true,
// }))
// }
// }}
// onPointerUp={()=>{
// if(trimZoneRef.current) {
// trimZoneRef.current.style.cursor = 'grab';
// setTrimState((curr)=>({
// ...curr,
// isScrubbingTrim: false,
// }));
// }
// }}
// onPointerMove={(e: PointerEvent<HTMLDivElement>)=>{
// if(trimZoneRef.current && playbarRef.current && isScrubbingTrim){
// // console.log(fractionToPercentage(
// // (e.clientX - trimZoneRef.current.getBoundingClientRect().left) / (playbarRef.current.getBoundingClientRect().width)
// // ) + "%");
// }
// }}
style={{
width: width + "%",
left: left
}}
onPointerDown={handleScrubStart}
onPointerUp={handleScrubEnd}
onPointerLeave={handleScrubEnd}
onPointerMove={handleScrubMove}
>
<FontAwesomeIcon icon={faGripDots} />
</div>
@@ -4,7 +4,6 @@ import React, {
useLayoutEffect,
useState,
useRef,
// PointerEvent,
} from "react";
import {
faArrowsRepeat,
@@ -35,7 +34,6 @@ const trimOptions: { [key: string]: number } = {
const initialTrimState: TrimStates = {
canNotTrim: true,
isScrubbingTrim: false,
trimDuration: 0,
trimStart: 0,
trimEnd: 0,
@@ -68,7 +66,6 @@ export default memo(function VideoQuickTrim({
trimStart,
trimEnd,
trimDuration,
// isScrubbingTrim,
}, setTrimState] = useState<TrimStates>(initialTrimState);
@@ -212,7 +209,19 @@ export default memo(function VideoQuickTrim({
{/* END of Video Wrapper */}
<div className="playbar" ref={playbarRefCallback}>
<div className="playbar-bg" />
<TrimScrbber width={trimScrubberWidth} />
<TrimScrbber
boundingWidth={playbarWidth}
width={trimScrubberWidth}
trimStart={trimStart}
trimEnd={trimEnd}
onChange={(val: QuickTrimData)=>{
setTrimState((curr)=>({
...curr,
trimStart: val.trimStartSeconds,
trimEnd: val.trimEndSeconds
}))
}}
/>
<div className="playcursor" style={{left: timeCursorOffset+"px"}}/>
</div> {/* END of Playbar */}
@@ -87,7 +87,7 @@ $playbar-height: 2rem;
outline: 0.125rem $white solid;
border-top: 1rem $white solid;
border-radius: 0.25rem 0.25rem 0.125rem 0.125rem;
// cursor: grab;
cursor: grab;
display: flex;
justify-content: center;
@@ -7,7 +7,6 @@ export type QuickTrimData = {
// INTERNALS
export type TrimStates = {
canNotTrim: boolean;
isScrubbingTrim: boolean;
trimDuration: number;
trimStart: number;
trimEnd: number;
@@ -145,14 +145,14 @@ export default function PageVSTApp({
variant="primary"
/>
</NavLink>
{/* <Button
<Button
label="Fake Gen"
onClick={()=>{
const request = mapRequest(vstValues);
console.log(request);
}}
variant="secondary"
/> */}
/>
<Button
label={t("button.enqueue")}
onClick={handleGenerate}