Skip to content

Commit a2b247d

Browse files
authored
Merge pull request #404 from scratchcpp/ispritehandler_onlayerorderchanged
Add onLayerOrderChanged() method to ISpriteHandler
2 parents 82bcc88 + 8ff1670 commit a2b247d

File tree

8 files changed

+38
-1
lines changed

8 files changed

+38
-1
lines changed

include/scratchcpp/ispritehandler.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ class LIBSCRATCHCPP_EXPORT ISpriteHandler
4444
/*! Called when the rotation style changes. */
4545
virtual void onRotationStyleChanged(Sprite::RotationStyle rotationStyle) = 0;
4646

47+
/*! Called when the layer order changes. */
48+
virtual void onLayerOrderChanged(int layerOrder) = 0;
49+
4750
/*!
4851
* Called when the value of the given graphics effect changes.
4952
* \note This method isn't called when all effects are cleared, use onGraphicsEffectsCleared() for this.

include/scratchcpp/sprite.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ class LIBSCRATCHCPP_EXPORT Sprite
6464
void setRotationStyle(const std::string &newRotationStyle);
6565
void setRotationStyle(const char *newRotationStyle);
6666

67+
void setLayerOrder(int newLayerOrder) override;
68+
6769
Rect boundingRect() const;
6870
void keepInFence(double newX, double newY, double *fencedX, double *fencedY) const;
6971

include/scratchcpp/target.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class LIBSCRATCHCPP_EXPORT Target
7373
int findSound(const std::string &soundName) const;
7474

7575
int layerOrder() const;
76-
void setLayerOrder(int newLayerOrder);
76+
virtual void setLayerOrder(int newLayerOrder);
7777

7878
double volume() const;
7979
void setVolume(double newVolume);

src/scratch/sprite.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,15 @@ void Sprite::setRotationStyle(const char *newRotationStyle)
315315
setRotationStyle(std::string(newRotationStyle));
316316
}
317317

318+
/*! Overrides Target#setLayerOrder(). */
319+
void Sprite::setLayerOrder(int newLayerOrder)
320+
{
321+
Target::setLayerOrder(newLayerOrder);
322+
323+
if (impl->iface)
324+
impl->iface->onLayerOrderChanged(newLayerOrder);
325+
}
326+
318327
/*! Returns the bounding rectangle of the sprite. */
319328
Rect Sprite::boundingRect() const
320329
{

test/mocks/spritehandlermock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class SpriteHandlerMock : public ISpriteHandler
2121
MOCK_METHOD(void, onSizeChanged, (double), (override));
2222
MOCK_METHOD(void, onDirectionChanged, (double), (override));
2323
MOCK_METHOD(void, onRotationStyleChanged, (Sprite::RotationStyle), (override));
24+
MOCK_METHOD(void, onLayerOrderChanged, (int), (override));
2425
MOCK_METHOD(void, onGraphicsEffectChanged, (IGraphicsEffect *, double), (override));
2526
MOCK_METHOD(void, onGraphicsEffectsCleared, (), (override));
2627

test/scratch_classes/sprite_test.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,14 @@ TEST(SpriteTest, RotationStyle)
493493
ASSERT_EQ(sprite.rotationStyleStr(), "all around");
494494
}
495495

496+
TEST(SpriteTest, LayerOrder)
497+
{
498+
Sprite sprite;
499+
ASSERT_EQ(sprite.layerOrder(), 0);
500+
sprite.setLayerOrder(2);
501+
ASSERT_EQ(sprite.layerOrder(), 2);
502+
}
503+
496504
TEST(SpriteTest, KeepInFence)
497505
{
498506
Sprite sprite;

test/scratch_classes/stage_test.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,11 @@ TEST(StageTest, GraphicsEffects)
128128
ASSERT_EQ(stage.graphicsEffectValue(&effect1), 0);
129129
ASSERT_EQ(stage.graphicsEffectValue(&effect2), 0);
130130
}
131+
132+
TEST(StageTest, LayerOrder)
133+
{
134+
Stage stage;
135+
ASSERT_EQ(stage.layerOrder(), 0);
136+
stage.setLayerOrder(2);
137+
ASSERT_EQ(stage.layerOrder(), 2);
138+
}

test/target_interfaces/ispritehandler_test.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ TEST_F(ISpriteHandlerTest, RotationStyle)
118118
m_sprite.setRotationStyle(Sprite::RotationStyle::LeftRight);
119119
}
120120

121+
TEST_F(ISpriteHandlerTest, LayerOrder)
122+
{
123+
EXPECT_CALL(m_handler, onLayerOrderChanged(7)).Times(1);
124+
m_sprite.setLayerOrder(7);
125+
}
126+
121127
TEST_F(ISpriteHandlerTest, Costume)
122128
{
123129
auto costume1 = std::make_shared<Costume>("", "", "");

0 commit comments

Comments
 (0)