Skip to content

Commit 6c004ce

Browse files
committed
Clamp graphic effect values in Target
1 parent c95da82 commit 6c004ce

File tree

5 files changed

+39
-10
lines changed

5 files changed

+39
-10
lines changed

src/scratch/target.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,8 @@ double Target::graphicsEffectValue(IGraphicsEffect *effect) const
552552
/*! Sets the value of the given graphics effect. */
553553
void Target::setGraphicsEffectValue(IGraphicsEffect *effect, double value)
554554
{
555-
impl->graphicsEffects[effect] = value;
555+
assert(effect);
556+
impl->graphicsEffects[effect] = effect->clamp(value);
556557
}
557558

558559
/*! Sets the value of all graphics effects to 0 (clears them). */

test/blocks/looks_blocks_test.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
using namespace libscratchcpp;
2323

2424
using ::testing::Return;
25+
using ::testing::ReturnArg;
26+
using ::testing::_;
2527

2628
class LooksBlocksTest : public testing::Test
2729
{
@@ -857,6 +859,14 @@ static void initEffects()
857859
LooksBlocks::m_mosaicEffect = ScratchConfiguration::getGraphicsEffect("mosaic");
858860
LooksBlocks::m_brightnessEffect = ScratchConfiguration::getGraphicsEffect("brightness");
859861
LooksBlocks::m_ghostEffect = ScratchConfiguration::getGraphicsEffect("ghost");
862+
863+
EXPECT_CALL(*colorEffect, clamp(_)).WillRepeatedly(ReturnArg<0>());
864+
EXPECT_CALL(*fisheyeEffect, clamp(_)).WillRepeatedly(ReturnArg<0>());
865+
EXPECT_CALL(*whirlEffect, clamp(_)).WillRepeatedly(ReturnArg<0>());
866+
EXPECT_CALL(*pixelateEffect, clamp(_)).WillRepeatedly(ReturnArg<0>());
867+
EXPECT_CALL(*mosaicEffect, clamp(_)).WillRepeatedly(ReturnArg<0>());
868+
EXPECT_CALL(*brightnessEffect, clamp(_)).WillRepeatedly(ReturnArg<0>());
869+
EXPECT_CALL(*ghostEffect, clamp(_)).WillRepeatedly(ReturnArg<0>());
860870
}
861871

862872
static void removeEffects()
@@ -888,6 +898,8 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl)
888898
static Value constValues[] = { 0, 55.15, 1, -40.54, 1.2, 2.3, -3.4, -4.5, 0.5, -8.54, 0.01 };
889899

890900
GraphicsEffectMock effect1, effect2;
901+
EXPECT_CALL(effect1, clamp(_)).WillRepeatedly(ReturnArg<0>());
902+
EXPECT_CALL(effect2, clamp(_)).WillRepeatedly(ReturnArg<0>());
891903

892904
Target target;
893905
target.setGraphicsEffectValue(&effect1, 12.5);
@@ -1164,6 +1176,8 @@ TEST_F(LooksBlocksTest, SetEffectToImpl)
11641176
static Value constValues[] = { 0, 55.15, 1, -40.54, 1.2, 2.3, -3.4, -4.5, 0.5, -8.54, 0.01 };
11651177

11661178
GraphicsEffectMock effect1, effect2;
1179+
EXPECT_CALL(effect1, clamp(_)).WillRepeatedly(ReturnArg<0>());
1180+
EXPECT_CALL(effect2, clamp(_)).WillRepeatedly(ReturnArg<0>());
11671181

11681182
Target target;
11691183
target.setGraphicsEffectValue(&effect1, 12.5);
@@ -1283,6 +1297,8 @@ TEST_F(LooksBlocksTest, ClearGraphicEffectsImpl)
12831297

12841298
Target target;
12851299
GraphicsEffectMock effect1, effect2;
1300+
EXPECT_CALL(effect1, clamp(_)).WillRepeatedly(ReturnArg<0>());
1301+
EXPECT_CALL(effect2, clamp(_)).WillRepeatedly(ReturnArg<0>());
12861302
target.setGraphicsEffectValue(&effect1, 48.21);
12871303
target.setGraphicsEffectValue(&effect2, -107.08);
12881304

test/scratch_classes/sprite_test.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -853,24 +853,22 @@ TEST(SpriteTest, GraphicsEffects)
853853

854854
EngineMock engine;
855855
sprite.setEngine(&engine);
856-
EXPECT_CALL(engine, requestRedraw()).Times(3);
856+
EXPECT_CALL(engine, requestRedraw()).Times(4);
857857

