diff --git a/gui/include/avopenglwidget.h b/gui/include/avopenglwidget.h index 9583b4d..6451d8f 100644 --- a/gui/include/avopenglwidget.h +++ b/gui/include/avopenglwidget.h @@ -59,6 +59,8 @@ class AVOpenGLWidget: public QOpenGLWidget AVOpenGLFrameUploader *frame_uploader; QThread *frame_uploader_thread; + QTimer *mouse_timer; + public: static QSurfaceFormat CreateSurfaceFormat(); @@ -69,8 +71,15 @@ class AVOpenGLWidget: public QOpenGLWidget AVOpenGLFrame *GetBackgroundFrame() { return &frames[1 - frame_fg]; } protected: + void mouseMoveEvent(QMouseEvent *event) override; + void initializeGL() override; void paintGL() override; + + private slots: + void ResetMouseTimeout(); + public slots: + void HideMouse(); }; #endif // CHIAKI_AVOPENGLWIDGET_H diff --git a/gui/src/avopenglwidget.cpp b/gui/src/avopenglwidget.cpp index 49f83c3..164836d 100644 --- a/gui/src/avopenglwidget.cpp +++ b/gui/src/avopenglwidget.cpp @@ -23,6 +23,9 @@ #include #include #include +#include + +#define MOUSE_TIMEOUT_MS 1000 //#define DEBUG_OPENGL @@ -96,6 +99,11 @@ AVOpenGLWidget::AVOpenGLWidget(VideoDecoder *decoder, QWidget *parent) frame_uploader = nullptr; frame_uploader_thread = nullptr; frame_fg = 0; + + setMouseTracking(true); + mouse_timer = new QTimer(this); + connect(mouse_timer, &QTimer::timeout, this, &AVOpenGLWidget::HideMouse); + ResetMouseTimeout(); } AVOpenGLWidget::~AVOpenGLWidget() @@ -110,6 +118,23 @@ AVOpenGLWidget::~AVOpenGLWidget() delete frame_uploader_context; } +void AVOpenGLWidget::mouseMoveEvent(QMouseEvent *event) +{ + QOpenGLWidget::mouseMoveEvent(event); + ResetMouseTimeout(); +} + +void AVOpenGLWidget::ResetMouseTimeout() +{ + unsetCursor(); + mouse_timer->start(MOUSE_TIMEOUT_MS); +} + +void AVOpenGLWidget::HideMouse() +{ + setCursor(Qt::BlankCursor); +} + void AVOpenGLWidget::SwapFrames() { QMutexLocker lock(&frames_mutex); diff --git a/gui/src/streamwindow.cpp b/gui/src/streamwindow.cpp index a993ebb..cfddbda 100644 --- a/gui/src/streamwindow.cpp +++ b/gui/src/streamwindow.cpp @@ -126,13 +126,11 @@ void StreamWindow::LoginPINRequested(bool incorrect) void StreamWindow::ToggleFullscreen() { if(isFullScreen()) - { - setCursor(Qt::ArrowCursor); showNormal(); - } else { - setCursor(Qt::BlankCursor); showFullScreen(); + if(av_widget) + av_widget->HideMouse(); } }