Add functions for interacting with plain values
This commit is contained in:
parent
ebb74a737c
commit
dabd2beca8
|
@ -64,12 +64,21 @@ pub struct PlainParam<T> {
|
||||||
|
|
||||||
/// Describes a single parmaetre of any type.
|
/// Describes a single parmaetre of any type.
|
||||||
pub trait Param {
|
pub trait Param {
|
||||||
|
/// The plain parameter type.
|
||||||
|
type Plain;
|
||||||
|
|
||||||
/// Set this parameter based on a string. Returns whether the updating succeeded. That can fail
|
/// Set this parameter based on a string. Returns whether the updating succeeded. That can fail
|
||||||
/// if the string cannot be parsed.
|
/// if the string cannot be parsed.
|
||||||
///
|
///
|
||||||
/// TODO: After implementing VST3, check if we handle parsing failures correctly
|
/// TODO: After implementing VST3, check if we handle parsing failures correctly
|
||||||
fn set_from_string(&mut self, string: &str) -> bool;
|
fn set_from_string(&mut self, string: &str) -> bool;
|
||||||
|
|
||||||
|
/// Get the unnormalized value for this parameter.
|
||||||
|
fn plain_value(&self) -> Self::Plain;
|
||||||
|
|
||||||
|
/// Set this parameter based on a plain, unnormalized value.
|
||||||
|
fn set_plain_value(&mut self, plain: Self::Plain);
|
||||||
|
|
||||||
/// Get the normalized `[0, 1]` value for this parameter.
|
/// Get the normalized `[0, 1]` value for this parameter.
|
||||||
fn normalized_value(&self) -> f32;
|
fn normalized_value(&self) -> f32;
|
||||||
|
|
||||||
|
@ -89,8 +98,10 @@ pub trait Param {
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! impl_plainparam {
|
macro_rules! impl_plainparam {
|
||||||
($ty:ident) => {
|
($ty:ident, $plain:ty) => {
|
||||||
impl Param for $ty {
|
impl Param for $ty {
|
||||||
|
type Plain = $plain;
|
||||||
|
|
||||||
fn set_from_string(&mut self, string: &str) -> bool {
|
fn set_from_string(&mut self, string: &str) -> bool {
|
||||||
let value = match &self.string_to_value {
|
let value = match &self.string_to_value {
|
||||||
Some(f) => f(string),
|
Some(f) => f(string),
|
||||||
|
@ -107,6 +118,14 @@ macro_rules! impl_plainparam {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn plain_value(&self) -> Self::Plain {
|
||||||
|
self.value
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_plain_value(&mut self, plain: Self::Plain) {
|
||||||
|
self.value = plain;
|
||||||
|
}
|
||||||
|
|
||||||
fn normalized_value(&self) -> f32 {
|
fn normalized_value(&self) -> f32 {
|
||||||
self.range.normalize(self.value)
|
self.range.normalize(self.value)
|
||||||
}
|
}
|
||||||
|
@ -142,8 +161,8 @@ macro_rules! impl_plainparam {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_plainparam!(FloatParam);
|
impl_plainparam!(FloatParam, f32);
|
||||||
impl_plainparam!(IntParam);
|
impl_plainparam!(IntParam, i32);
|
||||||
|
|
||||||
impl<T: Display + Copy> Display for PlainParam<T> {
|
impl<T: Display + Copy> Display for PlainParam<T> {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
|
Loading…
Reference in a new issue