858858
GraphicsEffectMock effect1, effect2;
859+
EXPECT_CALL(effect1, clamp(48.21)).WillOnce(Return(48.21));
859860
sprite.setGraphicsEffectValue(&effect1, 48.21);
860861
ASSERT_EQ(sprite.graphicsEffectValue(&effect1), 48.21);
861862
ASSERT_EQ(sprite.graphicsEffectValue(&effect2), 0);
862863

864+
EXPECT_CALL(effect2, clamp(-107.08)).WillOnce(Return(-107.08));
863865
sprite.setGraphicsEffectValue(&effect2, -107.08);
864866
ASSERT_EQ(sprite.graphicsEffectValue(&effect1), 48.21);
865867
ASSERT_EQ(sprite.graphicsEffectValue(&effect2), -107.08);
866868

867-
sprite.clearGraphicsEffects();
868-
ASSERT_EQ(sprite.graphicsEffectValue(&effect1), 0);
869-
ASSERT_EQ(sprite.graphicsEffectValue(&effect2), 0);
870-
871-
sprite.setVisible(false);
872-
sprite.setGraphicsEffectValue(&effect2, -107.08);
873-
ASSERT_EQ(sprite.graphicsEffectValue(&effect1), 0);
869+
EXPECT_CALL(effect1, clamp(300)).WillOnce(Return(101.5));
870+
sprite.setGraphicsEffectValue(&effect1, 300);
871+
ASSERT_EQ(sprite.graphicsEffectValue(&effect1), 101.5);
874872
ASSERT_EQ(sprite.graphicsEffectValue(&effect2), -107.08);
875873

876874
sprite.clearGraphicsEffects();

test/scratch_classes/stage_test.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,17 +248,24 @@ TEST(StageTest, GraphicsEffects)
248248

249249
EngineMock engine;
250250
stage.setEngine(&engine);
251-
EXPECT_CALL(engine, requestRedraw()).Times(3);
251+
EXPECT_CALL(engine, requestRedraw()).Times(4);
252252

253253
GraphicsEffectMock effect1, effect2;
254+
EXPECT_CALL(effect1, clamp(48.21)).WillOnce(Return(48.21));
254255
stage.setGraphicsEffectValue(&effect1, 48.21);
255256
ASSERT_EQ(stage.graphicsEffectValue(&effect1), 48.21);
256257
ASSERT_EQ(stage.graphicsEffectValue(&effect2), 0);
257258

259+
EXPECT_CALL(effect2, clamp(-107.08)).WillOnce(Return(-107.08));
258260
stage.setGraphicsEffectValue(&effect2, -107.08);
259261
ASSERT_EQ(stage.graphicsEffectValue(&effect1), 48.21);
260262
ASSERT_EQ(stage.graphicsEffectValue(&effect2), -107.08);
261263

264+
EXPECT_CALL(effect1, clamp(300)).WillOnce(Return(101.5));
265+
stage.setGraphicsEffectValue(&effect1, 300);
266+
ASSERT_EQ(stage.graphicsEffectValue(&effect1), 101.5);
267+
ASSERT_EQ(stage.graphicsEffectValue(&effect2), -107.08);
268+
262269
stage.clearGraphicsEffects();
263270
ASSERT_EQ(stage.graphicsEffectValue(&effect1), 0);
264271
ASSERT_EQ(stage.graphicsEffectValue(&effect2), 0);

test/scratch_classes/target_test.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,14 +750,21 @@ TEST(TargetTest, GraphicsEffects)
750750
target.setEngine(&engine);
751751

752752
GraphicsEffectMock effect1, effect2;
753+
EXPECT_CALL(effect1, clamp(48.21)).WillOnce(Return(48.21));
753754
target.setGraphicsEffectValue(&effect1, 48.21);
754755
ASSERT_EQ(target.graphicsEffectValue(&effect1), 48.21);
755756
ASSERT_EQ(target.graphicsEffectValue(&effect2), 0);
756757

758+
EXPECT_CALL(effect2, clamp(-107.08)).WillOnce(Return(-107.08));
757759
target.setGraphicsEffectValue(&effect2, -107.08);
758760
ASSERT_EQ(target.graphicsEffectValue(&effect1), 48.21);
759761
ASSERT_EQ(target.graphicsEffectValue(&effect2), -107.08);
760762

763+
EXPECT_CALL(effect1, clamp(300)).WillOnce(Return(101.5));
764+
target.setGraphicsEffectValue(&effect1, 300);
765+
ASSERT_EQ(target.graphicsEffectValue(&effect1), 101.5);
766+
ASSERT_EQ(target.graphicsEffectValue(&effect2), -107.08);
767+
761768
target.clearGraphicsEffects();
762769
ASSERT_EQ(target.graphicsEffectValue(&effect1), 0);
763770
ASSERT_EQ(target.graphicsEffectValue(&effect2), 0);

0 commit comments

Comments
 (0)