mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-13 12:50:37 -05:00
Add screenshot condition
Some checks are pending
debian-build / build (push) Waiting to run
Check locale / ubuntu64 (push) Waiting to run
Push to master / Check Formatting 🔍 (push) Waiting to run
Push to master / Build Project 🧱 (push) Waiting to run
Push to master / Create Release 🛫 (push) Blocked by required conditions
Some checks are pending
debian-build / build (push) Waiting to run
Check locale / ubuntu64 (push) Waiting to run
Push to master / Check Formatting 🔍 (push) Waiting to run
Push to master / Build Project 🧱 (push) Waiting to run
Push to master / Create Release 🛫 (push) Blocked by required conditions
This commit is contained in:
@@ -770,6 +770,9 @@ AdvSceneSwitcher.condition.streamDeck.startListen="Start listening"
|
||||
AdvSceneSwitcher.condition.streamDeck.stopListen="Stop listening"
|
||||
AdvSceneSwitcher.condition.streamDeck.pluginDownload="<html><head/><body><p>The Stream Deck plugin can be found <a href=\"https://github.com/WarmUpTill/advanced-scene-switcher-streamdeck-plugin/releases\"><span style=\" text-decoration: underline; color:#268bd2;\">here on GitHub</span></a>.</p></body></html>"
|
||||
|
||||
AdvSceneSwitcher.condition.screenshot="Screenshot"
|
||||
AdvSceneSwitcher.condition.screenshot.entry="A screenshot was taken"
|
||||
|
||||
# Macro Actions
|
||||
AdvSceneSwitcher.action.unknown="Unknown action"
|
||||
AdvSceneSwitcher.action.scene="Switch scene"
|
||||
@@ -1974,6 +1977,9 @@ AdvSceneSwitcher.tempVar.queue.size="Size"
|
||||
AdvSceneSwitcher.tempVar.queue.running="Is running"
|
||||
AdvSceneSwitcher.tempVar.queue.running.description="Returns \"true\" if the queue is started and \"false\" if it is stopped."
|
||||
|
||||
AdvSceneSwitcher.tempVar.screenshot.lastScreenshotPath="Last screenshot path"
|
||||
AdvSceneSwitcher.tempVar.screenshot.lastScreenshotPath.description="The filesystem path to the last screenshot taken."
|
||||
|
||||
AdvSceneSwitcher.selectScene="--select scene--"
|
||||
AdvSceneSwitcher.selectPreviousScene="Previous Scene"
|
||||
AdvSceneSwitcher.selectCurrentScene="Current Scene"
|
||||
|
||||
@@ -117,6 +117,8 @@ target_sources(
|
||||
macro-condition-scene-visibility.hpp
|
||||
macro-condition-scene.cpp
|
||||
macro-condition-scene.hpp
|
||||
macro-condition-screenshot.cpp
|
||||
macro-condition-screenshot.hpp
|
||||
macro-condition-slideshow.cpp
|
||||
macro-condition-slideshow.hpp
|
||||
macro-condition-source.cpp
|
||||
|
||||
94
plugins/base/macro-condition-screenshot.cpp
Normal file
94
plugins/base/macro-condition-screenshot.cpp
Normal file
@@ -0,0 +1,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
|
||||
55
plugins/base/macro-condition-screenshot.hpp
Normal file
55
plugins/base/macro-condition-screenshot.hpp
Normal file
@@ -0,0 +1,55 @@
|
||||
#pragma once
|
||||
#include "macro-condition-edit.hpp"
|
||||
|
||||
#include <obs-config.h>
|
||||
#include <QWidget>
|
||||
#include <QComboBox>
|
||||
|
||||
#if LIBOBS_API_VER >= MAKE_SEMANTIC_VERSION(29, 0, 0)
|
||||
|
||||
namespace advss {
|
||||
|
||||
class MacroConditionScreenshot : public MacroCondition {
|
||||
public:
|
||||
MacroConditionScreenshot(Macro *m) : MacroCondition(m) {}
|
||||
bool CheckCondition();
|
||||
bool Save(obs_data_t *obj) const;
|
||||
bool Load(obs_data_t *obj);
|
||||
std::string GetId() const { return id; };
|
||||
static std::shared_ptr<MacroCondition> Create(Macro *m)
|
||||
{
|
||||
return std::make_shared<MacroConditionScreenshot>(m);
|
||||
}
|
||||
|
||||
private:
|
||||
void SetupTempVars();
|
||||
|
||||
bool _screenshotTimeInitialized = false;
|
||||
std::chrono::high_resolution_clock::time_point _screenshotTime = {};
|
||||
static bool _registered;
|
||||
static const std::string id;
|
||||
};
|
||||
|
||||
class MacroConditionScreenshotEdit : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MacroConditionScreenshotEdit(
|
||||
QWidget *parent,
|
||||
std::shared_ptr<MacroConditionScreenshot> cond = nullptr);
|
||||
static QWidget *Create(QWidget *parent,
|
||||
std::shared_ptr<MacroCondition> cond)
|
||||
{
|
||||
return new MacroConditionScreenshotEdit(
|
||||
parent,
|
||||
std::dynamic_pointer_cast<MacroConditionScreenshot>(
|
||||
cond));
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<MacroConditionScreenshot> _entryData;
|
||||
};
|
||||
|
||||
} // namespace advss
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user