Skip to content

Commit 2e48d29

Browse files
committed
Add bubble change methods to ISpriteHandler
1 parent 7cbc2ec commit 2e48d29

File tree

6 files changed

+76
-0
lines changed

6 files changed

+76
-0
lines changed

include/scratchcpp/ispritehandler.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ class LIBSCRATCHCPP_EXPORT ISpriteHandler
5959
/*! Called when all graphics effects are cleared. */
6060
virtual void onGraphicsEffectsCleared() = 0;
6161

62+
/*! Called when the bubble type changes. */
63+
virtual void onBubbleTypeChanged(Target::BubbleType type) = 0;
64+
65+
/*! Called when the bubble text changes. */
66+
virtual void onBubbleTextChanged(const std::string &text) = 0;
67+
6268
/*!
6369
* Used to get the bounding rectangle of the sprite.
6470
* \note The rectangle must be relative to the stage, so make sure to use the sprite's coordinates.

include/scratchcpp/sprite.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ class LIBSCRATCHCPP_EXPORT Sprite
7676

7777
void clearGraphicsEffects() override;
7878

79+
virtual void setBubbleType(Target::BubbleType type) override;
80+
virtual void setBubbleText(const std::string &text) override;
81+
7982
private:
8083
Target *dataSource() const override;
8184
void setXY(double x, double y);

src/scratch/sprite.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,31 @@ void Sprite::clearGraphicsEffects()
429429
impl->iface->onGraphicsEffectsCleared();
430430
}
431431

432+
/*! Overrides Target#setBubbleType(). */
433+
void Sprite::setBubbleType(BubbleType type)
434+
{
435+
Target::setBubbleType(type);
436+
437+
if (impl->iface)
438+
impl->iface->onBubbleTypeChanged(type);
439+
}
440+
441+
/*! Overrides Target#setBubbleText(). */
442+
void Sprite::setBubbleText(const std::string &text)
443+
{
444+
Target::setBubbleText(text);
445+
446+
if (impl->visible && !text.empty()) {
447+
IEngine *eng = engine();
448+
449+
if (eng)
450+
eng->requestRedraw();
451+
}
452+
453+
if (impl->iface)
454+
impl->iface->onBubbleTextChanged(text);
455+
}
456+
432457
Target *Sprite::dataSource() const
433458
{
434459
return impl->cloneSprite;

test/mocks/spritehandlermock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ class SpriteHandlerMock : public ISpriteHandler
2525
MOCK_METHOD(void, onLayerOrderChanged, (int), (override));
2626
MOCK_METHOD(void, onGraphicsEffectChanged, (IGraphicsEffect *, double), (override));
2727
MOCK_METHOD(void, onGraphicsEffectsCleared, (), (override));
28+
MOCK_METHOD(void, onBubbleTypeChanged, (Target::BubbleType), (override));
29+
MOCK_METHOD(void, onBubbleTextChanged, (const std::string &), (override));
2830

2931
MOCK_METHOD(Rect, boundingRect, (), (const, override));
3032
};

test/scratch_classes/sprite_test.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,3 +632,27 @@ TEST(SpriteTest, GraphicsEffects)
632632
ASSERT_EQ(sprite.graphicsEffectValue(&effect1), 0);
633633
ASSERT_EQ(sprite.graphicsEffectValue(&effect2), 0);
634634
}
635+
636+
TEST(SpriteTest, BubbleType)
637+
{
638+
Sprite sprite;
639+
ASSERT_EQ(sprite.bubbleType(), Target::BubbleType::Say);
640+
641+
sprite.setBubbleType(Target::BubbleType::Think);
642+
ASSERT_EQ(sprite.bubbleType(), Target::BubbleType::Think);
643+
644+
sprite.setBubbleType(Target::BubbleType::Say);
645+
ASSERT_EQ(sprite.bubbleType(), Target::BubbleType::Say);
646+
}
647+
648+
TEST(SpriteTest, BubbleText)
649+
{
650+
Sprite sprite;
651+
ASSERT_TRUE(sprite.bubbleText().empty());
652+
653+
sprite.setBubbleText("hello");
654+
ASSERT_EQ(sprite.bubbleText(), "hello");
655+
656+
sprite.setBubbleText("world");
657+
ASSERT_EQ(sprite.bubbleText(), "world");
658+
}

test/target_interfaces/ispritehandler_test.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,22 @@ TEST_F(ISpriteHandlerTest, GraphicsEffects)
174174
m_sprite.clearGraphicsEffects();
175175
}
176176

177+
TEST_F(ISpriteHandlerTest, BubbleType)
178+
{
179+
EXPECT_CALL(m_handler, onBubbleTypeChanged(Target::BubbleType::Say));
180+
m_sprite.setBubbleType(Target::BubbleType::Say);
181+
182+
EXPECT_CALL(m_handler, onBubbleTypeChanged(Target::BubbleType::Think));
183+
m_sprite.setBubbleType(Target::BubbleType::Think);
184+
}
185+
186+
TEST_F(ISpriteHandlerTest, BubbleText)
187+
{
188+
EXPECT_CALL(m_handler, onBubbleTextChanged("test"));
189+
EXPECT_CALL(m_engine, requestRedraw());
190+
m_sprite.setBubbleText("test");
191+
}
192+
177193
TEST_F(ISpriteHandlerTest, BoundingRect)
178194
{
179195
EXPECT_CALL(m_handler, boundingRect()).WillOnce(Return(Rect(-44.6, 89.1, 20.5, -0.48)));

0 commit comments

Comments
 (0)