envelope ui
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
use std::ops::RangeInclusive;
|
||||
use eframe::egui;
|
||||
use eframe::egui::{Context, Id, Label, Slider, Window};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use crate::gui::Showable;
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Debug, Deserialize, Serialize)]
|
||||
pub struct Envelope {
|
||||
pub attack: f32,
|
||||
pub decay: f32,
|
||||
pub sustain: f32,
|
||||
pub release: f32
|
||||
}
|
||||
|
||||
impl Default for Envelope {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
attack: 0.0,
|
||||
decay: 0.0,
|
||||
sustain: 1.0,
|
||||
release: 0.0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Showable<(Id, String)> for (&mut Envelope, &mut bool) {
|
||||
fn show(&mut self, ctx: &Context, (id, title): &(Id, String)) {
|
||||
let mut open = true;
|
||||
let window = Window::new(title)
|
||||
.id(*id)
|
||||
.open(&mut open)
|
||||
.resizable([false, false])
|
||||
.scroll([false, false]);
|
||||
|
||||
window.show(ctx, |ui| {
|
||||
egui::Grid::new(id).show(ui, |ui| {
|
||||
ui.add(Label::new("Attack"));
|
||||
ui.add(Slider::new(&mut self.0.attack, RangeInclusive::new(0.0, 1.0)));
|
||||
ui.end_row();
|
||||
ui.add(Label::new("Decay"));
|
||||
ui.add(Slider::new(&mut self.0.decay, RangeInclusive::new(0.0, 1.0)));
|
||||
ui.end_row();
|
||||
ui.add(Label::new("Sustain"));
|
||||
ui.add(Slider::new(&mut self.0.sustain, RangeInclusive::new(0.0, 1.0)));
|
||||
ui.end_row();
|
||||
ui.add(Label::new("Release"));
|
||||
ui.add(Slider::new(&mut self.0.release, RangeInclusive::new(0.0, 1.0)));
|
||||
ui.end_row();
|
||||
});
|
||||
});
|
||||
|
||||
*self.1 = open;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user