mirror of
https://repo.dec05eba.com/gpu-screen-recorder-ui
synced 2026-05-04 22:10:44 +09:00
Add option to take a screenshot (default hotkey: alt+f1)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user