66#include < scratchcpp/textbubble.h>
77
88#include " spritemodel.h"
9- #include " renderedtarget.h"
10- #include " ipenlayer.h"
11- #include " graphicseffect.h"
9+ #include " penlayer.h"
1210
13- namespace scratchcpprender
14- {
11+ using namespace scratchcpprender ;
1512
1613SpriteModel::SpriteModel (QObject *parent) :
17- QObject (parent)
14+ TargetModel (parent)
1815{
1916}
2017
2118void SpriteModel::init (libscratchcpp::Sprite *sprite)
2219{
2320 m_sprite = sprite;
2421
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 ());
5524}
5625
5726void SpriteModel::deinitClone ()
@@ -66,184 +35,119 @@ void SpriteModel::onCloned(libscratchcpp::Sprite *clone)
6635
6736 SpriteModel *cloneModel = new SpriteModel (m_cloneRoot);
6837 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 () ;
7140 clone->setInterface (cloneModel);
7241 emit cloned (cloneModel);
7342}
7443
7544void SpriteModel::onCostumeChanged (libscratchcpp::Costume *costume)
7645{
77- if (m_renderedTarget)
78- m_renderedTarget->updateCostume (costume);
46+ updateCostume (costume);
7947}
8048
8149void SpriteModel::onVisibleChanged (bool visible)
8250{
83- if (m_renderedTarget)
84- m_renderedTarget->updateVisibility (visible);
51+ updateVisibility (visible);
8552}
8653
8754void SpriteModel::onXChanged (double x)
8855{
89- if (m_renderedTarget)
90- m_renderedTarget->updateX (x);
56+ updateX (x);
9157}
9258
9359void SpriteModel::onYChanged (double y)
9460{
95- if (m_renderedTarget)
96- m_renderedTarget->updateY (y);
61+ updateY (y);
9762}
9863
9964void SpriteModel::onMoved (double oldX, double oldY, double newX, double newY)
10065{
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);
10867}
10968
11069void SpriteModel::onSizeChanged (double size)
11170{
112- if (m_renderedTarget)
113- m_renderedTarget->updateSize (size);
71+ updateSize (size);
11472}
11573
11674void SpriteModel::onDirectionChanged (double direction)
11775{
118- if (m_renderedTarget)
119- m_renderedTarget->updateDirection (direction);
76+ updateDirection (direction);
12077}
12178
12279void SpriteModel::onRotationStyleChanged (libscratchcpp::Sprite::RotationStyle rotationStyle)
12380{
124- if (m_renderedTarget)
125- m_renderedTarget->updateRotationStyle (rotationStyle);
81+ updateRotationStyle (rotationStyle);
12682}
12783
12884void SpriteModel::onLayerOrderChanged (int layerOrder)
12985{
130- if (m_renderedTarget)
131- m_renderedTarget->updateLayerOrder (layerOrder);
86+ updateLayerOrder (layerOrder);
13287}
13388
13489void SpriteModel::onGraphicsEffectChanged (libscratchcpp::IGraphicsEffect *effect, double value)
13590{
136- GraphicsEffect *graphicsEffect = dynamic_cast <GraphicsEffect *>(effect);
137-
138- if (graphicsEffect && m_renderedTarget)
139- m_renderedTarget->setGraphicEffect (graphicsEffect->effect (), value);
91+ setGraphicEffect (effect, value);
14092}
14193
14294void SpriteModel::onGraphicsEffectsCleared ()
14395{
144- if (m_renderedTarget)
145- m_renderedTarget->clearGraphicEffects ();
96+ clearGraphicEffects ();
14697}
14798
14899int SpriteModel::costumeWidth () const
149100{
150- return m_renderedTarget-> costumeWidth ();
101+ return TargetModel:: costumeWidth ();
151102}
152103
153104int SpriteModel::costumeHeight () const
154105{
155- return m_renderedTarget-> costumeHeight ();
106+ return TargetModel:: costumeHeight ();
156107}
157108
158109libscratchcpp::Rect SpriteModel::boundingRect () const
159110{
160- return m_renderedTarget->getBounds ();
111+ libscratchcpp::Rect ret;
112+ getBoundingRect (ret);
113+ return ret;
161114}
162115
163116libscratchcpp::Rect SpriteModel::fastBoundingRect () const
164117{
165- return m_renderedTarget->getFastBounds ();
118+ libscratchcpp::Rect ret;
119+ getFastBoundingRect (ret);
120+ return ret;
166121}
167122
168123bool SpriteModel::touchingClones (const std::vector<libscratchcpp::Sprite *> &clones) const
169124{
170- return m_renderedTarget-> touchingClones (clones);
125+ return TargetModel:: touchingClones (clones);
171126}
172127
173128bool SpriteModel::touchingPoint (double x, double y) const
174129{
175- return m_renderedTarget-> containsScratchPoint (x, y);
130+ return TargetModel::touchingPoint (x, y);
176131}
177132
178133bool SpriteModel::touchingColor (libscratchcpp::Rgb color) const
179134{
180- return m_renderedTarget-> touchingColor (color);
135+ return TargetModel:: touchingColor (color);
181136}
182137
183138bool SpriteModel::touchingColor (libscratchcpp::Rgb color, libscratchcpp::Rgb mask) const
184139{
185- return m_renderedTarget-> touchingColor (color, mask);
140+ return TargetModel:: touchingColor (color, mask);
186141}
187142
188143libscratchcpp::Sprite *SpriteModel::sprite () const
189144{
190145 return m_sprite;
191146}
192147
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
237149{
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 ;
247151}
248152
249153SpriteModel *SpriteModel::cloneRoot () const
@@ -254,19 +158,26 @@ SpriteModel *SpriteModel::cloneRoot() const
254158 return m_cloneRoot;
255159}
256160
257- const TextBubbleShape::Type & SpriteModel::bubbleType () const
161+ void SpriteModel::loadCostume ()
258162{
259- return m_bubbleType;
163+ if (m_sprite)
164+ updateCostume (m_sprite->currentCostume ().get ());
260165}
261166
262- const QString & SpriteModel::bubbleText () const
167+ void SpriteModel::drawPenPoint (IPenLayer *penLayer, const PenAttributes &penAttributes)
263168{
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 ();
265174}
266175
267- int SpriteModel::bubbleLayer () const
176+ void SpriteModel::drawPenLine (IPenLayer *penLayer, const PenAttributes &penAttributes, double x0, double y0, double x1, double y1)
268177{
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 ();
271180
272- } // namespace scratchcpprender
181+ if (engine)
182+ engine->requestRedraw ();
183+ }
0 commit comments