point.SetDeviceId( 1 );
point.SetState( PointState::DOWN );
point.SetScreenPosition( Vector2( touchPoint.x, touchPoint.y ) );
- Dali::Integration::TouchEvent event;
- event.AddPoint( point );
- application.ProcessEvent( event );
+ Dali::Integration::TouchEvent touchEvent;
+ touchEvent.AddPoint( point );
+ application.ProcessEvent( touchEvent );
DALI_TEST_CHECK( gTouchCallBackCalled == true );
END_TEST;
point.SetDeviceId( 1 );
point.SetState( PointState::MOTION );
point.SetScreenPosition( Vector2( touchPoint.x, touchPoint.y ) );
- Dali::Integration::HoverEvent event;
- event.AddPoint( point );
- application.ProcessEvent( event );
+ Dali::Integration::HoverEvent hoverEvent;
+ hoverEvent.AddPoint( point );
+ application.ProcessEvent( hoverEvent );
DALI_TEST_CHECK( gHoverCallBackCalled == true );
END_TEST;
DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
- Geometry geometry = CreateQuadGeometry();
- Shader shader = CreateShader();
- Renderer renderer = Renderer::New(geometry, shader);
+ {
+ Geometry geometry = CreateQuadGeometry();
+ Shader shader = CreateShader();
+ Renderer renderer = Renderer::New(geometry, shader);
- actor.AddRenderer( renderer );
- DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
- DALI_TEST_EQUALS( actor.GetRendererAt(0), renderer, TEST_LOCATION );
+ actor.AddRenderer( renderer );
+ DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
+ DALI_TEST_EQUALS( actor.GetRendererAt(0), renderer, TEST_LOCATION );
- actor.RemoveRenderer(renderer);
- DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
+ application.SendNotification();
+ application.Render();
+ }
+ {
+ Renderer renderer = actor.GetRendererAt(0);
+ actor.RemoveRenderer(renderer);
+ DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
+
+ application.SendNotification();
+ application.Render();
+ }
+
+ // Call one final time to ensure that the renderer is actually removed after
+ // the handle goes out of scope, and excercises the deletion code path in
+ // scene graph and render.
+ application.SendNotification();
+ application.Render();
END_TEST;
}
Renderer renderer = Renderer::New(geometry, shader);
actor.AddRenderer( renderer );
+ application.SendNotification();
+ application.Render();
+
DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
DALI_TEST_EQUALS( actor.GetRendererAt(0), renderer, TEST_LOCATION );
actor.RemoveRenderer(0);
- DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
+ application.SendNotification();
+ application.Render();
+ DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
+ // Shut down whilst holding onto the renderer handle.
END_TEST;
}
point.SetDeviceId( 1 );
point.SetState( PointState::DOWN );
point.SetScreenPosition( Vector2( 10.f, 10.f ) );
- Dali::Integration::TouchEvent event;
- event.AddPoint( point );
+ Dali::Integration::TouchEvent touchEvent;
+ touchEvent.AddPoint( point );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, false, TEST_LOCATION );
value.Get( preActorOrder );
DevelActor::Raise( actorB );
+ // Ensure sort order is calculated before next touch event
+ application.SendNotification();
value = actorB.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER );
value.Get( postActorOrder );
tet_printf( "Raised ActorB from (%d) to (%d) \n", preActorOrder, postActorOrder );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, true , TEST_LOCATION );
value.Get( preActorOrder );
DevelActor::Lower( actorB );
+ application.SendNotification(); // ensure sort order calculated before next touch event
value = actorB.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER );
value.Get( postActorOrder );
tet_printf( "Lowered ActorB from (%d) to (%d) \n", preActorOrder, postActorOrder );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, false , TEST_LOCATION );
point.SetDeviceId( 1 );
point.SetState( PointState::DOWN );
point.SetScreenPosition( Vector2( 10.f, 10.f ) );
- Dali::Integration::TouchEvent event;
- event.AddPoint( point );
+ Dali::Integration::TouchEvent touchEvent;
+ touchEvent.AddPoint( point );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, false, TEST_LOCATION );
tet_printf( "RaiseToTop ActorA\n" );
DevelActor::RaiseToTop( actorA );
+ application.SendNotification(); // ensure sorting order is calculated before next touch event
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
glAbstraction.ResetSetUniformCallStack();
glSetUniformStack = glAbstraction.GetSetUniformTrace();
tet_printf( "RaiseToTop ActorB\n" );
DevelActor::RaiseToTop( actorB );
+ application.SendNotification(); // Ensure sort order is calculated before next touch event
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
glAbstraction.ResetSetUniformCallStack();
glSetUniformStack = glAbstraction.GetSetUniformTrace();
application.SendNotification();
application.Render();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
glAbstraction.ResetSetUniformCallStack();
glSetUniformStack = glAbstraction.GetSetUniformTrace();
point.SetDeviceId( 1 );
point.SetState( PointState::DOWN );
point.SetScreenPosition( Vector2( 10.f, 10.f ) );
- Dali::Integration::TouchEvent event;
- event.AddPoint( point );
+ Dali::Integration::TouchEvent touchEvent;
+ touchEvent.AddPoint( point );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, false, TEST_LOCATION );
tet_printf( "Raise actor B Above Actor C\n" );
DevelActor::RaiseAbove( actorB, actorC );
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
+ application.SendNotification();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, true, TEST_LOCATION );
DevelActor::RaiseAbove( actorA, actorB );
- application.ProcessEvent( event );
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
+ application.SendNotification();
+
+ application.ProcessEvent( touchEvent ); // process a touch event on ordered actors.
DALI_TEST_EQUALS( gTouchCallBackCalled, true, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, false, TEST_LOCATION );
point.SetDeviceId( 1 );
point.SetState( PointState::DOWN );
point.SetScreenPosition( Vector2( 10.f, 10.f ) );
- Dali::Integration::TouchEvent event;
- event.AddPoint( point );
+ Dali::Integration::TouchEvent touchEvent;
+ touchEvent.AddPoint( point );
tet_infoline( "UtcDaliActor Test Set up completed \n" );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, false, TEST_LOCATION );
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" );
DevelActor::LowerBelow( actorC, actorB );
-
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
application.SendNotification();
application.Render();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent ); // touch event
glAbstraction.ResetSetUniformCallStack();
glSetUniformStack = glAbstraction.GetSetUniformTrace();
tet_printf( "Lower actor B below Actor C leaving A on top\n" );
DevelActor::LowerBelow( actorB, actorC );
-
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
application.SendNotification();
application.Render();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
glAbstraction.ResetSetUniformCallStack();
glSetUniformStack = glAbstraction.GetSetUniformTrace();
tet_printf( "Lower actor A below Actor C leaving C on top\n" );
DevelActor::LowerBelow( actorA, actorC );
-
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
application.SendNotification();
application.Render();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
glAbstraction.ResetSetUniformCallStack();
glSetUniformStack = glAbstraction.GetSetUniformTrace();
Actor sibling = parent.GetChildAt( 5 );
DevelActor::RaiseToTop( sibling );
+ // Ensure sorting happens at end of Core::ProcessEvents()
application.SendNotification();
application.Render();
point.SetDeviceId( 1 );
point.SetState( PointState::DOWN );
point.SetScreenPosition( Vector2( 10.f, 10.f ) );
- Dali::Integration::TouchEvent event;
- event.AddPoint( point );
+ Dali::Integration::TouchEvent touchEvent;
+ touchEvent.AddPoint( point );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, false, TEST_LOCATION );
tet_printf( "Raise actor A Above Actor C which have different parents\n" );
DevelActor::RaiseAbove( actorA, actorC );
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
+ application.SendNotification();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent ); // touch event
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, false, TEST_LOCATION );
point.SetDeviceId( 1 );
point.SetState( PointState::DOWN );
point.SetScreenPosition( Vector2( 10.f, 10.f ) );
- Dali::Integration::TouchEvent event;
- event.AddPoint( point );
+ Dali::Integration::TouchEvent touchEvent;
+ touchEvent.AddPoint( point );
tet_printf( "Raise actor A Above Actor C which have no parents\n" );
DevelActor::RaiseAbove( actorA, actorC );
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
+ application.SendNotification();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
tet_printf( "Not parented so RaiseAbove should show no effect\n" );
ResetTouchCallbacks();
stage.Add ( actorB );
+ tet_printf( "Lower actor A below Actor C when only A is not on stage \n" );
+ DevelActor::LowerBelow( actorA, actorC );
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
application.SendNotification();
application.Render();
- tet_printf( "Lower actor A below Actor C when only A is not on stage \n" );
- DevelActor::LowerBelow( actorA, actorC );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
tet_printf( "Actor A not parented so LowerBelow should show no effect\n" );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
tet_printf( "Raise actor B Above Actor C when only B has a parent\n" );
DevelActor::RaiseAbove( actorB, actorC );
- application.ProcessEvent( event );
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
+ application.SendNotification();
+
+ application.ProcessEvent( touchEvent );
tet_printf( "C not parented so RaiseAbove should show no effect\n" );
DALI_TEST_EQUALS( gTouchCallBackCalled, true, TEST_LOCATION );
tet_printf( "Lower actor A below Actor C when only A has a parent\n" );
DevelActor::LowerBelow( actorA, actorC );
- application.ProcessEvent( event );
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
+ application.SendNotification();
+
+ application.ProcessEvent( touchEvent );
tet_printf( "C not parented so LowerBelow should show no effect\n" );
DALI_TEST_EQUALS( gTouchCallBackCalled, true, TEST_LOCATION );
ResetTouchCallbacks();
stage.Add ( actorC );
-
+ DevelActor::RaiseAbove( actorA, actorC );
+ // Ensure sorting happens at end of Core::ProcessEvents() before next touch
application.SendNotification();
application.Render();
- DevelActor::RaiseAbove( actorA, actorC );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
tet_printf( "Raise actor A Above Actor C, now both have same parent \n" );
DALI_TEST_EQUALS( gTouchCallBackCalled, true, TEST_LOCATION );
point.SetDeviceId( 1 );
point.SetState( PointState::DOWN );
point.SetScreenPosition( Vector2( 10.f, 10.f ) );
- Dali::Integration::TouchEvent event;
- event.AddPoint( point );
+ Dali::Integration::TouchEvent touchEvent;
+ touchEvent.AddPoint( point );
stage.Add ( actorA );
+ tet_printf( "Raise actor B Above Actor C but B not parented\n" );
+ DevelActor::Raise( actorB );
application.SendNotification();
application.Render();
- tet_printf( "Raise actor B Above Actor C but B not parented\n" );
-
- DevelActor::Raise( actorB );
-
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
tet_printf( "Not parented so RaiseAbove should show no effect\n" );
ResetTouchCallbacks();
DevelActor::Lower( actorC );
+ // Sort actor tree before next touch event
+ application.SendNotification();
+ application.Render();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
tet_printf( "Not parented so RaiseAbove should show no effect\n" );
tet_printf( "Lower actor C below B but C not parented\n" );
DevelActor::Lower( actorB );
+ // Sort actor tree before next touch event
+ application.SendNotification();
+ application.Render();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
tet_printf( "Not parented so Lower should show no effect\n" );
tet_printf( "Raise actor B to top\n" );
DevelActor::RaiseToTop( actorB );
+ // Sort actor tree before next touch event
+ application.SendNotification();
+ application.Render();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
tet_printf( "Not parented so RaiseToTop should show no effect\n" );
stage.Add ( actorB );
- application.SendNotification();
- application.Render();
-
tet_printf( "Lower actor C to Bottom, B stays at top\n" );
DevelActor::LowerToBottom( actorC );
+ application.SendNotification();
+ application.Render();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
tet_printf( "Not parented so LowerToBottom should show no effect\n" );
point.SetDeviceId( 1 );
point.SetState( PointState::DOWN );
point.SetScreenPosition( Vector2( 10.f, 10.f ) );
- Dali::Integration::TouchEvent event;
- event.AddPoint( point );
+ Dali::Integration::TouchEvent touchEvent;
+ touchEvent.AddPoint( point );
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION );
DALI_TEST_EQUALS( gTouchCallBackCalled2, false, TEST_LOCATION );
tet_infoline( "Raise actor A Above Actor A which is the same actor!!\n" );
DevelActor::RaiseAbove( actorA, actorA );
+ application.SendNotification();
+ application.Render();
- application.ProcessEvent( event );
+ application.ProcessEvent( touchEvent );
tet_infoline( "No target is source Actor so RaiseAbove should show no effect\n" );
ResetTouchCallbacks();
DevelActor::RaiseAbove( actorA, actorC );
- application.ProcessEvent( event );
+ application.SendNotification();
+ application.Render();
+
+ application.ProcessEvent( touchEvent );
tet_infoline( "Raise actor A Above Actor C which will now be successful \n" );
DALI_TEST_EQUALS( gTouchCallBackCalled, true, TEST_LOCATION );
childData.Check( false /* not called */, TEST_LOCATION );
grandChildData.Check( false /* not called */, TEST_LOCATION );
- END_TEST;}
+ END_TEST;
+}
+
+int utcDaliActorVisibilityChangeSignalAfterAnimation(void)
+{
+ TestApplication application;
+ tet_infoline( "Check that the visibility change signal is emitted when the visibility changes when an animation starts" );
+
+ Actor actor = Actor::New();
+ Stage::GetCurrent().Add( actor );
+
+ application.SendNotification();
+ application.Render();
+
+ VisibilityChangedFunctorData data;
+ DevelActor::VisibilityChangedSignal( actor ).Connect( &application, VisibilityChangedFunctor( data ) );
+
+ Animation animation = Animation::New( 1.0f );
+ animation.AnimateTo( Property( actor, Actor::Property::VISIBLE ), false );
+
+ data.Check( false, TEST_LOCATION );
+ DALI_TEST_EQUALS( actor.GetProperty< bool >( Actor::Property::VISIBLE ), true, TEST_LOCATION );
+ DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< bool >( actor, Actor::Property::VISIBLE ), true, TEST_LOCATION );
+
+ tet_infoline( "Play the animation and check the property value" );
+ animation.Play();
+
+ data.Check( true /* called */, actor, false /* not visible */, DevelActor::VisibilityChange::SELF, TEST_LOCATION );
+ DALI_TEST_EQUALS( actor.GetProperty< bool >( Actor::Property::VISIBLE ), false, TEST_LOCATION );
+
+ tet_infoline( "Animation not currently finished, so the current visibility should still be true" );
+ DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< bool >( actor, Actor::Property::VISIBLE ), true, TEST_LOCATION );
+
+ application.SendNotification();
+ application.Render( 1100 ); // After the animation
+
+ DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< bool >( actor, Actor::Property::VISIBLE ), false, TEST_LOCATION );
+
+ END_TEST;
+}