From 7e38ff7d4da627e07da9adf496d5a0e893861274 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 21:04:55 +0100 Subject: [PATCH] removed sdl from gleswidget, use slots to update mouse movement --- src/qt/qt_gleswidget.cpp | 21 +-------------------- src/qt/qt_gleswidget.hpp | 11 ++++++++++- src/qt/qt_main.cpp | 2 -- src/qt/qt_mainwindow.cpp | 15 +-------------- src/qt/qt_mainwindow.hpp | 4 +++- 5 files changed, 15 insertions(+), 38 deletions(-) diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index 71ad041d6..3cd91c5a7 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -1,4 +1,3 @@ -#include #include #include "qt_gleswidget.hpp" #ifdef __APPLE__ @@ -12,14 +11,6 @@ extern "C" #include <86box/video.h> } -typedef struct mouseinputdata -{ - int deltax, deltay, deltaz; - int mousebuttons; -} mouseinputdata; - -mouseinputdata mousedata; -SDL_mutex* mousemutex; void qt_mouse_capture(int on) @@ -41,15 +32,13 @@ qt_mouse_capture(int on) return; } -void qt_mouse_poll() +void GLESWidget::qt_mouse_poll() { - SDL_LockMutex(mousemutex); mouse_x = mousedata.deltax; mouse_y = mousedata.deltay; mouse_z = mousedata.deltaz; mousedata.deltax = mousedata.deltay = mousedata.deltaz = 0; mouse_buttons = mousedata.mousebuttons; - SDL_UnlockMutex(mousemutex); } void GLESWidget::resizeGL(int w, int h) @@ -83,27 +72,21 @@ void GLESWidget::mouseReleaseEvent(QMouseEvent *event) } if (mouse_capture) { - SDL_LockMutex(mousemutex); mousedata.mousebuttons &= ~event->button(); - SDL_UnlockMutex(mousemutex); } } void GLESWidget::mousePressEvent(QMouseEvent *event) { if (mouse_capture) { - SDL_LockMutex(mousemutex); mousedata.mousebuttons |= event->button(); - SDL_UnlockMutex(mousemutex); } } void GLESWidget::wheelEvent(QWheelEvent *event) { if (mouse_capture) { - SDL_LockMutex(mousemutex); mousedata.deltay += event->pixelDelta().y(); - SDL_UnlockMutex(mousemutex); } } @@ -117,10 +100,8 @@ void GLESWidget::mouseMoveEvent(QMouseEvent *event) #else static QPoint oldPos = QCursor::pos(); if (ignoreNextMouseEvent) { oldPos = event->pos(); ignoreNextMouseEvent--; event->accept(); return; } - SDL_LockMutex(mousemutex); mousedata.deltax += event->pos().x() - oldPos.x(); mousedata.deltay += event->pos().y() - oldPos.y(); - SDL_UnlockMutex(mousemutex); QCursor::setPos(mapToGlobal(QPoint(width() / 2, height() / 2))); oldPos = event->pos(); ignoreNextMouseEvent = 1; diff --git a/src/qt/qt_gleswidget.hpp b/src/qt/qt_gleswidget.hpp index 8689cdf1d..76701c917 100644 --- a/src/qt/qt_gleswidget.hpp +++ b/src/qt/qt_gleswidget.hpp @@ -38,4 +38,13 @@ public: } public slots: void qt_real_blit(int x, int y, int w, int h); -}; \ No newline at end of file + void qt_mouse_poll(); + +private: + struct mouseinputdata { + int deltax, deltay, deltaz; + int mousebuttons; + }; + mouseinputdata mousedata; + +}; diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 56a486ac8..bbdbc6dc3 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -76,7 +76,6 @@ main_thread_fn() is_quit = 1; } -extern SDL_mutex* mousemutex; int main(int argc, char* argv[]) { QApplication app(argc, argv); #ifdef __APPLE__ @@ -85,7 +84,6 @@ int main(int argc, char* argv[]) { #endif elapsed_timer.start(); SDL_Init(SDL_INIT_TIMER); - mousemutex = SDL_CreateMutex(); main_window = new MainWindow(); main_window->show(); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index fdde83dc5..44c07fc58 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -51,9 +51,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); - connect(this, &MainWindow::pollMouse, this, [] { - qt_mouse_poll(); - }); + connect(this, &MainWindow::pollMouse, hw_widget, &GLESWidget::qt_mouse_poll); connect(this, &MainWindow::setMouseCapture, this, [this](bool state) { mouse_capture = state ? 1 : 0; @@ -83,17 +81,6 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); -#if 0 - sdl_inits(); - sdl_timer = new QTimer(this); - connect(sdl_timer, &QTimer::timeout, this, [] { - auto status = sdl_main(); - if (status == SdlMainQuit) { - QApplication::quit(); - } - }); - sdl_timer->start(5); -#endif } MainWindow::~MainWindow() { diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 7a075a174..173caa8b1 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -9,6 +9,8 @@ namespace Ui { class MainWindow; } +class GLESWidget; + class MainWindow : public QMainWindow { Q_OBJECT @@ -56,7 +58,7 @@ private: DeltaPos mouseDelta; QWindow* sdl_wrapped_window; QWidget* sdl_wrapped_widget; - QWidget* hw_widget; + GLESWidget* hw_widget; QTimer* sdl_timer; };