use crate::core::Normal;
#[cfg(feature = "nice-plug")]
use crate::Gesture;
use std::fmt::Debug;
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct NormalParam {
pub normal: Normal,
pub default: Normal,
pub unmodulated_normal: Option<Normal>,
}
impl Default for NormalParam {
fn default() -> Self {
Self {
normal: Normal::MIN,
default: Normal::MIN,
unmodulated_normal: None,
}
}
}
impl NormalParam {
pub fn new(normal: impl Into<Normal>, default: impl Into<Normal>) -> Self {
Self {
normal: normal.into(),
unmodulated_normal: None,
default: default.into(),
}
}
#[inline]
pub fn set(&mut self, normal: impl Into<Normal>) {
self.normal = normal.into();
}
#[cfg(feature = "nice-plug")]
pub fn from_nice(param: &impl nice_plug_core::params::Param) -> Self {
Self {
normal: param.modulated_normalized_value().into(),
default: param.default_normalized_value().into(),
unmodulated_normal: Some(param.unmodulated_normalized_value().into()),
}
}
}
#[cfg(feature = "nice-plug")]
pub fn nice_to_iced(param: &impl nice_plug_core::params::Param) -> NormalParam {
NormalParam::from_nice(param)
}
#[cfg(feature = "nice-plug")]
pub fn set_nice_param(
param: &impl nice_plug_core::params::Param,
gesture: Gesture,
setter: nice_plug_core::context::gui::ParamSetter,
) {
match gesture {
Gesture::GestureStart => {
setter.begin_set_parameter(param);
}
Gesture::Gesturing(new_normal) => {
setter.set_parameter_normalized(param, new_normal.as_f32());
}
Gesture::GestureEnd => {
setter.end_set_parameter(param);
}
}
}
impl From<f32> for NormalParam {
fn from(normal: f32) -> Self {
Self {
normal: Normal::new(normal),
..Default::default()
}
}
}
impl From<f64> for NormalParam {
fn from(normal: f64) -> Self {
Self {
normal: Normal::new(normal as f32),
..Default::default()
}
}
}
impl From<Normal> for NormalParam {
fn from(normal: Normal) -> Self {
Self {
normal,
..Default::default()
}
}
}