Skip to content

Commit e50a817

Browse files
committed
add transform + few fixes
feat: transform feat: batch command fix: slider undo fix: timeline zoom perf refactor: make updateElement support multiple
1 parent 484ce47 commit e50a817

File tree

15 files changed

+631
-262
lines changed

15 files changed

+631
-262
lines changed

apps/web/src/components/editor/panels/preview/index.tsx

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { CanvasRenderer } from "@/services/renderer/canvas-renderer";
88
import type { RootNode } from "@/services/renderer/nodes/root-node";
99
import { buildScene } from "@/services/renderer/scene-builder";
1010
import { getLastFrameTime } from "@/lib/time";
11+
import { PreviewInteractionOverlay } from "./preview-interaction-overlay";
1112

1213
function usePreviewSize() {
1314
const editor = useEditor();
@@ -57,7 +58,7 @@ export function PreviewPanel() {
5758
}
5859

5960
function PreviewCanvas() {
60-
const ref = useRef<HTMLCanvasElement>(null);
61+
const canvasRef = useRef<HTMLCanvasElement>(null);
6162
const lastFrameRef = useRef(-1);
6263
const lastSceneRef = useRef<RootNode | null>(null);
6364
const renderingRef = useRef(false);
@@ -76,7 +77,7 @@ function PreviewCanvas() {
7677
const renderTree = editor.renderer.getRenderTree();
7778

7879
const render = useCallback(() => {
79-
if (ref.current && renderTree && !renderingRef.current) {
80+
if (canvasRef.current && renderTree && !renderingRef.current) {
8081
const time = editor.playback.getCurrentTime();
8182
const lastFrameTime = getLastFrameTime({
8283
duration: renderTree.duration,
@@ -96,7 +97,7 @@ function PreviewCanvas() {
9697
.renderToCanvas({
9798
node: renderTree,
9899
time: renderTime,
99-
targetCanvas: ref.current,
100+
targetCanvas: canvasRef.current,
100101
})
101102
.then(() => {
102103
renderingRef.current = false;
@@ -108,17 +109,20 @@ function PreviewCanvas() {
108109
useRafLoop(render);
109110

110111
return (
111-
<canvas
112-
ref={ref}
113-
width={width}
114-
height={height}
115-
className="block max-h-full max-w-full border"
116-
style={{
117-
background:
118-
activeProject.settings.background.type === "blur"
119-
? "transparent"
120-
: activeProject?.settings.background.color,
121-
}}
122-
/>
112+
<div className="relative">
113+
<canvas
114+
ref={canvasRef}
115+
width={width}
116+
height={height}
117+
className="block max-h-full max-w-full border"
118+
style={{
119+
background:
120+
activeProject.settings.background.type === "blur"
121+
? "transparent"
122+
: activeProject?.settings.background.color,
123+
}}
124+
/>
125+
<PreviewInteractionOverlay canvasRef={canvasRef} />
126+
</div>
123127
);
124128
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { usePreviewInteraction } from "@/hooks/use-preview-interaction";
2+
import { cn } from "@/utils/ui";
3+
4+
export function PreviewInteractionOverlay({
5+
canvasRef,
6+
}: {
7+
canvasRef: React.RefObject<HTMLCanvasElement | null>;
8+
}) {
9+
const { onPointerDown, onPointerMove, onPointerUp } =
10+
usePreviewInteraction({ canvasRef });
11+
12+
return (
13+
<div
14+
className={cn("absolute inset-0 pointer-events-auto")}
15+
onPointerDown={onPointerDown}
16+
onPointerMove={onPointerMove}
17+
onPointerUp={onPointerUp}
18+
/>
19+
);
20+
}

0 commit comments

Comments
 (0)