}
// Clipping test helper functions:
-Actor CreateActorWithContent()
+Actor CreateActorWithContent( uint32_t width, uint32_t height)
{
- BufferImage image = BufferImage::New( 16u, 16u );
+ BufferImage image = BufferImage::New( width, height );
Actor actor = CreateRenderableActor( image );
// Setup dimensions and position so actor is not skipped by culling.
actor.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
- actor.SetSize( 16.0f, 16.0f );
+ actor.SetSize( width, height );
actor.SetParentOrigin( ParentOrigin::CENTER );
actor.SetAnchorPoint( AnchorPoint::CENTER );
return actor;
}
+Actor CreateActorWithContent16x16()
+{
+ return CreateActorWithContent( 16, 16 );
+}
+
void GenerateTrace( TestApplication& application, TraceCallStack& enabledDisableTrace, TraceCallStack& stencilTrace )
{
enabledDisableTrace.Reset();
size_t startIndex = 0u;
// Create a clipping actor.
- Actor actorDepth1Clip = CreateActorWithContent();
+ Actor actorDepth1Clip = CreateActorWithContent16x16();
actorDepth1Clip.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
Stage::GetCurrent().Add( actorDepth1Clip );
size_t startIndex = 0u;
// Create a clipping actor.
- Actor actorDepth1Clip = CreateActorWithContent();
+ Actor actorDepth1Clip = CreateActorWithContent16x16();
actorDepth1Clip.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
Stage::GetCurrent().Add( actorDepth1Clip );
TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
// Create a clipping actor.
- Actor actorDepth1Clip = CreateActorWithContent();
+ Actor actorDepth1Clip = CreateActorWithContent16x16();
actorDepth1Clip.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
Stage::GetCurrent().Add( actorDepth1Clip );
// Create a child actor.
- Actor childDepth2 = CreateActorWithContent();
+ Actor childDepth2 = CreateActorWithContent16x16();
actorDepth1Clip.Add( childDepth2 );
// Create another clipping actor.
- Actor childDepth2Clip = CreateActorWithContent();
+ Actor childDepth2Clip = CreateActorWithContent16x16();
childDepth2Clip.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
childDepth2.Add( childDepth2Clip );
// Create another 2 child actors. We do this so 2 nodes will have the same clipping ID.
// This tests the sort algorithm.
- Actor childDepth3 = CreateActorWithContent();
+ Actor childDepth3 = CreateActorWithContent16x16();
childDepth2Clip.Add( childDepth3 );
- Actor childDepth4 = CreateActorWithContent();
+ Actor childDepth4 = CreateActorWithContent16x16();
childDepth3.Add( childDepth4 );
// Gather the call trace.
const Vector2 imageSize( 16.0f, 16.0f );
// Create a clipping actor.
- Actor clippingActorA = CreateActorWithContent();
+ Actor clippingActorA = CreateActorWithContent16x16();
// Note: Scissor coords are have flipped Y values compared with DALi's coordinate system.
// We choose BOTTOM_LEFT to give us x=0, y=0 starting coordinates for the first test.
clippingActorA.SetParentOrigin( ParentOrigin::BOTTOM_LEFT );
END_TEST;
}
-int UtcDaliActorPropertyScissorClippingActorNested(void)
+int UtcDaliActorPropertyScissorClippingActorSiblings(void)
+{
+ // This test checks that an actor is correctly setup for clipping.
+ tet_infoline( "Testing Actor::Property::ClippingMode: CLIP_TO_BOUNDING_BOX actors which are siblings" );
+ TestApplication application;
+
+
+ TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
+ TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace();
+ TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
+
+ const Vector2 stageSize( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT );
+ const Vector2 sizeA{ stageSize.width, stageSize.height * 0.25f };
+ const Vector2 sizeB{ stageSize.width, stageSize.height * 0.05f };
+
+ // Create a clipping actors.
+ Actor clippingActorA = CreateActorWithContent( sizeA.width, sizeA.height );
+ Actor clippingActorB = CreateActorWithContent( sizeB.width, sizeB.height );
+
+ clippingActorA.SetParentOrigin( ParentOrigin::CENTER_LEFT );
+ clippingActorA.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
+ clippingActorA.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX );
+
+ clippingActorB.SetParentOrigin( ParentOrigin::CENTER_LEFT );
+ clippingActorB.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
+ clippingActorB.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX );
+
+ clippingActorA.SetPosition( 0.0f, -200.0f, 0.0f );
+ clippingActorB.SetPosition( 0.0f, 0.0f, 0.0f );
+
+ Stage::GetCurrent().Add( clippingActorA );
+ Stage::GetCurrent().Add( clippingActorB );
+
+ // Gather the call trace.
+ GenerateTrace( application, enabledDisableTrace, scissorTrace );
+
+ // Check we are writing to the color buffer.
+ CheckColorMask( glAbstraction, true );
+
+ // Check scissor test was enabled.
+ DALI_TEST_CHECK( enabledDisableTrace.FindMethodAndParams( "Enable", "3089" ) ); // 3089 = 0xC11 (GL_SCISSOR_TEST)
+
+ // Check the scissor was set, and the coordinates are correct.
+ std::stringstream compareParametersString;
+
+ std::string clipA( "0, 500, 480, 200" );
+ std::string clipB( "0, 380, 480, 40" );
+
+ DALI_TEST_CHECK( scissorTrace.FindMethodAndParams( "Scissor", clipA ) );
+ DALI_TEST_CHECK( scissorTrace.FindMethodAndParams( "Scissor", clipB ) );
+
+ END_TEST;
+}
+
+int UtcDaliActorPropertyScissorClippingActorNested01(void)
{
// This test checks that an actor is correctly setup for clipping.
tet_infoline( "Testing Actor::Property::ClippingMode: CLIP_TO_BOUNDING_BOX actor nested" );
*/
// Create a clipping actor.
- Actor clippingActorA = CreateActorWithContent();
+ Actor clippingActorA = CreateActorWithContent16x16();
// Note: Scissor coords are have flipped Y values compared with DALi's coordinate system.
// We choose BOTTOM_LEFT to give us x=0, y=0 starting coordinates for the first test.
clippingActorA.SetParentOrigin( ParentOrigin::CENTER );
Stage::GetCurrent().Add( clippingActorA );
// Create a child clipping actor.
- Actor clippingActorB = CreateActorWithContent();
+ Actor clippingActorB = CreateActorWithContent16x16();
clippingActorB.SetParentOrigin( ParentOrigin::CENTER );
clippingActorB.SetAnchorPoint( AnchorPoint::CENTER );
clippingActorB.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX );
END_TEST;
}
+int UtcDaliActorPropertyScissorClippingActorNested02(void)
+{
+ // This test checks that an actor is correctly setup for clipping.
+ tet_infoline( "Testing Actor::Property::ClippingMode: CLIP_TO_BOUNDING_BOX actor nested" );
+ TestApplication application;
+
+ TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
+ TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace();
+ TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
+
+ /* Create a nest of 2 scissors and siblings of the parent.
+
+ stage
+ |
+ ┌─────┐─────┐
+ A C D
+ | |
+ B E
+ */
+
+ const Vector2 stageSize( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT );
+ const Vector2 sizeA{ stageSize.width, stageSize.height * 0.25f };
+ const Vector2 sizeB{ stageSize.width, stageSize.height * 0.05f };
+ const Vector2 sizeC{ stageSize.width, stageSize.height * 0.25f };
+ const Vector2 sizeD{ stageSize.width, stageSize.height * 0.25f };
+ const Vector2 sizeE{ stageSize.width, stageSize.height * 0.05f };
+
+ // Create a clipping actors.
+ Actor clippingActorA = CreateActorWithContent( sizeA.width, sizeA.height );
+ Actor clippingActorB = CreateActorWithContent( sizeB.width, sizeB.height );
+ Actor clippingActorC = CreateActorWithContent( sizeC.width, sizeC.height );
+ Actor clippingActorD = CreateActorWithContent( sizeD.width, sizeD.height );
+ Actor clippingActorE = CreateActorWithContent( sizeE.width, sizeE.height );
+
+ clippingActorA.SetParentOrigin( ParentOrigin::CENTER_LEFT );
+ clippingActorA.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
+ clippingActorA.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX );
+
+ clippingActorB.SetParentOrigin( ParentOrigin::CENTER_LEFT );
+ clippingActorB.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
+ clippingActorB.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX );
+
+ clippingActorC.SetParentOrigin( ParentOrigin::CENTER_LEFT );
+ clippingActorC.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
+ clippingActorC.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX );
+
+ clippingActorD.SetParentOrigin( ParentOrigin::CENTER_LEFT );
+ clippingActorD.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
+ clippingActorD.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX );
+
+ clippingActorE.SetParentOrigin( ParentOrigin::CENTER_LEFT );
+ clippingActorE.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
+
+ clippingActorA.SetPosition( 0.0f, -200.0f, 0.0f );
+ clippingActorB.SetPosition( 0.0f, 0.0f, 0.0f );
+ clippingActorC.SetPosition( 0.0f, 100.0f, 0.0f );
+ clippingActorD.SetPosition( 0.0f, 0.0f, 0.0f );
+ clippingActorE.SetPosition( 0.0f, 0.0f, 0.0f );
+
+ Stage::GetCurrent().Add( clippingActorA );
+ clippingActorA.Add( clippingActorB );
+ Stage::GetCurrent().Add( clippingActorC );
+ Stage::GetCurrent().Add( clippingActorD );
+ clippingActorD.Add( clippingActorE );
+
+ // Gather the call trace.
+ GenerateTrace( application, enabledDisableTrace, scissorTrace );
+
+ // Check we are writing to the color buffer.
+ CheckColorMask( glAbstraction, true );
+
+ // Check scissor test was enabled.
+ DALI_TEST_CHECK( enabledDisableTrace.FindMethodAndParams( "Enable", "3089" ) ); // 3089 = 0xC11 (GL_SCISSOR_TEST)
+
+ // Check the scissor was set, and the coordinates are correct.
+ std::string clipA( "0, 500, 480, 200" );
+ std::string clipB( "0, 580, 480, 40" );
+ std::string clipC( "0, 200, 480, 200" );
+ std::string clipD( "0, 300, 480, 200" );
+
+ DALI_TEST_CHECK( scissorTrace.FindMethodAndParams( "Scissor", clipA ) );
+ DALI_TEST_CHECK( scissorTrace.FindMethodAndParams( "Scissor", clipB ) );
+ DALI_TEST_CHECK( scissorTrace.FindMethodAndParams( "Scissor", clipC ) );
+ DALI_TEST_CHECK( scissorTrace.FindMethodAndParams( "Scissor", clipD ) );
+ DALI_TEST_CHECK( scissorTrace.CountMethod( "Scissor" ) == 4 ); // Scissor rect should not be changed in clippingActorE case. So count should be 4.
+
+ END_TEST;
+}
+
int UtcDaliActorPropertyClippingActorWithRendererOverride(void)
{
// This test checks that an actor with clipping will be ignored if overridden by the Renderer properties.
TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
// Create a clipping actor.
- Actor actorDepth1Clip = CreateActorWithContent();
+ Actor actorDepth1Clip = CreateActorWithContent16x16();
actorDepth1Clip.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
Stage::GetCurrent().Add( actorDepth1Clip );
tet_printf( "Actor World Position ( %f %f ) AnchorPoint::BOTTOM_RIGHT Position x=30 y = 420.0\n", actorWorldPosition.x, actorWorldPosition.y );
tet_printf( "Actor Screen Position( %f %f ) AnchorPoint::BOTTOM_RIGHT Position x=30 y = 420.0 \n", actorScreenPosition.x, actorScreenPosition.y );
+ tet_infoline( "UtcDaliActorGetScreenPosition Scale parent and check child's screen position \n" );
+
+ actorA.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+ actorA.SetPosition( 30.0, 30.0 );
+
+ Actor actorB = Actor::New();
+ actorB.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+ actorB.SetSize( size2 );
+ actorB.SetPosition( 10.f, 10.f );
+ actorA.Add( actorB );
+
+ actorA.SetScale( 2.0f );
+
+ application.SendNotification();
+ application.Render();
+
+ actorScreenPosition = actorB.GetProperty( DevelActor::Property::SCREEN_POSITION).Get< Vector2 >();
+
+ DALI_TEST_EQUALS( actorScreenPosition.x, 50lu , TEST_LOCATION );
+ DALI_TEST_EQUALS( actorScreenPosition.y, 50lu , TEST_LOCATION );
END_TEST;
}