/*
- * Copyright (c) 2016 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.
struct TouchedSignalData
{
TouchedSignalData()
- : functorCalled(false)
+ : functorCalled(false),
+ createNewScene(false),
+ newSceneCreated(false)
{}
void Reset()
{
functorCalled = false;
+ createNewScene = false;
+ newSceneCreated = false;
receivedTouchEvent.points.clear();
receivedTouchEvent.time = 0;
}
bool functorCalled;
+ bool createNewScene;
+ bool newSceneCreated;
TouchEvent receivedTouchEvent;
TouchData receivedTouchData;
};
{
signalData.functorCalled = true;
signalData.receivedTouchData = touch;
+
+ if ( signalData.createNewScene )
+ {
+ Dali::Integration::Scene scene = Dali::Integration::Scene::New( Vector2( 480.0f, 800.0f ) );
+ DALI_TEST_CHECK( scene );
+
+ signalData.newSceneCreated = true;
+ }
}
void operator()()
END_TEST;
}
+int UtcDaliSceneDiscard(void)
+{
+ TestApplication application;
+ tet_infoline("Testing Dali::Scene::Discard");
+
+ // Create a new Scene
+ Dali::Integration::Scene scene = Dali::Integration::Scene::New( Vector2( 480.0f, 800.0f ) );
+ DALI_TEST_CHECK( scene );
+
+ // One reference of scene kept here and the other one kept in the Core
+ DALI_TEST_CHECK( scene.GetBaseObject().ReferenceCount() == 2 );
+
+ // Render and notify.
+ application.SendNotification();
+ application.Render(0);
+
+ // Keep the reference of the root layer handle so it will still be alive after the scene is deleted
+ Layer rootLayer = scene.GetRootLayer();
+ DALI_TEST_CHECK( rootLayer );
+ DALI_TEST_CHECK( rootLayer.GetBaseObject().ReferenceCount() == 2 );
+
+ // Request to discard the scene from the Core
+ scene.Discard();
+ DALI_TEST_CHECK( scene.GetBaseObject().ReferenceCount() == 1 );
+
+ // Reset the scene handle
+ scene.Reset();
+
+ // Render and notify.
+ application.SendNotification();
+ application.Render(0);
+
+ // At this point, the scene should have been automatically deleted
+ // To prove this, the ref count of the root layer handle should be decremented to 1
+ DALI_TEST_CHECK( rootLayer.GetBaseObject().ReferenceCount() == 1 );
+
+ // Delete the root layer handle
+ rootLayer.Reset();
+
+ // Render and notify.
+ application.SendNotification();
+ application.Render(0);
+
+ END_TEST;
+}
+
+int UtcDaliSceneCreateNewSceneDuringCoreEventProcessing(void)
+{
+ TestApplication application;
+
+ Dali::Integration::Scene scene = application.GetScene();
+
+ TouchedSignalData data;
+ data.createNewScene = true;
+ TouchFunctor functor( data );
+ scene.TouchSignal().Connect( &application, functor );
+
+ // Render and notify.
+ application.SendNotification();
+ application.Render();
+
+ GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) );
+
+ DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
+ DALI_TEST_EQUALS( true, data.createNewScene, TEST_LOCATION );
+ DALI_TEST_EQUALS( true, data.newSceneCreated, TEST_LOCATION );
+ data.Reset();
+
+ END_TEST;
+}
+
+int UtcDaliSceneRootLayerAndSceneAlignment(void)
+{
+ TestApplication application;
+
+ // Create a Scene
+ Dali::Integration::Scene scene = Dali::Integration::Scene::New( Vector2( 480.0f, 800.0f ) );
+ DALI_TEST_CHECK( scene );
+
+ // One reference of scene kept here and the other one kept in the Core
+ DALI_TEST_CHECK( scene.GetBaseObject().ReferenceCount() == 2 );
+
+ // Render and notify.
+ application.SendNotification();
+ application.Render(0);
+
+ // Keep the reference of the root layer handle so it will still be alive after the scene is deleted
+ Layer rootLayer = scene.GetRootLayer();
+ DALI_TEST_CHECK( rootLayer );
+ DALI_TEST_CHECK( rootLayer.GetBaseObject().ReferenceCount() == 2 );
+
+ // Request to discard the scene from the Core
+ scene.Discard();
+ DALI_TEST_CHECK( scene.GetBaseObject().ReferenceCount() == 1 );
+
+ // Reset the scene handle
+ scene.Reset();
+
+ // Render and notify.
+ application.SendNotification();
+ application.Render(0);
+
+ // At this point, the scene should have been automatically deleted
+ // To prove this, the ref count of the root layer handle should be decremented to 1
+ DALI_TEST_CHECK( rootLayer.GetBaseObject().ReferenceCount() == 1 );
+
+ // Create a new Scene while the root layer of the deleted scene is still alive
+ Dali::Integration::Scene newScene = Dali::Integration::Scene::New( Vector2( 480.0f, 800.0f ) );
+ DALI_TEST_CHECK( newScene );
+
+ // Render and notify.
+ application.SendNotification();
+ application.Render(0);
+
+ // At this point, we have only one scene but two root layers
+ // The root layer of the deleted scene is still alive
+ DALI_TEST_CHECK( rootLayer.GetBaseObject().ReferenceCount() == 1 );
+
+ // Delete the root layer of the deleted scene
+ rootLayer.Reset();
+
+ // Render and notify.
+ application.SendNotification();
+ application.Render(0);
+
+ END_TEST;
+}
+
int UtcDaliSceneEventProcessingFinishedP(void)
{
TestApplication application;
END_TEST;
}
+int UtcDaliSceneEnsureEmptySceneCleared(void)
+{
+ tet_infoline( "Ensure we clear the newly added window" );
+
+ TestApplication application;
+
+ // Create a new scene and set the background colors of both the new and the main scenes
+ auto defaultScene = application.GetScene();
+ defaultScene.SetBackgroundColor( Color::WHITE );
+
+ auto newScene = Integration::Scene::New( Vector2( 480.0f, 800.0f ) );
+ newScene.SetBackgroundColor( Color::RED );
+
+ // Need to create a renderable as we don't start rendering until we have at least one
+ // We don't need to add this to any scene
+ auto actor = CreateRenderableActor();
+
+ auto& glAbstraction = application.GetGlAbstraction();
+ auto clearCountBefore = glAbstraction.GetClearCountCalled();
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 2, TEST_LOCATION );
+
+ // Add the actor to the main scene
+ defaultScene.Add( actor );
+
+ application.SendNotification();
+ application.Render();
+
+ // Add another scene and set its background color, ensure we clear it to the appropriate color
+
+ auto thirdScene = Integration::Scene::New( Vector2( 200.0f, 200.0f ) );
+ thirdScene.SetBackgroundColor( Color::BLUE );
+
+ clearCountBefore = glAbstraction.GetClearCountCalled();
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 3, TEST_LOCATION );
+
+ END_TEST;
+}