@@ -34,7 +34,7 @@ ProjectLoader::~ProjectLoader()
3434 if (m_loadThread.isRunning ())
3535 m_loadThread.waitForFinished ();
3636
37- if (m_engine) {
37+ if (m_engine && m_eventLoopEnabled ) {
3838 m_engine->stopEventLoop ();
3939 m_eventLoop.waitForFinished ();
4040 }
@@ -88,6 +88,12 @@ IEngine *ProjectLoader::engine() const
8888 return m_engine;
8989}
9090
91+ // NOTE: This should be only used for testing
92+ void ProjectLoader::setEngine (libscratchcpp::IEngine *engine)
93+ {
94+ m_engine = engine;
95+ }
96+
9197StageModel *ProjectLoader::stage ()
9298{
9399 if (m_loadThread.isRunning ())
@@ -104,6 +110,11 @@ QQmlListProperty<SpriteModel> ProjectLoader::sprites()
104110 return QQmlListProperty<SpriteModel>(this , &m_sprites);
105111}
106112
113+ const QList<SpriteModel *> &ProjectLoader::spriteList () const
114+ {
115+ return m_sprites;
116+ }
117+
107118void ProjectLoader::start ()
108119{
109120 if (m_loadThread.isRunning ())
@@ -198,7 +209,10 @@ void ProjectLoader::load()
198209
199210 // Run event loop
200211 m_engine->setSpriteFencingEnabled (false );
201- m_eventLoop = QtConcurrent::run (&runEventLoop, m_engine);
212+
213+ if (m_eventLoopEnabled)
214+ m_eventLoop = QtConcurrent::run (&runEventLoop, m_engine);
215+
202216 m_engineMutex.unlock ();
203217
204218 emit loadStatusChanged ();
@@ -244,11 +258,13 @@ void ProjectLoader::setFps(double newFps)
244258 if (qFuzzyCompare (m_fps, newFps))
245259 return ;
246260
247- m_fps = newFps;
248261 m_engineMutex.lock ();
249262
250- if (m_engine)
251- m_engine->setFps (m_fps);
263+ if (m_engine) {
264+ m_engine->setFps (newFps);
265+ m_fps = m_engine->fps ();
266+ } else
267+ m_fps = newFps;
252268
253269 m_engineMutex.unlock ();
254270 emit fpsChanged ();
@@ -324,11 +340,13 @@ void ProjectLoader::setCloneLimit(int newCloneLimit)
324340 if (m_cloneLimit == newCloneLimit)
325341 return ;
326342
327- m_cloneLimit = newCloneLimit;
328343 m_engineMutex.lock ();
329344
330- if (m_engine)
331- m_engine->setCloneLimit (m_cloneLimit);
345+ if (m_engine) {
346+ m_engine->setCloneLimit (newCloneLimit);
347+ m_cloneLimit = m_engine->cloneLimit ();
348+ } else
349+ m_cloneLimit = newCloneLimit;
332350
333351 m_engineMutex.unlock ();
334352 emit cloneLimitChanged ();
@@ -353,3 +371,29 @@ void ProjectLoader::setSpriteFencing(bool newSpriteFencing)
353371 m_engineMutex.unlock ();
354372 emit spriteFencingChanged ();
355373}
374+
375+ bool ProjectLoader::eventLoopEnabled () const
376+ {
377+ return m_eventLoopEnabled;
378+ }
379+
380+ void ProjectLoader::setEventLoopEnabled (bool newEventLoopEnabled)
381+ {
382+ if (m_eventLoopEnabled == newEventLoopEnabled)
383+ return ;
384+
385+ m_eventLoopEnabled = newEventLoopEnabled;
386+ m_engineMutex.lock ();
387+
388+ if (m_engine) {
389+ if (m_eventLoopEnabled)
390+ m_eventLoop = QtConcurrent::run (&runEventLoop, m_engine);
391+ else {
392+ m_engine->stopEventLoop ();
393+ m_eventLoop.waitForFinished ();
394+ }
395+ }
396+
397+ m_engineMutex.unlock ();
398+ emit eventLoopEnabledChanged ();
399+ }
0 commit comments