diff --git a/ui/viewerwindow.cpp b/ui/viewerwindow.cpp index 7982c0b1f..d988a86ed 100644 --- a/ui/viewerwindow.cpp +++ b/ui/viewerwindow.cpp @@ -1,12 +1,18 @@ #include "viewerwindow.h" #include +#include +#include ViewerWindow::ViewerWindow(QOpenGLContext *share) : QOpenGLWindow(share), texture(0), - mutex(nullptr) -{} + mutex(nullptr), + show_fullscreen_msg(false) +{ + fullscreen_msg_timer.setInterval(2000); + connect(&fullscreen_msg_timer, SIGNAL(timeout()), this, SLOT(fullscreen_msg_timeout())); +} void ViewerWindow::set_texture(GLuint t, double iar, QMutex* imutex) { texture = t; @@ -15,6 +21,26 @@ void ViewerWindow::set_texture(GLuint t, double iar, QMutex* imutex) { update(); } +void ViewerWindow::keyPressEvent(QKeyEvent *e) { + if (e->key() == Qt::Key_Escape) { + hide(); + } +} + +void ViewerWindow::mousePressEvent(QMouseEvent *e) { + if (show_fullscreen_msg && fullscreen_msg_rect.contains(e->pos())) { + hide(); + } +} + +void ViewerWindow::mouseMoveEvent(QMouseEvent *) { + fullscreen_msg_timer.start(); + if (!show_fullscreen_msg) { + show_fullscreen_msg = true; + update(); + } +} + void ViewerWindow::paintGL() { if (texture > 0) { if (mutex != nullptr) mutex->lock(); @@ -65,4 +91,42 @@ void ViewerWindow::paintGL() { if (mutex != nullptr) mutex->unlock(); } + + if (show_fullscreen_msg) { + QPainter p(this); + + QFont f = p.font(); + f.setPointSize(24); + p.setFont(f); + + QFontMetrics fm(f); + + QString fs_str = tr("Exit Fullscreen"); + + p.setPen(Qt::white); + p.setBrush(QColor(0, 0, 0, 128)); + + int text_width = fm.width(fs_str); + int text_x = (width()/2)-(text_width/2); + int text_y = fm.height()+fm.ascent(); + + int rect_padding = 8; + + fullscreen_msg_rect = QRect(text_x-rect_padding, + fm.height()-rect_padding, + text_width+rect_padding+rect_padding, + fm.height()+rect_padding+rect_padding); + + p.drawRect(fullscreen_msg_rect); + + p.drawText(text_x, text_y, fs_str); + } +} + +void ViewerWindow::fullscreen_msg_timeout() { + fullscreen_msg_timer.stop(); + if (show_fullscreen_msg) { + show_fullscreen_msg = false; + update(); + } } diff --git a/ui/viewerwindow.h b/ui/viewerwindow.h index fd4e9e972..cdd099d07 100644 --- a/ui/viewerwindow.h +++ b/ui/viewerwindow.h @@ -2,6 +2,7 @@ #define VIEWERWINDOW_H #include +#include class QMutex; @@ -10,11 +11,22 @@ class ViewerWindow : public QOpenGLWindow { public: ViewerWindow(QOpenGLContext* share); void set_texture(GLuint t, double iar, QMutex *imutex); +protected: + void keyPressEvent(QKeyEvent*); + void mousePressEvent(QMouseEvent*); + void mouseMoveEvent(QMouseEvent*); private: void paintGL(); GLuint texture; double ar; QMutex* mutex; + + // exit full screen message + QTimer fullscreen_msg_timer; + bool show_fullscreen_msg; + QRect fullscreen_msg_rect; +private slots: + void fullscreen_msg_timeout(); }; #endif // VIEWERWINDOW_H