lightpreview: add mousewheel support

This commit is contained in:
Eric Wasylishen 2017-04-28 16:42:42 -06:00
parent 701fad8460
commit 428a169f95
2 changed files with 48 additions and 5 deletions

View File

@ -23,16 +23,18 @@ See file, 'COPYING', for details.
#include <cassert>
#include <QMouseEvent>
#include <QWheelEvent>
#include <QKeyEvent>
#include <QTime>
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<uint32_t>(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<uint32_t>(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<uint32_t>(keys_t::up))
m_cameraOrigin += m_cameraFwd * speed;

View File

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