From 46da073aa5fc3a87c0805fac1cbba1dcd8df04cf Mon Sep 17 00:00:00 2001 From: Exeldro Date: Mon, 30 Jan 2023 12:34:59 +0100 Subject: [PATCH] UI: Add obs_frontend_open_sceneitem_edit_transform() --- UI/api-interface.cpp | 8 +++++++ UI/obs-frontend-api/obs-frontend-api.cpp | 6 +++++ UI/obs-frontend-api/obs-frontend-api.h | 1 + UI/obs-frontend-api/obs-frontend-internal.hpp | 2 ++ UI/window-basic-main.cpp | 23 +++++++++++++++---- UI/window-basic-main.hpp | 2 ++ UI/window-basic-transform.cpp | 3 +-- UI/window-basic-transform.hpp | 2 +- docs/sphinx/reference-frontend-api.rst | 8 +++++++ 9 files changed, 47 insertions(+), 8 deletions(-) diff --git a/UI/api-interface.cpp b/UI/api-interface.cpp index c56bf9f2b..34dd94d4d 100644 --- a/UI/api-interface.cpp +++ b/UI/api-interface.cpp @@ -630,6 +630,14 @@ struct OBSStudioAPI : obs_frontend_callbacks { Q_ARG(OBSSource, OBSSource(source))); } + void obs_frontend_open_sceneitem_edit_transform( + obs_sceneitem_t *item) override + { + QMetaObject::invokeMethod(main, "OpenEditTransform", + Q_ARG(OBSSceneItem, + OBSSceneItem(item))); + } + char *obs_frontend_get_current_record_output_path(void) override { const char *recordOutputPath = main->GetCurrentOutputPath(); diff --git a/UI/obs-frontend-api/obs-frontend-api.cpp b/UI/obs-frontend-api/obs-frontend-api.cpp index f1445dde5..e5ca328fc 100644 --- a/UI/obs-frontend-api/obs-frontend-api.cpp +++ b/UI/obs-frontend-api/obs-frontend-api.cpp @@ -559,6 +559,12 @@ void obs_frontend_open_source_interaction(obs_source_t *source) c->obs_frontend_open_source_interaction(source); } +void obs_frontend_open_sceneitem_edit_transform(obs_sceneitem_t *item) +{ + if (callbacks_valid()) + c->obs_frontend_open_sceneitem_edit_transform(item); +} + char *obs_frontend_get_current_record_output_path(void) { return !!callbacks_valid() diff --git a/UI/obs-frontend-api/obs-frontend-api.h b/UI/obs-frontend-api/obs-frontend-api.h index c1ad7adfd..797decb00 100644 --- a/UI/obs-frontend-api/obs-frontend-api.h +++ b/UI/obs-frontend-api/obs-frontend-api.h @@ -226,6 +226,7 @@ EXPORT void obs_frontend_reset_video(void); EXPORT void obs_frontend_open_source_properties(obs_source_t *source); EXPORT void obs_frontend_open_source_filters(obs_source_t *source); EXPORT void obs_frontend_open_source_interaction(obs_source_t *source); +EXPORT void obs_frontend_open_sceneitem_edit_transform(obs_sceneitem_t *item); EXPORT char *obs_frontend_get_current_record_output_path(void); EXPORT const char *obs_frontend_get_locale_string(const char *string); diff --git a/UI/obs-frontend-api/obs-frontend-internal.hpp b/UI/obs-frontend-api/obs-frontend-internal.hpp index ea057ece1..bb0bbec9a 100644 --- a/UI/obs-frontend-api/obs-frontend-internal.hpp +++ b/UI/obs-frontend-api/obs-frontend-internal.hpp @@ -141,6 +141,8 @@ struct obs_frontend_callbacks { virtual void obs_frontend_open_source_filters(obs_source_t *source) = 0; virtual void obs_frontend_open_source_interaction(obs_source_t *source) = 0; + virtual void + obs_frontend_open_sceneitem_edit_transform(obs_sceneitem_t *item) = 0; virtual char *obs_frontend_get_current_record_output_path(void) = 0; virtual const char * diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 5c9af8c2d..cd36a4e11 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -6391,6 +6391,15 @@ void OBSBasic::OpenInteraction(OBSSource source) CreateInteractionWindow(source); } +void OBSBasic::OpenEditTransform(OBSSceneItem item) +{ + if (!item) + item = GetCurrentSceneItem(); + if (!item) + return; + CreateEditTransformWindow(item); +} + void OBSBasic::OpenSceneFilters() { OBSScene scene = GetCurrentScene(); @@ -8057,14 +8066,18 @@ void OBSBasic::UpdateEditMenu() } void OBSBasic::on_actionEditTransform_triggered() +{ + const auto item = GetCurrentSceneItem(); + if (!item) + return; + CreateEditTransformWindow(item); +} + +void OBSBasic::CreateEditTransformWindow(obs_sceneitem_t *item) { if (transformWindow) transformWindow->close(); - - if (!GetCurrentSceneItem()) - return; - - transformWindow = new OBSBasicTransform(this); + transformWindow = new OBSBasicTransform(item, this); connect(ui->scenes, &QListWidget::currentItemChanged, transformWindow, &OBSBasicTransform::OnSceneChanged); transformWindow->show(); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 158e27485..065d7b51b 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -945,6 +945,7 @@ public: void CreateInteractionWindow(obs_source_t *source); void CreatePropertiesWindow(obs_source_t *source); void CreateFiltersWindow(obs_source_t *source); + void CreateEditTransformWindow(obs_sceneitem_t *item); QAction *AddDockWidget(QDockWidget *dock); @@ -1157,6 +1158,7 @@ private slots: void OpenFilters(OBSSource source = nullptr); void OpenProperties(OBSSource source = nullptr); void OpenInteraction(OBSSource source = nullptr); + void OpenEditTransform(OBSSceneItem item = nullptr); void EnablePreviewDisplay(bool enable); void TogglePreview(); diff --git a/UI/window-basic-transform.cpp b/UI/window-basic-transform.cpp index c9f7da750..84a9e55bd 100644 --- a/UI/window-basic-transform.cpp +++ b/UI/window-basic-transform.cpp @@ -40,7 +40,7 @@ void OBSBasicTransform::HookWidget(QWidget *widget, const char *signal, #define ISCROLL_CHANGED SIGNAL(valueChanged(int)) #define DSCROLL_CHANGED SIGNAL(valueChanged(double)) -OBSBasicTransform::OBSBasicTransform(OBSBasic *parent) +OBSBasicTransform::OBSBasicTransform(OBSSceneItem item, OBSBasic *parent) : QDialog(parent), ui(new Ui::OBSBasicTransform), main(parent) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); @@ -69,7 +69,6 @@ OBSBasicTransform::OBSBasicTransform(OBSBasic *parent) installEventFilter(CreateShortcutFilter()); - OBSSceneItem item = FindASelectedItem(main->GetCurrentScene()); OBSScene scene = obs_sceneitem_get_scene(item); SetScene(scene); SetItem(item); diff --git a/UI/window-basic-transform.hpp b/UI/window-basic-transform.hpp index fcbf4b35a..de9809b57 100644 --- a/UI/window-basic-transform.hpp +++ b/UI/window-basic-transform.hpp @@ -48,7 +48,7 @@ private slots: void on_resetButton_clicked(); public: - OBSBasicTransform(OBSBasic *parent); + OBSBasicTransform(OBSSceneItem item, OBSBasic *parent); ~OBSBasicTransform(); public slots: diff --git a/docs/sphinx/reference-frontend-api.rst b/docs/sphinx/reference-frontend-api.rst index d18e18823..7fc93f820 100644 --- a/docs/sphinx/reference-frontend-api.rst +++ b/docs/sphinx/reference-frontend-api.rst @@ -794,6 +794,14 @@ Functions --------------------------------------- +.. function:: void *obs_frontend_open_sceneitem_edit_transform(obs_sceneitem_t *item) + + Opens the edit transform window of the specified sceneitem. + + :param item: The sceneitem to open the edit transform window of + +--------------------------------------- + .. function:: char *obs_frontend_get_current_record_output_path(void) :return: A new pointer to the current record output path. Free