From e50a817b97b87baa0cd8fdde0fdb5d607143c1c3 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Sun, 8 Feb 2026 22:21:17 +0100 Subject: add transform + few fixes feat: transform feat: batch command fix: slider undo fix: timeline zoom perf refactor: make updateElement support multiple --- .../src/components/editor/panels/preview/index.tsx | 34 ++++++++++++---------- .../panels/preview/preview-interaction-overlay.tsx | 20 +++++++++++++ 2 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 apps/web/src/components/editor/panels/preview/preview-interaction-overlay.tsx (limited to 'apps/web/src/components/editor/panels/preview') diff --git a/apps/web/src/components/editor/panels/preview/index.tsx b/apps/web/src/components/editor/panels/preview/index.tsx index 5ed9db00..c579b15b 100644 --- a/apps/web/src/components/editor/panels/preview/index.tsx +++ b/apps/web/src/components/editor/panels/preview/index.tsx @@ -8,6 +8,7 @@ import { CanvasRenderer } from "@/services/renderer/canvas-renderer"; import type { RootNode } from "@/services/renderer/nodes/root-node"; import { buildScene } from "@/services/renderer/scene-builder"; import { getLastFrameTime } from "@/lib/time"; +import { PreviewInteractionOverlay } from "./preview-interaction-overlay"; function usePreviewSize() { const editor = useEditor(); @@ -57,7 +58,7 @@ export function PreviewPanel() { } function PreviewCanvas() { - const ref = useRef(null); + const canvasRef = useRef(null); const lastFrameRef = useRef(-1); const lastSceneRef = useRef(null); const renderingRef = useRef(false); @@ -76,7 +77,7 @@ function PreviewCanvas() { const renderTree = editor.renderer.getRenderTree(); const render = useCallback(() => { - if (ref.current && renderTree && !renderingRef.current) { + if (canvasRef.current && renderTree && !renderingRef.current) { const time = editor.playback.getCurrentTime(); const lastFrameTime = getLastFrameTime({ duration: renderTree.duration, @@ -96,7 +97,7 @@ function PreviewCanvas() { .renderToCanvas({ node: renderTree, time: renderTime, - targetCanvas: ref.current, + targetCanvas: canvasRef.current, }) .then(() => { renderingRef.current = false; @@ -108,17 +109,20 @@ function PreviewCanvas() { useRafLoop(render); return ( - +
+ + +
); } diff --git a/apps/web/src/components/editor/panels/preview/preview-interaction-overlay.tsx b/apps/web/src/components/editor/panels/preview/preview-interaction-overlay.tsx new file mode 100644 index 00000000..c13379f0 --- /dev/null +++ b/apps/web/src/components/editor/panels/preview/preview-interaction-overlay.tsx @@ -0,0 +1,20 @@ +import { usePreviewInteraction } from "@/hooks/use-preview-interaction"; +import { cn } from "@/utils/ui"; + +export function PreviewInteractionOverlay({ + canvasRef, +}: { + canvasRef: React.RefObject; +}) { + const { onPointerDown, onPointerMove, onPointerUp } = + usePreviewInteraction({ canvasRef }); + + return ( +
+ ); +} -- cgit v1.3.1