6
6
#include < scratchcpp/textbubble.h>
7
7
8
8
#include " spritemodel.h"
9
- #include " renderedtarget.h"
10
- #include " ipenlayer.h"
11
- #include " graphicseffect.h"
9
+ #include " penlayer.h"
12
10
13
- namespace scratchcpprender
14
- {
11
+ using namespace scratchcpprender ;
15
12
16
13
SpriteModel::SpriteModel (QObject *parent) :
17
- QObject (parent)
14
+ TargetModel (parent)
18
15
{
19
16
}
20
17
21
18
void SpriteModel::init (libscratchcpp::Sprite *sprite)
22
19
{
23
20
m_sprite = sprite;
24
21
25
- if (m_sprite) {
26
- libscratchcpp::TextBubble *bubble = m_sprite->bubble ();
27
-
28
- bubble->typeChanged ().connect ([this ](libscratchcpp::TextBubble::Type type) {
29
- if (type == libscratchcpp::TextBubble::Type::Say) {
30
- if (m_bubbleType == TextBubbleShape::Type::Say)
31
- return ;
32
-
33
- m_bubbleType = TextBubbleShape::Type::Say;
34
- } else {
35
- if (m_bubbleType == TextBubbleShape::Type::Think)
36
- return ;
37
-
38
- m_bubbleType = TextBubbleShape::Type::Think;
39
- }
40
-
41
- emit bubbleTypeChanged ();
42
- });
43
-
44
- bubble->textChanged ().connect ([this ](const std::string &text) {
45
- QString newText = QString::fromStdString (text);
46
-
47
- if (m_bubbleText != newText) {
48
- m_bubbleText = newText;
49
- emit bubbleTextChanged ();
50
- }
51
- });
52
-
53
- bubble->layerOrderChanged ().connect ([this ](int ) { emit bubbleLayerChanged (); });
54
- }
22
+ if (m_sprite)
23
+ setupTextBubble (m_sprite->bubble ());
55
24
}
56
25
57
26
void SpriteModel::deinitClone ()
@@ -66,184 +35,119 @@ void SpriteModel::onCloned(libscratchcpp::Sprite *clone)
66
35
67
36
SpriteModel *cloneModel = new SpriteModel (m_cloneRoot);
68
37
cloneModel->m_cloneRoot = m_cloneRoot;
69
- cloneModel->m_penLayer = m_penLayer ;
70
- cloneModel->m_penState = m_penState ;
38
+ cloneModel->setPenLayer ( penLayer ()) ;
39
+ cloneModel->penState () = penState () ;
71
40
clone->setInterface (cloneModel);
72
41
emit cloned (cloneModel);
73
42
}
74
43
75
44
void SpriteModel::onCostumeChanged (libscratchcpp::Costume *costume)
76
45
{
77
- if (m_renderedTarget)
78
- m_renderedTarget->updateCostume (costume);
46
+ updateCostume (costume);
79
47
}
80
48
81
49
void SpriteModel::onVisibleChanged (bool visible)
82
50
{
83
- if (m_renderedTarget)
84
- m_renderedTarget->updateVisibility (visible);
51
+ updateVisibility (visible);
85
52
}
86
53
87
54
void SpriteModel::onXChanged (double x)
88
55
{
89
- if (m_renderedTarget)
90
- m_renderedTarget->updateX (x);
56
+ updateX (x);
91
57
}
92
58
93
59
void SpriteModel::onYChanged (double y)
94
60
{
95
- if (m_renderedTarget)
96
- m_renderedTarget->updateY (y);
61
+ updateY (y);
97
62
}
98
63
99
64
void SpriteModel::onMoved (double oldX, double oldY, double newX, double newY)
100
65
{
101
- if (m_penState.penDown && m_penLayer) {
102
- m_penLayer->drawLine (m_penState.penAttributes , oldX, oldY, newX, newY);
103
- libscratchcpp::IEngine *engine = m_sprite->engine ();
104
-
105
- if (engine)
106
- engine->requestRedraw ();
107
- }
66
+ TargetModel::onMoved (oldX, oldY, newX, newY);
108
67
}
109
68
110
69
void SpriteModel::onSizeChanged (double size)
111
70
{
112
- if (m_renderedTarget)
113
- m_renderedTarget->updateSize (size);
71
+ updateSize (size);
114
72
}
115
73
116
74
void SpriteModel::onDirectionChanged (double direction)
117
75
{
118
- if (m_renderedTarget)
119
- m_renderedTarget->updateDirection (direction);
76
+ updateDirection (direction);
120
77
}
121
78
122
79
void SpriteModel::onRotationStyleChanged (libscratchcpp::Sprite::RotationStyle rotationStyle)
123
80
{
124
- if (m_renderedTarget)
125
- m_renderedTarget->updateRotationStyle (rotationStyle);
81
+ updateRotationStyle (rotationStyle);
126
82
}
127
83
128
84
void SpriteModel::onLayerOrderChanged (int layerOrder)
129
85
{
130
- if (m_renderedTarget)
131
- m_renderedTarget->updateLayerOrder (layerOrder);
86
+ updateLayerOrder (layerOrder);
132
87
}
133
88
134
89
void SpriteModel::onGraphicsEffectChanged (libscratchcpp::IGraphicsEffect *effect, double value)
135
90
{
136
- GraphicsEffect *graphicsEffect = dynamic_cast <GraphicsEffect *>(effect);
137
-
138
- if (graphicsEffect && m_renderedTarget)
139
- m_renderedTarget->setGraphicEffect (graphicsEffect->effect (), value);
91
+ setGraphicEffect (effect, value);
140
92
}
141
93
142
94
void SpriteModel::onGraphicsEffectsCleared ()
143
95
{
144
- if (m_renderedTarget)
145
- m_renderedTarget->clearGraphicEffects ();
96
+ clearGraphicEffects ();
146
97
}
147
98
148
99
int SpriteModel::costumeWidth () const
149
100
{
150
- return m_renderedTarget-> costumeWidth ();
101
+ return TargetModel:: costumeWidth ();
151
102
}
152
103
153
104
int SpriteModel::costumeHeight () const
154
105
{
155
- return m_renderedTarget-> costumeHeight ();
106
+ return TargetModel:: costumeHeight ();
156
107
}
157
108
158
109
libscratchcpp::Rect SpriteModel::boundingRect () const
159
110
{
160
- return m_renderedTarget->getBounds ();
111
+ libscratchcpp::Rect ret;
112
+ getBoundingRect (ret);
113
+ return ret;
161
114
}
162
115
163
116
libscratchcpp::Rect SpriteModel::fastBoundingRect () const
164
117
{
165
- return m_renderedTarget->getFastBounds ();
118
+ libscratchcpp::Rect ret;
119
+ getFastBoundingRect (ret);
120
+ return ret;
166
121
}
167
122
168
123
bool SpriteModel::touchingClones (const std::vector<libscratchcpp::Sprite *> &clones) const
169
124
{
170
- return m_renderedTarget-> touchingClones (clones);
125
+ return TargetModel:: touchingClones (clones);
171
126
}
172
127
173
128
bool SpriteModel::touchingPoint (double x, double y) const
174
129
{
175
- return m_renderedTarget-> containsScratchPoint (x, y);
130
+ return TargetModel::touchingPoint (x, y);
176
131
}
177
132
178
133
bool SpriteModel::touchingColor (libscratchcpp::Rgb color) const
179
134
{
180
- return m_renderedTarget-> touchingColor (color);
135
+ return TargetModel:: touchingColor (color);
181
136
}
182
137
183
138
bool SpriteModel::touchingColor (libscratchcpp::Rgb color, libscratchcpp::Rgb mask) const
184
139
{
185
- return m_renderedTarget-> touchingColor (color, mask);
140
+ return TargetModel:: touchingColor (color, mask);
186
141
}
187
142
188
143
libscratchcpp::Sprite *SpriteModel::sprite () const
189
144
{
190
145
return m_sprite;
191
146
}
192
147
193
- IRenderedTarget *SpriteModel::renderedTarget () const
194
- {
195
- return m_renderedTarget;
196
- }
197
-
198
- void SpriteModel::setRenderedTarget (IRenderedTarget *newRenderedTarget)
199
- {
200
- if (m_renderedTarget == newRenderedTarget)
201
- return ;
202
-
203
- m_renderedTarget = newRenderedTarget;
204
- emit renderedTargetChanged ();
205
- }
206
-
207
- IPenLayer *SpriteModel::penLayer () const
208
- {
209
- return m_penLayer;
210
- }
211
-
212
- void SpriteModel::setPenLayer (IPenLayer *newPenLayer)
213
- {
214
- if (m_penLayer == newPenLayer)
215
- return ;
216
-
217
- m_penLayer = newPenLayer;
218
- emit penLayerChanged ();
219
- }
220
-
221
- PenState &SpriteModel::penState ()
222
- {
223
- return m_penState;
224
- }
225
-
226
- PenAttributes &SpriteModel::penAttributes ()
227
- {
228
- return m_penState.penAttributes ;
229
- }
230
-
231
- bool SpriteModel::penDown () const
232
- {
233
- return m_penState.penDown ;
234
- }
235
-
236
- void SpriteModel::setPenDown (bool newPenDown)
148
+ int SpriteModel::bubbleLayer () const
237
149
{
238
- m_penState.penDown = newPenDown;
239
-
240
- if (m_penState.penDown && m_penLayer && m_sprite) {
241
- m_penLayer->drawPoint (m_penState.penAttributes , m_sprite->x (), m_sprite->y ());
242
- libscratchcpp::IEngine *engine = m_sprite->engine ();
243
-
244
- if (engine)
245
- engine->requestRedraw ();
246
- }
150
+ return m_sprite ? m_sprite->bubble ()->layerOrder () : 0 ;
247
151
}
248
152
249
153
SpriteModel *SpriteModel::cloneRoot () const
@@ -254,19 +158,26 @@ SpriteModel *SpriteModel::cloneRoot() const
254
158
return m_cloneRoot;
255
159
}
256
160
257
- const TextBubbleShape::Type & SpriteModel::bubbleType () const
161
+ void SpriteModel::loadCostume ()
258
162
{
259
- return m_bubbleType;
163
+ if (m_sprite)
164
+ updateCostume (m_sprite->currentCostume ().get ());
260
165
}
261
166
262
- const QString & SpriteModel::bubbleText () const
167
+ void SpriteModel::drawPenPoint (IPenLayer *penLayer, const PenAttributes &penAttributes)
263
168
{
264
- return m_bubbleText;
169
+ penLayer->drawPoint (penAttributes, m_sprite->x (), m_sprite->y ());
170
+ libscratchcpp::IEngine *engine = m_sprite->engine ();
171
+
172
+ if (engine)
173
+ engine->requestRedraw ();
265
174
}
266
175
267
- int SpriteModel::bubbleLayer () const
176
+ void SpriteModel::drawPenLine (IPenLayer *penLayer, const PenAttributes &penAttributes, double x0, double y0, double x1, double y1)
268
177
{
269
- return m_sprite ? m_sprite-> bubble ()-> layerOrder () : 0 ;
270
- }
178
+ penLayer-> drawLine (penAttributes, x0, y0 , x1, y1 ) ;
179
+ libscratchcpp::IEngine *engine = m_sprite-> engine ();
271
180
272
- } // namespace scratchcpprender
181
+ if (engine)
182
+ engine->requestRedraw ();
183
+ }
0 commit comments