From 6bbaa0c862cdd47891fc6f549f2afb3fc37faac0 Mon Sep 17 00:00:00 2001 From: Christian Colglazier Date: Fri, 21 Jan 2022 21:32:56 -0500 Subject: [PATCH] Split creates two of the same droplet --- src/droplets/ad_droplet.cpp | 1 - src/main.cpp | 21 ++++++++++++++------- src/main.h | 3 ++- src/menu.cpp | 9 +++++++++ src/menu.h | 13 +++++++++++++ 5 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/droplets/ad_droplet.cpp b/src/droplets/ad_droplet.cpp index 4ef9d52..9b5d6f9 100644 --- a/src/droplets/ad_droplet.cpp +++ b/src/droplets/ad_droplet.cpp @@ -20,7 +20,6 @@ void AD::Process(DacHandle::Channel chn, } if (*state == DropletState::kFull) { - //DrawSolidRect(patch, 30,30,40,40, true); attack = attack_param.Process(); decay = decay_param.Process(); curve = curve_param.Process(); diff --git a/src/main.cpp b/src/main.cpp index 5530388..cad7b0f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,7 +6,8 @@ int main(void) { patch.Init(); sample_rate = patch.AudioSampleRate(); selected_menu = left_menu; - droplet_left = GetDroplet(DropletState::kFull); + droplet_left = GetDroplet(DropletState::kFull, + selected_menu->GetState()); patch.StartAdc(); patch.StartAudio(AudioThrough); @@ -27,6 +28,7 @@ void ProcessControls() { // Handle menu selection if (patch.encoder.RisingEdge()) { selected_menu->SetInMenu(false); + selected_menu->Select(); // Split selected if(selected_menu->GetState() == MenuState::kSplit) { manager->ToggleSplit(); @@ -35,7 +37,8 @@ void ProcessControls() { // Enable split if (manager->GetSplitMode()) { droplet_left->UpdateState(DropletState::kLeft); - droplet_right = GetDroplet(DropletState::kRight); + droplet_right = GetDroplet(DropletState::kRight, + left_menu->GetBufferState()); } // Disable split else { @@ -56,14 +59,17 @@ void ProcessControls() { if(manager->GetSplitMode()) { if (selected_menu == left_menu) { delete droplet_left; - droplet_left = GetDroplet(DropletState::kLeft); + droplet_left = GetDroplet(DropletState::kLeft, + selected_menu->GetState()); } else { delete droplet_right; - droplet_right = GetDroplet(DropletState::kRight); + droplet_right = GetDroplet(DropletState::kRight, + selected_menu->GetState()); } } else { delete droplet_left; - droplet_left = GetDroplet(DropletState::kFull); + droplet_left = GetDroplet(DropletState::kFull, + selected_menu->GetState()); } } } @@ -112,8 +118,9 @@ static void AudioThrough(AudioHandle::InputBuffer in, } } -Droplet* GetDroplet(DropletState state) { - switch(selected_menu->GetState()) { +Droplet* GetDroplet(DropletState state, + MenuState menu) { + switch(menu) { default: case MenuState::kAD: return new ADDroplet(&patch, diff --git a/src/main.h b/src/main.h index 52f90aa..180ab8a 100644 --- a/src/main.h +++ b/src/main.h @@ -59,8 +59,9 @@ static void AudioThrough(AudioHandle::InputBuffer in, * Initializes a new audio processing droplet based on menu state. * * @param state new droplet state + * @param menu menu state * @return droplet */ -Droplet* GetDroplet(DropletState state); +Droplet* GetDroplet(DropletState state, MenuState menu); #endif // DROPLETS_MAIN_H_ diff --git a/src/menu.cpp b/src/menu.cpp index 569825c..068ee34 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -109,6 +109,10 @@ MenuState Menu::GetState() { return highlighted->GetState(); } +MenuState Menu::GetBufferState() { + return buffer->GetState(); +} + void Menu::UpdateMenuState() { if (manager->GetSplitMode()) { head->SetStateVisibility(MenuState::kChange, true); @@ -118,3 +122,8 @@ void Menu::UpdateMenuState() { head->SetStateTitle(MenuState::kSplit, "Split"); } } + +void Menu::Select() { + buffer = selected; + selected = highlighted; +} diff --git a/src/menu.h b/src/menu.h index 57bfc0a..e857b9d 100644 --- a/src/menu.h +++ b/src/menu.h @@ -85,10 +85,23 @@ class Menu { */ MenuState GetState(); + /* + * Returns the previously selected menu item. + * + * @return menu state + */ + MenuState GetBufferState(); + /* * Updates the menu upon a split or a merge. */ void UpdateMenuState(); + + + /* + * Select the currently highlighted menu item. + */ + void Select(); }; #endif // DROPLETS_MENU_H_