Skip to content

Commit 404e4c3

Browse files
committed
Use ProjectLoader to get sprites in MouseEventHandler
1 parent a6fac67 commit 404e4c3

File tree

5 files changed

+51
-63
lines changed

5 files changed

+51
-63
lines changed

src/mouseeventhandler.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include "mouseeventhandler.h"
77
#include "renderedtarget.h"
8+
#include "projectloader.h"
9+
#include "spritemodel.h"
810

911
using namespace scratchcpprender;
1012

@@ -88,23 +90,23 @@ bool MouseEventHandler::eventFilter(QObject *obj, QEvent *event)
8890

8991
void MouseEventHandler::forwardPointEvent(QSinglePointEvent *event, QQuickItem *oldClickedItem)
9092
{
91-
Q_ASSERT(m_spriteRepeater);
93+
Q_ASSERT(m_projectLoader);
9294

93-
if (!m_spriteRepeater)
95+
if (!m_projectLoader)
9496
return;
9597

9698
// Create list of sprites
99+
const auto &spriteModels = m_projectLoader->spriteList();
97100
std::vector<IRenderedTarget *> sprites;
98-
int count = m_spriteRepeater->property("count").toInt();
101+
auto count = spriteModels.size();
99102
sprites.reserve(count);
100103

101104
for (int i = 0; i < count; i++) {
102-
QQuickItem *sprite = nullptr;
103-
QMetaObject::invokeMethod(m_spriteRepeater, "itemAt", Qt::DirectConnection, Q_RETURN_ARG(QQuickItem *, sprite), Q_ARG(int, i));
105+
Q_ASSERT(spriteModels[i]);
106+
IRenderedTarget *sprite = spriteModels[i]->renderedTarget();
104107
Q_ASSERT(sprite);
105-
Q_ASSERT(dynamic_cast<IRenderedTarget *>(sprite));
106-
Q_ASSERT(dynamic_cast<IRenderedTarget *>(sprite)->scratchTarget());
107-
sprites.push_back(dynamic_cast<IRenderedTarget *>(sprite));
108+
Q_ASSERT(sprite->scratchTarget());
109+
sprites.push_back(sprite);
108110
}
109111

110112
// Sort the list by layer order

test/mouseeventhandler/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
add_executable(
22
mouseeventhandler_test
33
mouseeventhandler_test.cpp
4-
fakerepeater.cpp
5-
fakerepeater.h
64
)
75

86
target_link_libraries(

test/mouseeventhandler/fakerepeater.cpp

Lines changed: 0 additions & 19 deletions
This file was deleted.

test/mouseeventhandler/fakerepeater.h

Lines changed: 0 additions & 21 deletions
This file was deleted.

test/mouseeventhandler/mouseeventhandler_test.cpp

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
#include <scratchcpp/sprite.h>
33
#include <mouseeventhandler.h>
44
#include <projectloader.h>
5+
#include <spritemodel.h>
56
#include <renderedtargetmock.h>
67

78
#include "../common.h"
8-
#include "fakerepeater.h"
99

1010
using namespace scratchcpprender;
1111
using namespace libscratchcpp;
@@ -56,14 +56,21 @@ TEST(MouseEventHandlerTest, HoverEnterLeaveEvent)
5656
{
5757
MouseEventHandler handler;
5858
RenderedTargetMock stage, renderedTarget1, renderedTarget2, renderedTarget3;
59+
SpriteModel model1, model2, model3;
60+
model1.setRenderedTarget(&renderedTarget1);
61+
model2.setRenderedTarget(&renderedTarget2);
62+
model3.setRenderedTarget(&renderedTarget3);
5963
Sprite sprite1, sprite2, sprite3;
6064
sprite1.setLayerOrder(2);
6165
sprite2.setLayerOrder(1);
6266
sprite3.setLayerOrder(3);
63-
FakeRepeater repeater;
64-
repeater.items = { &renderedTarget1, &renderedTarget2, &renderedTarget3 };
67+
ProjectLoader loader;
68+
auto sprites = loader.sprites();
69+
sprites.append(&sprites, &model1);
70+
sprites.append(&sprites, &model2);
71+
sprites.append(&sprites, &model3);
6572
handler.setStage(&stage);
66-
handler.setSpriteRepeater(&repeater);
73+
handler.setProjectLoader(&loader);
6774
QPointingDevice dev;
6875

6976
static const QPointF localPos(8.5, 2.9);
@@ -117,14 +124,21 @@ TEST(MouseEventHandlerTest, HoverMoveEvent)
117124
{
118125
MouseEventHandler handler;
119126
RenderedTargetMock stage, renderedTarget1, renderedTarget2, renderedTarget3;
127+
SpriteModel model1, model2, model3;
128+
model1.setRenderedTarget(&renderedTarget1);
129+
model2.setRenderedTarget(&renderedTarget2);
130+
model3.setRenderedTarget(&renderedTarget3);
120131
Sprite sprite1, sprite2, sprite3;
121132
sprite1.setLayerOrder(2);
122133
sprite2.setLayerOrder(1);
123134
sprite3.setLayerOrder(3);
124-
FakeRepeater repeater;
125-
repeater.items = { &renderedTarget1, &renderedTarget2, &renderedTarget3 };
135+
ProjectLoader loader;
136+
auto sprites = loader.sprites();
137+
sprites.append(&sprites, &model1);
138+
sprites.append(&sprites, &model2);
139+
sprites.append(&sprites, &model3);
126140
handler.setStage(&stage);
127-
handler.setSpriteRepeater(&repeater);
141+
handler.setProjectLoader(&loader);
128142
QPointingDevice dev;
129143

130144
static const QPointF localPos(8.5, 2.9);
@@ -201,14 +215,21 @@ TEST(MouseEventHandlerTest, MouseMoveEvent)
201215
{
202216
MouseEventHandler handler;
203217
RenderedTargetMock stage, renderedTarget1, renderedTarget2, renderedTarget3;
218+
SpriteModel model1, model2, model3;
219+
model1.setRenderedTarget(&renderedTarget1);
220+
model2.setRenderedTarget(&renderedTarget2);
221+
model3.setRenderedTarget(&renderedTarget3);
204222
Sprite sprite1, sprite2, sprite3;
205223
sprite1.setLayerOrder(2);
206224
sprite2.setLayerOrder(1);
207225
sprite3.setLayerOrder(3);
208-
FakeRepeater repeater;
209-
repeater.items = { &renderedTarget1, &renderedTarget2, &renderedTarget3 };
226+
ProjectLoader loader;
227+
auto sprites = loader.sprites();
228+
sprites.append(&sprites, &model1);
229+
sprites.append(&sprites, &model2);
230+
sprites.append(&sprites, &model3);
210231
handler.setStage(&stage);
211-
handler.setSpriteRepeater(&repeater);
232+
handler.setProjectLoader(&loader);
212233
QPointingDevice dev;
213234

214235
static const QPointF localPos(8.5, 2.9);
@@ -261,14 +282,21 @@ TEST(MouseEventHandlerTest, MousePressReleaseEvent)
261282
{
262283
MouseEventHandler handler;
263284
RenderedTargetMock stage, renderedTarget1, renderedTarget2, renderedTarget3;
285+
SpriteModel model1, model2, model3;
286+
model1.setRenderedTarget(&renderedTarget1);
287+
model2.setRenderedTarget(&renderedTarget2);
288+
model3.setRenderedTarget(&renderedTarget3);
264289
Sprite sprite1, sprite2, sprite3;
265290
sprite1.setLayerOrder(2);
266291
sprite2.setLayerOrder(1);
267292
sprite3.setLayerOrder(3);
268-
FakeRepeater repeater;
269-
repeater.items = { &renderedTarget1, &renderedTarget2, &renderedTarget3 };
293+
ProjectLoader loader;
294+
auto sprites = loader.sprites();
295+
sprites.append(&sprites, &model1);
296+
sprites.append(&sprites, &model2);
297+
sprites.append(&sprites, &model3);
270298
handler.setStage(&stage);
271-
handler.setSpriteRepeater(&repeater);
299+
handler.setProjectLoader(&loader);
272300
QPointingDevice dev;
273301

274302
static const QPointF localPos(8.5, 2.9);

0 commit comments

Comments
 (0)