#include <string>
#include <cfloat> // For FLT_MAX
#include <dali/devel-api/actors/actor-devel.h>
-#include <dali/devel-api/object/handle-devel.h>
#include <dali/integration-api/events/touch-event-integ.h>
#include <dali/integration-api/events/hover-event-integ.h>
#include <dali-test-suite-utils.h>
DALI_TEST_EQUALS( vector.depth, actor.GetProperty< float >( Actor::Property::SIZE_DEPTH ), TEST_LOCATION );
// Check async behaviour
- currentSize = DevelHandle::GetCurrentProperty( actor, Actor::Property::SIZE ).Get< Vector3 >();
+ currentSize = actor.GetCurrentProperty( Actor::Property::SIZE ).Get< Vector3 >();
DALI_TEST_EQUALS( currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION );
- DALI_TEST_EQUALS( vector.width, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SIZE_WIDTH ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.height, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SIZE_HEIGHT ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.depth, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SIZE_DEPTH ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.width, actor.GetCurrentProperty< float >( Actor::Property::SIZE_WIDTH ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.height, actor.GetCurrentProperty< float >( Actor::Property::SIZE_HEIGHT ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.depth, actor.GetCurrentProperty< float >( Actor::Property::SIZE_DEPTH ), TEST_LOCATION );
// Change the resize policy and check whether the size stays the same
actor.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
DALI_TEST_EQUALS( vector.x, actor.GetCurrentPosition().x, TEST_LOCATION );
DALI_TEST_EQUALS( vector.x, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).x, TEST_LOCATION );
DALI_TEST_EQUALS( vector.x, actor.GetProperty< float >( Actor::Property::POSITION_X ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.x, DevelHandle::GetCurrentProperty< Vector3 >( actor, Actor::Property::POSITION ).x, TEST_LOCATION );
- DALI_TEST_EQUALS( vector.x, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::POSITION_X ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.x, actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION ).x, TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.x, actor.GetCurrentProperty< float >( Actor::Property::POSITION_X ), TEST_LOCATION );
actor.SetProperty( Actor::Property::POSITION_Y, vector.y );
DALI_TEST_EQUALS( vector.y, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).y, TEST_LOCATION );
DALI_TEST_EQUALS( vector.y, actor.GetCurrentPosition().y, TEST_LOCATION );
DALI_TEST_EQUALS( vector.y, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).y, TEST_LOCATION );
DALI_TEST_EQUALS( vector.y, actor.GetProperty< float >( Actor::Property::POSITION_Y ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.y, DevelHandle::GetCurrentProperty< Vector3 >( actor, Actor::Property::POSITION ).y, TEST_LOCATION );
- DALI_TEST_EQUALS( vector.y, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::POSITION_Y ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.y, actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION ).y, TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.y, actor.GetCurrentProperty< float >( Actor::Property::POSITION_Y ), TEST_LOCATION );
actor.SetProperty( Actor::Property::POSITION_Z, vector.z );
DALI_TEST_EQUALS( vector.z, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).z, TEST_LOCATION );
DALI_TEST_EQUALS( vector.z, actor.GetCurrentPosition().z, TEST_LOCATION );
DALI_TEST_EQUALS( vector.z, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).z, TEST_LOCATION );
DALI_TEST_EQUALS( vector.z, actor.GetProperty< float >( Actor::Property::POSITION_Z ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.z, DevelHandle::GetCurrentProperty< Vector3 >( actor, Actor::Property::POSITION ).z, TEST_LOCATION );
- DALI_TEST_EQUALS( vector.z, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::POSITION_Z ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.z, actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION ).z, TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.z, actor.GetCurrentProperty< float >( Actor::Property::POSITION_Z ), TEST_LOCATION );
END_TEST;
}
DALI_TEST_EQUALS(rotation, actor.GetCurrentOrientation(), 0.001, TEST_LOCATION);
DALI_TEST_EQUALS(rotation, actor.GetProperty< Quaternion >( Actor::Property::ORIENTATION ), 0.001, TEST_LOCATION);
- DALI_TEST_EQUALS(rotation, DevelHandle::GetCurrentProperty< Quaternion >( actor, Actor::Property::ORIENTATION ), 0.001, TEST_LOCATION);
+ DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty< Quaternion >( Actor::Property::ORIENTATION ), 0.001, TEST_LOCATION);
END_TEST;
}
DALI_TEST_EQUALS( vector.x, actor.GetCurrentScale().x, TEST_LOCATION );
DALI_TEST_EQUALS( vector.x, actor.GetProperty< float >( Actor::Property::SCALE_X ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.x, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SCALE_X ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.x, actor.GetCurrentProperty< float >( Actor::Property::SCALE_X ), TEST_LOCATION );
actor.SetProperty( Actor::Property::SCALE_Y, vector.y );
DALI_TEST_EQUALS( vector.y, actor.GetProperty< float >( Actor::Property::SCALE_Y ), TEST_LOCATION );
DALI_TEST_EQUALS( vector.y, actor.GetCurrentScale().y, TEST_LOCATION );
DALI_TEST_EQUALS( vector.y, actor.GetProperty< float >( Actor::Property::SCALE_Y ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.y, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SCALE_Y ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.y, actor.GetCurrentProperty< float >( Actor::Property::SCALE_Y ), TEST_LOCATION );
actor.SetProperty( Actor::Property::SCALE_Z, vector.z );
DALI_TEST_EQUALS( vector.z, actor.GetProperty< float >( Actor::Property::SCALE_Z ), TEST_LOCATION );
DALI_TEST_EQUALS( vector.z, actor.GetCurrentScale().z, TEST_LOCATION );
DALI_TEST_EQUALS( vector.z, actor.GetProperty< float >( Actor::Property::SCALE_Z ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.z, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SCALE_Z ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.z, actor.GetCurrentProperty< float >( Actor::Property::SCALE_Z ), TEST_LOCATION );
DALI_TEST_EQUALS( vector, actor.GetProperty< Vector3 >( Actor::Property::SCALE ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector, DevelHandle::GetCurrentProperty< Vector3 >( actor, Actor::Property::SCALE ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector, actor.GetCurrentProperty< Vector3 >( Actor::Property::SCALE ), TEST_LOCATION );
END_TEST;
}
DALI_TEST_EQUALS( vector.r, actor.GetCurrentColor().r, TEST_LOCATION );
DALI_TEST_EQUALS( vector.r, actor.GetProperty< float >( Actor::Property::COLOR_RED ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.r, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::COLOR_RED ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.r, actor.GetCurrentProperty< float >( Actor::Property::COLOR_RED ), TEST_LOCATION );
actor.SetProperty( Actor::Property::COLOR_GREEN, vector.g );
DALI_TEST_EQUALS( vector.g, actor.GetProperty< float >( Actor::Property::COLOR_GREEN ), TEST_LOCATION );
DALI_TEST_EQUALS( vector.g, actor.GetCurrentColor().g, TEST_LOCATION );
DALI_TEST_EQUALS( vector.g, actor.GetProperty< float >( Actor::Property::COLOR_GREEN ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.g, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::COLOR_GREEN ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.g, actor.GetCurrentProperty< float >( Actor::Property::COLOR_GREEN ), TEST_LOCATION );
actor.SetProperty( Actor::Property::COLOR_BLUE, vector.b );
DALI_TEST_EQUALS( vector.b, actor.GetProperty< float >( Actor::Property::COLOR_BLUE ), TEST_LOCATION );
DALI_TEST_EQUALS( vector.b, actor.GetCurrentColor().b, TEST_LOCATION );
DALI_TEST_EQUALS( vector.b, actor.GetProperty< float >( Actor::Property::COLOR_BLUE ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.b, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::COLOR_BLUE ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.b, actor.GetCurrentProperty< float >( Actor::Property::COLOR_BLUE ), TEST_LOCATION );
actor.SetProperty( Actor::Property::COLOR_ALPHA, vector.a );
DALI_TEST_EQUALS( vector.a, actor.GetCurrentColor().a, TEST_LOCATION );
DALI_TEST_EQUALS( vector.a, actor.GetProperty< float >( Actor::Property::COLOR_ALPHA ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector.a, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::COLOR_ALPHA ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector.a, actor.GetCurrentProperty< float >( Actor::Property::COLOR_ALPHA ), TEST_LOCATION );
DALI_TEST_EQUALS( vector, actor.GetProperty< Vector4 >( Actor::Property::COLOR ), TEST_LOCATION );
- DALI_TEST_EQUALS( vector, DevelHandle::GetCurrentProperty< Vector4 >( actor, Actor::Property::COLOR ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vector, actor.GetCurrentProperty< Vector4 >( Actor::Property::COLOR ), TEST_LOCATION );
actor.SetProperty( DevelActor::Property::OPACITY, 0.2f );
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( actor.GetCurrentProperty< bool >( 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( actor.GetCurrentProperty< bool >( Actor::Property::VISIBLE ), true, TEST_LOCATION );
+
+ application.SendNotification();
+ application.Render( 1100 ); // After the animation
+
+ DALI_TEST_EQUALS( actor.GetCurrentProperty< bool >( Actor::Property::VISIBLE ), false, TEST_LOCATION );
+
+ END_TEST;
+}