Skip to content

Commit fd161f3

Browse files
committed
Refactor RenderedTarget for singlethreaded loop
1 parent d5a6cb3 commit fd161f3

14 files changed

+456
-441
lines changed

src/ProjectPlayer.qml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ ProjectScene {
4444
else
4545
failedToLoad();
4646
}
47+
onStageChanged: stage.loadCostume();
4748
}
4849

4950
function start() {

src/irenderedtarget.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,11 @@
33
#pragma once
44

55
#include <qnanoquickitem.h>
6+
#include <scratchcpp/sprite.h>
67

78
class QBuffer;
89
class QNanoPainter;
9-
10-
namespace libscratchcpp
11-
{
12-
13-
class Costume;
14-
class IEngine;
15-
class Target;
16-
17-
} // namespace libscratchcpp
10+
class QOpenGLContext;
1811

1912
namespace scratchcpprender
2013
{
@@ -33,9 +26,17 @@ class IRenderedTarget : public QNanoQuickItem
3326

3427
virtual ~IRenderedTarget() { }
3528

36-
virtual void loadProperties() = 0;
29+
virtual void updateVisibility(bool visible) = 0;
30+
virtual void updateX(double x) = 0;
31+
virtual void updateY(double y) = 0;
32+
virtual void updateSize(double size) = 0;
33+
virtual void updateDirection(double direction) = 0;
34+
virtual void updateRotationStyle(libscratchcpp::Sprite::RotationStyle style) = 0;
35+
virtual void updateLayerOrder(int layerOrder) = 0;
36+
3737
virtual void loadCostume(libscratchcpp::Costume *costume) = 0;
38-
virtual void updateProperties() = 0;
38+
39+
virtual void beforeRedraw() = 0;
3940

4041
virtual libscratchcpp::IEngine *engine() const = 0;
4142
virtual void setEngine(libscratchcpp::IEngine *newEngine) = 0;

src/projectloader.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,17 @@ void ProjectLoader::redraw()
229229
if (m_loadThread.isRunning())
230230
m_loadThread.waitForFinished();
231231

232-
// TODO: Call beforeRedraw() of targets
232+
auto stage = m_stage.renderedTarget();
233+
234+
if (stage)
235+
stage->beforeRedraw();
236+
237+
for (auto sprite : m_sprites) {
238+
auto renderedTarget = sprite->renderedTarget();
239+
240+
if (renderedTarget)
241+
renderedTarget->beforeRedraw();
242+
}
233243
}
234244

235245
double ProjectLoader::fps() const

0 commit comments

Comments
 (0)