Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions include/scratchcpp/ispritehandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ class LIBSCRATCHCPP_EXPORT ISpriteHandler
/*! Called when the rotation style changes. */
virtual void onRotationStyleChanged(Sprite::RotationStyle rotationStyle) = 0;

/*! Called when the layer order changes. */
virtual void onLayerOrderChanged(int layerOrder) = 0;

/*!
* Called when the value of the given graphics effect changes.
* \note This method isn't called when all effects are cleared, use onGraphicsEffectsCleared() for this.
Expand Down
2 changes: 2 additions & 0 deletions include/scratchcpp/sprite.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ class LIBSCRATCHCPP_EXPORT Sprite
void setRotationStyle(const std::string &newRotationStyle);
void setRotationStyle(const char *newRotationStyle);

void setLayerOrder(int newLayerOrder) override;

Rect boundingRect() const;
void keepInFence(double newX, double newY, double *fencedX, double *fencedY) const;

Expand Down
2 changes: 1 addition & 1 deletion include/scratchcpp/target.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class LIBSCRATCHCPP_EXPORT Target
int findSound(const std::string &soundName) const;

int layerOrder() const;
void setLayerOrder(int newLayerOrder);
virtual void setLayerOrder(int newLayerOrder);

double volume() const;
void setVolume(double newVolume);
Expand Down
9 changes: 9 additions & 0 deletions src/scratch/sprite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,15 @@ void Sprite::setRotationStyle(const char *newRotationStyle)
setRotationStyle(std::string(newRotationStyle));
}

/*! Overrides Target#setLayerOrder(). */
void Sprite::setLayerOrder(int newLayerOrder)
{
Target::setLayerOrder(newLayerOrder);

if (impl->iface)
impl->iface->onLayerOrderChanged(newLayerOrder);
}

/*! Returns the bounding rectangle of the sprite. */
Rect Sprite::boundingRect() const
{
Expand Down
1 change: 1 addition & 0 deletions test/mocks/spritehandlermock.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class SpriteHandlerMock : public ISpriteHandler
MOCK_METHOD(void, onSizeChanged, (double), (override));
MOCK_METHOD(void, onDirectionChanged, (double), (override));
MOCK_METHOD(void, onRotationStyleChanged, (Sprite::RotationStyle), (override));
MOCK_METHOD(void, onLayerOrderChanged, (int), (override));
MOCK_METHOD(void, onGraphicsEffectChanged, (IGraphicsEffect *, double), (override));
MOCK_METHOD(void, onGraphicsEffectsCleared, (), (override));

Expand Down
8 changes: 8 additions & 0 deletions test/scratch_classes/sprite_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,14 @@ TEST(SpriteTest, RotationStyle)
ASSERT_EQ(sprite.rotationStyleStr(), "all around");
}

TEST(SpriteTest, LayerOrder)
{
Sprite sprite;
ASSERT_EQ(sprite.layerOrder(), 0);
sprite.setLayerOrder(2);
ASSERT_EQ(sprite.layerOrder(), 2);
}

TEST(SpriteTest, KeepInFence)
{
Sprite sprite;
Expand Down
8 changes: 8 additions & 0 deletions test/scratch_classes/stage_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,3 +128,11 @@ TEST(StageTest, GraphicsEffects)
ASSERT_EQ(stage.graphicsEffectValue(&effect1), 0);
ASSERT_EQ(stage.graphicsEffectValue(&effect2), 0);
}

TEST(StageTest, LayerOrder)
{
Stage stage;
ASSERT_EQ(stage.layerOrder(), 0);
stage.setLayerOrder(2);
ASSERT_EQ(stage.layerOrder(), 2);
}
6 changes: 6 additions & 0 deletions test/target_interfaces/ispritehandler_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,12 @@ TEST_F(ISpriteHandlerTest, RotationStyle)
m_sprite.setRotationStyle(Sprite::RotationStyle::LeftRight);
}

TEST_F(ISpriteHandlerTest, LayerOrder)
{
EXPECT_CALL(m_handler, onLayerOrderChanged(7)).Times(1);
m_sprite.setLayerOrder(7);
}

TEST_F(ISpriteHandlerTest, Costume)
{
auto costume1 = std::make_shared<Costume>("", "", "");
Expand Down