Skip to content

Commit a4de1d0

Browse files
committed
Request redraw on pen operations
1 parent 38955d4 commit a4de1d0

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

src/spritemodel.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <scratchcpp/costume.h>
44
#include <scratchcpp/rect.h>
5+
#include <scratchcpp/iengine.h>
56

67
#include "spritemodel.h"
78
#include "renderedtarget.h"
@@ -65,8 +66,13 @@ void SpriteModel::onYChanged(double y)
6566

6667
void SpriteModel::onMoved(double oldX, double oldY, double newX, double newY)
6768
{
68-
if (m_penDown && m_penLayer)
69+
if (m_penDown && m_penLayer) {
6970
m_penLayer->drawLine(m_penAttributes, oldX, oldY, newX, newY);
71+
libscratchcpp::IEngine *engine = m_sprite->engine();
72+
73+
if (engine)
74+
engine->requestRedraw();
75+
}
7076
}
7177

7278
void SpriteModel::onSizeChanged(double size)
@@ -151,13 +157,15 @@ bool SpriteModel::penDown() const
151157

152158
void SpriteModel::setPenDown(bool newPenDown)
153159
{
154-
if (m_penDown == newPenDown)
155-
return;
156-
157160
m_penDown = newPenDown;
158161

159-
if (m_penDown && m_penLayer && m_sprite)
162+
if (m_penDown && m_penLayer && m_sprite) {
160163
m_penLayer->drawPoint(m_penAttributes, m_sprite->x(), m_sprite->y());
164+
libscratchcpp::IEngine *engine = m_sprite->engine();
165+
166+
if (engine)
167+
engine->requestRedraw();
168+
}
161169
}
162170

163171
SpriteModel *SpriteModel::cloneRoot() const

test/target_models/spritemodel_test.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <spritemodel.h>
44
#include <renderedtargetmock.h>
55
#include <penlayermock.h>
6+
#include <enginemock.h>
67

78
#include "../common.h"
89

@@ -149,17 +150,25 @@ TEST(SpriteModelTest, OnYChanged)
149150
TEST(SpriteModelTest, OnMoved)
150151
{
151152
SpriteModel model;
153+
Sprite sprite;
154+
EngineMock engine;
155+
sprite.setEngine(&engine);
156+
model.init(&sprite);
152157

153158
PenLayerMock penLayer;
154159
model.setPenLayer(&penLayer);
155160

156161
EXPECT_CALL(penLayer, drawLine).Times(0);
162+
EXPECT_CALL(engine, requestRedraw).Times(0);
157163
model.onMoved(-15.6, 54.9, 159.04, -2.5);
158164

165+
EXPECT_CALL(penLayer, drawPoint);
166+
EXPECT_CALL(engine, requestRedraw);
159167
model.setPenDown(true);
160168
PenAttributes &attr = model.penAttributes();
161169

162170
EXPECT_CALL(penLayer, drawLine(_, -15.6, 54.9, 159.04, -2.5)).WillOnce(WithArgs<0>(Invoke([&attr](const PenAttributes &attrArg) { ASSERT_EQ(&attr, &attrArg); })));
171+
EXPECT_CALL(engine, requestRedraw());
163172
model.onMoved(-15.6, 54.9, 159.04, -2.5);
164173
}
165174

@@ -253,8 +262,10 @@ TEST(SpriteModelTest, PenDown)
253262
{
254263
SpriteModel model;
255264
Sprite sprite;
265+
EngineMock engine;
256266
sprite.setX(24.6);
257267
sprite.setY(-48.8);
268+
sprite.setEngine(&engine);
258269
model.init(&sprite);
259270
ASSERT_FALSE(model.penDown());
260271

@@ -264,14 +275,17 @@ TEST(SpriteModelTest, PenDown)
264275
PenAttributes &attr = model.penAttributes();
265276

266277
EXPECT_CALL(penLayer, drawPoint(_, 24.6, -48.8)).WillOnce(WithArgs<0>(Invoke([&attr](const PenAttributes &attrArg) { ASSERT_EQ(&attr, &attrArg); })));
278+
EXPECT_CALL(engine, requestRedraw());
267279
model.setPenDown(true);
268280
ASSERT_TRUE(model.penDown());
269281

270-
EXPECT_CALL(penLayer, drawPoint).Times(0);
282+
EXPECT_CALL(penLayer, drawPoint(_, 24.6, -48.8));
283+
EXPECT_CALL(engine, requestRedraw());
271284
model.setPenDown(true);
272285
ASSERT_TRUE(model.penDown());
273286

274287
EXPECT_CALL(penLayer, drawPoint).Times(0);
288+
EXPECT_CALL(engine, requestRedraw).Times(0);
275289
model.setPenDown(false);
276290
ASSERT_FALSE(model.penDown());
277291
}

0 commit comments

Comments
 (0)