Hide Mouse after Timeout in Qt GUI

This commit is contained in:
Florian Märkl 2019-11-20 17:55:46 +01:00
parent 4f60ceb1d4
commit a3ae9d4f74
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
3 changed files with 36 additions and 4 deletions

View file

@ -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

View file

@ -23,6 +23,9 @@
#include <QOpenGLExtraFunctions>
#include <QOpenGLDebugLogger>
#include <QThread>
#include <QTimer>
#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);

View file

@ -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();
}
}