From 61f8c666fea0ccd6c2637be4d1bd6aa875b65926 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 4 May 2025 23:23:36 +0200 Subject: Separate audio into output and input --- src/gui/SettingsPage.cpp | 57 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 17 deletions(-) (limited to 'src/gui/SettingsPage.cpp') diff --git a/src/gui/SettingsPage.cpp b/src/gui/SettingsPage.cpp index b457ab4..38e43cc 100644 --- a/src/gui/SettingsPage.cpp +++ b/src/gui/SettingsPage.cpp @@ -196,10 +196,20 @@ namespace gsr { return std::make_unique("Record area", std::move(ll), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)); } - std::unique_ptr SettingsPage::create_audio_device_selection_combobox() { + static bool audio_device_is_output(const std::string &audio_device_id) { + return audio_device_id == "default_output" || ends_with(audio_device_id, ".monitor"); + } + + std::unique_ptr SettingsPage::create_audio_device_selection_combobox(AudioDeviceType device_type) { auto audio_device_box = std::make_unique(&get_theme().body_font); for(const auto &audio_device : audio_devices) { - audio_device_box->add_item(audio_device.description, audio_device.name); + const bool device_is_output = audio_device_is_output(audio_device.name); + if((device_type == AudioDeviceType::OUTPUT && device_is_output) || (device_type == AudioDeviceType::INPUT && !device_is_output)) { + std::string description = audio_device.description; + if(starts_with(description, "Monitor of ")) + description.erase(0, 11); + audio_device_box->add_item(description, audio_device.name); + } } return audio_device_box; } @@ -211,7 +221,7 @@ namespace gsr { List *audio_track_items_list = dynamic_cast(audio_track_subsection->get_inner_widget()); List *buttons_list = dynamic_cast(audio_track_items_list->get_child_widget_by_index(1)); - Button *add_application_audio_button = dynamic_cast(buttons_list->get_child_widget_by_index(1)); + Button *add_application_audio_button = dynamic_cast(buttons_list->get_child_widget_by_index(2)); add_application_audio_button->set_visible(visible); CheckBox *invert_app_audio_checkbox = dynamic_cast(audio_track_items_list->get_child_widget_by_index(3)); @@ -236,11 +246,11 @@ namespace gsr { return remove_audio_track_button; } - std::unique_ptr SettingsPage::create_audio_device(List *audio_input_list_ptr) { + std::unique_ptr SettingsPage::create_audio_device(AudioDeviceType device_type, List *audio_input_list_ptr) { auto audio_device_list = std::make_unique(List::Orientation::HORIZONTAL, List::Alignment::CENTER); audio_device_list->userdata = (void*)(uintptr_t)AudioTrackType::DEVICE; - audio_device_list->add_widget(std::make_unique