From 24f66e15d8f6edb1b977e9d825c130a612baa097 Mon Sep 17 00:00:00 2001 From: Elliu <elliu@hashi.re> Date: Thu, 23 Dec 2021 16:38:33 +0100 Subject: [PATCH] Add a MainWindow to have mouse and keyboard passed to MPV --- CMakeLists.txt | 1 + src/module/module_qt_window.h | 8 ++++++-- src/module/qt_window/mainwindow.cpp | 7 +++++++ src/module/qt_window/mainwindow.hh | 17 +++++++++++++++++ src/module/qt_window/mpvwidget.cpp | 4 ++-- src/module/qt_window/mpvwidget.hh | 2 +- src/module/qt_window/mpvwidget_interface.cpp | 5 ++--- 7 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 src/module/qt_window/mainwindow.cpp create mode 100644 src/module/qt_window/mainwindow.hh diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e9cfd55..0e9a04eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,6 +151,7 @@ set(lektor_module_SOURCES src/module/qt_window/mpvwidget.cpp src/module/qt_window/mpvwidget_interface.cpp src/module/qt_window/qthelper.cpp + src/module/qt_window/mainwindow.cpp src/module/thread.c ) diff --git a/src/module/module_qt_window.h b/src/module/module_qt_window.h index acdd44d9..7cc63cb5 100644 --- a/src/module/module_qt_window.h +++ b/src/module/module_qt_window.h @@ -3,15 +3,19 @@ #if defined( __cplusplus) extern "C" { -class MpvWidget; +#define DECLARE_CPP_CLASS(c) class c; #else -typedef struct MpvWidget MpvWidget; +#define DECLARE_CPP_CLASS(c) typedef struct c c; #endif +DECLARE_CPP_CLASS(MpvWidget) +DECLARE_CPP_CLASS(MainWindow) +#undef DECLARE_CPP_CLASS #include <lektor/common.h> #include "thread.h" struct module_qt_window_s { + MainWindow* main_window; MpvWidget* mpv_widget; /* Thread related */ diff --git a/src/module/qt_window/mainwindow.cpp b/src/module/qt_window/mainwindow.cpp new file mode 100644 index 00000000..46e56c04 --- /dev/null +++ b/src/module/qt_window/mainwindow.cpp @@ -0,0 +1,7 @@ +#include "mainwindow.hh" + +MainWindow::MainWindow(struct module_qt_window_s* qt_window, QWidget *parent) : + QMainWindow(parent) +{ + qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db, this); +} diff --git a/src/module/qt_window/mainwindow.hh b/src/module/qt_window/mainwindow.hh new file mode 100644 index 00000000..ad3e5142 --- /dev/null +++ b/src/module/qt_window/mainwindow.hh @@ -0,0 +1,17 @@ +#ifndef __LKT_MODULE_QT_WINDOW_MAINWINDOW__ +#define __LKT_MODULE_QT_WINDOW_MAINWINDOW__ + +#include <QtWidgets/QWidget> +#include <QtGui> +#include <QMainWindow> +#include "../module_qt_window.h" +#include "mpvwidget.hh" + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + explicit MainWindow(struct module_qt_window_s *qt_window, QWidget *parent = 0); +}; + +#endif // __LKT_MODULE_QT_WINDOW_MAINWINDOW__ diff --git a/src/module/qt_window/mpvwidget.cpp b/src/module/qt_window/mpvwidget.cpp index 64c89e59..558674b6 100644 --- a/src/module/qt_window/mpvwidget.cpp +++ b/src/module/qt_window/mpvwidget.cpp @@ -20,8 +20,8 @@ static void *get_proc_address(void *ctx, const char *name) { return reinterpret_cast<void *>(glctx->getProcAddress(QByteArray(name))); } -MpvWidget::MpvWidget(struct queue *queue, lkt_db *db) - : QOpenGLWidget(), +MpvWidget::MpvWidget(struct queue *queue, lkt_db *db, QWidget* parent) + : QOpenGLWidget(parent), m_queue(queue), m_db(db) { diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh index 0c0f91d6..86ea4662 100644 --- a/src/module/qt_window/mpvwidget.hh +++ b/src/module/qt_window/mpvwidget.hh @@ -14,7 +14,7 @@ class MpvWidget Q_DECL_FINAL: public QOpenGLWidget { Q_OBJECT public: - MpvWidget(struct queue *queue, lkt_db *db); + MpvWidget(struct queue *queue, lkt_db *db, QWidget* parent); ~MpvWidget(); void command(const QVariant& params); void setProperty(const QString& name, const QVariant& value); diff --git a/src/module/qt_window/mpvwidget_interface.cpp b/src/module/qt_window/mpvwidget_interface.cpp index 56c9af81..8067387a 100644 --- a/src/module/qt_window/mpvwidget_interface.cpp +++ b/src/module/qt_window/mpvwidget_interface.cpp @@ -1,5 +1,5 @@ #include "mpvwidget_interface.h" -#include "mpvwidget.hh" +#include "mainwindow.hh" #include <QApplication> @@ -12,8 +12,7 @@ ___create_mpv_widget(struct poller_thread_arg *arg){ int argc = 0; QApplication a(argc, NULL); setlocale(LC_NUMERIC, "C"); - qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db); - qt_window->mpv_widget->show(); + qt_window->main_window = new MainWindow(qt_window); a.exec(); return NULL; } -- GitLab