UI: Add Start/Stop Recording/Streaming hotkeys

This commit is contained in:
Palana 2014-11-01 21:53:25 +01:00
parent 6192b34ab3
commit 37069d372f
3 changed files with 81 additions and 0 deletions

View file

@ -362,6 +362,10 @@ Basic.Settings.Hotkeys="Hotkeys"
Basic.Settings.Hotkeys.Pair="Key combinations shared with '%1' act as toggles"
# basic mode hotkeys
Basic.Hotkeys.StartStreaming="Start Streaming"
Basic.Hotkeys.StopStreaming="Stop Streaming"
Basic.Hotkeys.StartRecording="Start Recording"
Basic.Hotkeys.StopRecording="Stop Recording"
Basic.Hotkeys.SelectScene="Switch to scene"
# hotkeys that may lack translation on certain operating systems

View file

@ -662,6 +662,7 @@ void OBSBasic::OBSInit()
obs_load_all_modules();
ResetOutputs();
CreateHotkeys();
if (!InitService())
throw "Failed to initialize service";
@ -750,6 +751,77 @@ void OBSBasic::HotkeyTriggered(void *data, obs_hotkey_id id, bool pressed)
Q_ARG(obs_hotkey_id, id), Q_ARG(bool, pressed));
}
void OBSBasic::CreateHotkeys()
{
auto LoadHotkeyData = [&](const char *name) -> OBSData
{
const char *info = config_get_string(basicConfig,
"Hotkeys", name);
if (!info)
return {};
obs_data_t *data = obs_data_create_from_json(info);
if (!data)
return {};
OBSData res = data;
obs_data_release(data);
return res;
};
auto LoadHotkeyPair = [&](obs_hotkey_pair_id id, const char *name0,
const char *name1)
{
obs_data_array_t *array0 =
obs_data_get_array(LoadHotkeyData(name0), "bindings");
obs_data_array_t *array1 =
obs_data_get_array(LoadHotkeyData(name1), "bindings");
obs_hotkey_pair_load(id, array0, array1);
obs_data_array_release(array0);
obs_data_array_release(array1);
};
#define MAKE_CALLBACK(pred, method) \
[](void *data, obs_hotkey_pair_id, obs_hotkey_t*, bool pressed) \
{ \
OBSBasic &basic = *static_cast<OBSBasic*>(data); \
if (pred && pressed) { \
method(); \
return true; \
} \
return false; \
}
streamingHotkeys = obs_hotkey_pair_register_frontend(
"OBSBasic.StartStreaming",
Str("Basic.Hotkeys.StartStreaming"),
"OBSBasic.StopStreaming",
Str("Basic.Hotkeys.StopStreaming"),
MAKE_CALLBACK(!basic.outputHandler->StreamingActive(),
basic.StartStreaming),
MAKE_CALLBACK(basic.outputHandler->StreamingActive(),
basic.StopStreaming),
this, this);
LoadHotkeyPair(streamingHotkeys,
"OBSBasic.StartStreaming", "OBSBasic.StopStreaming");
recordingHotkeys = obs_hotkey_pair_register_frontend(
"OBSBasic.StartRecording",
Str("Basic.Hotkeys.StartRecording"),
"OBSBasic.StopRecording",
Str("Basic.Hotkeys.StopRecording"),
MAKE_CALLBACK(!basic.outputHandler->RecordingActive(),
basic.StartRecording),
MAKE_CALLBACK(basic.outputHandler->RecordingActive(),
basic.StopRecording),
this, this);
LoadHotkeyPair(recordingHotkeys,
"OBSBasic.StartRecording", "OBSBasic.StopRecording");
#undef MAKE_CALLBACK
}
OBSBasic::~OBSBasic()
{
bool previewEnabled = obs_preview_enabled();
@ -764,6 +836,8 @@ OBSBasic::~OBSBasic()
os_cpu_usage_info_destroy(cpuUsageInfo);
obs_hotkey_set_callback_routing_func(nullptr, nullptr);
obs_hotkey_pair_unregister(streamingHotkeys);
obs_hotkey_pair_unregister(recordingHotkeys);
service = nullptr;
outputHandler.reset();

View file

@ -113,6 +113,7 @@ private:
void Load(const char *file);
void InitHotkeys();
void CreateHotkeys();
bool InitService();
@ -151,6 +152,8 @@ private:
void Nudge(int dist, MoveDir dir);
void OpenProjector(obs_source_t *source, int monitor);
obs_hotkey_pair_id streamingHotkeys, recordingHotkeys;
public slots:
void StartStreaming();
void StopStreaming();