diff --git a/lightpreview/glview.cpp b/lightpreview/glview.cpp index 0f6be5fd..434320d6 100644 --- a/lightpreview/glview.cpp +++ b/lightpreview/glview.cpp @@ -23,16 +23,18 @@ See file, 'COPYING', for details. #include #include +#include #include +#include GLView::GLView(QWidget *parent) - : QOpenGLWidget(parent), + : m_keymoveUpdateTimer(0), + QOpenGLWidget(parent), m_program(nullptr) { setFocusPolicy(Qt::StrongFocus); // allow keyboard focus - startTimer(10); // repaint timer, calls timerEvent() - m_timer.start(); // for measuring elapsed time + //m_timer.start(); // for measuring elapsed time m_cameraOrigin = QVector3D(0, 0, 0); m_cameraFwd = QVector3D(0, 1, 0); @@ -151,6 +153,8 @@ void GLView::mouseMoveEvent(QMouseEvent *event) // now rotate m_cameraFwd and m_cameraUp by mouseRotation m_cameraFwd = mouseRotation * m_cameraFwd; + + repaint(); } static keys_t Qt_Key_To_keys_t(int key) @@ -164,11 +168,29 @@ static keys_t Qt_Key_To_keys_t(int key) return keys_t::none; } +void GLView::startMovementTimer() +{ + if (m_keymoveUpdateTimer) + return; + + m_keymoveUpdateTimer = startTimer(10); // repaint timer, calls timerEvent() +} + +void GLView::stopMovementTimer() +{ + if (m_keymoveUpdateTimer != 0) { + killTimer(m_keymoveUpdateTimer); + m_keymoveUpdateTimer = 0; + } +} + void GLView::keyPressEvent(QKeyEvent *event) { keys_t key = Qt_Key_To_keys_t(event->key()); m_keysPressed |= static_cast(key); + + startMovementTimer(); } void GLView::keyReleaseEvent(QKeyEvent *event) @@ -176,11 +198,23 @@ void GLView::keyReleaseEvent(QKeyEvent *event) keys_t key = Qt_Key_To_keys_t(event->key()); m_keysPressed &= ~static_cast(key); + + if (!m_keysPressed) + stopMovementTimer(); +} + +void GLView::wheelEvent(QWheelEvent *event) +{ + static float speed = 0.02; + m_cameraOrigin += m_cameraFwd * event->angleDelta().y() * speed; + update(); } void GLView::timerEvent(QTimerEvent *event) { - static float speed = 0.1; + printf("key movement %s\n", QTime::currentTime().toString().toStdString().c_str()); + + const float speed = 0.1; if (m_keysPressed & static_cast(keys_t::up)) m_cameraOrigin += m_cameraFwd * speed; diff --git a/lightpreview/glview.h b/lightpreview/glview.h index cd91feef..f21a996c 100644 --- a/lightpreview/glview.h +++ b/lightpreview/glview.h @@ -43,7 +43,8 @@ class GLView : public QOpenGLWidget, { private: uint32_t m_keysPressed; - QElapsedTimer m_timer; + int m_keymoveUpdateTimer; + //QElapsedTimer m_timer; QPointF m_lastMouseDownPos; // camera stuff @@ -67,14 +68,22 @@ public: GLView(QWidget *parent = nullptr); ~GLView(); + protected: void initializeGL() override; void paintGL() override; void resizeGL(int width, int height) override; + +private: + void startMovementTimer(); + void stopMovementTimer(); + +protected: void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void keyReleaseEvent(QKeyEvent *event) override; + void wheelEvent (QWheelEvent *event) override; protected: /** animation timer */