From 20bbc9794daf088ca6ea880a7c42c9c9424448a0 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 27 Apr 2021 21:09:41 -0700 Subject: [PATCH] UI: Add Undo/Redo for volume change/mute via main fader --- UI/volume-control.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/UI/volume-control.cpp b/UI/volume-control.cpp index d578094e2..56e5631d1 100644 --- a/UI/volume-control.cpp +++ b/UI/volume-control.cpp @@ -1,3 +1,4 @@ +#include "window-basic-main.hpp" #include "volume-control.hpp" #include "qt-wrappers.hpp" #include "obs-app.hpp" @@ -63,13 +64,46 @@ void VolControl::VolumeMuted(bool muted) void VolControl::SetMuted(bool checked) { + bool prev = obs_source_muted(source); obs_source_set_muted(source, checked); + + auto undo_redo = [](const std::string &name, bool val) { + obs_source_t *source = obs_get_source_by_name(name.c_str()); + obs_source_set_muted(source, val); + obs_source_release(source); + }; + + QString text = + QTStr(checked ? "Undo.Volume.Mute" : "Undo.Volume.Unmute"); + + const char *name = obs_source_get_name(source); + OBSBasic::Get()->undo_s.add_action( + text.arg(name), + std::bind(undo_redo, std::placeholders::_1, prev), + std::bind(undo_redo, std::placeholders::_1, checked), name, + name); } void VolControl::SliderChanged(int vol) { + float prev = obs_source_get_volume(source); + obs_fader_set_deflection(obs_fader, float(vol) / FADER_PRECISION); updateText(); + + auto undo_redo = [](const std::string &name, float val) { + obs_source_t *source = obs_get_source_by_name(name.c_str()); + obs_source_set_volume(source, val); + obs_source_release(source); + }; + + float val = obs_source_get_volume(source); + const char *name = obs_source_get_name(source); + OBSBasic::Get()->undo_s.add_action( + QTStr("Undo.Volume.Change").arg(name), + std::bind(undo_redo, std::placeholders::_1, prev), + std::bind(undo_redo, std::placeholders::_1, val), name, name, + true); } void VolControl::updateText()