Add build closure parameter to create_egui_editor
This commit is contained in:
parent
a9b1dd61fd
commit
eed5a62abb
|
@ -8,6 +8,8 @@ code then it will not be listed here.
|
|||
|
||||
## [2022-10-20]
|
||||
|
||||
- The `create_egui_editor()` function from `nih_plug_egui` now also takes a
|
||||
build closure to apply initialization logic to the egui context.
|
||||
- The `nih_plug::param` module has been renamed to `nih_plug::params`. Code that
|
||||
only uses the prelude module doesn't need to be changed.
|
||||
- Some items have been moved out of `nih_plug::param::internals`. The main
|
||||
|
|
|
@ -35,18 +35,21 @@ pub mod widgets;
|
|||
/// field on your parameters struct.
|
||||
///
|
||||
/// See [`EguiState::from_size()`].
|
||||
pub fn create_egui_editor<T, U>(
|
||||
pub fn create_egui_editor<T, B, U>(
|
||||
egui_state: Arc<EguiState>,
|
||||
user_state: T,
|
||||
build: B,
|
||||
update: U,
|
||||
) -> Option<Box<dyn Editor>>
|
||||
where
|
||||
T: 'static + Send + Sync,
|
||||
B: Fn(&Context, &mut T) + 'static + Send + Sync,
|
||||
U: Fn(&Context, &ParamSetter, &mut T) + 'static + Send + Sync,
|
||||
{
|
||||
Some(Box::new(EguiEditor {
|
||||
egui_state,
|
||||
user_state: Arc::new(RwLock::new(user_state)),
|
||||
build: Arc::new(build),
|
||||
update: Arc::new(update),
|
||||
|
||||
// TODO: We can't get the size of the window when baseview does its own scaling, so if the
|
||||
|
@ -110,6 +113,9 @@ struct EguiEditor<T> {
|
|||
egui_state: Arc<EguiState>,
|
||||
/// The plugin's state. This is kept in between editor openenings.
|
||||
user_state: Arc<RwLock<T>>,
|
||||
|
||||
/// The user's build function. Applied once at the start of the application.
|
||||
build: Arc<dyn Fn(&Context, &mut T) + 'static + Send + Sync>,
|
||||
/// The user's update function.
|
||||
update: Arc<dyn Fn(&Context, &ParamSetter, &mut T) + 'static + Send + Sync>,
|
||||
|
||||
|
@ -127,6 +133,7 @@ where
|
|||
parent: ParentWindowHandle,
|
||||
context: Arc<dyn GuiContext>,
|
||||
) -> Box<dyn std::any::Any + Send + Sync> {
|
||||
let build = self.build.clone();
|
||||
let update = self.update.clone();
|
||||
let state = self.user_state.clone();
|
||||
|
||||
|
@ -161,7 +168,7 @@ where
|
|||
}),
|
||||
},
|
||||
state,
|
||||
|_, _, _| {},
|
||||
move |egui_ctx, _queue, state| build(egui_ctx, &mut state.write()),
|
||||
move |egui_ctx, _queue, state| {
|
||||
let setter = ParamSetter::new(context.as_ref());
|
||||
|
||||
|
|
|
@ -93,6 +93,7 @@ impl Plugin for Gain {
|
|||
create_egui_editor(
|
||||
self.params.editor_state.clone(),
|
||||
(),
|
||||
|_, _| {},
|
||||
move |egui_ctx, setter, _state| {
|
||||
egui::CentralPanel::default().show(egui_ctx, |ui| {
|
||||
// NOTE: See `plugins/diopser/src/editor.rs` for an example using the generic UI widget
|
||||
|
|
Loading…
Reference in a new issue