Skip to content

Commit 21105d5

Browse files
committed
Add graphics effect methods to IStageHandler
1 parent ca60d5a commit 21105d5

File tree

4 files changed

+36
-0
lines changed

4 files changed

+36
-0
lines changed

include/scratchcpp/istagehandler.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ class LIBSCRATCHCPP_EXPORT IStageHandler
2828

2929
/*! Called when the video transparency changes. */
3030
virtual void onVideoTransparencyChanged(int videoTransparency) = 0;
31+
32+
/*!
33+
* Called when the value of the given graphics effect changes.
34+
* \note This method isn't called when all effects are cleared, use onGraphicsEffectsCleared() for this.
35+
*/
36+
virtual void onGraphicsEffectChanged(IGraphicsEffect *effect, double value) = 0;
37+
38+
/*! Called when all graphics effects are cleared. */
39+
virtual void onGraphicsEffectsCleared() = 0;
3140
};
3241

3342
} // namespace libscratchcpp

src/scratch/stage.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ void Stage::setGraphicsEffectValue(IGraphicsEffect *effect, double value)
133133

134134
if (eng)
135135
eng->requestRedraw();
136+
137+
if (impl->iface)
138+
impl->iface->onGraphicsEffectChanged(effect, value);
136139
}
137140

138141
/*! Overrides Target#clearGraphicsEffects(). */
@@ -143,4 +146,7 @@ void Stage::clearGraphicsEffects()
143146

144147
if (eng)
145148
eng->requestRedraw();
149+
150+
if (impl->iface)
151+
impl->iface->onGraphicsEffectsCleared();
146152
}

test/mocks/stagehandlermock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ class StageHandlerMock : public IStageHandler
1515
MOCK_METHOD(void, onTempoChanged, (int), (override));
1616
MOCK_METHOD(void, onVideoStateChanged, (Stage::VideoState), (override));
1717
MOCK_METHOD(void, onVideoTransparencyChanged, (int), (override));
18+
MOCK_METHOD(void, onGraphicsEffectChanged, (IGraphicsEffect *, double), (override));
19+
MOCK_METHOD(void, onGraphicsEffectsCleared, (), (override));
1820
};

test/target_interfaces/istagehandler_test.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include <scratchcpp/stage.h>
22
#include <scratchcpp/costume.h>
33
#include <stagehandlermock.h>
4+
#include <enginemock.h>
5+
#include <graphicseffectmock.h>
46

57
#include "../common.h"
68

@@ -13,10 +15,12 @@ class IStageHandlerTest : public testing::Test
1315
{
1416
EXPECT_CALL(m_handler, init(&m_stage)).Times(1);
1517
m_stage.setInterface(&m_handler);
18+
m_stage.setEngine(&m_engine);
1619
}
1720

1821
Stage m_stage;
1922
StageHandlerMock m_handler;
23+
EngineMock m_engine;
2024
};
2125

2226
TEST_F(IStageHandlerTest, Tempo)
@@ -42,8 +46,23 @@ TEST_F(IStageHandlerTest, Costume)
4246
m_stage.addCostume(costume2);
4347

4448
EXPECT_CALL(m_handler, onCostumeChanged(costume1.get()));
49+
EXPECT_CALL(m_engine, requestRedraw());
4550
m_stage.setCostumeIndex(0);
4651

4752
EXPECT_CALL(m_handler, onCostumeChanged(costume2.get()));
53+
EXPECT_CALL(m_engine, requestRedraw());
4854
m_stage.setCostumeIndex(1);
4955
}
56+
57+
TEST_F(IStageHandlerTest, GraphicsEffects)
58+
{
59+
GraphicsEffectMock effect;
60+
61+
EXPECT_CALL(m_handler, onGraphicsEffectChanged(&effect, 16.7));
62+
EXPECT_CALL(m_engine, requestRedraw());
63+
m_stage.setGraphicsEffectValue(&effect, 16.7);
64+
65+
EXPECT_CALL(m_handler, onGraphicsEffectsCleared());
66+
EXPECT_CALL(m_engine, requestRedraw());
67+
m_stage.clearGraphicsEffects();
68+
}

0 commit comments

Comments
 (0)