|
|
|
|
@@ -179,68 +179,67 @@ void Renderer::draw_ui(Synth& synth, SynthGuiState& synth_gui) {
|
|
|
|
|
std::vector<Oscillator*> oscillators = synth.GetOscillators();
|
|
|
|
|
std::vector<OscillatorGuiState*> gui_oscillators = synth_gui.oscillators;
|
|
|
|
|
|
|
|
|
|
float panel_y_offset = draw_oscillators_panels(oscillators, gui_oscillators, panel_bounds);
|
|
|
|
|
float panel_y_offset =
|
|
|
|
|
draw_oscillators_panels(oscillators, gui_oscillators, panel_bounds);
|
|
|
|
|
draw_oscillators_shape_inputs(oscillators, gui_oscillators);
|
|
|
|
|
|
|
|
|
|
draw_adsr_panel(synth.GetADSR(), synth_gui.adsr, panel_bounds, panel_y_offset);
|
|
|
|
|
draw_adsr_panel(synth.GetADSR(), synth_gui.adsr, panel_bounds,
|
|
|
|
|
panel_y_offset);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Renderer::draw_adsr_panel(ADSR* adsr, ADSRGuiState& gui_adsr, const Rectangle& panel_bounds, float panel_y_offset) {
|
|
|
|
|
// Draw ADSR Panel
|
|
|
|
|
const int osc_panel_width = panel_bounds.width - 20;
|
|
|
|
|
const int osc_panel_height = 120;
|
|
|
|
|
const int osc_panel_x = panel_bounds.x + 10;
|
|
|
|
|
const int osc_panel_y = panel_bounds.y + 50 + panel_y_offset;
|
|
|
|
|
panel_y_offset += osc_panel_height + 5;
|
|
|
|
|
GuiPanel((Rectangle){(float)osc_panel_x, (float)osc_panel_y,
|
|
|
|
|
(float)osc_panel_width, (float)osc_panel_height},
|
|
|
|
|
"ADSR");
|
|
|
|
|
void Renderer::draw_adsr_panel(ADSR* adsr, ADSRGuiState& gui_adsr,
|
|
|
|
|
const Rectangle& panel_bounds,
|
|
|
|
|
float panel_y_offset) {
|
|
|
|
|
// Draw ADSR Panel
|
|
|
|
|
const int osc_panel_width = panel_bounds.width - 20;
|
|
|
|
|
const int osc_panel_height = 120;
|
|
|
|
|
const int osc_panel_x = panel_bounds.x + 10;
|
|
|
|
|
const int osc_panel_y = panel_bounds.y + 50 + panel_y_offset;
|
|
|
|
|
panel_y_offset += osc_panel_height + 5;
|
|
|
|
|
GuiPanel((Rectangle){(float)osc_panel_x, (float)osc_panel_y,
|
|
|
|
|
(float)osc_panel_width, (float)osc_panel_height},
|
|
|
|
|
"ADSR");
|
|
|
|
|
|
|
|
|
|
const float slider_padding = 50.f;
|
|
|
|
|
const float el_spacing = 5.f;
|
|
|
|
|
Rectangle el_rect = {.x = (float)osc_panel_x + slider_padding + 30,
|
|
|
|
|
.y = (float)osc_panel_y + 10,
|
|
|
|
|
.width =
|
|
|
|
|
(float)osc_panel_width - (slider_padding * 2),
|
|
|
|
|
.height = 25.f};
|
|
|
|
|
const float slider_padding = 50.f;
|
|
|
|
|
const float el_spacing = 5.f;
|
|
|
|
|
Rectangle el_rect = {.x = (float)osc_panel_x + slider_padding + 30,
|
|
|
|
|
.y = (float)osc_panel_y + 10,
|
|
|
|
|
.width = (float)osc_panel_width - (slider_padding * 2),
|
|
|
|
|
.height = 25.f};
|
|
|
|
|
|
|
|
|
|
// Attack slider
|
|
|
|
|
float attack = gui_adsr.attack;
|
|
|
|
|
char attack_slider_label[32];
|
|
|
|
|
snprintf(attack_slider_label, 7, "%.1f s", attack);
|
|
|
|
|
attack =
|
|
|
|
|
GuiSlider(el_rect, attack_slider_label, "", attack, 0.0f, 2.0f);
|
|
|
|
|
gui_adsr.attack = attack;
|
|
|
|
|
el_rect.y += el_rect.height + el_spacing;
|
|
|
|
|
// Attack slider
|
|
|
|
|
float attack = gui_adsr.attack;
|
|
|
|
|
char attack_slider_label[32];
|
|
|
|
|
snprintf(attack_slider_label, 7, "%.1f s", attack);
|
|
|
|
|
attack = GuiSlider(el_rect, attack_slider_label, "", attack, 0.0f, 2.0f);
|
|
|
|
|
gui_adsr.attack = attack;
|
|
|
|
|
el_rect.y += el_rect.height + el_spacing;
|
|
|
|
|
|
|
|
|
|
//Decay slider
|
|
|
|
|
float decay = gui_adsr.decay;
|
|
|
|
|
char decay_slider_label[32];
|
|
|
|
|
snprintf(decay_slider_label, 7, "%.1f s", decay);
|
|
|
|
|
decay =
|
|
|
|
|
GuiSlider(el_rect, decay_slider_label, "", decay, 0.0f, 1.0f);
|
|
|
|
|
gui_adsr.decay = decay;
|
|
|
|
|
el_rect.y += el_rect.height + el_spacing;
|
|
|
|
|
// Decay slider
|
|
|
|
|
float decay = gui_adsr.decay;
|
|
|
|
|
char decay_slider_label[32];
|
|
|
|
|
snprintf(decay_slider_label, 7, "%.1f s", decay);
|
|
|
|
|
decay = GuiSlider(el_rect, decay_slider_label, "", decay, 0.0f, 1.0f);
|
|
|
|
|
gui_adsr.decay = decay;
|
|
|
|
|
el_rect.y += el_rect.height + el_spacing;
|
|
|
|
|
|
|
|
|
|
//Sustain slider
|
|
|
|
|
float sustain = gui_adsr.sustain;
|
|
|
|
|
char sustain_slider_label[32];
|
|
|
|
|
snprintf(sustain_slider_label, 7, "%.1f u", sustain);
|
|
|
|
|
sustain =
|
|
|
|
|
GuiSlider(el_rect, sustain_slider_label, "", sustain, 0.0f, 1.0f);
|
|
|
|
|
gui_adsr.sustain = sustain;
|
|
|
|
|
el_rect.y += el_rect.height + el_spacing;
|
|
|
|
|
// Sustain slider
|
|
|
|
|
float sustain = gui_adsr.sustain;
|
|
|
|
|
char sustain_slider_label[32];
|
|
|
|
|
snprintf(sustain_slider_label, 7, "%.1f u", sustain);
|
|
|
|
|
sustain = GuiSlider(el_rect, sustain_slider_label, "", sustain, 0.0f, 1.0f);
|
|
|
|
|
gui_adsr.sustain = sustain;
|
|
|
|
|
el_rect.y += el_rect.height + el_spacing;
|
|
|
|
|
|
|
|
|
|
// Release slider
|
|
|
|
|
float release = gui_adsr.release;
|
|
|
|
|
char release_slider_label[32];
|
|
|
|
|
snprintf(release_slider_label, 7, "%.1f s", release);
|
|
|
|
|
release = GuiSlider(el_rect, release_slider_label, "", release, 0.0f, 5.0f);
|
|
|
|
|
gui_adsr.release = release;
|
|
|
|
|
el_rect.y += el_rect.height + el_spacing;
|
|
|
|
|
|
|
|
|
|
//Release slider
|
|
|
|
|
float release = gui_adsr.release;
|
|
|
|
|
char release_slider_label[32];
|
|
|
|
|
snprintf(release_slider_label, 7, "%.1f s", release);
|
|
|
|
|
release =
|
|
|
|
|
GuiSlider(el_rect, release_slider_label, "", release, 0.0f, 5.0f);
|
|
|
|
|
gui_adsr.release = release;
|
|
|
|
|
el_rect.y += el_rect.height + el_spacing;
|
|
|
|
|
|
|
|
|
|
//apply values to real one
|
|
|
|
|
adsr->SetParameters(gui_adsr.attack, gui_adsr.decay, gui_adsr.sustain, gui_adsr.release);
|
|
|
|
|
// apply values to real one
|
|
|
|
|
adsr->SetParameters(gui_adsr.attack, gui_adsr.decay, gui_adsr.sustain,
|
|
|
|
|
gui_adsr.release);
|
|
|
|
|
}
|
|
|
|
|
|