1
0
Fork 0

Also drop Sync requirement for editor handles

This commit is contained in:
Robbert van der Helm 2022-10-20 14:41:53 +02:00
parent a2a52e0ff1
commit 375262aaa3
6 changed files with 12 additions and 14 deletions

View file

@ -8,8 +8,9 @@ code then it will not be listed here.
## [2022-10-20] ## [2022-10-20]
- `Editor` now only requires `Send` and no longer needs `Sync`. This is not a - `Editor` and the editor handle returned by `Editor::spawn` now only require
breaking change, but it might be worth being aware of. `Send` and no longer need `Sync`. This is not a breaking change, but it might
be worth being aware of.
- The `create_egui_editor()` function from `nih_plug_egui` now also takes a - The `create_egui_editor()` function from `nih_plug_egui` now also takes a
build closure to apply initialization logic to the egui context. build closure to apply initialization logic to the egui context.
- The `nih_plug::param` module has been renamed to `nih_plug::params`. Code that - The `nih_plug::param` module has been renamed to `nih_plug::params`. Code that

View file

@ -132,7 +132,7 @@ where
&self, &self,
parent: ParentWindowHandle, parent: ParentWindowHandle,
context: Arc<dyn GuiContext>, context: Arc<dyn GuiContext>,
) -> Box<dyn std::any::Any + Send + Sync> { ) -> Box<dyn std::any::Any + Send> {
let build = self.build.clone(); let build = self.build.clone();
let update = self.update.clone(); let update = self.update.clone();
let state = self.user_state.clone(); let state = self.user_state.clone();
@ -213,7 +213,6 @@ struct EguiEditorHandle {
/// The window handle enum stored within 'WindowHandle' contains raw pointers. Is there a way around /// The window handle enum stored within 'WindowHandle' contains raw pointers. Is there a way around
/// having this requirement? /// having this requirement?
unsafe impl Send for EguiEditorHandle {} unsafe impl Send for EguiEditorHandle {}
unsafe impl Sync for EguiEditorHandle {}
impl Drop for EguiEditorHandle { impl Drop for EguiEditorHandle {
fn drop(&mut self) { fn drop(&mut self) {

View file

@ -299,7 +299,7 @@ impl<E: IcedEditor> Editor for IcedEditorWrapper<E> {
&self, &self,
parent: ParentWindowHandle, parent: ParentWindowHandle,
context: Arc<dyn GuiContext>, context: Arc<dyn GuiContext>,
) -> Box<dyn std::any::Any + Send + Sync> { ) -> Box<dyn std::any::Any + Send> {
let (unscaled_width, unscaled_height) = self.iced_state.size(); let (unscaled_width, unscaled_height) = self.iced_state.size();
let scaling_factor = self.scaling_factor.load(); let scaling_factor = self.scaling_factor.load();
@ -389,7 +389,6 @@ struct IcedEditorHandle<Message: 'static + Send> {
/// The window handle enum stored within 'WindowHandle' contains raw pointers. Is there a way around /// The window handle enum stored within 'WindowHandle' contains raw pointers. Is there a way around
/// having this requirement? /// having this requirement?
unsafe impl<Message: Send> Send for IcedEditorHandle<Message> {} unsafe impl<Message: Send> Send for IcedEditorHandle<Message> {}
unsafe impl<Message: Send> Sync for IcedEditorHandle<Message> {}
impl<Message: Send> Drop for IcedEditorHandle<Message> { impl<Message: Send> Drop for IcedEditorHandle<Message> {
fn drop(&mut self) { fn drop(&mut self) {

View file

@ -174,7 +174,7 @@ impl Editor for ViziaEditor {
&self, &self,
parent: ParentWindowHandle, parent: ParentWindowHandle,
context: Arc<dyn GuiContext>, context: Arc<dyn GuiContext>,
) -> Box<dyn std::any::Any + Send + Sync> { ) -> Box<dyn std::any::Any + Send> {
let app = self.app.clone(); let app = self.app.clone();
let vizia_state = self.vizia_state.clone(); let vizia_state = self.vizia_state.clone();
let apply_theming = self.apply_theming; let apply_theming = self.apply_theming;
@ -258,7 +258,6 @@ struct ViziaEditorHandle {
/// The window handle enum stored within 'WindowHandle' contains raw pointers. Is there a way around /// The window handle enum stored within 'WindowHandle' contains raw pointers. Is there a way around
/// having this requirement? /// having this requirement?
unsafe impl Send for ViziaEditorHandle {} unsafe impl Send for ViziaEditorHandle {}
unsafe impl Sync for ViziaEditorHandle {}
impl Drop for ViziaEditorHandle { impl Drop for ViziaEditorHandle {
fn drop(&mut self) { fn drop(&mut self) {

View file

@ -282,7 +282,7 @@ pub trait Editor: Send {
&self, &self,
parent: ParentWindowHandle, parent: ParentWindowHandle,
context: Arc<dyn GuiContext>, context: Arc<dyn GuiContext>,
) -> Box<dyn Any + Send + Sync>; ) -> Box<dyn Any + Send>;
/// Returns the (current) size of the editor in pixels as a `(width, height)` pair. This size /// Returns the (current) size of the editor in pixels as a `(width, height)` pair. This size
/// must be reported in _logical pixels_, i.e. the size before being multiplied by the DPI /// must be reported in _logical pixels_, i.e. the size before being multiplied by the DPI

View file

@ -115,7 +115,7 @@ pub struct Wrapper<P: ClapPlugin> {
editor: Option<Mutex<Box<dyn Editor>>>, editor: Option<Mutex<Box<dyn Editor>>>,
/// A handle for the currently active editor instance. The plugin should implement `Drop` on /// A handle for the currently active editor instance. The plugin should implement `Drop` on
/// this handle for its closing behavior. /// this handle for its closing behavior.
editor_handle: RwLock<Option<Box<dyn Any + Send + Sync>>>, editor_handle: Mutex<Option<Box<dyn Any + Send>>>,
/// The DPI scaling factor as passed to the [IPlugViewContentScaleSupport::set_scale_factor()] /// The DPI scaling factor as passed to the [IPlugViewContentScaleSupport::set_scale_factor()]
/// function. Defaults to 1.0, and will be kept there on macOS. When reporting and handling size /// function. Defaults to 1.0, and will be kept there on macOS. When reporting and handling size
/// the sizes communicated to and from the DAW should be scaled by this factor since NIH-plug's /// the sizes communicated to and from the DAW should be scaled by this factor since NIH-plug's
@ -544,7 +544,7 @@ impl<P: ClapPlugin> Wrapper<P> {
plugin: RwLock::new(plugin), plugin: RwLock::new(plugin),
params, params,
editor, editor,
editor_handle: RwLock::new(None), editor_handle: Mutex::new(None),
editor_scaling_factor: AtomicF32::new(1.0), editor_scaling_factor: AtomicF32::new(1.0),
is_processing: AtomicBool::new(false), is_processing: AtomicBool::new(false),
@ -2645,7 +2645,7 @@ impl<P: ClapPlugin> Wrapper<P> {
check_null_ptr!(false, plugin); check_null_ptr!(false, plugin);
let wrapper = &*(plugin as *const Self); let wrapper = &*(plugin as *const Self);
let editor_handle = wrapper.editor_handle.read(); let editor_handle = wrapper.editor_handle.lock();
if editor_handle.is_none() { if editor_handle.is_none() {
true true
} else { } else {
@ -2658,7 +2658,7 @@ impl<P: ClapPlugin> Wrapper<P> {
check_null_ptr!((), plugin); check_null_ptr!((), plugin);
let wrapper = &*(plugin as *const Self); let wrapper = &*(plugin as *const Self);
let mut editor_handle = wrapper.editor_handle.write(); let mut editor_handle = wrapper.editor_handle.lock();
if editor_handle.is_some() { if editor_handle.is_some() {
*editor_handle = None; *editor_handle = None;
} else { } else {
@ -2764,7 +2764,7 @@ impl<P: ClapPlugin> Wrapper<P> {
let window = &*window; let window = &*window;
let result = { let result = {
let mut editor_handle = wrapper.editor_handle.write(); let mut editor_handle = wrapper.editor_handle.lock();
if editor_handle.is_none() { if editor_handle.is_none() {
let api = CStr::from_ptr(window.api); let api = CStr::from_ptr(window.api);
let handle = if api == CLAP_WINDOW_API_X11 { let handle = if api == CLAP_WINDOW_API_X11 {