Handle keyboard in QML

This commit is contained in:
2020-06-23 16:29:36 -06:00
parent af761ca337
commit 82ff240cfd
5 changed files with 80 additions and 33 deletions

View File

@@ -27,6 +27,7 @@ public:
m_renderer->t(mitem->t());
m_renderer->hue(mitem->hue());
m_renderer->count(mitem->count());
m_renderer->lagging(mitem->lagging());
}
QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) override {
@@ -87,52 +88,37 @@ void MagnumItem::setCount(qint8 count) {
update();
}
void MagnumItem::keyPressEvent(QKeyEvent *evt) {
switch (evt->key()) {
case Qt::Key_L:
auto camera = m_renderer->camera();
if (camera) {
if (camera->lagging() > 0.0f) {
camera->setLagging(0.0f);
} else {
camera->setLagging(0.85f);
}
}
break;
}
evt->accept();
void MagnumItem::setLagging(qreal lagging) {
if (lagging == m_lagging) return;
m_lagging = lagging;
emit laggingChanged();
update();
}
void MagnumItem::mousePressEvent(QMouseEvent *evt) {
if (auto camera = m_renderer->camera()) {
if (auto& camera = m_renderer->camera()) {
camera->initTransformation({evt->pos().x(), evt->pos().y()});
}
evt->accept();
}
void MagnumItem::mouseReleaseEvent(QMouseEvent *evt) {
evt->accept();
}
void MagnumItem::mouseMoveEvent(QMouseEvent *evt) {
if (!evt->buttons())
return;
if (auto camera = m_renderer->camera()) {
if (auto& camera = m_renderer->camera()) {
if (evt->modifiers() & Qt::ShiftModifier) {
camera->translate({evt->pos().x(), evt->pos().y()});
} else {
camera->rotate({evt->pos().x(), evt->pos().y()});
}
}
evt->accept();
}
void MagnumItem::wheelEvent(QWheelEvent *evt) {
if (auto camera = m_renderer->camera()) {
if (auto& camera = m_renderer->camera()) {
const Float delta = evt->delta();
if (Math::abs(delta) < 1.0e-2f)
return;
camera->zoom(delta);
camera->zoom(delta*.01f);
}
}