mirror of
https://repo.dec05eba.com/gpu-screen-recorder-ui
synced 2026-04-24 10:39:51 +09:00
Only show app audio option if using pipewire
This commit is contained in:
@@ -40,6 +40,7 @@ namespace gsr {
|
|||||||
|
|
||||||
struct SystemInfo {
|
struct SystemInfo {
|
||||||
DisplayServer display_server = DisplayServer::UNKNOWN;
|
DisplayServer display_server = DisplayServer::UNKNOWN;
|
||||||
|
bool supports_app_audio = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class GpuVendor {
|
enum class GpuVendor {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ namespace gsr {
|
|||||||
class PageStack;
|
class PageStack;
|
||||||
class ScrollablePage;
|
class ScrollablePage;
|
||||||
class Label;
|
class Label;
|
||||||
|
class LineSeparator;
|
||||||
|
|
||||||
class SettingsPage : public StaticPage {
|
class SettingsPage : public StaticPage {
|
||||||
public:
|
public:
|
||||||
@@ -146,7 +147,9 @@ namespace gsr {
|
|||||||
List *video_bitrate_list_ptr = nullptr;
|
List *video_bitrate_list_ptr = nullptr;
|
||||||
List *audio_devices_list_ptr = nullptr;
|
List *audio_devices_list_ptr = nullptr;
|
||||||
List *audio_devices_section_list_ptr = nullptr;
|
List *audio_devices_section_list_ptr = nullptr;
|
||||||
|
Label *audio_devices_label_ptr = nullptr;
|
||||||
List *application_audio_section_list_ptr = nullptr;
|
List *application_audio_section_list_ptr = nullptr;
|
||||||
|
LineSeparator *audio_type_line_sep_ptr = nullptr;
|
||||||
CheckBox *merge_audio_tracks_checkbox_ptr = nullptr;
|
CheckBox *merge_audio_tracks_checkbox_ptr = nullptr;
|
||||||
RadioButton *audio_type_radio_button_ptr = nullptr;
|
RadioButton *audio_type_radio_button_ptr = nullptr;
|
||||||
List *application_audio_list_ptr = nullptr;
|
List *application_audio_list_ptr = nullptr;
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ namespace gsr {
|
|||||||
gsr_info->system_info.display_server = DisplayServer::X11;
|
gsr_info->system_info.display_server = DisplayServer::X11;
|
||||||
else if(key_value->value == "wayland")
|
else if(key_value->value == "wayland")
|
||||||
gsr_info->system_info.display_server = DisplayServer::WAYLAND;
|
gsr_info->system_info.display_server = DisplayServer::WAYLAND;
|
||||||
|
} else if(key_value->key == "supports_app_audio") {
|
||||||
|
gsr_info->system_info.supports_app_audio = key_value->value == "yes";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ namespace gsr {
|
|||||||
const mgl::vec2f parent_inner_size = parent_widget ? parent_widget->get_inner_size() : mgl::vec2f(0.0f, 0.0f);
|
const mgl::vec2f parent_inner_size = parent_widget ? parent_widget->get_inner_size() : mgl::vec2f(0.0f, 0.0f);
|
||||||
|
|
||||||
const float spacing = floor(spacing_scale * get_theme().window_height);
|
const float spacing = floor(spacing_scale * get_theme().window_height);
|
||||||
|
bool first_visible_widget = true;
|
||||||
switch(orientation) {
|
switch(orientation) {
|
||||||
case Orientation::VERTICAL: {
|
case Orientation::VERTICAL: {
|
||||||
for(size_t i = 0; i < widgets.size(); ++i) {
|
for(size_t i = 0; i < widgets.size(); ++i) {
|
||||||
@@ -52,8 +53,9 @@ namespace gsr {
|
|||||||
if(!widget->visible)
|
if(!widget->visible)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(i > 0)
|
if(!first_visible_widget)
|
||||||
draw_pos.y += spacing;
|
draw_pos.y += spacing;
|
||||||
|
first_visible_widget = false;
|
||||||
|
|
||||||
const auto widget_size = widget->get_size();
|
const auto widget_size = widget->get_size();
|
||||||
// TODO: Do this parent widget alignment for horizontal alignment and for other types of widget alignment
|
// TODO: Do this parent widget alignment for horizontal alignment and for other types of widget alignment
|
||||||
@@ -79,8 +81,9 @@ namespace gsr {
|
|||||||
if(!widget->visible)
|
if(!widget->visible)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(i > 0)
|
if(!first_visible_widget)
|
||||||
draw_pos.x += spacing;
|
draw_pos.x += spacing;
|
||||||
|
first_visible_widget = false;
|
||||||
|
|
||||||
const auto widget_size = widget->get_size();
|
const auto widget_size = widget->get_size();
|
||||||
if(content_alignment == Alignment::CENTER)
|
if(content_alignment == Alignment::CENTER)
|
||||||
@@ -145,6 +148,7 @@ namespace gsr {
|
|||||||
|
|
||||||
mgl::vec2f size;
|
mgl::vec2f size;
|
||||||
const float spacing = floor(spacing_scale * get_theme().window_height);
|
const float spacing = floor(spacing_scale * get_theme().window_height);
|
||||||
|
bool first_visible_widget = true;
|
||||||
switch(orientation) {
|
switch(orientation) {
|
||||||
case Orientation::VERTICAL: {
|
case Orientation::VERTICAL: {
|
||||||
for(size_t i = 0; i < widgets.size(); ++i) {
|
for(size_t i = 0; i < widgets.size(); ++i) {
|
||||||
@@ -152,8 +156,9 @@ namespace gsr {
|
|||||||
if(!widget->visible)
|
if(!widget->visible)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(i > 0)
|
if(!first_visible_widget)
|
||||||
size.y += spacing;
|
size.y += spacing;
|
||||||
|
first_visible_widget = false;
|
||||||
|
|
||||||
const auto widget_size = widget->get_size();
|
const auto widget_size = widget->get_size();
|
||||||
size.x = std::max(size.x, widget_size.x);
|
size.x = std::max(size.x, widget_size.x);
|
||||||
@@ -167,8 +172,9 @@ namespace gsr {
|
|||||||
if(!widget->visible)
|
if(!widget->visible)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(i > 0)
|
if(!first_visible_widget)
|
||||||
size.x += spacing;
|
size.x += spacing;
|
||||||
|
first_visible_widget = false;
|
||||||
|
|
||||||
const auto widget_size = widget->get_size();
|
const auto widget_size = widget->get_size();
|
||||||
size.x += widget_size.x;
|
size.x += widget_size.x;
|
||||||
|
|||||||
@@ -238,7 +238,9 @@ namespace gsr {
|
|||||||
std::unique_ptr<Widget> SettingsPage::create_audio_device_section() {
|
std::unique_ptr<Widget> SettingsPage::create_audio_device_section() {
|
||||||
auto audio_devices_section_list = std::make_unique<List>(List::Orientation::VERTICAL);
|
auto audio_devices_section_list = std::make_unique<List>(List::Orientation::VERTICAL);
|
||||||
audio_devices_section_list_ptr = audio_devices_section_list.get();
|
audio_devices_section_list_ptr = audio_devices_section_list.get();
|
||||||
audio_devices_section_list->add_widget(std::make_unique<Label>(&get_theme().title_font, "Audio devices", get_color_theme().text_color));
|
auto audio_devices_label = std::make_unique<Label>(&get_theme().title_font, "Audio devices", get_color_theme().text_color);
|
||||||
|
audio_devices_label_ptr = audio_devices_label.get();
|
||||||
|
audio_devices_section_list->add_widget(std::move(audio_devices_label));
|
||||||
audio_devices_section_list->add_widget(create_add_audio_device_button());
|
audio_devices_section_list->add_widget(create_add_audio_device_button());
|
||||||
audio_devices_section_list->add_widget(create_audio_device_track_section());
|
audio_devices_section_list->add_widget(create_audio_device_track_section());
|
||||||
return audio_devices_section_list;
|
return audio_devices_section_list;
|
||||||
@@ -321,7 +323,9 @@ namespace gsr {
|
|||||||
auto audio_section = std::make_unique<Subsection>("Audio", std::move(audio_device_section_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f));
|
auto audio_section = std::make_unique<Subsection>("Audio", std::move(audio_device_section_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f));
|
||||||
|
|
||||||
audio_device_section_list_ptr->add_widget(create_audio_type_button());
|
audio_device_section_list_ptr->add_widget(create_audio_type_button());
|
||||||
audio_device_section_list_ptr->add_widget(std::make_unique<LineSeparator>(LineSeparator::Orientation::HORIZONTAL, audio_section->get_inner_size().x));
|
auto audio_type_line_sep = std::make_unique<LineSeparator>(LineSeparator::Orientation::HORIZONTAL, audio_section->get_inner_size().x);
|
||||||
|
audio_type_line_sep_ptr = audio_type_line_sep.get();
|
||||||
|
audio_device_section_list_ptr->add_widget(std::move(audio_type_line_sep));
|
||||||
audio_device_section_list_ptr->add_widget(create_audio_device_section());
|
audio_device_section_list_ptr->add_widget(create_audio_device_section());
|
||||||
audio_device_section_list_ptr->add_widget(create_application_audio_section());
|
audio_device_section_list_ptr->add_widget(create_application_audio_section());
|
||||||
//audio_device_section_list_ptr->add_widget(std::make_unique<LineSeparator>(LineSeparator::Orientation::HORIZONTAL, audio_section->get_inner_size().x));
|
//audio_device_section_list_ptr->add_widget(std::make_unique<LineSeparator>(LineSeparator::Orientation::HORIZONTAL, audio_section->get_inner_size().x));
|
||||||
@@ -572,6 +576,13 @@ namespace gsr {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
audio_type_radio_button_ptr->on_selection_changed("", "audio_devices");
|
audio_type_radio_button_ptr->on_selection_changed("", "audio_devices");
|
||||||
|
|
||||||
|
if(!gsr_info.system_info.supports_app_audio) {
|
||||||
|
audio_type_radio_button_ptr->set_visible(false);
|
||||||
|
audio_type_line_sep_ptr->set_visible(false);
|
||||||
|
audio_devices_label_ptr->set_visible(false);
|
||||||
|
application_audio_section_list_ptr->set_visible(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsPage::add_page_specific_widgets() {
|
void SettingsPage::add_page_specific_widgets() {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace gsr {
|
|||||||
static const float margin_bottom_scale = 0.012f;
|
static const float margin_bottom_scale = 0.012f;
|
||||||
static const float margin_left_scale = 0.015f;
|
static const float margin_left_scale = 0.015f;
|
||||||
static const float margin_right_scale = 0.015f;
|
static const float margin_right_scale = 0.015f;
|
||||||
static const float title_spacing_scale = 0.015f;
|
static const float title_spacing_scale = 0.010f;
|
||||||
|
|
||||||
Subsection::Subsection(const char *title, std::unique_ptr<Widget> inner_widget, mgl::vec2f size) :
|
Subsection::Subsection(const char *title, std::unique_ptr<Widget> inner_widget, mgl::vec2f size) :
|
||||||
label(&get_theme().title_font, title, get_color_theme().text_color),
|
label(&get_theme().title_font, title, get_color_theme().text_color),
|
||||||
|
|||||||
Reference in New Issue
Block a user