Skip to content

Commit 478c263

Browse files
committed
Add deinitClone method to RenderedTarget
1 parent 3d3f2f8 commit 478c263

File tree

5 files changed

+31
-0
lines changed

5 files changed

+31
-0
lines changed

src/irenderedtarget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class IRenderedTarget : public QNanoQuickItem
3838

3939
virtual void beforeRedraw() = 0;
4040

41+
virtual void deinitClone() = 0;
42+
4143
virtual libscratchcpp::IEngine *engine() const = 0;
4244
virtual void setEngine(libscratchcpp::IEngine *newEngine) = 0;
4345

src/renderedtarget.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,16 @@ void RenderedTarget::beforeRedraw()
149149
setHeight(m_height);
150150
}
151151

152+
void RenderedTarget::deinitClone()
153+
{
154+
// Do not process mouse move events after the clone has been deleted
155+
disconnect(m_mouseArea, &SceneMouseArea::mouseMoved, this, &RenderedTarget::handleSceneMouseMove);
156+
157+
// Release drag lock
158+
if (m_mouseArea->draggedSprite() == this)
159+
m_mouseArea->setDraggedSprite(nullptr);
160+
}
161+
152162
IEngine *RenderedTarget::engine() const
153163
{
154164
return m_engine;

src/renderedtarget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ class RenderedTarget : public IRenderedTarget
4343

4444
void beforeRedraw() override;
4545

46+
void deinitClone() override;
47+
4648
libscratchcpp::IEngine *engine() const override;
4749
void setEngine(libscratchcpp::IEngine *newEngine) override;
4850

test/mocks/renderedtargetmock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class RenderedTargetMock : public IRenderedTarget
2424

2525
MOCK_METHOD(void, loadCostume, (libscratchcpp::Costume *), (override));
2626

27+
MOCK_METHOD(void, deinitClone, (), (override));
28+
2729
MOCK_METHOD(libscratchcpp::IEngine *, engine, (), (const, override));
2830
MOCK_METHOD(void, setEngine, (libscratchcpp::IEngine *), (override));
2931

test/renderedtarget/renderedtarget_test.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,21 @@ TEST_F(RenderedTargetTest, LoadSvgCostume)
290290
ASSERT_EQ(std::round(target.transformOriginPoint().y() * 100) / 100, 7236.27);
291291
}
292292

293+
TEST_F(RenderedTargetTest, DeinitClone)
294+
{
295+
RenderedTarget target1, target2;
296+
SceneMouseArea mouseArea;
297+
target1.setMouseArea(&mouseArea);
298+
299+
mouseArea.setDraggedSprite(&target2);
300+
target1.deinitClone();
301+
ASSERT_EQ(mouseArea.draggedSprite(), &target2);
302+
303+
mouseArea.setDraggedSprite(&target1);
304+
target1.deinitClone();
305+
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
306+
}
307+
293308
TEST_F(RenderedTargetTest, PaintSvg)
294309
{
295310
std::string str = readFileStr("image.svg");

0 commit comments

Comments
 (0)