Commit Graph

286 Commits

Author SHA1 Message Date
Skyler Lehmkuhl f9e2d36f3a add metatracks 2025-10-18 22:56:38 -04:00
Skyler Lehmkuhl e45659ddfd Work on timeline 2025-10-18 21:32:59 -04:00
Skyler Lehmkuhl 87d2036f07 Complete Phase 5: Timeline curve interaction and nested animation support
Phase 5 adds interactive curve editing, proper interpolation visualization,
and automatic segment keyframe management for nested animations.

Timeline curve interaction features:
- Add keyframe creation by clicking in expanded curve view
- Implement keyframe dragging with snapping support
- Add multi-keyframe selection (Shift/Ctrl modifiers)
- Support constrained dragging (Shift: vertical, Ctrl: horizontal)
- Add keyframe deletion via right-click context menu
- Display hover tooltips showing keyframe values
- Respect interpolation modes in curve visualization:
  * Linear: straight lines
  * Bezier: smooth curves with tangent handles
  * Step/Hold: horizontal hold then vertical jump
  * Zero: jump to zero and back

Nested animation improvements:
- Add bidirectional parent references:
  * Layer.parentObject → GraphicsObject
  * AnimationData.parentLayer → Layer
  * GraphicsObject.parentLayer → Layer
- Auto-update segment keyframes when nested animation duration changes
- Update both time and value of segment end keyframe
- Fix parameter ordering (required before optional) in constructors

Bug fixes:
- Fix nested object rendering offset (transformCanvas applied twice)
- Fix curve visualization ignoring interpolation mode
2025-10-15 19:08:59 -04:00
Skyler Lehmkuhl 1936e91327 Implement Timeline V2 Phase 2: Track hierarchy with selection and scrolling
Phase 2 Implementation:
- Added TrackHierarchy class to build and manage hierarchical track structure
- Track display with expand/collapse triangles for layers and groups
- Hierarchical indentation for visual hierarchy
- Track selection syncs with stage selection (shapes, objects, layers)
- Vertical scrolling for track area when many tracks present
- Horizontal scrolling in ruler area for timeline navigation

Timeline Integration:
- Set TimelineV2 as default timeline on app load
- Timeline automatically updates when shapes added or grouped
- Trigger timeline redraw in renderLayers() for efficient batching

Selection System:
- Clicking tracks selects corresponding objects/shapes on stage
- Selected tracks highlighted in timeline
- Updates context.selection and context.shapeselection arrays
- Stores oldselection/oldshapeselection for undo support
- Calls updateUI() and updateMenu() to sync UI state

Visual Improvements:
- Use predefined colors from styles.js (no hardcoded colors)
- Alternating track background colors for readability
- Selection highlighting with predefined highlight color
- Type indicators for tracks: [L]ayer, [G]roup, [S]hape

