1
0
Fork 0

💥 Move re-exports to a prelude module

So you can import everything at once, because you're likely going to
need at least 90% of it anyways.
This commit is contained in:
Robbert van der Helm 2022-03-03 23:23:51 +01:00
parent f581294d7b
commit 4c0b07c578
14 changed files with 43 additions and 58 deletions

View file

@ -208,7 +208,7 @@ pub fn derive_params(input: TokenStream) -> TokenStream {
self: std::pin::Pin<&Self>,
) -> std::collections::HashMap<&'static str, nih_plug::param::internals::ParamPtr> {
// This may not be in scope otherwise
use ::nih_plug::Param;
use ::nih_plug::param::Param;
let mut param_map = std::collections::HashMap::new();
#(#param_mapping_insert_tokens)*

View file

@ -7,7 +7,7 @@ use baseview::{Size, WindowHandle, WindowOpenOptions, WindowScalePolicy};
use crossbeam::atomic::AtomicCell;
use egui::Context;
use egui_baseview::EguiWindow;
use nih_plug::{Editor, ParamSetter, ParentWindowHandle};
use nih_plug::prelude::{Editor, GuiContext, ParamSetter, ParentWindowHandle};
use parking_lot::RwLock;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
@ -88,7 +88,7 @@ where
fn spawn(
&self,
parent: ParentWindowHandle,
context: Arc<dyn nih_plug::GuiContext>,
context: Arc<dyn GuiContext>,
) -> Box<dyn std::any::Any + Send + Sync> {
let update = self.update.clone();
let state = self.user_state.clone();

View file

@ -2,7 +2,7 @@ use egui::{vec2, Response, Sense, Stroke, TextStyle, Ui, Vec2, Widget, WidgetTex
use lazy_static::lazy_static;
use super::util;
use nih_plug::{Param, ParamSetter};
use nih_plug::prelude::{Param, ParamSetter};
/// When shift+dragging a parameter, one pixel dragged corresponds to this much change in the
/// noramlized parameter.

View file

@ -19,12 +19,7 @@
#[macro_use]
extern crate nih_plug;
use nih_plug::{
formatters, Buffer, BufferConfig, BusConfig, ClapPlugin, Plugin, ProcessContext, ProcessStatus,
Vst3Plugin,
};
use nih_plug::{BoolParam, FloatParam, FloatRange, IntParam, IntRange, Params, SmoothingStyle};
use nih_plug::{Enum, EnumParam};
use nih_plug::prelude::*;
use std::pin::Pin;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;

View file

@ -2,11 +2,7 @@
extern crate nih_plug;
use atomic_float::AtomicF32;
use nih_plug::{
util, Buffer, BufferConfig, BusConfig, ClapPlugin, Editor, Plugin, ProcessContext,
ProcessStatus, Vst3Plugin,
};
use nih_plug::{FloatParam, FloatRange, IntParam, IntRange, Params, SmoothingStyle};
use nih_plug::prelude::*;
use nih_plug_egui::{create_egui_editor, egui, widgets, EguiState};
use std::pin::Pin;
use std::sync::Arc;

View file

@ -1,11 +1,7 @@
#[macro_use]
extern crate nih_plug;
use nih_plug::{
formatters, util, Buffer, BufferConfig, BusConfig, ClapPlugin, Plugin, ProcessContext,
ProcessStatus, Vst3Plugin,
};
use nih_plug::{BoolParam, FloatParam, FloatRange, Params, Smoother, SmoothingStyle};
use nih_plug::prelude::*;
use parking_lot::RwLock;
use std::pin::Pin;
use std::sync::Arc;

View file

@ -1,11 +1,7 @@
#[macro_use]
extern crate nih_plug;
use nih_plug::{
formatters, util, Buffer, BufferConfig, BusConfig, ClapPlugin, Plugin, ProcessContext,
ProcessStatus, Vst3Plugin,
};
use nih_plug::{BoolParam, FloatParam, FloatRange, Params, Smoother, SmoothingStyle};
use nih_plug::prelude::*;
use std::f32::consts;
use std::pin::Pin;
@ -144,11 +140,11 @@ impl Plugin for Sine {
'midi_events: loop {
match next_event {
Some(event) if event.timing() == sample_id as u32 => match event {
nih_plug::NoteEvent::NoteOn { note, .. } => {
NoteEvent::NoteOn { note, .. } => {
self.midi_note_freq = util::midi_note_to_freq(note);
self.midi_note_gain.set_target(self.sample_rate, 1.0);
}
nih_plug::NoteEvent::NoteOff { note, .. } => {
NoteEvent::NoteOff { note, .. } => {
if self.midi_note_freq == util::midi_note_to_freq(note) {
self.midi_note_gain.set_target(self.sample_rate, 0.0);
}

View file

@ -81,8 +81,8 @@ pub trait GuiContext: Send + Sync + 'static {
}
/// A convenience helper for setting parameter values. Any changes made here will be broadcasted to
/// the host and reflected in the plugin's [crate::param::internals::Params] object. These functions
/// should only be called from the main thread.
/// the host and reflected in the plugin's [`Params`][crate::param::internals::Params] object. These
/// functions should only be called from the main thread.
pub struct ParamSetter<'a> {
context: &'a dyn GuiContext,
}

View file

@ -1,34 +1,18 @@
// TODO: Once everything is more fleshed out, document the basic usage of this library and
// restructure these re-exports into a more useful prelude
#![cfg_attr(feature = "simd", feature(portable_simd))]
#[macro_use]
pub mod debug;
/// Everything you'd need to use NIH-plug. Import this with `use nih_plug::prelude::*;`.
pub mod prelude;
// These modules have also been re-exported in the prelude.
pub mod formatters;
pub mod util;
// Re-export our derive macros to make this a bit easier to use
pub use nih_plug_derive::Params;
// And also re-export anything you'd need to build a plugin
pub use buffer::Buffer;
pub use context::{GuiContext, ParamSetter, ProcessContext};
pub use param::enums::{Enum, EnumParam};
pub use param::internals::Params;
pub use param::range::{FloatRange, IntRange};
pub use param::smoothing::{Smoother, SmoothingStyle};
pub use param::{BoolParam, FloatParam, IntParam, Param};
pub use plugin::{
BufferConfig, BusConfig, ClapPlugin, Editor, NoteEvent, ParentWindowHandle, Plugin,
ProcessStatus, Vst3Plugin,
};
// The rest is either internal or already re-exported
mod buffer;
mod context;
mod event_loop;
pub mod buffer;
pub mod context;
pub mod event_loop;
pub mod param;
pub mod plugin;
pub mod wrapper;

View file

@ -1,4 +1,4 @@
//! TODO: Document how to use the [Param] trait. Also mention both interfaces: direct initialization
//! TODO: Document how to use the [`Param`] trait. Also mention both interfaces: direct initialization
//! + `..Default::default()`, and the builder interface. For the moment, just look at the gain
//! example.

19
src/prelude.rs Normal file
View file

@ -0,0 +1,19 @@
// Re-export the proc macro
pub use nih_plug_derive::Params;
pub use super::debug::*;
pub use super::formatters;
pub use super::util;
pub use super::buffer::Buffer;
pub use super::context::{GuiContext, ParamSetter, ProcessContext};
// This also includes the derive macro
pub use super::param::enums::{Enum, EnumParam};
pub use super::param::internals::Params;
pub use super::param::range::{FloatRange, IntRange};
pub use super::param::smoothing::{Smoother, SmoothingStyle};
pub use super::param::{BoolParam, FloatParam, IntParam, Param};
pub use super::plugin::{
BufferConfig, BusConfig, ClapPlugin, Editor, NoteEvent, ParentWindowHandle, Plugin,
ProcessStatus, Vst3Plugin,
};

View file

@ -4,11 +4,10 @@ use std::sync::atomic::Ordering;
use std::sync::Arc;
use super::wrapper::{OutputParamChange, Task, Wrapper};
use crate::context::ProcessContext;
use crate::context::{GuiContext, ProcessContext};
use crate::event_loop::EventLoop;
use crate::param::internals::ParamPtr;
use crate::plugin::{ClapPlugin, NoteEvent};
use crate::GuiContext;
/// A [`GuiContext`] implementation for the wrapper. This is passed to the plugin in
/// [`Editor::spawn()`][crate::Editor::spawn()] so it can interact with the rest of the plugin and

View file

@ -8,7 +8,7 @@ use std::sync::Arc;
use super::descriptor::PluginDescriptor;
use super::wrapper::Wrapper;
use crate::ClapPlugin;
use crate::plugin::ClapPlugin;
/// The plugin's factory. Initialized using a lazy_static from the entry poiunt's `get_factory()`
/// function. From this point onwards we don't need to generate code with macros anymore.

View file

@ -5,9 +5,9 @@ use std::collections::HashMap;
use std::pin::Pin;
use std::sync::atomic::{AtomicBool, Ordering};
use crate::param::internals::ParamPtr;
use crate::param::internals::{ParamPtr, Params};
use crate::param::Param;
use crate::{BufferConfig, Params};
use crate::plugin::BufferConfig;
/// A plain, unnormalized value for a parameter.
#[derive(Debug, Serialize, Deserialize)]