Skip to content

Commit 51ba7fe

Browse files
authored
Merge pull request #94 from scratchcpp/mouse_wheel
Add mouse wheel support
2 parents 0aa0537 + c82f8ea commit 51ba7fe

File tree

9 files changed

+70
-0
lines changed

9 files changed

+70
-0
lines changed

src/ProjectPlayer.qml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,8 @@ ProjectScene {
191191
onMouseMoved: (x, y)=> root.handleMouseMove(x, y)
192192
onMousePressed: root.handleMousePress()
193193
onMouseReleased: root.handleMouseRelease()
194+
onMouseWheelUp: root.handleMouseWheelUp()
195+
onMouseWheelDown: root.handleMouseWheelDown()
194196
}
195197

196198
Component {

src/mouseeventhandler.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,18 @@ bool MouseEventHandler::eventFilter(QObject *obj, QEvent *event)
7777
return true;
7878
}
7979

80+
case QEvent::Wheel: {
81+
QWheelEvent *wheelEvent = static_cast<QWheelEvent *>(event);
82+
const int delta = wheelEvent->angleDelta().y();
83+
84+
if (delta > 0)
85+
emit mouseWheelUp();
86+
else if (delta < 0)
87+
emit mouseWheelDown();
88+
89+
break;
90+
}
91+
8092
default:
8193
break;
8294
}

src/mouseeventhandler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ class MouseEventHandler : public QObject
3434
void mouseMoved(qreal x, qreal y);
3535
void mousePressed();
3636
void mouseReleased();
37+
void mouseWheelUp();
38+
void mouseWheelDown();
3739

3840
private:
3941
void getSprites();

src/projectscene.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,19 @@ void ProjectScene::handleMouseRelease()
7171
m_engine->setMousePressed(false);
7272
}
7373

74+
void ProjectScene::handleMouseWheelUp()
75+
{
76+
if (m_engine)
77+
m_engine->mouseWheelUp();
78+
}
79+
80+
void ProjectScene::handleMouseWheelDown()
81+
{
82+
83+
if (m_engine)
84+
m_engine->mouseWheelDown();
85+
}
86+
7487
void ProjectScene::handleKeyPress(Qt::Key key, const QString &text)
7588
{
7689
m_pressedKeys.insert(key);

src/projectscene.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ class ProjectScene : public QQuickItem
3434
Q_INVOKABLE void handleMouseMove(qreal x, qreal y);
3535
Q_INVOKABLE void handleMousePress();
3636
Q_INVOKABLE void handleMouseRelease();
37+
Q_INVOKABLE void handleMouseWheelUp();
38+
Q_INVOKABLE void handleMouseWheelDown();
3739

3840
void handleKeyPress(Qt::Key key, const QString &text);
3941
void handleKeyRelease(Qt::Key key, const QString &text);

src/scenemousearea.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ SceneMouseArea::SceneMouseArea(QQuickItem *parent) :
1515
connect(m_mouseHandler, &MouseEventHandler::mouseMoved, this, &SceneMouseArea::mouseMoved);
1616
connect(m_mouseHandler, &MouseEventHandler::mousePressed, this, &SceneMouseArea::mousePressed);
1717
connect(m_mouseHandler, &MouseEventHandler::mouseReleased, this, &SceneMouseArea::mouseReleased);
18+
connect(m_mouseHandler, &MouseEventHandler::mouseWheelUp, this, &SceneMouseArea::mouseWheelUp);
19+
connect(m_mouseHandler, &MouseEventHandler::mouseWheelDown, this, &SceneMouseArea::mouseWheelDown);
1820

1921
setAcceptHoverEvents(true);
2022
setAcceptTouchEvents(true);

src/scenemousearea.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ class SceneMouseArea : public QQuickItem
3434
void mouseMoved(qreal x, qreal y);
3535
void mousePressed();
3636
void mouseReleased();
37+
void mouseWheelUp();
38+
void mouseWheelDown();
3739
void stageChanged();
3840
void projectLoaderChanged();
3941

test/mouseeventhandler/mouseeventhandler_test.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,3 +405,25 @@ TEST(MouseEventHandlerTest, MousePressReleaseEvent)
405405
pressedSpy.clear();
406406
releasedSpy.clear();
407407
}
408+
409+
TEST(MouseEventHandlerTest, WheelEvent)
410+
{
411+
MouseEventHandler handler;
412+
QSignalSpy upSpy(&handler, &MouseEventHandler::mouseWheelUp);
413+
QSignalSpy downSpy(&handler, &MouseEventHandler::mouseWheelDown);
414+
QWheelEvent event1(QPointF(), QPointF(), QPoint(2, 3), QPoint(10, 15), Qt::LeftButton, Qt::NoModifier, Qt::NoScrollPhase, false); // up
415+
QWheelEvent event2(QPointF(), QPointF(), QPoint(1, -5), QPoint(10, -50), Qt::LeftButton, Qt::NoModifier, Qt::NoScrollPhase, false); // down
416+
QWheelEvent event3(QPointF(), QPointF(), QPoint(-10, 0), QPoint(-100, 0), Qt::LeftButton, Qt::NoModifier, Qt::NoScrollPhase, false); // none
417+
418+
handler.eventFilter(nullptr, &event1);
419+
ASSERT_EQ(upSpy.count(), 1);
420+
ASSERT_EQ(downSpy.count(), 0);
421+
422+
handler.eventFilter(nullptr, &event2);
423+
ASSERT_EQ(upSpy.count(), 1);
424+
ASSERT_EQ(downSpy.count(), 1);
425+
426+
handler.eventFilter(nullptr, &event3);
427+
ASSERT_EQ(upSpy.count(), 1);
428+
ASSERT_EQ(downSpy.count(), 1);
429+
}

test/projectscene/projectscene_test.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,19 @@ TEST(ProjectSceneTest, HandleMouseRelease)
6767
scene.handleMouseRelease();
6868
}
6969

70+
TEST(ProjectSceneTest, HandleMouseWheel)
71+
{
72+
ProjectScene scene;
73+
EngineMock engine;
74+
scene.setEngine(&engine);
75+
76+
EXPECT_CALL(engine, mouseWheelUp());
77+
scene.handleMouseWheelUp();
78+
79+
EXPECT_CALL(engine, mouseWheelDown());
80+
scene.handleMouseWheelDown();
81+
}
82+
7083
TEST(ProjectSceneTest, HandleKeyPressAndRelease)
7184
{
7285
static const std::unordered_map<Qt::Key, KeyEvent::Type> SPECIAL_KEY_MAP = {

0 commit comments

Comments
 (0)