feat(engine): clip move, clip effect_input, mandatory static FFmpeg
- oakengine_sequence_move_clip implemented for real (oaktimeline TrackMoveBlockCommand; fixes the graph-ownership/gap-anchor/ripple trim bugs the stub was hiding); same-track via the frozen C ABI, cross-track supported by the module command - oaknode clip blocks now declare a tex_in texture input and set effect_input to it, so timeline clips can host effect chains; facade test covers effect insert/remove on a real clip - oakffmpeg-link: FFMPEG_DIR is now mandatory with a clear panic (a Homebrew upgrade left the system ffmpeg .pc pointing at a deleted dav1d Cellar path, breaking links); reads a git-ignored workspace .env for IDEs that cannot inject env vars (RustRover); links the C++ stdlib for C++ codec libs (svt-av1) - oakengine re-exports oaknode so tests share one crate instance; it_node uses the direct instance's value type where it calls the module FFI (the --workspace dev-dependency feature split builds oaknode twice)
This commit is contained in:
+21
-10
@@ -24,8 +24,8 @@
|
||||
|
||||
use gpui::colors::DefaultColors;
|
||||
use gpui::prelude::*;
|
||||
use gpui::{App, Context, Entity, Render, SharedString, Window, div};
|
||||
use gpui_elements::editable_text::{EditableTextState, StringStorage, text_input};
|
||||
use gpui::{div, App, Context, Entity, Render, SharedString, Window};
|
||||
use gpui_elements::editable_text::{text_input, EditableTextState, StringStorage};
|
||||
use gpui_widgets::combo_box::{ComboBox, ComboBoxEvent, ComboBoxOption};
|
||||
|
||||
use crate::i18n;
|
||||
@@ -77,7 +77,9 @@ impl PreferencesContent {
|
||||
let _ = cx;
|
||||
})
|
||||
.detach();
|
||||
backend.update(cx, |combo, cx| combo.set_selected(Some(backend_selected), cx));
|
||||
backend.update(cx, |combo, cx| {
|
||||
combo.set_selected(Some(backend_selected), cx)
|
||||
});
|
||||
|
||||
let language_options = vec![
|
||||
ComboBoxOption::new(0, "English (en-US)"),
|
||||
@@ -102,7 +104,9 @@ impl PreferencesContent {
|
||||
let _ = cx;
|
||||
})
|
||||
.detach();
|
||||
language.update(cx, |combo, cx| combo.set_selected(Some(language_selected), cx));
|
||||
language.update(cx, |combo, cx| {
|
||||
combo.set_selected(Some(language_selected), cx)
|
||||
});
|
||||
|
||||
Self {
|
||||
backend,
|
||||
@@ -201,7 +205,11 @@ impl Render for PathField {
|
||||
.bg(colors.background)
|
||||
.px_2()
|
||||
.py_1()
|
||||
.child(text_input("gpui-widgets-export-path").state(weak).accepts_input(true))
|
||||
.child(
|
||||
text_input("gpui-widgets-export-path")
|
||||
.state(weak)
|
||||
.accepts_input(true),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,9 +233,7 @@ impl ExportDialogContent {
|
||||
let options = formats
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, (_, name, ext))| {
|
||||
ComboBoxOption::new(i, format!("{name} (.{ext})"))
|
||||
})
|
||||
.map(|(i, (_, name, ext))| ComboBoxOption::new(i, format!("{name} (.{ext})")))
|
||||
.collect();
|
||||
let format = cx.new(|cx| {
|
||||
ComboBox::new(3, options, window, cx)
|
||||
@@ -281,7 +287,8 @@ impl ExportDialogContent {
|
||||
/// Pre-fills the output path.
|
||||
pub fn set_path(&mut self, path: impl Into<SharedString>, cx: &mut Context<Self>) {
|
||||
let path = path.into();
|
||||
self.path.update(cx, |content, cx| content.set_path(path, cx));
|
||||
self.path
|
||||
.update(cx, |content, cx| content.set_path(path, cx));
|
||||
cx.notify();
|
||||
}
|
||||
}
|
||||
@@ -299,7 +306,11 @@ impl Render for ExportDialogContent {
|
||||
i18n::tr("export.format").into(),
|
||||
self.format.clone(),
|
||||
))
|
||||
.child(form_row(&colors, i18n::tr("export.path").into(), self.path.clone()))
|
||||
.child(form_row(
|
||||
&colors,
|
||||
i18n::tr("export.path").into(),
|
||||
self.path.clone(),
|
||||
))
|
||||
.child(
|
||||
div()
|
||||
.text_color(colors.disabled)
|
||||
|
||||
Reference in New Issue
Block a user