@@ -2490,3 +2490,184 @@ TEST_F(PenBlocksTest, SetPenShadeTo_Stage)
24902490 EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
24912491 EXPECT_EQ (model.penState ().shade , 49.2 );
24922492}
2493+
2494+ TEST_F (PenBlocksTest, ChangePenHueBy)
2495+ {
2496+ auto sprite = std::make_shared<Sprite>();
2497+ sprite->setEngine (&m_engineMock);
2498+
2499+ RenderedTarget renderedTarget;
2500+ SpriteModel model;
2501+ model.init (sprite.get ());
2502+ model.setRenderedTarget (&renderedTarget);
2503+ sprite->setInterface (&model);
2504+
2505+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2506+ builder.addBlock (" pen_changePenHueBy" );
2507+ builder.addValueInput (" HUE" , 49.2 );
2508+
2509+ PenState &penState = model.penState ();
2510+ penState.color = 60 ;
2511+ penState.saturation = 90 ;
2512+ penState.brightness = 75 ;
2513+ penState.shade = 18.5 ;
2514+ penState.updateColor ();
2515+
2516+ auto original = model.penAttributes ().color ;
2517+
2518+ auto thread = buildScript (builder, sprite.get ());
2519+
2520+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2521+ thread->run ();
2522+
2523+ EXPECT_EQ (model.penAttributes ().color .red (), 121 );
2524+ EXPECT_EQ (model.penAttributes ().color .green (), 0 );
2525+ EXPECT_EQ (model.penAttributes ().color .blue (), 113 );
2526+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2527+ EXPECT_EQ (model.penState ().shade , 18.5 );
2528+ }
2529+
2530+ TEST_F (PenBlocksTest, ChangePenHueBy_DoesNotChangeTransparency)
2531+ {
2532+ auto sprite = std::make_shared<Sprite>();
2533+ sprite->setEngine (&m_engineMock);
2534+
2535+ RenderedTarget renderedTarget;
2536+ SpriteModel model;
2537+ model.init (sprite.get ());
2538+ model.setRenderedTarget (&renderedTarget);
2539+ sprite->setInterface (&model);
2540+
2541+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2542+ builder.addBlock (" pen_changePenHueBy" );
2543+ builder.addValueInput (" HUE" , 49.2 );
2544+
2545+ PenState &penState = model.penState ();
2546+ penState.color = 60 ;
2547+ penState.saturation = 90 ;
2548+ penState.brightness = 75 ;
2549+ penState.shade = 18.5 ;
2550+ penState.transparency = 50 ;
2551+ penState.updateColor ();
2552+
2553+ auto original = model.penAttributes ().color ;
2554+
2555+ auto thread = buildScript (builder, sprite.get ());
2556+
2557+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2558+ thread->run ();
2559+
2560+ EXPECT_EQ (model.penAttributes ().color .red (), 121 );
2561+ EXPECT_EQ (model.penAttributes ().color .green (), 0 );
2562+ EXPECT_EQ (model.penAttributes ().color .blue (), 113 );
2563+ EXPECT_EQ (model.penAttributes ().color .alpha (), 127 );
2564+ EXPECT_EQ (model.penState ().transparency , 50 );
2565+ }
2566+
2567+ TEST_F (PenBlocksTest, ChangePenHueBy_OutOfRange)
2568+ {
2569+ auto sprite = std::make_shared<Sprite>();
2570+ sprite->setEngine (&m_engineMock);
2571+
2572+ RenderedTarget renderedTarget;
2573+ SpriteModel model;
2574+ model.init (sprite.get ());
2575+ model.setRenderedTarget (&renderedTarget);
2576+ sprite->setInterface (&model);
2577+
2578+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2579+ builder.addBlock (" pen_changePenHueBy" );
2580+ builder.addValueInput (" HUE" , 197.2 );
2581+
2582+ PenState &penState = model.penState ();
2583+ penState.color = 60 ;
2584+ penState.saturation = 90 ;
2585+ penState.brightness = 75 ;
2586+ penState.shade = 63.7 ;
2587+ penState.updateColor ();
2588+
2589+ auto original = model.penAttributes ().color ;
2590+
2591+ auto thread = buildScript (builder, sprite.get ());
2592+
2593+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2594+ thread->run ();
2595+
2596+ EXPECT_EQ (model.penAttributes ().color .red (), 58 );
2597+ EXPECT_EQ (model.penAttributes ().color .green (), 153 );
2598+ EXPECT_EQ (model.penAttributes ().color .blue (), 255 );
2599+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2600+ EXPECT_EQ (model.penState ().shade , 63.7 );
2601+ }
2602+
2603+ TEST_F (PenBlocksTest, ChangePenHueBy_OutOfRange_Negative)
2604+ {
2605+ auto sprite = std::make_shared<Sprite>();
2606+ sprite->setEngine (&m_engineMock);
2607+
2608+ RenderedTarget renderedTarget;
2609+ SpriteModel model;
2610+ model.init (sprite.get ());
2611+ model.setRenderedTarget (&renderedTarget);
2612+ sprite->setInterface (&model);
2613+
2614+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2615+ builder.addBlock (" pen_changePenHueBy" );
2616+ builder.addValueInput (" HUE" , -295 );
2617+
2618+ PenState &penState = model.penState ();
2619+ penState.color = 60 ;
2620+ penState.saturation = 90 ;
2621+ penState.brightness = 75 ;
2622+ penState.shade = 63.7 ;
2623+ penState.updateColor ();
2624+
2625+ auto original = model.penAttributes ().color ;
2626+
2627+ auto thread = buildScript (builder, sprite.get ());
2628+
2629+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2630+ thread->run ();
2631+
2632+ EXPECT_EQ (model.penAttributes ().color .red (), 255 );
2633+ EXPECT_EQ (model.penAttributes ().color .green (), 202 );
2634+ EXPECT_EQ (model.penAttributes ().color .blue (), 58 );
2635+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2636+ EXPECT_EQ (model.penState ().shade , 63.7 );
2637+ }
2638+
2639+ TEST_F (PenBlocksTest, ChangePenHueBy_Stage)
2640+ {
2641+ auto stage = std::make_shared<Stage>();
2642+ stage->setEngine (&m_engineMock);
2643+
2644+ RenderedTarget renderedTarget;
2645+ StageModel model;
2646+ model.init (stage.get ());
2647+ model.setRenderedTarget (&renderedTarget);
2648+ stage->setInterface (&model);
2649+
2650+ ScriptBuilder builder (m_extension.get (), m_engine, stage);
2651+ builder.addBlock (" pen_changePenHueBy" );
2652+ builder.addValueInput (" HUE" , 49.2 );
2653+
2654+ PenState &penState = model.penState ();
2655+ penState.color = 60 ;
2656+ penState.saturation = 90 ;
2657+ penState.brightness = 75 ;
2658+ penState.shade = 18.5 ;
2659+ penState.updateColor ();
2660+
2661+ auto original = model.penAttributes ().color ;
2662+
2663+ auto thread = buildScript (builder, stage.get ());
2664+
2665+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2666+ thread->run ();
2667+
2668+ EXPECT_EQ (model.penAttributes ().color .red (), 121 );
2669+ EXPECT_EQ (model.penAttributes ().color .green (), 0 );
2670+ EXPECT_EQ (model.penAttributes ().color .blue (), 113 );
2671+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2672+ EXPECT_EQ (model.penState ().shade , 18.5 );
2673+ }
0 commit comments