@@ -2346,3 +2346,147 @@ TEST_F(PenBlocksTest, ChangePenShadeBy_Stage)
23462346 EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
23472347 EXPECT_EQ (model.penState ().shade , 63 );
23482348}
2349+
2350+ TEST_F (PenBlocksTest, SetPenShadeTo)
2351+ {
2352+ auto sprite = std::make_shared<Sprite>();
2353+ sprite->setEngine (&m_engineMock);
2354+
2355+ RenderedTarget renderedTarget;
2356+ SpriteModel model;
2357+ model.init (sprite.get ());
2358+ model.setRenderedTarget (&renderedTarget);
2359+ sprite->setInterface (&model);
2360+
2361+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2362+ builder.addBlock (" pen_setPenShadeTo" );
2363+ builder.addValueInput (" SHADE" , 49.2 );
2364+
2365+ PenState &penState = model.penState ();
2366+ penState.color = 60 ;
2367+ penState.saturation = 90 ;
2368+ penState.brightness = 75 ;
2369+ penState.shade = 13.8 ;
2370+ penState.updateColor ();
2371+
2372+ auto original = model.penAttributes ().color ;
2373+
2374+ auto thread = buildScript (builder, sprite.get ());
2375+
2376+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2377+ thread->run ();
2378+
2379+ EXPECT_EQ (model.penAttributes ().color .red (), 0 );
2380+ EXPECT_EQ (model.penAttributes ().color .green (), 100 );
2381+ EXPECT_EQ (model.penAttributes ().color .blue (), 251 );
2382+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2383+ EXPECT_EQ (model.penState ().shade , 49.2 );
2384+ }
2385+
2386+ TEST_F (PenBlocksTest, SetPenShadeTo_OutOfRange)
2387+ {
2388+ auto sprite = std::make_shared<Sprite>();
2389+ sprite->setEngine (&m_engineMock);
2390+
2391+ RenderedTarget renderedTarget;
2392+ SpriteModel model;
2393+ model.init (sprite.get ());
2394+ model.setRenderedTarget (&renderedTarget);
2395+ sprite->setInterface (&model);
2396+
2397+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2398+ builder.addBlock (" pen_setPenShadeTo" );
2399+ builder.addValueInput (" SHADE" , 201.4 );
2400+
2401+ PenState &penState = model.penState ();
2402+ penState.color = 60 ;
2403+ penState.saturation = 90 ;
2404+ penState.brightness = 75 ;
2405+ penState.shade = 13.8 ;
2406+ penState.updateColor ();
2407+
2408+ auto original = model.penAttributes ().color ;
2409+
2410+ auto thread = buildScript (builder, sprite.get ());
2411+
2412+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2413+ thread->run ();
2414+
2415+ EXPECT_EQ (model.penAttributes ().color .red (), 0 );
2416+ EXPECT_EQ (model.penAttributes ().color .green (), 19 );
2417+ EXPECT_EQ (model.penAttributes ().color .blue (), 48 );
2418+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2419+ EXPECT_EQ (std::round (model.penState ().shade * 100 ) / 100 , 1.4 );
2420+ }
2421+
2422+ TEST_F (PenBlocksTest, SetPenShadeTo_OutOfRange_Negative)
2423+ {
2424+ auto sprite = std::make_shared<Sprite>();
2425+ sprite->setEngine (&m_engineMock);
2426+
2427+ RenderedTarget renderedTarget;
2428+ SpriteModel model;
2429+ model.init (sprite.get ());
2430+ model.setRenderedTarget (&renderedTarget);
2431+ sprite->setInterface (&model);
2432+
2433+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2434+ builder.addBlock (" pen_setPenShadeTo" );
2435+ builder.addValueInput (" SHADE" , -25.3 );
2436+
2437+ PenState &penState = model.penState ();
2438+ penState.color = 60 ;
2439+ penState.saturation = 90 ;
2440+ penState.brightness = 75 ;
2441+ penState.shade = 13.8 ;
2442+ penState.updateColor ();
2443+
2444+ auto original = model.penAttributes ().color ;
2445+
2446+ auto thread = buildScript (builder, sprite.get ());
2447+
2448+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2449+ thread->run ();
2450+
2451+ EXPECT_EQ (model.penAttributes ().color .red (), 0 );
2452+ EXPECT_EQ (model.penAttributes ().color .green (), 60 );
2453+ EXPECT_EQ (model.penAttributes ().color .blue (), 150 );
2454+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2455+ EXPECT_EQ (model.penState ().shade , 174.7 );
2456+ }
2457+
2458+ TEST_F (PenBlocksTest, SetPenShadeTo_Stage)
2459+ {
2460+ auto stage = std::make_shared<Stage>();
2461+ stage->setEngine (&m_engineMock);
2462+
2463+ RenderedTarget renderedTarget;
2464+ StageModel model;
2465+ model.init (stage.get ());
2466+ model.setRenderedTarget (&renderedTarget);
2467+ stage->setInterface (&model);
2468+
2469+ ScriptBuilder builder (m_extension.get (), m_engine, stage);
2470+ builder.addBlock (" pen_setPenShadeTo" );
2471+ builder.addValueInput (" SHADE" , 49.2 );
2472+
2473+ PenState &penState = model.penState ();
2474+ penState.color = 60 ;
2475+ penState.saturation = 90 ;
2476+ penState.brightness = 75 ;
2477+ penState.shade = 13.8 ;
2478+ penState.updateColor ();
2479+
2480+ auto original = model.penAttributes ().color ;
2481+
2482+ auto thread = buildScript (builder, stage.get ());
2483+
2484+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2485+ thread->run ();
2486+
2487+ EXPECT_EQ (model.penAttributes ().color .red (), 0 );
2488+ EXPECT_EQ (model.penAttributes ().color .green (), 100 );
2489+ EXPECT_EQ (model.penAttributes ().color .blue (), 251 );
2490+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2491+ EXPECT_EQ (model.penState ().shade , 49.2 );
2492+ }
0 commit comments