@@ -2202,3 +2202,147 @@ TEST_F(PenBlocksTest, SetPenSizeTo_Stage)
22022202 thread->run ();
22032203 ASSERT_EQ (model.penAttributes ().diameter , 511.5 );
22042204}
2205+
2206+ TEST_F (PenBlocksTest, ChangePenShadeBy)
2207+ {
2208+ auto sprite = std::make_shared<Sprite>();
2209+ sprite->setEngine (&m_engineMock);
2210+
2211+ RenderedTarget renderedTarget;
2212+ SpriteModel model;
2213+ model.init (sprite.get ());
2214+ model.setRenderedTarget (&renderedTarget);
2215+ sprite->setInterface (&model);
2216+
2217+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2218+ builder.addBlock (" pen_changePenShadeBy" );
2219+ builder.addValueInput (" SHADE" , 49.2 );
2220+
2221+ PenState &penState = model.penState ();
2222+ penState.color = 60 ;
2223+ penState.saturation = 90 ;
2224+ penState.brightness = 75 ;
2225+ penState.shade = 13.8 ;
2226+ penState.updateColor ();
2227+
2228+ auto original = model.penAttributes ().color ;
2229+
2230+ auto thread = buildScript (builder, sprite.get ());
2231+
2232+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2233+ thread->run ();
2234+
2235+ EXPECT_EQ (model.penAttributes ().color .red (), 55 );
2236+ EXPECT_EQ (model.penAttributes ().color .green (), 135 );
2237+ EXPECT_EQ (model.penAttributes ().color .blue (), 255 );
2238+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2239+ EXPECT_EQ (model.penState ().shade , 63 );
2240+ }
2241+
2242+ TEST_F (PenBlocksTest, ChangePenShadeBy_OutOfRange)
2243+ {
2244+ auto sprite = std::make_shared<Sprite>();
2245+ sprite->setEngine (&m_engineMock);
2246+
2247+ RenderedTarget renderedTarget;
2248+ SpriteModel model;
2249+ model.init (sprite.get ());
2250+ model.setRenderedTarget (&renderedTarget);
2251+ sprite->setInterface (&model);
2252+
2253+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2254+ builder.addBlock (" pen_changePenShadeBy" );
2255+ builder.addValueInput (" SHADE" , 189.6 );
2256+
2257+ PenState &penState = model.penState ();
2258+ penState.color = 60 ;
2259+ penState.saturation = 90 ;
2260+ penState.brightness = 75 ;
2261+ penState.shade = 13.8 ;
2262+ penState.updateColor ();
2263+
2264+ auto original = model.penAttributes ().color ;
2265+
2266+ auto thread = buildScript (builder, sprite.get ());
2267+
2268+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2269+ thread->run ();
2270+
2271+ EXPECT_EQ (model.penAttributes ().color .red (), 0 );
2272+ EXPECT_EQ (model.penAttributes ().color .green (), 22 );
2273+ EXPECT_EQ (model.penAttributes ().color .blue (), 56 );
2274+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2275+ EXPECT_EQ (std::round (model.penState ().shade * 100 ) / 100 , 3.4 );
2276+ }
2277+
2278+ TEST_F (PenBlocksTest, ChangePenShadeBy_OutOfRange_Negative)
2279+ {
2280+ auto sprite = std::make_shared<Sprite>();
2281+ sprite->setEngine (&m_engineMock);
2282+
2283+ RenderedTarget renderedTarget;
2284+ SpriteModel model;
2285+ model.init (sprite.get ());
2286+ model.setRenderedTarget (&renderedTarget);
2287+ sprite->setInterface (&model);
2288+
2289+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2290+ builder.addBlock (" pen_changePenShadeBy" );
2291+ builder.addValueInput (" SHADE" , -25.3 );
2292+
2293+ PenState &penState = model.penState ();
2294+ penState.color = 60 ;
2295+ penState.saturation = 90 ;
2296+ penState.brightness = 75 ;
2297+ penState.shade = 13.8 ;
2298+ penState.updateColor ();
2299+
2300+ auto original = model.penAttributes ().color ;
2301+
2302+ auto thread = buildScript (builder, sprite.get ());
2303+
2304+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2305+ thread->run ();
2306+
2307+ EXPECT_EQ (model.penAttributes ().color .red (), 0 );
2308+ EXPECT_EQ (model.penAttributes ().color .green (), 36 );
2309+ EXPECT_EQ (model.penAttributes ().color .blue (), 91 );
2310+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2311+ EXPECT_EQ (model.penState ().shade , 188.5 );
2312+ }
2313+
2314+ TEST_F (PenBlocksTest, ChangePenShadeBy_Stage)
2315+ {
2316+ auto stage = std::make_shared<Stage>();
2317+ stage->setEngine (&m_engineMock);
2318+
2319+ RenderedTarget renderedTarget;
2320+ StageModel model;
2321+ model.init (stage.get ());
2322+ model.setRenderedTarget (&renderedTarget);
2323+ stage->setInterface (&model);
2324+
2325+ ScriptBuilder builder (m_extension.get (), m_engine, stage);
2326+ builder.addBlock (" pen_changePenShadeBy" );
2327+ builder.addValueInput (" SHADE" , 49.2 );
2328+
2329+ PenState &penState = model.penState ();
2330+ penState.color = 60 ;
2331+ penState.saturation = 90 ;
2332+ penState.brightness = 75 ;
2333+ penState.shade = 13.8 ;
2334+ penState.updateColor ();
2335+
2336+ auto original = model.penAttributes ().color ;
2337+
2338+ auto thread = buildScript (builder, stage.get ());
2339+
2340+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2341+ thread->run ();
2342+
2343+ EXPECT_EQ (model.penAttributes ().color .red (), 55 );
2344+ EXPECT_EQ (model.penAttributes ().color .green (), 135 );
2345+ EXPECT_EQ (model.penAttributes ().color .blue (), 255 );
2346+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2347+ EXPECT_EQ (model.penState ().shade , 63 );
2348+ }
0 commit comments