Move timeline and preview gestures into dedicated controllers so hooks stay thin around editor state and DOM events. This also routes drag and playback synchronization through manager APIs and reuses persistent wasm surfaces so scrubbing, seeking, and preview rendering stay in sync. Made-with: Cursor |
||
|---|---|---|
| .. | ||
| crates | ||
| wasm | ||
| README.md | ||
README.md
rust/
Shared Rust crates that power OpenCut across platforms (web via WASM, desktop natively).
Adding a new crate
- Create it under
rust/crates/ - Add
bridgeas a dependency - Annotate public functions with
#[export]
How #[export] works
use bridge::export;
#[export]
pub fn round_to_frame(time: f64, fps: f64) -> f64 {
(time * fps).round() / fps
}
Without the wasm feature, the macro is a no-op. With --features wasm, it expands to:
#[wasm_bindgen(js_name = "roundToFrame")]
pub fn round_to_frame(time: f64, fps: f64) -> f64 { ... }
Desktop uses the crates directly as Cargo dependencies.
Testing
cargo test -p <crate>