diff options
author | dec05eba <dec05eba@protonmail.com> | 2025-02-22 13:31:51 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2025-02-22 13:31:51 +0100 |
commit | 189736c1a96a1ad0e571ad69f01039e96455011a (patch) | |
tree | 22e1a78f698209e2ce0ef462a5d281b5b3030897 /src/gui/GlobalSettingsPage.cpp | |
parent | 8003c209fea16cd164817306cb33d46ac61a44f0 (diff) |
Add option to take a screenshot (default hotkey: alt+f1)
Diffstat (limited to 'src/gui/GlobalSettingsPage.cpp')
-rw-r--r-- | src/gui/GlobalSettingsPage.cpp | 126 |
1 files changed, 55 insertions, 71 deletions
diff --git a/src/gui/GlobalSettingsPage.cpp b/src/gui/GlobalSettingsPage.cpp index d00ad49..a65cf8f 100644 --- a/src/gui/GlobalSettingsPage.cpp +++ b/src/gui/GlobalSettingsPage.cpp @@ -67,46 +67,6 @@ namespace gsr { return 0; } - static std::vector<mgl::Keyboard::Key> hotkey_modifiers_to_mgl_keys(uint32_t modifiers) { - std::vector<mgl::Keyboard::Key> result; - if(modifiers & HOTKEY_MOD_LCTRL) - result.push_back(mgl::Keyboard::LControl); - if(modifiers & HOTKEY_MOD_LSHIFT) - result.push_back(mgl::Keyboard::LShift); - if(modifiers & HOTKEY_MOD_LALT) - result.push_back(mgl::Keyboard::LAlt); - if(modifiers & HOTKEY_MOD_LSUPER) - result.push_back(mgl::Keyboard::LSystem); - if(modifiers & HOTKEY_MOD_RCTRL) - result.push_back(mgl::Keyboard::RControl); - if(modifiers & HOTKEY_MOD_RSHIFT) - result.push_back(mgl::Keyboard::RShift); - if(modifiers & HOTKEY_MOD_RALT) - result.push_back(mgl::Keyboard::RAlt); - if(modifiers & HOTKEY_MOD_RSUPER) - result.push_back(mgl::Keyboard::RSystem); - return result; - } - - static std::string config_hotkey_to_string(ConfigHotkey config_hotkey) { - std::string result; - - const std::vector<mgl::Keyboard::Key> modifier_keys = hotkey_modifiers_to_mgl_keys(config_hotkey.modifiers); - for(const mgl::Keyboard::Key modifier_key : modifier_keys) { - if(!result.empty()) - result += " + "; - result += mgl::Keyboard::key_to_string(modifier_key); - } - - if(config_hotkey.key != 0) { - if(!result.empty()) - result += " + "; - result += mgl::Keyboard::key_to_string((mgl::Keyboard::Key)config_hotkey.key); - } - - return result; - } - GlobalSettingsPage::GlobalSettingsPage(Overlay *overlay, const GsrInfo *gsr_info, Config &config, PageStack *page_stack) : StaticPage(mgl::vec2f(get_theme().window_width, get_theme().window_height).floor()), overlay(overlay), @@ -114,7 +74,7 @@ namespace gsr { gsr_info(gsr_info), page_stack(page_stack) { - auto content_page = std::make_unique<GsrPage>(); + auto content_page = std::make_unique<GsrPage>("Global", "Settings"); content_page->add_button("Back", "back", get_color_theme().page_bg_color); content_page->on_click = [page_stack](const std::string &id) { if(id == "back") @@ -322,30 +282,41 @@ namespace gsr { return list; } + std::unique_ptr<List> GlobalSettingsPage::create_screenshot_hotkey_options() { + auto list = std::make_unique<List>(List::Orientation::HORIZONTAL, List::Alignment::CENTER); + + list->add_widget(std::make_unique<Label>(&get_theme().body_font, "Take a screenshot:", get_color_theme().text_color)); + auto take_screenshot_button = std::make_unique<Button>(&get_theme().body_font, "", mgl::vec2f(0.0f, 0.0f), mgl::Color(0, 0, 0, 120)); + take_screenshot_button_ptr = take_screenshot_button.get(); + list->add_widget(std::move(take_screenshot_button)); + + take_screenshot_button_ptr->on_click = [this] { + configure_hotkey_start(ConfigureHotkeyType::TAKE_SCREENSHOT); + }; + + return list; + } + std::unique_ptr<List> GlobalSettingsPage::create_hotkey_control_buttons() { auto list = std::make_unique<List>(List::Orientation::HORIZONTAL, List::Alignment::CENTER); - // auto clear_hotkeys_button = std::make_unique<Button>(&get_theme().body_font, "Clear hotkeys", mgl::vec2f(0.0f, 0.0f), mgl::Color(0, 0, 0, 120)); - // clear_hotkeys_button->on_click = [this] { - // config.streaming_config.start_stop_hotkey = {mgl::Keyboard::Unknown, 0}; - // config.record_config.start_stop_hotkey = {mgl::Keyboard::Unknown, 0}; - // config.record_config.pause_unpause_hotkey = {mgl::Keyboard::Unknown, 0}; - // config.replay_config.start_stop_hotkey = {mgl::Keyboard::Unknown, 0}; - // config.replay_config.save_hotkey = {mgl::Keyboard::Unknown, 0}; - // config.main_config.show_hide_hotkey = {mgl::Keyboard::Unknown, 0}; - // load_hotkeys(); - // overlay->rebind_all_keyboard_hotkeys(); - // }; - // list->add_widget(std::move(clear_hotkeys_button)); + auto clear_hotkeys_button = std::make_unique<Button>(&get_theme().body_font, "Clear hotkeys", mgl::vec2f(0.0f, 0.0f), mgl::Color(0, 0, 0, 120)); + clear_hotkeys_button->on_click = [this] { + config.streaming_config.start_stop_hotkey = {mgl::Keyboard::Unknown, 0}; + config.record_config.start_stop_hotkey = {mgl::Keyboard::Unknown, 0}; + config.record_config.pause_unpause_hotkey = {mgl::Keyboard::Unknown, 0}; + config.replay_config.start_stop_hotkey = {mgl::Keyboard::Unknown, 0}; + config.replay_config.save_hotkey = {mgl::Keyboard::Unknown, 0}; + config.screenshot_config.take_screenshot_hotkey = {mgl::Keyboard::Unknown, 0}; + config.main_config.show_hide_hotkey = {mgl::Keyboard::Unknown, 0}; + load_hotkeys(); + overlay->rebind_all_keyboard_hotkeys(); + }; + list->add_widget(std::move(clear_hotkeys_button)); auto reset_hotkeys_button = std::make_unique<Button>(&get_theme().body_font, "Reset hotkeys to default", mgl::vec2f(0.0f, 0.0f), mgl::Color(0, 0, 0, 120)); reset_hotkeys_button->on_click = [this] { - config.streaming_config.start_stop_hotkey = {mgl::Keyboard::F8, HOTKEY_MOD_LALT}; - config.record_config.start_stop_hotkey = {mgl::Keyboard::F9, HOTKEY_MOD_LALT}; - config.record_config.pause_unpause_hotkey = {mgl::Keyboard::F7, HOTKEY_MOD_LALT}; - config.replay_config.start_stop_hotkey = {mgl::Keyboard::F10, HOTKEY_MOD_LALT | HOTKEY_MOD_LSHIFT}; - config.replay_config.save_hotkey = {mgl::Keyboard::F10, HOTKEY_MOD_LALT}; - config.main_config.show_hide_hotkey = {mgl::Keyboard::Z, HOTKEY_MOD_LALT}; + config.set_hotkeys_to_default(); load_hotkeys(); overlay->rebind_all_keyboard_hotkeys(); }; @@ -368,6 +339,7 @@ namespace gsr { list_ptr->add_widget(create_replay_hotkey_options()); list_ptr->add_widget(create_record_hotkey_options()); list_ptr->add_widget(create_stream_hotkey_options()); + list_ptr->add_widget(create_screenshot_hotkey_options()); list_ptr->add_widget(std::make_unique<Label>(&get_theme().body_font, "Double-click the controller share button to save a replay", get_color_theme().text_color)); list_ptr->add_widget(create_hotkey_control_buttons()); return subsection; @@ -440,6 +412,8 @@ namespace gsr { void GlobalSettingsPage::on_navigate_away_from_page() { save(); + if(on_page_closed) + on_page_closed(); } void GlobalSettingsPage::load() { @@ -460,15 +434,17 @@ namespace gsr { } void GlobalSettingsPage::load_hotkeys() { - turn_replay_on_off_button_ptr->set_text(config_hotkey_to_string(config.replay_config.start_stop_hotkey)); - save_replay_button_ptr->set_text(config_hotkey_to_string(config.replay_config.save_hotkey)); + turn_replay_on_off_button_ptr->set_text(config.replay_config.start_stop_hotkey.to_string()); + save_replay_button_ptr->set_text(config.replay_config.save_hotkey.to_string()); - start_stop_recording_button_ptr->set_text(config_hotkey_to_string(config.record_config.start_stop_hotkey)); - pause_unpause_recording_button_ptr->set_text(config_hotkey_to_string(config.record_config.pause_unpause_hotkey)); + start_stop_recording_button_ptr->set_text(config.record_config.start_stop_hotkey.to_string()); + pause_unpause_recording_button_ptr->set_text(config.record_config.pause_unpause_hotkey.to_string()); - start_stop_streaming_button_ptr->set_text(config_hotkey_to_string(config.streaming_config.start_stop_hotkey)); + start_stop_streaming_button_ptr->set_text(config.streaming_config.start_stop_hotkey.to_string()); - show_hide_button_ptr->set_text(config_hotkey_to_string(config.main_config.show_hide_hotkey)); + take_screenshot_button_ptr->set_text(config.screenshot_config.take_screenshot_hotkey.to_string()); + + show_hide_button_ptr->set_text(config.main_config.show_hide_hotkey.to_string()); } void GlobalSettingsPage::save() { @@ -496,10 +472,10 @@ namespace gsr { if(mgl::Keyboard::key_is_modifier(event.key.code)) { configure_config_hotkey.modifiers |= mgl_modifier_to_hotkey_modifier(event.key.code); - configure_hotkey_button->set_text(config_hotkey_to_string(configure_config_hotkey)); + configure_hotkey_button->set_text(configure_config_hotkey.to_string()); } else if(configure_config_hotkey.modifiers != 0) { configure_config_hotkey.key = event.key.code; - configure_hotkey_button->set_text(config_hotkey_to_string(configure_config_hotkey)); + configure_hotkey_button->set_text(configure_config_hotkey.to_string()); configure_hotkey_stop_and_save(); } @@ -512,7 +488,7 @@ namespace gsr { if(mgl::Keyboard::key_is_modifier(event.key.code)) { configure_config_hotkey.modifiers &= ~mgl_modifier_to_hotkey_modifier(event.key.code); - configure_hotkey_button->set_text(config_hotkey_to_string(configure_config_hotkey)); + configure_hotkey_button->set_text(configure_config_hotkey.to_string()); } return false; @@ -535,6 +511,8 @@ namespace gsr { return pause_unpause_recording_button_ptr; case ConfigureHotkeyType::STREAM_START_STOP: return start_stop_streaming_button_ptr; + case ConfigureHotkeyType::TAKE_SCREENSHOT: + return take_screenshot_button_ptr; case ConfigureHotkeyType::SHOW_HIDE: return show_hide_button_ptr; } @@ -555,6 +533,8 @@ namespace gsr { return &config.record_config.pause_unpause_hotkey; case ConfigureHotkeyType::STREAM_START_STOP: return &config.streaming_config.start_stop_hotkey; + case ConfigureHotkeyType::TAKE_SCREENSHOT: + return &config.screenshot_config.take_screenshot_hotkey; case ConfigureHotkeyType::SHOW_HIDE: return &config.main_config.show_hide_hotkey; } @@ -568,6 +548,7 @@ namespace gsr { &config.record_config.start_stop_hotkey, &config.record_config.pause_unpause_hotkey, &config.streaming_config.start_stop_hotkey, + &config.screenshot_config.take_screenshot_hotkey, &config.main_config.show_hide_hotkey }; for(ConfigHotkey *config_hotkey : config_hotkeys) { @@ -604,6 +585,9 @@ namespace gsr { case ConfigureHotkeyType::STREAM_START_STOP: hotkey_configure_action_name = "Start/stop streaming"; break; + case ConfigureHotkeyType::TAKE_SCREENSHOT: + hotkey_configure_action_name = "Take a screenshot"; + break; case ConfigureHotkeyType::SHOW_HIDE: hotkey_configure_action_name = "Show/hide UI"; break; @@ -614,7 +598,7 @@ namespace gsr { Button *config_hotkey_button = configure_hotkey_get_button_by_active_type(); ConfigHotkey *config_hotkey = configure_hotkey_get_config_by_active_type(); if(config_hotkey_button && config_hotkey) - config_hotkey_button->set_text(config_hotkey_to_string(*config_hotkey)); + config_hotkey_button->set_text(config_hotkey->to_string()); configure_config_hotkey = {0, 0}; configure_hotkey_type = ConfigureHotkeyType::NONE; @@ -634,9 +618,9 @@ namespace gsr { }); if(hotkey_used_by_another_action) { - const std::string error_msg = "The hotkey \"" + config_hotkey_to_string(configure_config_hotkey) + " is already used for something else"; + const std::string error_msg = "The hotkey \"" + configure_config_hotkey.to_string() + " is already used for something else"; overlay->show_notification(error_msg.c_str(), 3.0, mgl::Color(255, 0, 0, 255), mgl::Color(255, 0, 0, 255), NotificationType::NONE); - config_hotkey_button->set_text(config_hotkey_to_string(*config_hotkey)); + config_hotkey_button->set_text(config_hotkey->to_string()); configure_config_hotkey = {0, 0}; return; } |