1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
#include "macro-condition-screenshot.hpp"
#include "layout-helpers.hpp"
#include <obs-frontend-api.h>
#include <thread>
#if LIBOBS_API_VER >= MAKE_SEMANTIC_VERSION(29, 0, 0)
namespace advss {
const std::string MacroConditionScreenshot::id = "screenshot";
bool MacroConditionScreenshot::_registered = MacroConditionFactory::Register(
MacroConditionScreenshot::id,
{MacroConditionScreenshot::Create, MacroConditionScreenshotEdit::Create,
"AdvSceneSwitcher.condition.screenshot"});
static std::chrono::high_resolution_clock::time_point screenshotTakenTime{};
static bool setupScreenshotTakenEventHandler();
static bool setupDone = setupScreenshotTakenEventHandler();
static bool setupScreenshotTakenEventHandler()
{
static auto handleScreenshotEvent = [](enum obs_frontend_event event,
void *) {
switch (event) {
case OBS_FRONTEND_EVENT_SCREENSHOT_TAKEN:
screenshotTakenTime =
std::chrono::high_resolution_clock::now();
break;
default:
break;
};
};
obs_frontend_add_event_callback(handleScreenshotEvent, nullptr);
return true;
}
bool MacroConditionScreenshot::CheckCondition()
{
if (!_screenshotTimeInitialized) {
_screenshotTime = screenshotTakenTime;
_screenshotTimeInitialized = true;
return false;
}
auto lastScreenshotPath = obs_frontend_get_last_screenshot();
SetTempVarValue("lastScreenshotPath", lastScreenshotPath);
bfree(lastScreenshotPath);
bool newSaveOccurred = _screenshotTime != screenshotTakenTime;
_screenshotTime = screenshotTakenTime;
return newSaveOccurred;
}
bool MacroConditionScreenshot::Save(obs_data_t *obj) const
{
MacroCondition::Save(obj);
return true;
}
bool MacroConditionScreenshot::Load(obs_data_t *obj)
{
MacroCondition::Load(obj);
return true;
}
void MacroConditionScreenshot::SetupTempVars()
{
MacroCondition::SetupTempVars();
AddTempvar(
"lastScreenshotPath",
obs_module_text(
"AdvSceneSwitcher.tempVar.screenshot.lastScreenshotPath"),
obs_module_text(
"AdvSceneSwitcher.tempVar.screenshot.lastScreenshotPath.description"));
}
MacroConditionScreenshotEdit::MacroConditionScreenshotEdit(
QWidget *parent, std::shared_ptr<MacroConditionScreenshot> entryData)
: QWidget(parent)
{
auto layout = new QHBoxLayout;
PlaceWidgets(
obs_module_text("AdvSceneSwitcher.condition.screenshot.entry"),
layout, {});
setLayout(layout);
_entryData = entryData;
}
} // namespace advss
#endif
|