From 9f5b8d99c34dfea3d1b7321bb1009e5e7e0949e0 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Sun, 16 May 2021 09:32:02 +0200 Subject: loop keyframe + line in frame --- components/loop.tsx | 5 +++-- pages/editor.tsx | 14 +++++++------- styles/editor.css | 24 ++++++++++++++++-------- styles/keyframes.css | 6 ++++++ 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/components/loop.tsx b/components/loop.tsx index ec45c08..f459ab5 100644 --- a/components/loop.tsx +++ b/components/loop.tsx @@ -1,9 +1,10 @@ +import { CSSProperties } from 'react'; import { SlideKeyframe } from './icons'; export default function Loop(props: { - width: number; + length: number; }) { - return
+ return
diff --git a/pages/editor.tsx b/pages/editor.tsx index 5c3828d..eb7e14d 100644 --- a/pages/editor.tsx +++ b/pages/editor.tsx @@ -10,6 +10,7 @@ import Toolbar from '@material-ui/core/Toolbar'; import Icon from '@mdi/react'; import { PressureIcon, SlideKeyframe } from '../components/icons'; +import Loop from '../components/loop'; import FullscreenRoundedIcon from '@material-ui/icons/FullscreenRounded'; import NavigateBeforeRoundedIcon from '@material-ui/icons/NavigateBeforeRounded'; @@ -23,6 +24,7 @@ function TimelineEditor(props: { }) { var frames = [...new Array(props.player.timeline?.framecount || 0)].map((el, i) =>
+
{props.player?.frameToTimestampString(i + 1)} @@ -30,13 +32,11 @@ function TimelineEditor(props: { {(() => { var slide = props.player?.timeline?.slides.find(slide => slide.frame == i + 1); if (slide) { - return ; - } - var loop = props.player?.timeline?.slides.find(slide => - slide.type == 'loop' && (slide as loopSlide).beginFrame == i + 1 - ); - if (loop) { - return ; + if (slide.type == 'loop') { + return ; + } else { + return ; + } } })()}
diff --git a/styles/editor.css b/styles/editor.css index 3005be7..62fa103 100644 --- a/styles/editor.css +++ b/styles/editor.css @@ -142,34 +142,42 @@ margin: 4px; } +.appGrid .timeline { + --zoom: 4; +} + .appGrid .timeline .frames { height: 100%; } .appGrid .timeline .frames .frame { background-color: transparent; - margin-top: 28px; height: 100%; - width: 4px; + width: calc(var(--zoom) * 1px); display: inline-block; border-radius: 2px 2px 0 0; position: relative; overflow: visible; } +.appGrid .timeline .frames .frame:nth-child(30n) .line { + background-color: var(--c300); + top: 28px; + width: 2px; + border-radius: 2px 2px 0 0; +} + .appGrid .timeline .frames .frame .timecode { display: none; } .appGrid .timeline .frames .frame .keyframeWrapper { line-height: 0; - top: 16px; + top: 44px; z-index: 999; color: var(--gruble); -} - -.appGrid .timeline .frames .frame:nth-child(30n) { - background-color: var(--c300); + width: 24px; + height: 24px; } .appGrid .timeline .frames .frame:nth-child(30n) .timecode { @@ -177,7 +185,7 @@ font-weight: 500; line-height: 1; display: inline-block; - top: -16px; + top: 12px; } .appGrid .timeline { diff --git a/styles/keyframes.css b/styles/keyframes.css index 8e7e3d2..53fba20 100644 --- a/styles/keyframes.css +++ b/styles/keyframes.css @@ -6,6 +6,12 @@ margin: 4px -11px; } +.loop { + width: calc(var(--loop-length) * var(--zoom) * 1px + 24px); + position: absolute; + right: 0; +} + .keyframe > * { fill: currentColor; } -- cgit v1.2.3