Skip to content

Commit 51728e7

Browse files
committed
Implement text bubble methods in SpriteModel
1 parent 003121c commit 51728e7

File tree

3 files changed

+82
-0
lines changed

3 files changed

+82
-0
lines changed

src/spritemodel.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,29 @@ void SpriteModel::onGraphicsEffectsCleared()
115115

116116
void SpriteModel::onBubbleTypeChanged(libscratchcpp::Target::BubbleType type)
117117
{
118+
if (type == libscratchcpp::Target::BubbleType::Say) {
119+
if (m_bubbleType == TextBubbleShape::Type::Say)
120+
return;
121+
122+
m_bubbleType = TextBubbleShape::Type::Say;
123+
} else {
124+
if (m_bubbleType == TextBubbleShape::Type::Think)
125+
return;
126+
127+
m_bubbleType = TextBubbleShape::Type::Think;
128+
}
129+
130+
emit bubbleTypeChanged();
118131
}
119132

120133
void SpriteModel::onBubbleTextChanged(const std::string &text)
121134
{
135+
QString newText = QString::fromStdString(text);
136+
137+
if (m_bubbleText != newText) {
138+
m_bubbleText = newText;
139+
emit bubbleTextChanged();
140+
}
122141
}
123142

124143
libscratchcpp::Rect SpriteModel::boundingRect() const
@@ -195,4 +214,14 @@ SpriteModel *SpriteModel::cloneRoot() const
195214
return m_cloneRoot;
196215
}
197216

217+
const TextBubbleShape::Type &SpriteModel::bubbleType() const
218+
{
219+
return m_bubbleType;
220+
}
221+
222+
const QString &SpriteModel::bubbleText() const
223+
{
224+
return m_bubbleText;
225+
}
226+
198227
} // namespace scratchcpprender

src/spritemodel.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <scratchcpp/ispritehandler.h>
88

99
#include "penstate.h"
10+
#include "textbubbleshape.h"
1011

1112
Q_MOC_INCLUDE("renderedtarget.h");
1213
Q_MOC_INCLUDE("ipenlayer.h");
@@ -25,6 +26,8 @@ class SpriteModel
2526
QML_ELEMENT
2627
Q_PROPERTY(IRenderedTarget *renderedTarget READ renderedTarget WRITE setRenderedTarget NOTIFY renderedTargetChanged)
2728
Q_PROPERTY(IPenLayer *penLayer READ penLayer WRITE setPenLayer NOTIFY penLayerChanged)
29+
Q_PROPERTY(TextBubbleShape::Type bubbleType READ bubbleType NOTIFY bubbleTypeChanged)
30+
Q_PROPERTY(QString bubbleText READ bubbleText NOTIFY bubbleTextChanged)
2831

2932
public:
3033
SpriteModel(QObject *parent = nullptr);
@@ -69,9 +72,15 @@ class SpriteModel
6972

7073
SpriteModel *cloneRoot() const;
7174

75+
const TextBubbleShape::Type &bubbleType() const;
76+
77+
const QString &bubbleText() const;
78+
7279
signals:
7380
void renderedTargetChanged();
7481
void penLayerChanged();
82+
void bubbleTypeChanged();
83+
void bubbleTextChanged();
7584
void cloned(SpriteModel *cloneModel);
7685
void cloneDeleted(SpriteModel *clone);
7786

@@ -81,6 +90,8 @@ class SpriteModel
8190
IPenLayer *m_penLayer = nullptr;
8291
PenState m_penState;
8392
SpriteModel *m_cloneRoot = nullptr;
93+
TextBubbleShape::Type m_bubbleType = TextBubbleShape::Type::Say;
94+
QString m_bubbleText;
8495
};
8596

8697
} // namespace scratchcpprender

test/target_models/spritemodel_test.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,48 @@ TEST(SpriteModelTest, OnGraphicsEffectsCleared)
244244
model.onGraphicsEffectsCleared();
245245
}
246246

247+
TEST(SpriteModelTest, OnBubbleTypeChanged)
248+
{
249+
SpriteModel model;
250+
QSignalSpy spy(&model, &SpriteModel::bubbleTypeChanged);
251+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Say);
252+
253+
model.onBubbleTypeChanged(Target::BubbleType::Think);
254+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Think);
255+
ASSERT_EQ(spy.count(), 1);
256+
257+
model.onBubbleTypeChanged(Target::BubbleType::Think);
258+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Think);
259+
ASSERT_EQ(spy.count(), 1);
260+
261+
model.onBubbleTypeChanged(Target::BubbleType::Say);
262+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Say);
263+
ASSERT_EQ(spy.count(), 2);
264+
265+
model.onBubbleTypeChanged(Target::BubbleType::Say);
266+
ASSERT_EQ(model.bubbleType(), TextBubbleShape::Type::Say);
267+
ASSERT_EQ(spy.count(), 2);
268+
}
269+
270+
TEST(SpriteModelTest, OnBubbleTextChanged)
271+
{
272+
SpriteModel model;
273+
QSignalSpy spy(&model, &SpriteModel::bubbleTextChanged);
274+
ASSERT_TRUE(model.bubbleText().isEmpty());
275+
276+
model.onBubbleTextChanged("Hello!");
277+
ASSERT_EQ(model.bubbleText(), "Hello!");
278+
ASSERT_EQ(spy.count(), 1);
279+
280+
model.onBubbleTextChanged("Hello!");
281+
ASSERT_EQ(model.bubbleText(), "Hello!");
282+
ASSERT_EQ(spy.count(), 1);
283+
284+
model.onBubbleTextChanged("test");
285+
ASSERT_EQ(model.bubbleText(), "test");
286+
ASSERT_EQ(spy.count(), 2);
287+
}
288+
247289
TEST(SpriteModelTest, BoundingRect)
248290
{
249291
SpriteModel model;

0 commit comments

Comments
 (0)