Skip to content

Commit c59aa9a

Browse files
committed
fix #106: Fix backdrop loading when loading another project
1 parent 756eb9c commit c59aa9a

File tree

4 files changed

+20
-8
lines changed

4 files changed

+20
-8
lines changed

src/renderedtarget.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,22 @@ void RenderedTarget::setEngine(IEngine *newEngine)
199199
return;
200200

201201
m_engine = newEngine;
202+
m_costume = nullptr;
203+
m_costumesLoaded = false;
204+
205+
if (!m_skinsInherited) {
206+
for (const auto &[costume, skin] : m_skins)
207+
delete skin;
208+
209+
m_skins.clear();
210+
}
211+
212+
m_skin = nullptr;
213+
m_texture = Texture();
214+
m_oldTexture = Texture();
215+
clearGraphicEffects();
216+
m_hullPoints.clear();
217+
202218
emit engineChanged();
203219
}
204220

src/stagemodel.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,8 @@ void StageModel::onBubbleTextChanged(const std::string &text)
7979

8080
void StageModel::loadCostume()
8181
{
82-
if (m_renderedTarget && m_stage) {
83-
if (m_stage)
84-
m_renderedTarget->updateCostume(m_stage->currentCostume().get());
85-
}
82+
if (m_renderedTarget && m_stage)
83+
m_renderedTarget->updateCostume(m_stage->currentCostume().get());
8684
}
8785

8886
libscratchcpp::Stage *StageModel::stage() const
@@ -101,7 +99,6 @@ void StageModel::setRenderedTarget(IRenderedTarget *newRenderedTarget)
10199
return;
102100

103101
m_renderedTarget = newRenderedTarget;
104-
loadCostume();
105102

106103
emit renderedTargetChanged();
107104
}

test/renderedtarget/renderedtarget_test.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ TEST_F(RenderedTargetTest, UpdateMethods)
5656
createContextAndSurface(&context, &surface);
5757
RenderedTarget parent; // a parent item is needed for setVisible() to work
5858
RenderedTarget target(&parent);
59+
EngineMock engine;
60+
target.setEngine(&engine);
5961
QSignalSpy mirrorHorizontallySpy(&target, &RenderedTarget::mirrorHorizontallyChanged);
6062
ASSERT_FALSE(target.costumesLoaded());
6163

@@ -73,8 +75,6 @@ TEST_F(RenderedTargetTest, UpdateMethods)
7375
stage.addCostume(costume);
7476
target.loadCostumes();
7577
ASSERT_TRUE(target.costumesLoaded());
76-
EngineMock engine;
77-
target.setEngine(&engine);
7878

7979
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
8080
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));

test/target_models/stagemodel_test.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ TEST(StageModelTest, RenderedTarget)
123123

124124
RenderedTargetMock renderedTarget;
125125
QSignalSpy spy(&model, &StageModel::renderedTargetChanged);
126-
EXPECT_CALL(renderedTarget, updateCostume(c2.get()));
127126
model.setRenderedTarget(&renderedTarget);
128127
ASSERT_EQ(spy.count(), 1);
129128
ASSERT_EQ(model.renderedTarget(), &renderedTarget);

0 commit comments

Comments
 (0)