From b543ea6231a1817820e3e563cbf7bfd9e8622760 Mon Sep 17 00:00:00 2001 From: Palana Date: Sat, 27 Jun 2015 03:39:39 +0200 Subject: [PATCH] UI: Make scene items serializable via QDataStream This minimal implementation should be enough to drag&drop scenes between UI elements in the same process in the future --- obs/qt-wrappers.cpp | 26 ++++++++++++++++++++++++++ obs/qt-wrappers.hpp | 2 ++ obs/window-basic-main.cpp | 1 + 3 files changed, 29 insertions(+) diff --git a/obs/qt-wrappers.cpp b/obs/qt-wrappers.cpp index 3965fa2a4..1643c26c4 100644 --- a/obs/qt-wrappers.cpp +++ b/obs/qt-wrappers.cpp @@ -95,3 +95,29 @@ QDataStream &operator>>(QDataStream &in, OBSScene &scene) return in; } + +QDataStream &operator<<(QDataStream &out, const OBSSceneItem &si) +{ + obs_scene_t *scene = obs_sceneitem_get_scene(si); + obs_source_t *source = obs_sceneitem_get_source(si); + return out << QString(obs_source_get_name(obs_scene_get_source(scene))) + << QString(obs_source_get_name(source)); +} + +QDataStream &operator>>(QDataStream &in, OBSSceneItem &si) +{ + QString sceneName; + QString sourceName; + + in >> sceneName >> sourceName; + + obs_source_t *sceneSource = + obs_get_source_by_name(QT_TO_UTF8(sceneName)); + + obs_scene_t *scene = obs_scene_from_source(sceneSource); + si = obs_scene_find_source(scene, QT_TO_UTF8(sourceName)); + + obs_source_release(sceneSource); + + return in; +} diff --git a/obs/qt-wrappers.hpp b/obs/qt-wrappers.hpp index 22e4dfbd0..e661cd03e 100644 --- a/obs/qt-wrappers.hpp +++ b/obs/qt-wrappers.hpp @@ -35,3 +35,5 @@ uint32_t TranslateQtKeyboardEventModifiers(Qt::KeyboardModifiers mods); QDataStream &operator<<(QDataStream &out, const OBSScene &scene); QDataStream &operator>>(QDataStream &in, OBSScene &scene); +QDataStream &operator<<(QDataStream &out, const OBSSceneItem &si); +QDataStream &operator>>(QDataStream &in, OBSSceneItem &si); diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index 9761b624e..6528eff4a 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -134,6 +134,7 @@ OBSBasic::OBSBasic(QWidget *parent) qRegisterMetaType("obs_hotkey_id"); qRegisterMetaTypeStreamOperators("OBSScene"); + qRegisterMetaTypeStreamOperators("OBSSceneItem"); ui->scenes->setAttribute(Qt::WA_MacShowFocusRect, false); ui->sources->setAttribute(Qt::WA_MacShowFocusRect, false);