Skip to content

Commit d751c7c

Browse files
committed
Notify libscratchcpp about target clicks
1 parent 5fe7795 commit d751c7c

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

src/renderedtarget.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,16 +265,26 @@ void RenderedTarget::mousePressEvent(QMouseEvent *event)
265265
{
266266
if (event->button() == Qt::LeftButton)
267267
m_clicked = true;
268+
269+
if (m_engine && (!m_spriteModel || !m_spriteModel->sprite()->draggable())) {
270+
// Notify libscratchcpp about the click
271+
m_engine->clickTarget(scratchTarget());
272+
}
268273
}
269274

270275
void RenderedTarget::mouseReleaseEvent(QMouseEvent *event)
271276
{
272277
m_clicked = false;
273278
Q_ASSERT(m_mouseArea);
279+
Q_ASSERT(m_engine);
274280

275281
// Stop dragging
276282
if (m_mouseArea->draggedSprite() == this)
277283
m_mouseArea->setDraggedSprite(nullptr);
284+
else if (m_engine && m_spriteModel && m_spriteModel->sprite()->draggable()) {
285+
// Notify libscratchcpp about the click
286+
m_engine->clickTarget(scratchTarget());
287+
}
278288
}
279289

280290
void RenderedTarget::mouseMoveEvent(QMouseEvent *event)

test/renderedtarget/renderedtarget_test.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,11 +576,13 @@ TEST_F(RenderedTargetTest, SpriteDragging)
576576
QMouseEvent moveEventRightButton(QEvent::MouseMove, QPointF(), QPointF(), Qt::RightButton, Qt::RightButton, Qt::NoModifier);
577577
QMouseEvent pressEventRightButton(QEvent::MouseButtonPress, QPointF(), QPointF(), Qt::RightButton, Qt::RightButton, Qt::NoModifier);
578578
QMouseEvent releaseEventRightButton(QEvent::MouseButtonRelease, QPointF(), QPointF(), Qt::RightButton, Qt::RightButton, Qt::NoModifier);
579+
EXPECT_CALL(engine, clickTarget(&sprite));
579580
QCoreApplication::sendEvent(&target, &pressEventRightButton);
580581
QCoreApplication::sendEvent(&target, &moveEventRightButton);
581582
ASSERT_EQ(sprite.x(), 64.08);
582583
ASSERT_EQ(sprite.y(), -6.86);
583584
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
585+
EXPECT_CALL(engine, clickTarget).Times(0);
584586
QCoreApplication::sendEvent(&target, &releaseEventRightButton);
585587
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
586588

@@ -591,11 +593,13 @@ TEST_F(RenderedTargetTest, SpriteDragging)
591593

592594
// Try right mouse button with "draggable" set to true (should not work)
593595
sprite.setDraggable(true);
596+
EXPECT_CALL(engine, clickTarget).Times(0);
594597
QCoreApplication::sendEvent(&target, &pressEventRightButton);
595598
QCoreApplication::sendEvent(&target, &moveEventRightButton);
596599
ASSERT_EQ(sprite.x(), 64.08);
597600
ASSERT_EQ(sprite.y(), -6.86);
598601
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
602+
EXPECT_CALL(engine, clickTarget(&sprite));
599603
QCoreApplication::sendEvent(&target, &releaseEventRightButton);
600604
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
601605

@@ -609,6 +613,7 @@ TEST_F(RenderedTargetTest, SpriteDragging)
609613
QMouseEvent moveEvent(QEvent::MouseMove, QPointF(), QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
610614
QMouseEvent pressEvent(QEvent::MouseButtonPress, QPointF(), QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
611615
QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPointF(), QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
616+
EXPECT_CALL(engine, clickTarget(&sprite));
612617
QCoreApplication::sendEvent(&target, &pressEvent);
613618
QCoreApplication::sendEvent(&target, &moveEvent);
614619
ASSERT_EQ(sprite.x(), 64.08);
@@ -619,10 +624,12 @@ TEST_F(RenderedTargetTest, SpriteDragging)
619624
ASSERT_EQ(sprite.x(), 64.08);
620625
ASSERT_EQ(sprite.y(), -6.86);
621626
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
627+
EXPECT_CALL(engine, clickTarget).Times(0);
622628
QCoreApplication::sendEvent(&target, &releaseEvent);
623629

624630
// Try left mouse button with "draggable" set to true
625631
sprite.setDraggable(true);
632+
EXPECT_CALL(engine, clickTarget).Times(0);
626633
QCoreApplication::sendEvent(&target, &pressEvent);
627634
EXPECT_CALL(engine, mouseX()).WillOnce(Return(67.95));
628635
EXPECT_CALL(engine, mouseY()).WillOnce(Return(2.1));
@@ -663,12 +670,15 @@ TEST_F(RenderedTargetTest, SpriteDragging)
663670

664671
// Try to drag the second sprite while the first is being dragged
665672
sprite.setDraggable(true);
673+
EXPECT_CALL(engine, clickTarget).Times(0);
666674
QCoreApplication::sendEvent(&anotherTarget, &pressEvent);
667675
QCoreApplication::sendEvent(&anotherTarget, &moveEvent);
668676
ASSERT_EQ(mouseArea.draggedSprite(), &target);
677+
EXPECT_CALL(engine, clickTarget(&sprite));
669678
QCoreApplication::sendEvent(&anotherTarget, &releaseEvent);
670679

671680
// Stop dragging
681+
EXPECT_CALL(engine, clickTarget).Times(0);
672682
QCoreApplication::sendEvent(&target, &releaseEvent);
673683
ASSERT_EQ(std::round(sprite.x() * 100) / 100, 68.26);
674684
ASSERT_EQ(std::round(sprite.y() * 100) / 100, -1.95);

0 commit comments

Comments
 (0)