Skip to content

Commit 60e9fc9

Browse files
committed
Add bubble change methods to IStageHandler
1 parent 2e48d29 commit 60e9fc9

File tree

6 files changed

+76
-0
lines changed

6 files changed

+76
-0
lines changed

include/scratchcpp/istagehandler.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ class LIBSCRATCHCPP_EXPORT IStageHandler
3737

3838
/*! Called when all graphics effects are cleared. */
3939
virtual void onGraphicsEffectsCleared() = 0;
40+
41+
/*! Called when the bubble type changes. */
42+
virtual void onBubbleTypeChanged(Target::BubbleType type) = 0;
43+
44+
/*! Called when the bubble text changes. */
45+
virtual void onBubbleTextChanged(const std::string &text) = 0;
4046
};
4147

4248
} // namespace libscratchcpp

include/scratchcpp/stage.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ class LIBSCRATCHCPP_EXPORT Stage : public Target
5252

5353
void clearGraphicsEffects() override;
5454

55+
virtual void setBubbleType(Target::BubbleType type) override;
56+
virtual void setBubbleText(const std::string &text) override;
57+
5558
private:
5659
spimpl::unique_impl_ptr<StagePrivate> impl;
5760
};

src/scratch/stage.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,28 @@ void Stage::clearGraphicsEffects()
156156
if (impl->iface)
157157
impl->iface->onGraphicsEffectsCleared();
158158
}
159+
160+
/*! Overrides Target#setBubbleType(). */
161+
void Stage::setBubbleType(BubbleType type)
162+
{
163+
Target::setBubbleType(type);
164+
165+
if (impl->iface)
166+
impl->iface->onBubbleTypeChanged(type);
167+
}
168+
169+
/*! Overrides Target#setBubbleText(). */
170+
void Stage::setBubbleText(const std::string &text)
171+
{
172+
Target::setBubbleText(text);
173+
174+
if (!text.empty()) {
175+
IEngine *eng = engine();
176+
177+
if (eng)
178+
eng->requestRedraw();
179+
}
180+
181+
if (impl->iface)
182+
impl->iface->onBubbleTextChanged(text);
183+
}

test/mocks/stagehandlermock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ class StageHandlerMock : public IStageHandler
1717
MOCK_METHOD(void, onVideoTransparencyChanged, (int), (override));
1818
MOCK_METHOD(void, onGraphicsEffectChanged, (IGraphicsEffect *, double), (override));
1919
MOCK_METHOD(void, onGraphicsEffectsCleared, (), (override));
20+
MOCK_METHOD(void, onBubbleTypeChanged, (Target::BubbleType), (override));
21+
MOCK_METHOD(void, onBubbleTextChanged, (const std::string &), (override));
2022
};

test/scratch_classes/stage_test.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,30 @@ TEST(StageTest, GraphicsEffects)
141141
ASSERT_EQ(stage.graphicsEffectValue(&effect2), 0);
142142
}
143143

144+
TEST(StageTest, BubbleType)
145+
{
146+
Stage stage;
147+
ASSERT_EQ(stage.bubbleType(), Target::BubbleType::Say);
148+
149+
stage.setBubbleType(Target::BubbleType::Think);
150+
ASSERT_EQ(stage.bubbleType(), Target::BubbleType::Think);
151+
152+
stage.setBubbleType(Target::BubbleType::Say);
153+
ASSERT_EQ(stage.bubbleType(), Target::BubbleType::Say);
154+
}
155+
156+
TEST(StageTest, BubbleText)
157+
{
158+
Stage stage;
159+
ASSERT_TRUE(stage.bubbleText().empty());
160+
161+
stage.setBubbleText("hello");
162+
ASSERT_EQ(stage.bubbleText(), "hello");
163+
164+
stage.setBubbleText("world");
165+
ASSERT_EQ(stage.bubbleText(), "world");
166+
}
167+
144168
TEST(StageTest, LayerOrder)
145169
{
146170
Stage stage;

test/target_interfaces/istagehandler_test.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,19 @@ TEST_F(IStageHandlerTest, GraphicsEffects)
6666
EXPECT_CALL(m_engine, requestRedraw());
6767
m_stage.clearGraphicsEffects();
6868
}
69+
70+
TEST_F(IStageHandlerTest, BubbleType)
71+
{
72+
EXPECT_CALL(m_handler, onBubbleTypeChanged(Target::BubbleType::Say));
73+
m_stage.setBubbleType(Target::BubbleType::Say);
74+
75+
EXPECT_CALL(m_handler, onBubbleTypeChanged(Target::BubbleType::Think));
76+
m_stage.setBubbleType(Target::BubbleType::Think);
77+
}
78+
79+
TEST_F(IStageHandlerTest, BubbleText)
80+
{
81+
EXPECT_CALL(m_handler, onBubbleTextChanged("test"));
82+
EXPECT_CALL(m_engine, requestRedraw());
83+
m_stage.setBubbleText("test");
84+
}

0 commit comments

Comments
 (0)