Mouse Interactions:
- Click ruler area to move playhead
- Click track expand/collapse triangles to show/hide children
- Click track name to select object/shape
- Scroll wheel in ruler area for horizontal timeline scroll
- Scroll wheel in track area for vertical track list scroll
- Adjusts hit testing for vertical scroll offset
2025-10-15 01:47:37 -04:00
Skyler Lehmkuhl 6c79914ffb Work on moving things to animation curves 2025-10-15 00:41:51 -04:00
Skyler Lehmkuhl 7bade4517c Move frames to animation curves 2025-10-13 22:41:08 -04:00
Skyler Lehmkuhl 9f338ba6dc Start refactoring 2025-10-05 23:08:31 -04:00
Skyler Lehmkuhl ff76b93b9d improve detection 2025-01-31 07:12:12 -05:00
Skyler Lehmkuhl 18fad499c5 Automatically resize audio buffer to prevent overruns 2025-01-31 06:44:03 -05:00
Skyler Lehmkuhl 749caa14a5 Add RecordedAudioTrack 2025-01-29 04:41:59 -05:00
Skyler Lehmkuhl e12c2e8877 Require user interaction to start audio 2025-01-25 18:48:34 -05:00
Skyler Lehmkuhl cdd1ff2cbf sound is playing! 2025-01-25 05:39:57 -05:00
Skyler Lehmkuhl 065e6eb99e Show wait cursor while loading a file 2025-01-23 16:41:00 -05:00
Skyler Lehmkuhl ca69813a5c Make moving frames undoable 2025-01-23 16:30:45 -05:00
Skyler Lehmkuhl 1bfacd6b11 Fix "frame deleting" issue 2025-01-23 16:30:45 -05:00
Skyler Lehmkuhl e13c92f661 Fix clicking on layers bug 2025-01-23 16:30:24 -05:00
Skyler Lehmkuhl 139aedd5de fix a few errors 2025-01-23 05:23:26 -05:00
Skyler Lehmkuhl f88c1f1408 Cache line highlight pattern to improve performance 2025-01-23 05:09:49 -05:00
Skyler Lehmkuhl 2de03ff7f7 restore finishEncoding function 2025-01-23 04:55:46 -05:00
Skyler Lehmkuhl c79476e7a9 Cache icon rendering to improve performance 2025-01-23 04:55:18 -05:00
Skyler Lehmkuhl babd2ebbdc remove text/plain MIME type 2025-01-18 03:44:00 -05:00
Skyler Lehmkuhl 268790943f Add option to reopen file from last session 2025-01-18 03:32:53 -05:00
Skyler Lehmkuhl 666db06b78 Fix new file dialog 2025-01-18 03:17:54 -05:00
Skyler Lehmkuhl 7b6dbf21c2 fix opening files on macOS 2025-01-18 03:13:15 -05:00
Skyler Lehmkuhl c7151d6796 Fix objects not showing up when imported multiple times 2025-01-18 00:25:36 -05:00
Skyler Lehmkuhl c76cc75337 store parents in json 2025-01-17 23:44:41 -05:00
Skyler Lehmkuhl 871793115f Fix crash when object deleted from frame 2025-01-17 23:19:24 -05:00
Skyler Lehmkuhl f642fa8e4d Make file opening work properly 2025-01-17 21:27:15 -05:00
Skyler Lehmkuhl 6e4f3d670f work on opening files 2025-01-17 21:09:45 -05:00
Skyler Lehmkuhl 62ad2e35f2 cleanup 2025-01-17 20:13:38 -05:00
Skyler Lehmkuhl 2d355a13b9 Add 'New Window' command 2025-01-16 21:48:39 -05:00
Skyler Lehmkuhl b76dcc7a7e work on converting timeline to widgets 2025-01-16 21:40:05 -05:00
Skyler Lehmkuhl 33896c693d Fix audio layers going offscreen 2025-01-16 20:12:44 -05:00
Skyler Lehmkuhl e321b2bfcc Fix duplicate objects showing up after grouping 2025-01-16 19:36:02 -05:00
Skyler Lehmkuhl 49a7e3f75f Fix audio 2025-01-15 21:15:05 -05:00
Skyler Lehmkuhl 7b28257d3f Fix line colors 2025-01-15 21:14:51 -05:00
Skyler Lehmkuhl b3a05944e9 Play from beginning if on last frame 2025-01-15 18:36:32 -05:00
Skyler Lehmkuhl 9058ed4989 Use pointer events instead of mouse events 2025-01-15 00:33:37 -05:00
Skyler Lehmkuhl fd39350d7a Fix undoing group sent shapes to 0,0 2025-01-14 23:39:31 -05:00
Skyler Lehmkuhl 14f14d03c8 fix deleting objects 2025-01-14 23:36:54 -05:00
Skyler Lehmkuhl df3e2832bf Make polyfilled save dialog consistent with other dialogs 2025-01-14 22:03:20 -05:00
Skyler Lehmkuhl 2ab0df9835 Fix polyfill 2025-01-14 20:34:55 -05:00
Skyler Lehmkuhl 542892cb7b Fix polyfill 2025-01-14 20:31:25 -05:00
Skyler Lehmkuhl 17fe5299dc Enable fast open for files which support it 2025-01-14 19:57:10 -05:00
Skyler Lehmkuhl f0a3930ed7 use correct libav 2025-01-14 19:50:12 -05:00
Skyler Lehmkuhl 2979fdfd6b Make video resolution match stage dimensions for now 2025-01-14 19:48:16 -05:00
Skyler Lehmkuhl 2a0a1f6a92 Delete dead code 2025-01-14 19:46:07 -05:00
Skyler Lehmkuhl e19421aa37 Refactor webm and mp4 export to share logic 2025-01-14 19:44:29 -05:00
Skyler Lehmkuhl 29f1b8cda2 Add proper mp4 encoding 2025-01-14 19:34:05 -05:00
Skyler Lehmkuhl 4bb27e5e8c Restore frame number after exporting 2025-01-14 17:36:35 -05:00