X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-Actor.cpp;h=12cbecd6ad9ec3c8c1880f198a09a11dbfd477af;hb=17f28cc04cbb2708a29a6ef7a353ce15fc434b2d;hp=41c8e463effe9aed9d41d4ac07f92de29677dde2;hpb=6caee129a6b690135156363bafe8831a3f7b4aaf;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-Actor.cpp b/automated-tests/src/dali/utc-Dali-Actor.cpp index 41c8e46..12cbecd 100644 --- a/automated-tests/src/dali/utc-Dali-Actor.cpp +++ b/automated-tests/src/dali/utc-Dali-Actor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2019 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -248,16 +248,36 @@ struct VisibilityChangedVoidFunctor struct ChildOrderChangedFunctor { - ChildOrderChangedFunctor(bool& signalCalled) - : mSignalCalled( signalCalled ) + ChildOrderChangedFunctor(bool& signalCalled, Actor& actor) + : mSignalCalled( signalCalled ), + mActor( actor ) { } - void operator()() + void operator()( Actor actor ) + { + mSignalCalled = true; + mActor = actor; + } + + bool& mSignalCalled; + Actor& mActor; +}; + +struct CulledPropertyNotificationFunctor +{ + CulledPropertyNotificationFunctor( bool& signalCalled, PropertyNotification& propertyNotification ) + : mSignalCalled( signalCalled ), + mPropertyNotification( propertyNotification ) + { } + + void operator()( PropertyNotification& source ) { mSignalCalled = true; + mPropertyNotification = source; } bool& mSignalCalled; + PropertyNotification& mPropertyNotification; }; } // anonymous namespace @@ -1249,6 +1269,29 @@ int UtcDaliActorGetCurrentSizeImmediate(void) END_TEST; } +int UtcDaliActorCalculateScreenExtents(void) +{ + TestApplication application; + + Actor actor = Actor::New(); + + actor.SetPosition(Vector3(2.0f, 2.0f, 16.0f)); + actor.SetSize(Vector3{ 1.0f, 1.0f, 1.0f }); + + application.SendNotification(); + application.Render(); + + auto expectedExtent = Rect<>{ -0.5f, -0.5f, 1.0f, 1.0f }; + auto actualExtent = DevelActor::CalculateScreenExtents( actor ); + DALI_TEST_EQUALS( expectedExtent.x, actualExtent.x, Math::MACHINE_EPSILON_10000, TEST_LOCATION ); + DALI_TEST_EQUALS( expectedExtent.y, actualExtent.y, Math::MACHINE_EPSILON_10000, TEST_LOCATION ); + DALI_TEST_EQUALS( expectedExtent.width, actualExtent.width, Math::MACHINE_EPSILON_10000, TEST_LOCATION ); + DALI_TEST_EQUALS( expectedExtent.height, actualExtent.height, Math::MACHINE_EPSILON_10000, TEST_LOCATION ); + + Stage::GetCurrent().Remove( actor ); + END_TEST; +} + // SetPosition(float x, float y) int UtcDaliActorSetPosition01(void) { @@ -1533,55 +1576,6 @@ int UtcDaliActorGetCurrentWorldPosition(void) END_TEST; } -int UtcDaliActorInheritPosition(void) -{ - tet_infoline("Testing Actor::SetPositionInheritanceMode"); - TestApplication application; - - Actor parent = Actor::New(); - Vector3 parentPosition( 1.0f, 2.0f, 3.0f ); - parent.SetPosition( parentPosition ); - parent.SetParentOrigin( ParentOrigin::CENTER ); - parent.SetAnchorPoint( AnchorPoint::CENTER ); - Stage::GetCurrent().Add( parent ); - - Actor child = Actor::New(); - child.SetParentOrigin( ParentOrigin::CENTER ); - child.SetAnchorPoint( AnchorPoint::CENTER ); - Vector3 childPosition( 10.0f, 11.0f, 12.0f ); - child.SetPosition( childPosition ); - parent.Add( child ); - - // The actors should not have a world position yet - DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), Vector3::ZERO, TEST_LOCATION ); - DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), Vector3::ZERO, TEST_LOCATION ); - - // first test default, which is to inherit position - DALI_TEST_EQUALS( child.GetPositionInheritanceMode(), Dali::INHERIT_PARENT_POSITION, TEST_LOCATION ); - application.SendNotification(); - application.Render(0); // should only really call Update as Render is not required to update scene - DALI_TEST_EQUALS( parent.GetCurrentPosition(), parentPosition, TEST_LOCATION ); - DALI_TEST_EQUALS( child.GetCurrentPosition(), childPosition, TEST_LOCATION ); - DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), parentPosition, TEST_LOCATION ); - DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), parentPosition + childPosition, TEST_LOCATION ); - - - //Change child position - Vector3 childOffset( -1.0f, 1.0f, 0.0f ); - child.SetPosition( childOffset ); - - // Change inheritance mode to not inherit - child.SetPositionInheritanceMode( Dali::DONT_INHERIT_POSITION ); - DALI_TEST_EQUALS( child.GetPositionInheritanceMode(), Dali::DONT_INHERIT_POSITION, TEST_LOCATION ); - application.SendNotification(); - application.Render(0); // should only really call Update as Render is not required to update scene - DALI_TEST_EQUALS( parent.GetCurrentPosition(), parentPosition, TEST_LOCATION ); - DALI_TEST_EQUALS( child.GetCurrentPosition(), childOffset, TEST_LOCATION ); - DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), parentPosition, TEST_LOCATION ); - DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), childOffset, TEST_LOCATION ); - END_TEST; -} - int UtcDaliActorSetInheritPosition(void) { tet_infoline("Testing Actor::SetInheritPosition"); @@ -1640,6 +1634,41 @@ int UtcDaliActorSetInheritPosition(void) END_TEST; } +int UtcDaliActorInheritOpacity(void) +{ + tet_infoline("Testing Actor::Inherit Opacity"); + TestApplication application; + + Actor parent = Actor::New(); + Actor child = Actor::New(); + parent.Add( child ); + Stage::GetCurrent().Add( parent ); + + DALI_TEST_EQUALS( parent.GetProperty( Actor::Property::COLOR_ALPHA ).Get(), 1.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( child.GetProperty( Actor::Property::COLOR_ALPHA ).Get(), 1.0f, 0.0001f, TEST_LOCATION ); + + // flush the queue and render once + application.SendNotification(); + application.Render(); + + parent.SetOpacity( 0.1f ); + + DALI_TEST_EQUALS( parent.GetProperty( Actor::Property::COLOR_ALPHA ).Get(), 0.1f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( child.GetProperty( Actor::Property::COLOR_ALPHA ).Get(), 1.0f, 0.0001f, TEST_LOCATION ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( parent.GetProperty( Actor::Property::WORLD_COLOR ).Get(), Vector4(1.f, 1.f, 1.f, 0.1f), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( parent.GetCurrentProperty( Actor::Property::COLOR_ALPHA ).Get(), 0.1f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( parent.GetCurrentProperty( Actor::Property::WORLD_COLOR ).Get(), Vector4(1.f, 1.f, 1.f, 0.1f), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( child.GetProperty( Actor::Property::WORLD_COLOR ).Get(), Vector4(1.f, 1.f, 1.f, 0.1f), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( child.GetCurrentProperty( Actor::Property::WORLD_COLOR ).Get(), Vector4(1.f, 1.f, 1.f, 0.1f), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( child.GetCurrentProperty( Actor::Property::COLOR_ALPHA ).Get(), 1.f, 0.0001f, TEST_LOCATION ); + + END_TEST; +} + // SetOrientation(float angleRadians, Vector3 axis) int UtcDaliActorSetOrientation01(void) { @@ -3242,7 +3271,6 @@ const PropertyStringIndex PROPERTY_TABLE[] = { "inheritOrientation", Actor::Property::INHERIT_ORIENTATION, Property::BOOLEAN }, { "inheritScale", Actor::Property::INHERIT_SCALE, Property::BOOLEAN }, { "colorMode", Actor::Property::COLOR_MODE, Property::STRING }, - { "positionInheritance", Actor::Property::POSITION_INHERITANCE, Property::STRING }, { "drawMode", Actor::Property::DRAW_MODE, Property::STRING }, { "sizeModeFactor", Actor::Property::SIZE_MODE_FACTOR, Property::VECTOR3 }, { "widthResizePolicy", Actor::Property::WIDTH_RESIZE_POLICY, Property::STRING }, @@ -3761,31 +3789,6 @@ int UtcDaliActorColorModePropertyAsString(void) END_TEST; } -int UtcDaliActorPositionInheritancePropertyAsString(void) -{ - TestApplication application; - - Actor actor = Actor::New(); - - actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "INHERIT_PARENT_POSITION" ); - DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), INHERIT_PARENT_POSITION, TEST_LOCATION ); - - actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "USE_PARENT_POSITION" ); - DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), USE_PARENT_POSITION, TEST_LOCATION ); - - actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "USE_PARENT_POSITION_PLUS_LOCAL_POSITION" ); - DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), USE_PARENT_POSITION_PLUS_LOCAL_POSITION, TEST_LOCATION ); - - actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "DONT_INHERIT_POSITION" ); - DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), DONT_INHERIT_POSITION, TEST_LOCATION ); - - // Invalid should not change anything - actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "INVALID_ARG" ); - DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), DONT_INHERIT_POSITION, TEST_LOCATION ); - - END_TEST; -} - int UtcDaliActorDrawModePropertyAsString(void) { TestApplication application; @@ -3798,12 +3801,9 @@ int UtcDaliActorDrawModePropertyAsString(void) actor.SetProperty( Actor::Property::DRAW_MODE, "OVERLAY_2D" ); DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::OVERLAY_2D, TEST_LOCATION ); - actor.SetProperty( Actor::Property::DRAW_MODE, "STENCIL" ); - DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::STENCIL, TEST_LOCATION ); - // Invalid should not change anything actor.SetProperty( Actor::Property::DRAW_MODE, "INVALID_ARG" ); - DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::STENCIL, TEST_LOCATION ); + DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::OVERLAY_2D, TEST_LOCATION ); END_TEST; } @@ -3829,27 +3829,6 @@ int UtcDaliActorColorModePropertyAsEnum(void) END_TEST; } -int UtcDaliActorPositionInheritancePropertyAsEnum(void) -{ - TestApplication application; - - Actor actor = Actor::New(); - - actor.SetProperty( Actor::Property::POSITION_INHERITANCE, INHERIT_PARENT_POSITION ); - DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), INHERIT_PARENT_POSITION, TEST_LOCATION ); - - actor.SetProperty( Actor::Property::POSITION_INHERITANCE, USE_PARENT_POSITION ); - DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), USE_PARENT_POSITION, TEST_LOCATION ); - - actor.SetProperty( Actor::Property::POSITION_INHERITANCE, USE_PARENT_POSITION_PLUS_LOCAL_POSITION ); - DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), USE_PARENT_POSITION_PLUS_LOCAL_POSITION, TEST_LOCATION ); - - actor.SetProperty( Actor::Property::POSITION_INHERITANCE, DONT_INHERIT_POSITION ); - DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), DONT_INHERIT_POSITION, TEST_LOCATION ); - - END_TEST; -} - int UtcDaliActorDrawModePropertyAsEnum(void) { TestApplication application; @@ -3862,9 +3841,6 @@ int UtcDaliActorDrawModePropertyAsEnum(void) actor.SetProperty( Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D ); DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::OVERLAY_2D, TEST_LOCATION ); - actor.SetProperty( Actor::Property::DRAW_MODE, DrawMode::STENCIL ); - DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::STENCIL, TEST_LOCATION ); - END_TEST; } @@ -4806,6 +4782,12 @@ int UtcDaliActorRaiseLower(void) actorB.TouchSignal().Connect( TestTouchCallback2 ); actorC.TouchSignal().Connect( TestTouchCallback3 ); + // Connect ChildOrderChangedSignal + bool orderChangedSignal( false ); + Actor orderChangedActor; + ChildOrderChangedFunctor f( orderChangedSignal, orderChangedActor ); + DevelActor::ChildOrderChangedSignal( stage.GetRootLayer() ).Connect( &application, f ) ; + Dali::Integration::Point point; point.SetDeviceId( 1 ); point.SetState( PointState::DOWN ); @@ -4829,7 +4811,11 @@ int UtcDaliActorRaiseLower(void) Property::Value value = actorB.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER ); value.Get( preActorOrder ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.Raise(); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorB, TEST_LOCATION ); + // Ensure sort order is calculated before next touch event application.SendNotification(); @@ -4851,7 +4837,13 @@ int UtcDaliActorRaiseLower(void) value = actorB.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER ); value.Get( preActorOrder ); + orderChangedSignal = false; + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.Lower(); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorB, TEST_LOCATION ); + application.SendNotification(); // ensure sort order calculated before next touch event value = actorB.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER ); @@ -4929,6 +4921,12 @@ int UtcDaliActorRaiseToTopLowerToBottom(void) ResetTouchCallbacks(); + // Connect ChildOrderChangedSignal + bool orderChangedSignal( false ); + Actor orderChangedActor; + ChildOrderChangedFunctor f( orderChangedSignal, orderChangedActor ); + DevelActor::ChildOrderChangedSignal( stage.GetRootLayer() ).Connect( &application, f ) ; + // Set up gl abstraction trace so can query the set uniform order TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); glAbstraction.EnableSetUniformCallTrace(true); @@ -4978,7 +4976,11 @@ int UtcDaliActorRaiseToTopLowerToBottom(void) tet_printf( "RaiseToTop ActorA\n" ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.RaiseToTop(); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorA, TEST_LOCATION ); + application.SendNotification(); // ensure sorting order is calculated before next touch event application.ProcessEvent( touchEvent ); @@ -5009,7 +5011,13 @@ int UtcDaliActorRaiseToTopLowerToBottom(void) tet_printf( "RaiseToTop ActorB\n" ); + orderChangedSignal = false; + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.RaiseToTop(); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorB, TEST_LOCATION ); + application.SendNotification(); // Ensure sort order is calculated before next touch event application.ProcessEvent( touchEvent ); @@ -5040,11 +5048,23 @@ int UtcDaliActorRaiseToTopLowerToBottom(void) tet_printf( "LowerToBottom ActorA then ActorB leaving Actor C at Top\n" ); + orderChangedSignal = false; + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.LowerToBottom(); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorA, TEST_LOCATION ); + application.SendNotification(); application.Render(); + orderChangedSignal = false; + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.LowerToBottom(); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorB, TEST_LOCATION ); + application.SendNotification(); application.Render(); @@ -5126,8 +5146,9 @@ int UtcDaliActorRaiseAbove(void) actorB.TouchSignal().Connect( TestTouchCallback2 ); actorC.TouchSignal().Connect( TestTouchCallback3 ); - bool orderChangedSignal(false); - ChildOrderChangedFunctor f(orderChangedSignal); + bool orderChangedSignal( false ); + Actor orderChangedActor; + ChildOrderChangedFunctor f( orderChangedSignal, orderChangedActor ); DevelActor::ChildOrderChangedSignal( stage.GetRootLayer() ).Connect( &application, f ) ; Dali::Integration::Point point; @@ -5150,6 +5171,7 @@ int UtcDaliActorRaiseAbove(void) DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.RaiseAbove( actorC ); DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorB, TEST_LOCATION ); // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); @@ -5163,7 +5185,12 @@ int UtcDaliActorRaiseAbove(void) tet_printf( "Raise actor A Above Actor B\n" ); + orderChangedSignal = false; + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.RaiseAbove( actorB ); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorA, TEST_LOCATION ); // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); @@ -5243,6 +5270,12 @@ int UtcDaliActorLowerBelow(void) ResetTouchCallbacks(); + // Connect ChildOrderChangedSignal + bool orderChangedSignal( false ); + Actor orderChangedActor; + ChildOrderChangedFunctor f( orderChangedSignal, orderChangedActor ); + DevelActor::ChildOrderChangedSignal( container ).Connect( &application, f ) ; + // Set up gl abstraction trace so can query the set uniform order TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); glAbstraction.EnableSetUniformCallTrace(true); @@ -5297,7 +5330,11 @@ int UtcDaliActorLowerBelow(void) tet_printf( "Lower actor C below Actor B ( actor B and A on same level due to insertion order) so C is below both \n" ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorC.LowerBelow( actorB ); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorC, TEST_LOCATION ); + // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); application.Render(); @@ -5329,7 +5366,13 @@ int UtcDaliActorLowerBelow(void) tet_printf( "Lower actor C below Actor A leaving B on top\n" ); + orderChangedSignal = false; + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorC.LowerBelow( actorA ); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorC, TEST_LOCATION ); + // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); application.Render(); @@ -5358,7 +5401,13 @@ int UtcDaliActorLowerBelow(void) tet_printf( "Lower actor B below Actor C leaving A on top\n" ); + orderChangedSignal = false; + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.LowerBelow( actorC ); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorB, TEST_LOCATION ); + // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); application.Render(); @@ -5437,6 +5486,12 @@ int UtcDaliActorRaiseAboveDifferentParentsN(void) ResetTouchCallbacks(); + // Connect ChildOrderChangedSignal + bool orderChangedSignal( false ); + Actor orderChangedActor; + ChildOrderChangedFunctor f( orderChangedSignal, orderChangedActor ); + DevelActor::ChildOrderChangedSignal( stage.GetRootLayer() ).Connect( &application, f ) ; + application.SendNotification(); application.Render(); @@ -5467,7 +5522,10 @@ int UtcDaliActorRaiseAboveDifferentParentsN(void) tet_printf( "Raise actor A Above Actor C which have different parents\n" ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.RaiseAbove( actorC ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); + // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); @@ -5514,6 +5572,12 @@ int UtcDaliActorRaiseLowerWhenUnparentedTargetN(void) ResetTouchCallbacks(); + // Connect ChildOrderChangedSignal + bool orderChangedSignal( false ); + Actor orderChangedActor; + ChildOrderChangedFunctor f( orderChangedSignal, orderChangedActor ); + DevelActor::ChildOrderChangedSignal( stage.GetRootLayer() ).Connect( &application, f ) ; + application.SendNotification(); application.Render(); @@ -5536,7 +5600,10 @@ int UtcDaliActorRaiseLowerWhenUnparentedTargetN(void) tet_printf( "Raise actor A Above Actor C which have no parents\n" ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.RaiseAbove( actorC ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); + // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); @@ -5550,9 +5617,14 @@ int UtcDaliActorRaiseLowerWhenUnparentedTargetN(void) ResetTouchCallbacks(); + orderChangedSignal = false; + stage.Add ( actorB ); tet_printf( "Lower actor A below Actor C when only A is not on stage \n" ); + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.LowerBelow( actorC ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); @@ -5567,6 +5639,8 @@ int UtcDaliActorRaiseLowerWhenUnparentedTargetN(void) ResetTouchCallbacks(); + orderChangedSignal = false; + tet_printf( "Adding Actor A to stage, will be on top\n" ); stage.Add ( actorA ); @@ -5574,7 +5648,11 @@ int UtcDaliActorRaiseLowerWhenUnparentedTargetN(void) application.Render(); tet_printf( "Raise actor B Above Actor C when only B has a parent\n" ); + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.RaiseAbove( actorC ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); + // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); @@ -5587,8 +5665,14 @@ int UtcDaliActorRaiseLowerWhenUnparentedTargetN(void) ResetTouchCallbacks(); + orderChangedSignal = false; + tet_printf( "Lower actor A below Actor C when only A has a parent\n" ); + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.LowerBelow( actorC ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); + // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); @@ -5601,8 +5685,15 @@ int UtcDaliActorRaiseLowerWhenUnparentedTargetN(void) ResetTouchCallbacks(); + orderChangedSignal = false; + stage.Add ( actorC ); + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.RaiseAbove( actorC ); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorA, TEST_LOCATION ); + // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); application.Render(); @@ -5649,6 +5740,12 @@ int UtcDaliActorTestAllAPIwhenActorNotParented(void) ResetTouchCallbacks(); + // Connect ChildOrderChangedSignal + bool orderChangedSignal( false ); + Actor orderChangedActor; + ChildOrderChangedFunctor f( orderChangedSignal, orderChangedActor ); + DevelActor::ChildOrderChangedSignal( stage.GetRootLayer() ).Connect( &application, f ) ; + // connect to actor touch signals, will use touch callbacks to determine which actor is on top. // Only top actor will get touched. actorA.TouchSignal().Connect( TestTouchCallback ); @@ -5664,7 +5761,10 @@ int UtcDaliActorTestAllAPIwhenActorNotParented(void) stage.Add ( actorA ); tet_printf( "Raise actor B Above Actor C but B not parented\n" ); + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.Raise(); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); application.SendNotification(); application.Render(); @@ -5680,7 +5780,12 @@ int UtcDaliActorTestAllAPIwhenActorNotParented(void) tet_printf( "Raise actor B Above Actor C but B not parented\n" ); ResetTouchCallbacks(); + orderChangedSignal = false; + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorC.Lower(); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); + // Sort actor tree before next touch event application.SendNotification(); application.Render(); @@ -5694,9 +5799,14 @@ int UtcDaliActorTestAllAPIwhenActorNotParented(void) DALI_TEST_EQUALS( gTouchCallBackCalled3, false , TEST_LOCATION ); ResetTouchCallbacks(); + orderChangedSignal = false; + tet_printf( "Lower actor C below B but C not parented\n" ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.Lower(); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); + // Sort actor tree before next touch event application.SendNotification(); application.Render(); @@ -5710,9 +5820,14 @@ int UtcDaliActorTestAllAPIwhenActorNotParented(void) DALI_TEST_EQUALS( gTouchCallBackCalled3, false , TEST_LOCATION ); ResetTouchCallbacks(); + orderChangedSignal = false; + tet_printf( "Raise actor B to top\n" ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorB.RaiseToTop(); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); + // Sort actor tree before next touch event application.SendNotification(); application.Render(); @@ -5726,13 +5841,18 @@ int UtcDaliActorTestAllAPIwhenActorNotParented(void) DALI_TEST_EQUALS( gTouchCallBackCalled3, false , TEST_LOCATION ); ResetTouchCallbacks(); + orderChangedSignal = false; + tet_printf( "Add ActorB to stage so only Actor C not parented\n" ); stage.Add ( actorB ); tet_printf( "Lower actor C to Bottom, B stays at top\n" ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorC.LowerToBottom(); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); + application.SendNotification(); application.Render(); @@ -5791,6 +5911,12 @@ int UtcDaliActorRaiseAboveActorAndTargetTheSameN(void) ResetTouchCallbacks(); + // Connect ChildOrderChangedSignal + bool orderChangedSignal( false ); + Actor orderChangedActor; + ChildOrderChangedFunctor f( orderChangedSignal, orderChangedActor ); + DevelActor::ChildOrderChangedSignal( stage.GetRootLayer() ).Connect( &application, f ) ; + application.SendNotification(); application.Render(); @@ -5811,7 +5937,11 @@ int UtcDaliActorRaiseAboveActorAndTargetTheSameN(void) tet_infoline( "Raise actor A Above Actor A which is the same actor!!\n" ); + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.RaiseAbove( actorA ); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorA, TEST_LOCATION ); + application.SendNotification(); application.Render(); @@ -5825,7 +5955,13 @@ int UtcDaliActorRaiseAboveActorAndTargetTheSameN(void) ResetTouchCallbacks(); + orderChangedSignal = false; + + DALI_TEST_EQUALS( orderChangedSignal, false, TEST_LOCATION ); actorA.RaiseAbove( actorC ); + DALI_TEST_EQUALS( orderChangedSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( orderChangedActor, actorA, TEST_LOCATION ); + application.SendNotification(); application.Render(); @@ -7012,3 +7148,104 @@ int UtcDaliChildMovedSignalP(void) END_TEST; } + +int utcDaliActorCulled(void) +{ + TestApplication application; + auto stage = Stage::GetCurrent(); + + tet_infoline( "Check that the actor is culled if the actor is out of the screen" ); + + Actor actor = Actor::New(); + actor.SetSize( 10.0f, 10.0f ); + + Geometry geometry = CreateQuadGeometry(); + Shader shader = CreateShader(); + Renderer renderer = Renderer::New(geometry, shader); + actor.AddRenderer( renderer ); + + stage.Add( actor ); + + application.SendNotification(); + application.Render( 0 ); + + DALI_TEST_EQUALS( actor.GetProperty< bool >( DevelActor::Property::CULLED ), false, TEST_LOCATION ); + + PropertyNotification notification = actor.AddPropertyNotification( DevelActor::Property::CULLED, LessThanCondition( 0.5f ) ); + notification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + + // Connect NotifySignal + bool propertyNotificationSignal( false ); + PropertyNotification source; + CulledPropertyNotificationFunctor f( propertyNotificationSignal, source ); + notification.NotifySignal().Connect( &application, f ) ; + + actor.SetPosition( 1000.0f, 1000.0f ); + + application.SendNotification(); + application.Render(); + + application.SendNotification(); + + DALI_TEST_EQUALS( actor.GetProperty< bool >( DevelActor::Property::CULLED ), true, TEST_LOCATION ); + + DALI_TEST_EQUALS( propertyNotificationSignal, true, TEST_LOCATION ); + DALI_TEST_EQUALS( source.GetTargetProperty(), static_cast< int >( DevelActor::Property::CULLED ), TEST_LOCATION ); + DALI_TEST_EQUALS( source.GetTarget().GetProperty< bool >( source.GetTargetProperty() ), true, TEST_LOCATION ); + + END_TEST; +} + +int utcDaliEnsureRenderWhenRemovingLastRenderableActor(void) +{ + TestApplication application; + auto stage = Stage::GetCurrent(); + + tet_infoline( "Ensure we clear the screen when the last actor is removed" ); + + Actor actor = CreateRenderableActor(); + actor.SetSize( 100.0f, 100.0f ); + stage.Add( actor ); + + application.SendNotification(); + application.Render(); + + auto& glAbstraction = application.GetGlAbstraction(); + const auto clearCountBefore = glAbstraction.GetClearCountCalled(); + + actor.Unparent(); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 1, TEST_LOCATION ); + + END_TEST; +} + +int utcDaliEnsureRenderWhenMakingLastActorInvisible(void) +{ + TestApplication application; + auto stage = Stage::GetCurrent(); + + tet_infoline( "Ensure we clear the screen when the last actor is made invisible" ); + + Actor actor = CreateRenderableActor(); + actor.SetSize( 100.0f, 100.0f ); + stage.Add( actor ); + + application.SendNotification(); + application.Render(); + + auto& glAbstraction = application.GetGlAbstraction(); + const auto clearCountBefore = glAbstraction.GetClearCountCalled(); + + actor.SetVisible( false ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 1, TEST_LOCATION ); + + END_TEST; +}