feat(scenes): add scene darkness reveal and fix project reopen crash

Add darkenScene with Opening brush in presentation, persist reveal strokes per scene during a session, and close projects properly on return to home. Harden dnd asset streaming to avoid Windows main-process crashes when reopening projects.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-07-02 19:41:26 +08:00
parent d54e9ed02d
commit 4631a1bece
19 changed files with 526 additions and 11 deletions
+2
View File
@@ -90,6 +90,8 @@ export type Scene = {
previewVideoAutostart: boolean;
/** Поворот превью в градусах (0/90/180/270). */
previewRotationDeg: 0 | 90 | 180 | 270;
/** В режиме показа: сцена начинается полностью затемнённой; мастер «раскрывает» кистью. */
darkenScene: boolean;
media: SceneMediaRefs;
settings: SceneSettings;
connections: SceneId[];
+1
View File
@@ -8,6 +8,7 @@ export type EffectToolType =
| 'sunbeam'
| 'poisonCloud'
| 'freeze'
| 'exploreBrush'
| 'eraser';
export type EffectInstanceType =
+1
View File
@@ -1,4 +1,5 @@
export * from './domain';
export * from './effects';
export * from './ids';
export * from './sceneDarkness';
export * from './videoPlayback';
+22
View File
@@ -0,0 +1,22 @@
import type { NPoint } from './effects';
export type SceneDarknessRevealStroke = {
id: string;
seed: number;
createdAtMs: number;
points: NPoint[];
radiusN: number;
};
export type SceneDarknessState = {
revision: number;
/** Текущая сцена помечена «Затемнить сцену» (только для изображений). */
enabled: boolean;
cacheKey: string | null;
strokes: SceneDarknessRevealStroke[];
draft: { points: NPoint[]; radiusN: number } | null;
};
export type SceneDarknessEvent =
| { kind: 'draft.set'; draft: { points: NPoint[]; radiusN: number } | null }
| { kind: 'stroke.add'; stroke: SceneDarknessRevealStroke };