Skip to content

Commit de66d83

Browse files
committed
fix #141: Do not send mouse events to invisible sprites
1 parent 8872d94 commit de66d83

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/mouseeventhandler.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ void MouseEventHandler::forwardPointEvent(QSinglePointEvent *event, QQuickItem *
165165
// contains() expects position in the item's coordinate system
166166
QPointF localPos = sprite->mapFromScene(event->scenePosition());
167167

168-
if (sprite->contains(localPos)) {
168+
if (static_cast<libscratchcpp::Sprite *>(sprite->scratchTarget())->visible() && sprite->contains(localPos)) {
169169
hoveredItem = sprite;
170170
break;
171171
}

test/mouseeventhandler/mouseeventhandler_test.cpp

+9-3
Original file line numberDiff line numberDiff line change
@@ -281,20 +281,24 @@ TEST(MouseEventHandlerTest, MouseMoveEvent)
281281
TEST(MouseEventHandlerTest, MousePressReleaseEvent)
282282
{
283283
MouseEventHandler handler;
284-
RenderedTargetMock stage, renderedTarget1, renderedTarget2, renderedTarget3;
285-
SpriteModel model1, model2, model3;
284+
RenderedTargetMock stage, renderedTarget1, renderedTarget2, renderedTarget3, renderedTarget4;
285+
SpriteModel model1, model2, model3, model4;
286286
model1.setRenderedTarget(&renderedTarget1);
287287
model2.setRenderedTarget(&renderedTarget2);
288288
model3.setRenderedTarget(&renderedTarget3);
289-
Sprite sprite1, sprite2, sprite3;
289+
model4.setRenderedTarget(&renderedTarget4);
290+
Sprite sprite1, sprite2, sprite3, sprite4;
290291
sprite1.setLayerOrder(2);
291292
sprite2.setLayerOrder(1);
292293
sprite3.setLayerOrder(3);
294+
sprite4.setLayerOrder(4);
295+
sprite4.setVisible(false);
293296
ProjectLoader loader;
294297
auto sprites = loader.sprites();
295298
sprites.append(&sprites, &model1);
296299
sprites.append(&sprites, &model2);
297300
sprites.append(&sprites, &model3);
301+
sprites.append(&sprites, &model4);
298302
handler.setStage(&stage);
299303
handler.setProjectLoader(&loader);
300304
QPointingDevice dev;
@@ -307,6 +311,7 @@ TEST(MouseEventHandlerTest, MousePressReleaseEvent)
307311
EXPECT_CALL(renderedTarget1, scratchTarget()).WillRepeatedly(Return(&sprite1));
308312
EXPECT_CALL(renderedTarget2, scratchTarget()).WillRepeatedly(Return(&sprite2));
309313
EXPECT_CALL(renderedTarget3, scratchTarget()).WillRepeatedly(Return(&sprite3));
314+
EXPECT_CALL(renderedTarget4, scratchTarget()).WillRepeatedly(Return(&sprite4));
310315
emit loader.spritesChanged();
311316

312317
EXPECT_CALL(renderedTarget1, mapFromScene(scenePos)).WillRepeatedly(Return(localPos));
@@ -387,6 +392,7 @@ TEST(MouseEventHandlerTest, MousePressReleaseEvent)
387392
EXPECT_CALL(renderedTarget3, contains(localPos)).WillOnce(Return(false));
388393
EXPECT_CALL(renderedTarget1, contains(localPos)).WillOnce(Return(false));
389394
EXPECT_CALL(renderedTarget2, contains(localPos)).WillOnce(Return(false));
395+
EXPECT_CALL(renderedTarget4, contains).Times(0);
390396
EXPECT_CALL(stage, mousePressEvent(_)).WillOnce(WithArgs<0>(Invoke(checkPressEvent)));
391397
ASSERT_TRUE(handler.eventFilter(nullptr, &pressEvent));
392398
ASSERT_EQ(pressedSpy.count(), 1);

0 commit comments

Comments
 (0)