Migrate from frame-centric to AnimationData system

Replaces legacy Frame-based object positioning and shape management with
AnimationData curves throughout the codebase. This enables time-based
animation instead of discrete frame indices, providing smoother playback
and more flexible keyframe editing.

Key changes:
- Remove currentFrame getter and frame.keys lookups
- Replace setFrameNum() with setTime() for continuous time navigation
- Add Layer.addShape()/removeShape() with AnimationData integration
- Migrate actions (move, group, delete, z-order) to use animation curves
- Update keyboard shortcuts and drag operations to modify curves directly
- Leave "holes" in shapeIndex values for proper undo/redo support

Rendering now fully driven by AnimationData curves (exists, zOrder,
shapeIndex for shapes; x, y, rotation, scale for objects).
This commit is contained in:
Skyler Lehmkuhl 2025-10-20 01:56:25 -04:00
parent 5a72743209
commit 9699e1e1ea
2 changed files with 514 additions and 429 deletions

File diff suppressed because it is too large Load Diff

View File

@ -177,8 +177,9 @@ function floodFillRegion(
fileHeight, fileHeight,
context, context,
debugPoints, debugPoints,
debugPaintbucket) { debugPaintbucket,
shapes) {
let halfEpsilon = epsilon/2 let halfEpsilon = epsilon/2
// Helper function to check if a point is near any curve in the shape // Helper function to check if a point is near any curve in the shape
@ -201,8 +202,6 @@ function floodFillRegion(
} }
return false; return false;
} }
const shapes = context.activeObject.currentFrame.shapes;
const visited = new Set(); const visited = new Set();
const stack = [startPoint]; const stack = [startPoint];
const regionPoints = []; const regionPoints = [];