1212using namespace scratchcpprender ;
1313using namespace libscratchcpp ;
1414
15- void runEventLoop (IEngine *engine)
16- {
17- engine->runEventLoop ();
18- }
19-
2015ProjectLoader::ProjectLoader (QObject *parent) :
2116 QObject(parent)
2217{
@@ -33,12 +28,6 @@ ProjectLoader::ProjectLoader(QObject *parent) :
3328 });
3429
3530 initTimer ();
36-
37- // Update refresh rate when primary screen changes
38- connect (qApp, &QApplication::primaryScreenChanged, this , [this ]() {
39- killTimer (m_timerId);
40- initTimer ();
41- });
4231}
4332
4433ProjectLoader::~ProjectLoader ()
@@ -48,11 +37,6 @@ ProjectLoader::~ProjectLoader()
4837 if (m_loadThread.isRunning ())
4938 m_loadThread.waitForFinished ();
5039
51- if (m_engine && m_eventLoopEnabled) {
52- m_engine->stopEventLoop ();
53- m_eventLoop.waitForFinished ();
54- }
55-
5640 for (SpriteModel *sprite : m_sprites)
5741 sprite->deleteLater ();
5842}
@@ -72,11 +56,6 @@ void ProjectLoader::setFileName(const QString &newFileName)
7256
7357 m_fileName = newFileName;
7458
75- if (m_engine) {
76- m_engine->stopEventLoop ();
77- m_eventLoop.waitForFinished ();
78- }
79-
8059 m_project.setScratchVersion (ScratchVersion::Scratch3);
8160 m_project.setFileName (m_fileName.toStdString ());
8261 m_loadStatus = false ;
@@ -164,17 +143,8 @@ void ProjectLoader::timerEvent(QTimerEvent *event)
164143 if (m_loadThread.isRunning ())
165144 return ;
166145
167- auto stageRenderedTarget = m_stage.renderedTarget ();
168-
169- if (stageRenderedTarget)
170- stageRenderedTarget->updateProperties ();
171-
172- for (auto sprite : m_sprites) {
173- auto renderedTarget = sprite->renderedTarget ();
174-
175- if (renderedTarget)
176- renderedTarget->updateProperties ();
177- }
146+ if (m_engine)
147+ m_engine->step ();
178148
179149 event->accept ();
180150}
@@ -213,7 +183,7 @@ void ProjectLoader::load()
213183 m_engine->setCloneLimit (m_cloneLimit);
214184 m_engine->setSpriteFencingEnabled (m_spriteFencing);
215185
216- auto handler = std::bind (&ProjectLoader::emitTick , this );
186+ auto handler = std::bind (&ProjectLoader::redraw , this );
217187 m_engine->setRedrawHandler (std::function<void ()>(handler));
218188
219189 // Load targets
@@ -240,12 +210,6 @@ void ProjectLoader::load()
240210 return ;
241211 }
242212
243- // Run event loop
244- m_engine->setSpriteFencingEnabled (false );
245-
246- if (m_eventLoopEnabled)
247- m_eventLoop = QtConcurrent::run (&runEventLoop, m_engine);
248-
249213 m_engineMutex.unlock ();
250214
251215 emit loadStatusChanged ();
@@ -257,27 +221,24 @@ void ProjectLoader::load()
257221
258222void ProjectLoader::initTimer ()
259223{
260- QScreen *screen = qApp->primaryScreen ();
261-
262- if (screen)
263- m_timerId = startTimer (1000 / screen->refreshRate ());
224+ m_timerId = startTimer (1000 / m_fps);
264225}
265226
266- void ProjectLoader::emitTick ()
227+ void ProjectLoader::redraw ()
267228{
268229 if (m_loadThread.isRunning ())
269230 m_loadThread.waitForFinished ();
270231
271- auto stageRenderedTarget = m_stage.renderedTarget ();
232+ auto stage = m_stage.renderedTarget ();
272233
273- if (stageRenderedTarget )
274- stageRenderedTarget-> loadProperties ();
234+ if (stage )
235+ stage-> beforeRedraw ();
275236
276237 for (auto sprite : m_sprites) {
277238 auto renderedTarget = sprite->renderedTarget ();
278239
279240 if (renderedTarget)
280- renderedTarget->loadProperties ();
241+ renderedTarget->beforeRedraw ();
281242 }
282243}
283244
@@ -299,6 +260,9 @@ void ProjectLoader::setFps(double newFps)
299260 } else
300261 m_fps = newFps;
301262
263+ killTimer (m_timerId);
264+ initTimer ();
265+
302266 m_engineMutex.unlock ();
303267 emit fpsChanged ();
304268}
@@ -405,32 +369,6 @@ void ProjectLoader::setSpriteFencing(bool newSpriteFencing)
405369 emit spriteFencingChanged ();
406370}
407371
408- bool ProjectLoader::eventLoopEnabled () const
409- {
410- return m_eventLoopEnabled;
411- }
412-
413- void ProjectLoader::setEventLoopEnabled (bool newEventLoopEnabled)
414- {
415- if (m_eventLoopEnabled == newEventLoopEnabled)
416- return ;
417-
418- m_eventLoopEnabled = newEventLoopEnabled;
419- m_engineMutex.lock ();
420-
421- if (m_engine) {
422- if (m_eventLoopEnabled)
423- m_eventLoop = QtConcurrent::run (&runEventLoop, m_engine);
424- else {
425- m_engine->stopEventLoop ();
426- m_eventLoop.waitForFinished ();
427- }
428- }
429-
430- m_engineMutex.unlock ();
431- emit eventLoopEnabledChanged ();
432- }
433-
434372unsigned int ProjectLoader::downloadedAssets () const
435373{
436374 return m_downloadedAssets;
0 commit comments