X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-Scene.cpp;h=959e5ee548053c7695b99addb8ba63dbe156e224;hb=eacc080fe975c523d722dd17c044652317ddd6e8;hp=8508728f23ee593d64122cd4266983deafe3d724;hpb=d3b5cfc29172af66bca3b3ab251d678956bda029;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-Scene.cpp b/automated-tests/src/dali/utc-Dali-Scene.cpp index 8508728..959e5ee 100644 --- a/automated-tests/src/dali/utc-Dali-Scene.cpp +++ b/automated-tests/src/dali/utc-Dali-Scene.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -15,23 +15,22 @@ * */ -#include - -#include -#include +#include +#include #include -#include #include #include - -#include +#include +#include #include +#include + +#include // Internal headers are allowed here namespace { - const std::string DEFAULT_DEVICE_NAME("hwKeyboard"); // Functor for EventProcessingFinished signal @@ -40,9 +39,10 @@ struct EventProcessingFinishedFunctor /** * @param[in] eventProcessingFinished reference to a boolean variable used to check if signal has been called. */ - EventProcessingFinishedFunctor( bool& eventProcessingFinished ) - : mEventProcessingFinished( eventProcessingFinished ) - {} + EventProcessingFinishedFunctor(bool& eventProcessingFinished) + : mEventProcessingFinished(eventProcessingFinished) + { + } void operator()() { @@ -57,29 +57,31 @@ struct KeyEventSignalData { KeyEventSignalData() : functorCalled(false) - {} + { + } void Reset() { functorCalled = false; - receivedKeyEvent.keyModifier = 0; - receivedKeyEvent.keyPressedName.clear(); - receivedKeyEvent.keyPressed.clear(); + receivedKeyEvent.Reset(); } - bool functorCalled; + bool functorCalled; KeyEvent receivedKeyEvent; }; // Functor that sets the data when called struct KeyEventReceivedFunctor { - KeyEventReceivedFunctor( KeyEventSignalData& data ) : signalData( data ) { } + KeyEventReceivedFunctor(KeyEventSignalData& data) + : signalData(data) + { + } - bool operator()( const KeyEvent& keyEvent ) + bool operator()(const KeyEvent& keyEvent) { - signalData.functorCalled = true; + signalData.functorCalled = true; signalData.receivedKeyEvent = keyEvent; return true; @@ -95,56 +97,40 @@ struct TouchedSignalData : functorCalled(false), createNewScene(false), newSceneCreated(false) - {} + { + } void Reset() { - functorCalled = false; - createNewScene = false; + functorCalled = false; + createNewScene = false; newSceneCreated = false; - - receivedTouchEvent.points.clear(); - receivedTouchEvent.time = 0; - - receivedTouchData.Reset(); + receivedTouchEvent.Reset(); } - bool functorCalled; - bool createNewScene; - bool newSceneCreated; + bool functorCalled; + bool createNewScene; + bool newSceneCreated; TouchEvent receivedTouchEvent; - TouchData receivedTouchData; }; // Functor that sets the data when touched signal is received -struct TouchedFunctor +struct TouchFunctor { - TouchedFunctor( TouchedSignalData& data ) : signalData( data ) { } - - void operator()( const TouchEvent& touch ) + TouchFunctor(TouchedSignalData& data) + : signalData(data) { - signalData.functorCalled = true; - signalData.receivedTouchEvent = touch; } - TouchedSignalData& signalData; -}; - -// Functor that sets the data when touched signal is received -struct TouchFunctor -{ - TouchFunctor( TouchedSignalData& data ) : signalData( data ) { } - - void operator()( const TouchData& touch ) + void operator()(const TouchEvent& touch) { - signalData.functorCalled = true; - signalData.receivedTouchData = touch; + signalData.functorCalled = true; + signalData.receivedTouchEvent = touch; - if ( signalData.createNewScene ) + if(signalData.createNewScene) { - TestRenderSurface* surface = new TestRenderSurface( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); // This is a leak, but we need to keep the surface alive till the end - Dali::Integration::Scene scene = Dali::Integration::Scene::New( *surface ); - DALI_TEST_CHECK( scene ); + Dali::Integration::Scene scene = Dali::Integration::Scene::New(Size(480.0f, 800.0f)); + DALI_TEST_CHECK(scene); signalData.newSceneCreated = true; } @@ -163,25 +149,29 @@ struct WheelEventSignalData { WheelEventSignalData() : functorCalled(false) - {} + { + } void Reset() { functorCalled = false; } - bool functorCalled; + bool functorCalled; WheelEvent receivedWheelEvent; }; // Functor that sets the data when wheel-event signal is received struct WheelEventReceivedFunctor { - WheelEventReceivedFunctor( WheelEventSignalData& data ) : signalData( data ) { } + WheelEventReceivedFunctor(WheelEventSignalData& data) + : signalData(data) + { + } - bool operator()( const WheelEvent& wheelEvent ) + bool operator()(const WheelEvent& wheelEvent) { - signalData.functorCalled = true; + signalData.functorCalled = true; signalData.receivedWheelEvent = wheelEvent; return true; @@ -195,31 +185,31 @@ struct KeyEventGeneratedSignalData { KeyEventGeneratedSignalData() : functorCalled(false) - {} + { + } void Reset() { functorCalled = false; - receivedKeyEvent.keyModifier = 0; - receivedKeyEvent.keyPressedName.clear(); - receivedKeyEvent.keyPressed.clear(); + receivedKeyEvent.Reset(); } - bool functorCalled; + bool functorCalled; KeyEvent receivedKeyEvent; }; // Functor that sets the data when called struct KeyEventGeneratedReceivedFunctor { - KeyEventGeneratedReceivedFunctor( KeyEventGeneratedSignalData& data ) - : signalData( data ) - {} + KeyEventGeneratedReceivedFunctor(KeyEventGeneratedSignalData& data) + : signalData(data) + { + } - bool operator()( const KeyEvent& keyEvent ) + bool operator()(const KeyEvent& keyEvent) { - signalData.functorCalled = true; + signalData.functorCalled = true; signalData.receivedKeyEvent = keyEvent; return true; @@ -234,21 +224,69 @@ struct KeyEventGeneratedReceivedFunctor KeyEventGeneratedSignalData& signalData; }; -void GenerateTouch( TestApplication& application, PointState::Type state, const Vector2& screenPosition ) +// Stores data that is populated in the WheelEventGeneratedSignal callback and will be read by the TET cases +struct WheelEventGeneratedSignalData +{ + WheelEventGeneratedSignalData() + : functorCalled(false) + { + } + + void Reset() + { + functorCalled = false; + + receivedWheelEvent.Reset(); + } + + bool functorCalled; + WheelEvent receivedWheelEvent; +}; + +// Functor that sets the data when called +struct WheelEventGeneratedReceivedFunctor +{ + WheelEventGeneratedReceivedFunctor(WheelEventGeneratedSignalData& data) + : signalData(data) + { + } + + bool operator()(const WheelEvent& wheelEvent) + { + signalData.functorCalled = true; + signalData.receivedWheelEvent = wheelEvent; + + return true; + } + + bool operator()() + { + signalData.functorCalled = true; + return true; + } + + WheelEventGeneratedSignalData& signalData; +}; + +void GenerateTouch(TestApplication& application, PointState::Type state, const Vector2& screenPosition) { Integration::TouchEvent touchEvent; - Integration::Point point; - point.SetState( state ); - point.SetScreenPosition( screenPosition ); - touchEvent.points.push_back( point ); - application.ProcessEvent( touchEvent ); + Integration::Point point; + point.SetState(state); + point.SetScreenPosition(screenPosition); + touchEvent.points.push_back(point); + application.ProcessEvent(touchEvent); } -bool DummyTouchCallback( Actor actor, const TouchEvent& touch ) +bool DummyTouchCallback(Actor actor, const TouchEvent& touch) { return true; } +void FrameCallback(int frameId) +{ +} + } // unnamed namespace int UtcDaliSceneAdd(void) @@ -259,10 +297,10 @@ int UtcDaliSceneAdd(void) Dali::Integration::Scene scene = application.GetScene(); Actor actor = Actor::New(); - DALI_TEST_CHECK( !actor.OnStage() ); + DALI_TEST_CHECK(!actor.GetProperty(Actor::Property::CONNECTED_TO_SCENE)); - scene.Add( actor ); - DALI_TEST_CHECK( actor.OnStage() ); + scene.Add(actor); + DALI_TEST_CHECK(actor.GetProperty(Actor::Property::CONNECTED_TO_SCENE)); END_TEST; } @@ -275,13 +313,13 @@ int UtcDaliSceneRemove(void) Dali::Integration::Scene scene = application.GetScene(); Actor actor = Actor::New(); - DALI_TEST_CHECK( !actor.OnStage() ); + DALI_TEST_CHECK(!actor.GetProperty(Actor::Property::CONNECTED_TO_SCENE)); - scene.Add( actor ); - DALI_TEST_CHECK( actor.OnStage() ); + scene.Add(actor); + DALI_TEST_CHECK(actor.GetProperty(Actor::Property::CONNECTED_TO_SCENE)); scene.Remove(actor); - DALI_TEST_CHECK( !actor.OnStage() ); + DALI_TEST_CHECK(!actor.GetProperty(Actor::Property::CONNECTED_TO_SCENE)); END_TEST; } @@ -292,9 +330,9 @@ int UtcDaliSceneGetSize(void) tet_infoline("Testing Dali::Integration::Scene::GetSize"); Dali::Integration::Scene scene = application.GetScene(); - Size size = scene.GetSize(); - DALI_TEST_EQUALS( TestApplication::DEFAULT_SURFACE_WIDTH, size.width, TEST_LOCATION ); - DALI_TEST_EQUALS( TestApplication::DEFAULT_SURFACE_HEIGHT, size.height, TEST_LOCATION ); + Size size = scene.GetSize(); + DALI_TEST_EQUALS(TestApplication::DEFAULT_SURFACE_WIDTH, size.width, TEST_LOCATION); + DALI_TEST_EQUALS(TestApplication::DEFAULT_SURFACE_HEIGHT, size.height, TEST_LOCATION); END_TEST; } @@ -305,10 +343,10 @@ int UtcDaliSceneGetDpi(void) // Test that setting core DPI explicitly also sets up the scene's DPI. Dali::Integration::Scene scene = application.GetScene(); - scene.SetDpi( Vector2(200.0f, 180.0f) ); + scene.SetDpi(Vector2(200.0f, 180.0f)); Vector2 dpi = scene.GetDpi(); - DALI_TEST_EQUALS( dpi.x, 200.0f, TEST_LOCATION ); - DALI_TEST_EQUALS( dpi.y, 180.0f, TEST_LOCATION ); + DALI_TEST_EQUALS(dpi.x, 200.0f, TEST_LOCATION); + DALI_TEST_EQUALS(dpi.y, 180.0f, TEST_LOCATION); END_TEST; } @@ -323,13 +361,13 @@ int UtcDaliSceneGetRenderTaskList(void) const RenderTaskList& tasks = scene.GetRenderTaskList(); // There should be 1 task by default. - DALI_TEST_EQUALS( tasks.GetTaskCount(), 1u, TEST_LOCATION ); + DALI_TEST_EQUALS(tasks.GetTaskCount(), 1u, TEST_LOCATION); // RenderTaskList has it's own UTC tests. // But we can confirm that GetRenderTaskList in Stage retrieves the same RenderTaskList each time. RenderTask newTask = scene.GetRenderTaskList().CreateTask(); - DALI_TEST_EQUALS( scene.GetRenderTaskList().GetTask( 1 ), newTask, TEST_LOCATION ); + DALI_TEST_EQUALS(scene.GetRenderTaskList().GetTask(1), newTask, TEST_LOCATION); END_TEST; } @@ -340,11 +378,11 @@ int UtcDaliSceneGetRootLayer(void) tet_infoline("Testing Dali::Integration::Scene::GetRootLayer"); Dali::Integration::Scene scene = application.GetScene(); - Layer layer = scene.GetLayer( 0 ); - DALI_TEST_CHECK( layer ); + Layer layer = scene.GetLayer(0); + DALI_TEST_CHECK(layer); // Check that GetRootLayer() correctly retreived layer 0. - DALI_TEST_CHECK( scene.GetRootLayer() == layer ); + DALI_TEST_CHECK(scene.GetRootLayer() == layer); END_TEST; } @@ -356,12 +394,12 @@ int UtcDaliSceneGetLayerCount(void) Dali::Integration::Scene scene = application.GetScene(); // Initially we have a default layer - DALI_TEST_EQUALS( scene.GetLayerCount(), 1u, TEST_LOCATION ); + DALI_TEST_EQUALS(scene.GetLayerCount(), 1u, TEST_LOCATION); Layer layer = Layer::New(); - scene.Add( layer ); + scene.Add(layer); - DALI_TEST_EQUALS( scene.GetLayerCount(), 2u, TEST_LOCATION ); + DALI_TEST_EQUALS(scene.GetLayerCount(), 2u, TEST_LOCATION); END_TEST; } @@ -372,14 +410,14 @@ int UtcDaliSceneGetLayer(void) Dali::Integration::Scene scene = application.GetScene(); - Layer rootLayer = scene.GetLayer( 0 ); - DALI_TEST_CHECK( rootLayer ); + Layer rootLayer = scene.GetLayer(0); + DALI_TEST_CHECK(rootLayer); Layer layer = Layer::New(); - scene.Add( layer ); + scene.Add(layer); - Layer sameLayer = scene.GetLayer( 1 ); - DALI_TEST_CHECK( layer == sameLayer ); + Layer sameLayer = scene.GetLayer(1); + DALI_TEST_CHECK(layer == sameLayer); END_TEST; } @@ -391,12 +429,26 @@ int UtcDaliSceneGet(void) Dali::Integration::Scene scene = application.GetScene(); - Actor actor = Actor::New(); - DALI_TEST_CHECK( Dali::Integration::Scene() == Dali::Integration::Scene::Get( actor ) ); + Actor parent = Actor::New(); + Actor child = Actor::New(); + + parent.Add(child); + + // Should be empty scene + DALI_TEST_CHECK(Dali::Integration::Scene() == Dali::Integration::Scene::Get(parent)); + DALI_TEST_CHECK(Dali::Integration::Scene() == Dali::Integration::Scene::Get(child)); - scene.Add( actor ); + scene.Add(parent); - DALI_TEST_CHECK( scene == Dali::Integration::Scene::Get( actor ) ); + // Should return the valid scene + DALI_TEST_CHECK(scene == Dali::Integration::Scene::Get(parent)); + DALI_TEST_CHECK(scene == Dali::Integration::Scene::Get(child)); + + parent.Unparent(); + + // Should be empty scene + DALI_TEST_CHECK(Dali::Integration::Scene() == Dali::Integration::Scene::Get(parent)); + DALI_TEST_CHECK(Dali::Integration::Scene() == Dali::Integration::Scene::Get(child)); END_TEST; } @@ -407,12 +459,11 @@ int UtcDaliSceneDiscard(void) tet_infoline("Testing Dali::Scene::Discard"); // Create a new Scene - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - Dali::Integration::Scene scene = Dali::Integration::Scene::New( surface ); - DALI_TEST_CHECK( scene ); + Dali::Integration::Scene scene = Dali::Integration::Scene::New(Size(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 ); + DALI_TEST_CHECK(scene.GetBaseObject().ReferenceCount() == 2); // Render and notify. application.SendNotification(); @@ -420,12 +471,12 @@ int UtcDaliSceneDiscard(void) // 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 ); + 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 ); + DALI_TEST_CHECK(scene.GetBaseObject().ReferenceCount() == 1); // Reset the scene handle scene.Reset(); @@ -436,7 +487,7 @@ int UtcDaliSceneDiscard(void) // 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 ); + DALI_TEST_CHECK(rootLayer.GetBaseObject().ReferenceCount() == 1); // Delete the root layer handle rootLayer.Reset(); @@ -456,18 +507,18 @@ int UtcDaliSceneCreateNewSceneDuringCoreEventProcessing(void) TouchedSignalData data; data.createNewScene = true; - TouchFunctor functor( data ); - scene.TouchSignal().Connect( &application, functor ); + TouchFunctor functor(data); + scene.TouchedSignal().Connect(&application, functor); // Render and notify. application.SendNotification(); application.Render(); - GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) ); + 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 ); + 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; @@ -478,16 +529,15 @@ int UtcDaliSceneRootLayerAndSceneAlignment(void) TestApplication application; // Create a Scene - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - Dali::Integration::Scene scene = Dali::Integration::Scene::New( surface ); - DALI_TEST_CHECK( scene ); + Dali::Integration::Scene scene = Dali::Integration::Scene::New(Size(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 ); + DALI_TEST_CHECK(scene.GetBaseObject().ReferenceCount() == 2); // Add a renderable actor to the scene auto actor = CreateRenderableActor(); - scene.Add( actor ); + scene.Add(actor); // Render and notify. application.SendNotification(); @@ -495,12 +545,12 @@ int UtcDaliSceneRootLayerAndSceneAlignment(void) // 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 ); + 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 ); + DALI_TEST_CHECK(scene.GetBaseObject().ReferenceCount() == 1); // Reset the scene handle scene.Reset(); @@ -511,12 +561,11 @@ int UtcDaliSceneRootLayerAndSceneAlignment(void) // 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 ); + DALI_TEST_CHECK(rootLayer.GetBaseObject().ReferenceCount() == 1); // Create a new Scene while the root layer of the deleted scene is still alive - TestRenderSurface surface2( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - Dali::Integration::Scene newScene = Dali::Integration::Scene::New( surface2 ); - DALI_TEST_CHECK( newScene ); + Dali::Integration::Scene newScene = Dali::Integration::Scene::New(Size(480.0f, 800.0f)); + DALI_TEST_CHECK(newScene); // Render and notify. application.SendNotification(); @@ -524,7 +573,7 @@ int UtcDaliSceneRootLayerAndSceneAlignment(void) // 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 ); + DALI_TEST_CHECK(rootLayer.GetBaseObject().ReferenceCount() == 1); // Delete the root layer of the deleted scene rootLayer.Reset(); @@ -536,157 +585,120 @@ int UtcDaliSceneRootLayerAndSceneAlignment(void) END_TEST; } -int UtcDaliSceneDeleteSurface(void) -{ - TestApplication application; - - // Create the render surface for the scene - TestRenderSurface* renderSurface = new TestRenderSurface( Dali::PositionSize( 0, 0, 480.0f, 800.0f ) ); - - // Create a Scene - Dali::Integration::Scene scene = Dali::Integration::Scene::New( *renderSurface ); - DALI_TEST_CHECK( scene ); - - // Render and notify. - application.SendNotification(); - application.Render(0); - - // Add a renderable actor to the scene - auto actor = CreateRenderableActor(); - scene.Add( actor ); - - // Render and notify. - application.SendNotification(); - application.Render(0); - - // Notify the Core that the render surface will be deleted. - application.GetCore().SurfaceDeleted( renderSurface ); - - // Delete the render surface - delete renderSurface; - renderSurface = nullptr; - - // Render and notify. - application.SendNotification(); - application.Render(0); - - END_TEST; -} - int UtcDaliSceneEventProcessingFinishedP(void) { - TestApplication application; + TestApplication application; Dali::Integration::Scene scene = application.GetScene(); - bool eventProcessingFinished = false; - EventProcessingFinishedFunctor functor( eventProcessingFinished ); - scene.EventProcessingFinishedSignal().Connect( &application, functor ); + bool eventProcessingFinished = false; + EventProcessingFinishedFunctor functor(eventProcessingFinished); + scene.EventProcessingFinishedSignal().Connect(&application, functor); - Actor actor( Actor::New() ); - scene.Add( actor ); + Actor actor(Actor::New()); + scene.Add(actor); application.SendNotification(); application.Render(); - DALI_TEST_CHECK( eventProcessingFinished ); + DALI_TEST_CHECK(eventProcessingFinished); END_TEST; } int UtcDaliSceneEventProcessingFinishedN(void) { - TestApplication application; + TestApplication application; Dali::Integration::Scene scene = application.GetScene(); - bool eventProcessingFinished = false; - EventProcessingFinishedFunctor functor( eventProcessingFinished ); - scene.EventProcessingFinishedSignal().Connect( &application, functor ); + bool eventProcessingFinished = false; + EventProcessingFinishedFunctor functor(eventProcessingFinished); + scene.EventProcessingFinishedSignal().Connect(&application, functor); - Actor actor( Actor::New() ); - scene.Add( actor ); + Actor actor(Actor::New()); + scene.Add(actor); // Do not complete event processing and confirm the signal has not been emitted. - DALI_TEST_CHECK( !eventProcessingFinished ); + DALI_TEST_CHECK(!eventProcessingFinished); END_TEST; } int UtcDaliSceneSignalKeyEventP(void) { - TestApplication application; + TestApplication application; Dali::Integration::Scene scene = application.GetScene(); - KeyEventSignalData data; - KeyEventReceivedFunctor functor( data ); - scene.KeyEventSignal().Connect( &application, functor ); + KeyEventSignalData data; + KeyEventReceivedFunctor functor(data); + scene.KeyEventSignal().Connect(&application, functor); - Integration::KeyEvent event( "i", "", "i", 0, 0, 0, Integration::KeyEvent::Down, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ); - application.ProcessEvent( event ); + Integration::KeyEvent event("i", "", "i", 0, 0, 0, Integration::KeyEvent::DOWN, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( event.keyModifier == data.receivedKeyEvent.keyModifier ); - DALI_TEST_CHECK( event.keyName == data.receivedKeyEvent.keyPressedName ); - DALI_TEST_CHECK( event.keyString == data.receivedKeyEvent.keyPressed ); - DALI_TEST_CHECK( event.state == static_cast( data.receivedKeyEvent.state ) ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event.keyModifier == data.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event.keyName == data.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event.keyString == data.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event.state == static_cast(data.receivedKeyEvent.GetState())); data.Reset(); - Integration::KeyEvent event2( "i", "", "i", 0, 0, 0, Integration::KeyEvent::Up, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ); - application.ProcessEvent( event2 ); + Integration::KeyEvent event2("i", "", "i", 0, 0, 0, Integration::KeyEvent::UP, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event2); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( event2.keyModifier == data.receivedKeyEvent.keyModifier ); - DALI_TEST_CHECK( event2.keyName == data.receivedKeyEvent.keyPressedName ); - DALI_TEST_CHECK( event2.keyString == data.receivedKeyEvent.keyPressed ); - DALI_TEST_CHECK( event2.state == static_cast( data.receivedKeyEvent.state ) ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event2.keyModifier == data.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event2.keyName == data.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event2.keyString == data.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event2.state == static_cast(data.receivedKeyEvent.GetState())); data.Reset(); - Integration::KeyEvent event3( "a", "", "a", 0, 0, 0, Integration::KeyEvent::Down, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ); - application.ProcessEvent( event3 ); + Integration::KeyEvent event3("a", "", "a", 0, 0, 0, Integration::KeyEvent::DOWN, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event3); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( event3.keyModifier == data.receivedKeyEvent.keyModifier ); - DALI_TEST_CHECK( event3.keyName == data.receivedKeyEvent.keyPressedName ); - DALI_TEST_CHECK( event3.keyString == data.receivedKeyEvent.keyPressed ); - DALI_TEST_CHECK( event3.state == static_cast( data.receivedKeyEvent.state ) ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event3.keyModifier == data.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event3.keyName == data.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event3.keyString == data.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event3.state == static_cast(data.receivedKeyEvent.GetState())); data.Reset(); - Integration::KeyEvent event4( "a", "", "a", 0, 0, 0, Integration::KeyEvent::Up, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ); - application.ProcessEvent( event4 ); + Integration::KeyEvent event4("a", "", "a", 0, 0, 0, Integration::KeyEvent::UP, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event4); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( event4.keyModifier == data.receivedKeyEvent.keyModifier ); - DALI_TEST_CHECK( event4.keyName == data.receivedKeyEvent.keyPressedName ); - DALI_TEST_CHECK( event4.keyString == data.receivedKeyEvent.keyPressed ); - DALI_TEST_CHECK( event4.state == static_cast( data.receivedKeyEvent.state ) ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event4.keyModifier == data.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event4.keyName == data.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event4.keyString == data.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event4.state == static_cast(data.receivedKeyEvent.GetState())); END_TEST; } int UtcDaliSceneSignalKeyEventN(void) { - TestApplication application; + TestApplication application; Dali::Integration::Scene scene = application.GetScene(); - KeyEventSignalData data; - KeyEventReceivedFunctor functor( data ); - scene.KeyEventSignal().Connect( &application, functor ); + KeyEventSignalData data; + KeyEventReceivedFunctor functor(data); + scene.KeyEventSignal().Connect(&application, functor); // Check that a non-pressed key events data is not modified. - DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION ); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); END_TEST; } -int UtcDaliSceneTouchSignalP(void) +int UtcDaliSceneTouchedSignalP(void) { - TestApplication application; + TestApplication application; Dali::Integration::Scene scene = application.GetScene(); TouchedSignalData data; - TouchFunctor functor( data ); - scene.TouchSignal().Connect( &application, functor ); + TouchFunctor functor(data); + scene.TouchedSignal().Connect(&application, functor); // Render and notify. application.SendNotification(); @@ -694,28 +706,28 @@ int UtcDaliSceneTouchSignalP(void) // Basic test: No actors, single touch (down then up). { - GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) ); + GenerateTouch(application, PointState::DOWN, Vector2(10.0f, 10.0f)); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u ); - DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(data.receivedTouchEvent.GetPointCount() != 0u); + DALI_TEST_CHECK(!data.receivedTouchEvent.GetHitActor(0)); data.Reset(); - GenerateTouch( application, PointState::UP, Vector2( 10.0f, 10.0f ) ); + GenerateTouch(application, PointState::UP, Vector2(10.0f, 10.0f)); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u ); - DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(data.receivedTouchEvent.GetPointCount() != 0u); + DALI_TEST_CHECK(!data.receivedTouchEvent.GetHitActor(0)); data.Reset(); } // Add an actor to the scene. Actor actor = Actor::New(); - actor.SetSize( 100.0f, 100.0f ); - actor.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - actor.SetParentOrigin( ParentOrigin::TOP_LEFT ); - actor.TouchedSignal().Connect( &DummyTouchCallback ); - scene.Add( actor ); + actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + actor.TouchedSignal().Connect(&DummyTouchCallback); + scene.Add(actor); // Render and notify. application.SendNotification(); @@ -723,122 +735,122 @@ int UtcDaliSceneTouchSignalP(void) // Actor on scene, single touch, down in actor, motion, then up outside actor. { - GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) ); + GenerateTouch(application, PointState::DOWN, Vector2(10.0f, 10.0f)); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u ); - DALI_TEST_CHECK( data.receivedTouchData.GetHitActor(0) == actor ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(data.receivedTouchEvent.GetPointCount() != 0u); + DALI_TEST_CHECK(data.receivedTouchEvent.GetHitActor(0) == actor); data.Reset(); - GenerateTouch( application, PointState::MOTION, Vector2( 150.0f, 10.0f ) ); // Some motion + GenerateTouch(application, PointState::MOTION, Vector2(150.0f, 10.0f)); // Some motion - DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION ); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); data.Reset(); - GenerateTouch( application, PointState::UP, Vector2( 150.0f, 10.0f ) ); // Some motion + GenerateTouch(application, PointState::UP, Vector2(150.0f, 10.0f)); // Some motion - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u ); - DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(data.receivedTouchEvent.GetPointCount() != 0u); + DALI_TEST_CHECK(!data.receivedTouchEvent.GetHitActor(0)); data.Reset(); } // Multiple touch. Should only receive a touch on first down and last up. { Integration::TouchEvent touchEvent; - Integration::Point point; + Integration::Point point; // 1st point - point.SetState( PointState::DOWN ); - point.SetScreenPosition( Vector2( 10.0f, 10.0f ) ); - touchEvent.points.push_back( point ); - application.ProcessEvent( touchEvent ); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_EQUALS( data.receivedTouchData.GetPointCount(), 1u, TEST_LOCATION ); + point.SetState(PointState::DOWN); + point.SetScreenPosition(Vector2(10.0f, 10.0f)); + touchEvent.points.push_back(point); + application.ProcessEvent(touchEvent); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_EQUALS(data.receivedTouchEvent.GetPointCount(), 1u, TEST_LOCATION); data.Reset(); // 2nd point - touchEvent.points[0].SetState( PointState::STATIONARY ); - point.SetDeviceId( 1 ); - point.SetScreenPosition( Vector2( 50.0f, 50.0f ) ); - touchEvent.points.push_back( point ); - application.ProcessEvent( touchEvent ); - DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION ); + touchEvent.points[0].SetState(PointState::STATIONARY); + point.SetDeviceId(1); + point.SetScreenPosition(Vector2(50.0f, 50.0f)); + touchEvent.points.push_back(point); + application.ProcessEvent(touchEvent); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); data.Reset(); // Primary point is up - touchEvent.points[0].SetState( PointState::UP ); - touchEvent.points[1].SetState( PointState::STATIONARY ); - application.ProcessEvent( touchEvent ); - DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION ); + touchEvent.points[0].SetState(PointState::UP); + touchEvent.points[1].SetState(PointState::STATIONARY); + application.ProcessEvent(touchEvent); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); data.Reset(); // Remove 1st point now, 2nd point is now in motion - touchEvent.points.erase( touchEvent.points.begin() ); - touchEvent.points[0].SetState( PointState::MOTION ); - touchEvent.points[0].SetScreenPosition( Vector2( 150.0f, 50.0f ) ); - application.ProcessEvent( touchEvent ); - DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION ); + touchEvent.points.erase(touchEvent.points.begin()); + touchEvent.points[0].SetState(PointState::MOTION); + touchEvent.points[0].SetScreenPosition(Vector2(150.0f, 50.0f)); + application.ProcessEvent(touchEvent); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); data.Reset(); // Final point Up - touchEvent.points[0].SetState( PointState::UP ); - application.ProcessEvent( touchEvent ); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_EQUALS( data.receivedTouchData.GetPointCount(), 1u, TEST_LOCATION ); + touchEvent.points[0].SetState(PointState::UP); + application.ProcessEvent(touchEvent); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_EQUALS(data.receivedTouchEvent.GetPointCount(), 1u, TEST_LOCATION); data.Reset(); } END_TEST; } -int UtcDaliSceneTouchSignalN(void) +int UtcDaliSceneTouchedSignalN(void) { - TestApplication application; + TestApplication application; Dali::Integration::Scene scene = application.GetScene(); TouchedSignalData data; - TouchFunctor functor( data ); - scene.TouchSignal().Connect( &application, functor ); + TouchFunctor functor(data); + scene.TouchedSignal().Connect(&application, functor); // Render and notify. application.SendNotification(); application.Render(); // Confirm functor not called before there has been any touch event. - DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION ); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); // No actors, single touch, down, motion then up. { - GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) ); + GenerateTouch(application, PointState::DOWN, Vector2(10.0f, 10.0f)); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u ); - DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0)); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(data.receivedTouchEvent.GetPointCount() != 0u); + DALI_TEST_CHECK(!data.receivedTouchEvent.GetHitActor(0)); data.Reset(); // Confirm there is no signal when the touchpoint is only moved. - GenerateTouch( application, PointState::MOTION, Vector2( 1200.0f, 10.0f ) ); // Some motion + GenerateTouch(application, PointState::MOTION, Vector2(1200.0f, 10.0f)); // Some motion - DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION ); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); data.Reset(); // Confirm a following up event generates a signal. - GenerateTouch( application, PointState::UP, Vector2( 1200.0f, 10.0f ) ); + GenerateTouch(application, PointState::UP, Vector2(1200.0f, 10.0f)); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u ); - DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0)); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(data.receivedTouchEvent.GetPointCount() != 0u); + DALI_TEST_CHECK(!data.receivedTouchEvent.GetHitActor(0)); data.Reset(); } // Add an actor to the scene. Actor actor = Actor::New(); - actor.SetSize( 100.0f, 100.0f ); - actor.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - actor.SetParentOrigin( ParentOrigin::TOP_LEFT ); - actor.TouchedSignal().Connect( &DummyTouchCallback ); - scene.Add( actor ); + actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + actor.TouchedSignal().Connect(&DummyTouchCallback); + scene.Add(actor); // Render and notify. application.SendNotification(); @@ -846,34 +858,34 @@ int UtcDaliSceneTouchSignalN(void) // Actor on scene. Interrupted before down and interrupted after down. { - GenerateTouch( application, PointState::INTERRUPTED, Vector2( 10.0f, 10.0f ) ); + GenerateTouch(application, PointState::INTERRUPTED, Vector2(10.0f, 10.0f)); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u ); - DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) ); - DALI_TEST_CHECK( data.receivedTouchData.GetState(0) == PointState::INTERRUPTED ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(data.receivedTouchEvent.GetPointCount() != 0u); + DALI_TEST_CHECK(!data.receivedTouchEvent.GetHitActor(0)); + DALI_TEST_CHECK(data.receivedTouchEvent.GetState(0) == PointState::INTERRUPTED); data.Reset(); - GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) ); + GenerateTouch(application, PointState::DOWN, Vector2(10.0f, 10.0f)); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u ); - DALI_TEST_CHECK( data.receivedTouchData.GetHitActor(0) == actor ); - DALI_TEST_CHECK( data.receivedTouchData.GetState(0) == PointState::DOWN ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(data.receivedTouchEvent.GetPointCount() != 0u); + DALI_TEST_CHECK(data.receivedTouchEvent.GetHitActor(0) == actor); + DALI_TEST_CHECK(data.receivedTouchEvent.GetState(0) == PointState::DOWN); data.Reset(); - GenerateTouch( application, PointState::INTERRUPTED, Vector2( 10.0f, 10.0f ) ); + GenerateTouch(application, PointState::INTERRUPTED, Vector2(10.0f, 10.0f)); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u ); - DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) ); - DALI_TEST_CHECK( data.receivedTouchData.GetState(0) == PointState::INTERRUPTED ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(data.receivedTouchEvent.GetPointCount() != 0u); + DALI_TEST_CHECK(!data.receivedTouchEvent.GetHitActor(0)); + DALI_TEST_CHECK(data.receivedTouchEvent.GetState(0) == PointState::INTERRUPTED); - DALI_TEST_EQUALS( data.receivedTouchData.GetPointCount(), 1u, TEST_LOCATION ); + DALI_TEST_EQUALS(data.receivedTouchEvent.GetPointCount(), 1u, TEST_LOCATION); // Check that getting info about a non-existent point returns an empty handle - Actor actor = data.receivedTouchData.GetHitActor( 1 ); - DALI_TEST_CHECK( !actor ); + Actor actor = data.receivedTouchEvent.GetHitActor(1); + DALI_TEST_CHECK(!actor); data.Reset(); } @@ -883,131 +895,81 @@ int UtcDaliSceneTouchSignalN(void) int UtcDaliSceneSignalWheelEventP(void) { - TestApplication application; + TestApplication application; Dali::Integration::Scene scene = application.GetScene(); - WheelEventSignalData data; - WheelEventReceivedFunctor functor( data ); - scene.WheelEventSignal().Connect( &application, functor ); + WheelEventSignalData data; + WheelEventReceivedFunctor functor(data); + scene.WheelEventSignal().Connect(&application, functor); - Integration::WheelEvent event( Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2( 0.0f, 0.0f ), 1, 1000u ); - application.ProcessEvent( event ); + Integration::WheelEvent event(Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2(0.0f, 0.0f), 1, 1000u); + application.ProcessEvent(event); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( static_cast< WheelEvent::Type >(event.type) == data.receivedWheelEvent.type ); - DALI_TEST_CHECK( event.direction == data.receivedWheelEvent.direction ); - DALI_TEST_CHECK( event.modifiers == data.receivedWheelEvent.modifiers ); - DALI_TEST_CHECK( event.point == data.receivedWheelEvent.point ); - DALI_TEST_CHECK( event.z == data.receivedWheelEvent.z ); - DALI_TEST_CHECK( event.timeStamp == data.receivedWheelEvent.timeStamp ); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(static_cast(event.type) == data.receivedWheelEvent.GetType()); + DALI_TEST_CHECK(event.direction == data.receivedWheelEvent.GetDirection()); + DALI_TEST_CHECK(event.modifiers == data.receivedWheelEvent.GetModifiers()); + DALI_TEST_CHECK(event.point == data.receivedWheelEvent.GetPoint()); + DALI_TEST_CHECK(event.delta == data.receivedWheelEvent.GetDelta()); + DALI_TEST_CHECK(event.timeStamp == data.receivedWheelEvent.GetTime()); data.Reset(); - Integration::WheelEvent event2( Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2( 0.0f, 0.0f ), -1, 1000u ); - application.ProcessEvent( event2 ); - - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( static_cast< WheelEvent::Type >(event2.type) == data.receivedWheelEvent.type ); - DALI_TEST_CHECK( event2.direction == data.receivedWheelEvent.direction ); - DALI_TEST_CHECK( event2.modifiers == data.receivedWheelEvent.modifiers ); - DALI_TEST_CHECK( event2.point == data.receivedWheelEvent.point ); - DALI_TEST_CHECK( event2.z == data.receivedWheelEvent.z ); - DALI_TEST_CHECK( event2.timeStamp == data.receivedWheelEvent.timeStamp ); - 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 ); - - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - auto newScene = Integration::Scene::New( surface ); - 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 - - TestRenderSurface surface2( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - auto thirdScene = Integration::Scene::New( surface2 ); - thirdScene.SetBackgroundColor( Color::BLUE ); - - clearCountBefore = glAbstraction.GetClearCountCalled(); - - application.SendNotification(); - application.Render(); - - DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 3, TEST_LOCATION ); + Integration::WheelEvent event2(Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2(0.0f, 0.0f), -1, 1000u); + application.ProcessEvent(event2); + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(static_cast(event2.type) == data.receivedWheelEvent.GetType()); + DALI_TEST_CHECK(event2.direction == data.receivedWheelEvent.GetDirection()); + DALI_TEST_CHECK(event2.modifiers == data.receivedWheelEvent.GetModifiers()); + DALI_TEST_CHECK(event2.point == data.receivedWheelEvent.GetPoint()); + DALI_TEST_CHECK(event2.delta == data.receivedWheelEvent.GetDelta()); + DALI_TEST_CHECK(event2.timeStamp == data.receivedWheelEvent.GetTime()); END_TEST; } int UtcDaliSceneSurfaceResizedDefaultScene(void) { - tet_infoline( "Ensure resizing of the surface is handled properly" ); + tet_infoline("Ensure resizing of the surface is handled properly"); TestApplication application; auto defaultScene = application.GetScene(); - Integration::RenderSurface* defaultSurface = defaultScene.GetSurface(); - DALI_TEST_CHECK( defaultSurface ); + DALI_TEST_CHECK(defaultScene); - // Ensure stage size matches the surface size + // Ensure stage size matches the scene size auto stage = Stage::GetCurrent(); - DALI_TEST_EQUALS( stage.GetSize(), Vector2( defaultSurface->GetPositionSize().width, defaultSurface->GetPositionSize().height ), TEST_LOCATION ); + DALI_TEST_EQUALS(stage.GetSize(), defaultScene.GetSize(), TEST_LOCATION); - // Resize the surface and inform the scene accordingly - Vector2 newSize( 1000.0f, 2000.0f ); - DALI_TEST_CHECK( stage.GetSize() != newSize ); - defaultSurface->MoveResize( PositionSize( 0, 0, newSize.width, newSize.height ) ); - defaultScene.SurfaceResized(); + // Resize the scene + Vector2 newSize(1000.0f, 2000.0f); + DALI_TEST_CHECK(stage.GetSize() != newSize); + defaultScene.SurfaceResized(newSize.width, newSize.height); - DALI_TEST_EQUALS( stage.GetSize(), newSize, TEST_LOCATION ); - DALI_TEST_EQUALS( defaultScene.GetSize(), newSize, TEST_LOCATION ); + DALI_TEST_EQUALS(stage.GetSize(), newSize, TEST_LOCATION); + DALI_TEST_EQUALS(defaultScene.GetSize(), newSize, TEST_LOCATION); END_TEST; } int UtcDaliSceneSurfaceResizedDefaultSceneViewport(void) { - tet_infoline( "Ensure resizing of the surface & viewport is handled properly" ); + tet_infoline("Ensure resizing of the surface & viewport is handled properly"); - TestApplication application; + TestApplication application; TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); - TraceCallStack& callStack = glAbstraction.GetViewportTrace(); - glAbstraction.EnableViewportCallTrace( true ); + TraceCallStack& callStack = glAbstraction.GetViewportTrace(); + glAbstraction.EnableViewportCallTrace(true); // Initial scene setup Geometry geometry = CreateQuadGeometry(); - Shader shader = CreateShader(); - Renderer renderer = Renderer::New( geometry, shader ); + Shader shader = CreateShader(); + Renderer renderer = Renderer::New(geometry, shader); Actor actor = Actor::New(); actor.AddRenderer(renderer); - actor.SetSize(400, 400); - Stage::GetCurrent().Add(actor); + actor.SetProperty(Actor::Property::SIZE, Vector2(400.0f, 400.0f)); + application.GetScene().Add(actor); // Render before resizing surface application.SendNotification(); @@ -1015,67 +977,93 @@ int UtcDaliSceneSurfaceResizedDefaultSceneViewport(void) glAbstraction.ResetViewportCallStack(); auto defaultScene = application.GetScene(); - Integration::RenderSurface* defaultSurface = defaultScene.GetSurface(); - DALI_TEST_CHECK( defaultSurface ); + DALI_TEST_CHECK(defaultScene); + + // consume the resize flag by first rendering + defaultScene.IsSurfaceRectChanged(); - // Ensure stage size matches the surface size + // Ensure stage size matches the scene size auto stage = Stage::GetCurrent(); - DALI_TEST_EQUALS( stage.GetSize(), Vector2( defaultSurface->GetPositionSize().width, defaultSurface->GetPositionSize().height ), TEST_LOCATION ); + DALI_TEST_EQUALS(stage.GetSize(), defaultScene.GetSize(), TEST_LOCATION); - // Resize the surface and inform the scene accordingly - Vector2 newSize( 1000.0f, 2000.0f ); - std::string viewportParams( "0, 0, 1000, 2000" ); // to match newSize - DALI_TEST_CHECK( stage.GetSize() != newSize ); - defaultSurface->MoveResize( PositionSize( 0, 0, newSize.width, newSize.height ) ); - defaultScene.SurfaceResized(); + Rect surfaceRect = defaultScene.GetCurrentSurfaceRect(); + + bool surfaceResized; + // check resized flag before surface is resized. + surfaceResized = defaultScene.IsSurfaceRectChanged(); + DALI_TEST_EQUALS(surfaceResized, false, TEST_LOCATION); + + // Resize the scene + Vector2 newSize(1000.0f, 2000.0f); + std::string viewportParams("0, 0, 1000, 2000"); // to match newSize + DALI_TEST_CHECK(stage.GetSize() != newSize); + defaultScene.SurfaceResized(newSize.width, newSize.height); + + DALI_TEST_EQUALS(stage.GetSize(), newSize, TEST_LOCATION); + DALI_TEST_EQUALS(defaultScene.GetSize(), newSize, TEST_LOCATION); - DALI_TEST_EQUALS( stage.GetSize(), newSize, TEST_LOCATION ); - DALI_TEST_EQUALS( defaultScene.GetSize(), newSize, TEST_LOCATION ); + // Check current surface rect + Rect newSurfaceRect = defaultScene.GetCurrentSurfaceRect(); + + // It should not be changed yet. + DALI_TEST_CHECK(surfaceRect == newSurfaceRect); // Render after resizing surface application.SendNotification(); application.Render(0); + surfaceResized = defaultScene.IsSurfaceRectChanged(); + DALI_TEST_EQUALS(surfaceResized, true, TEST_LOCATION); + // Check that the viewport is handled properly - DALI_TEST_CHECK( callStack.FindMethodAndGetParameters("Viewport", viewportParams ) ); + DALI_TEST_CHECK(callStack.FindIndexFromMethodAndParams("Viewport", viewportParams) >= 0); + + // Check current surface rect + newSurfaceRect = defaultScene.GetCurrentSurfaceRect(); + + // It should be changed + DALI_TEST_EQUALS(newSurfaceRect.x, 0, TEST_LOCATION); + DALI_TEST_EQUALS(newSurfaceRect.y, 0, TEST_LOCATION); + DALI_TEST_EQUALS(newSurfaceRect.width, 1000, TEST_LOCATION); + DALI_TEST_EQUALS(newSurfaceRect.height, 2000, TEST_LOCATION); END_TEST; } int UtcDaliSceneSurfaceResizedMultipleRenderTasks(void) { - tet_infoline( "Ensure resizing of the surface & viewport is handled properly" ); + tet_infoline("Ensure resizing of the surface & viewport is handled properly"); - TestApplication application; + TestApplication application; TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); - TraceCallStack& callStack = glAbstraction.GetViewportTrace(); - glAbstraction.EnableViewportCallTrace( true ); + TraceCallStack& callStack = glAbstraction.GetViewportTrace(); + glAbstraction.EnableViewportCallTrace(true); // Initial scene setup - auto stage = Stage::GetCurrent(); + auto scene = application.GetScene(); Geometry geometry = CreateQuadGeometry(); - Shader shader = CreateShader(); - Renderer renderer = Renderer::New( geometry, shader ); + Shader shader = CreateShader(); + Renderer renderer = Renderer::New(geometry, shader); Actor actor = Actor::New(); actor.AddRenderer(renderer); - int testWidth = 400; + int testWidth = 400; int testHeight = 400; - actor.SetSize(testWidth, testHeight); - stage.Add(actor); + actor.SetProperty(Actor::Property::SIZE, Vector2(testWidth, testHeight)); + scene.Add(actor); - CameraActor offscreenCameraActor = CameraActor::New( Size( testWidth, testHeight ) ); - Stage::GetCurrent().Add( offscreenCameraActor ); + CameraActor offscreenCameraActor = CameraActor::New(Size(testWidth, testHeight)); + application.GetScene().Add(offscreenCameraActor); - FrameBuffer newFrameBuffer = FrameBuffer::New( testWidth, testHeight, FrameBuffer::Attachment::NONE ); + FrameBuffer newFrameBuffer = FrameBuffer::New(testWidth, testHeight, FrameBuffer::Attachment::NONE); - RenderTask newTask = stage.GetRenderTaskList().CreateTask(); - newTask.SetCameraActor( offscreenCameraActor ); - newTask.SetSourceActor( actor ); - newTask.SetFrameBuffer( newFrameBuffer ); - newTask.SetViewportPosition( Vector2(0, 0) ); - newTask.SetViewportSize( Vector2(testWidth, testHeight) ); + RenderTask newTask = scene.GetRenderTaskList().CreateTask(); + newTask.SetCameraActor(offscreenCameraActor); + newTask.SetSourceActor(actor); + newTask.SetFrameBuffer(newFrameBuffer); + newTask.SetViewportPosition(Vector2(0, 0)); + newTask.SetViewportSize(Vector2(testWidth, testHeight)); // Render before resizing surface application.SendNotification(); @@ -1083,151 +1071,1607 @@ int UtcDaliSceneSurfaceResizedMultipleRenderTasks(void) glAbstraction.ResetViewportCallStack(); Rect initialViewport = newTask.GetViewport(); - int initialWidth = initialViewport.width; - int initialHeight = initialViewport.height; - DALI_TEST_EQUALS( initialWidth, testWidth, TEST_LOCATION ); - DALI_TEST_EQUALS( initialHeight, testHeight, TEST_LOCATION ); + int initialWidth = initialViewport.width; + int initialHeight = initialViewport.height; + DALI_TEST_EQUALS(initialWidth, testWidth, TEST_LOCATION); + DALI_TEST_EQUALS(initialHeight, testHeight, TEST_LOCATION); auto defaultScene = application.GetScene(); - Integration::RenderSurface* defaultSurface = defaultScene.GetSurface(); - DALI_TEST_CHECK( defaultSurface ); + DALI_TEST_CHECK(defaultScene); - // Ensure stage size matches the surface size - DALI_TEST_EQUALS( stage.GetSize(), Vector2( defaultSurface->GetPositionSize().width, defaultSurface->GetPositionSize().height ), TEST_LOCATION ); + // Ensure stage size matches the scene size + auto stage = Stage::GetCurrent(); + DALI_TEST_EQUALS(stage.GetSize(), defaultScene.GetSize(), TEST_LOCATION); - // Resize the surface and inform the scene accordingly - Vector2 newSize( 800.0f, 480.0f ); - std::string viewportParams( "0, 0, 800, 480" ); // to match newSize - DALI_TEST_CHECK( stage.GetSize() != newSize ); - defaultSurface->MoveResize( PositionSize( 0, 0, newSize.width, newSize.height ) ); - defaultScene.SurfaceResized(); + // Resize the scene + Vector2 newSize(1000.0f, 2000.0f); + std::string viewportParams("0, 0, 1000, 2000"); // to match newSize + DALI_TEST_CHECK(stage.GetSize() != newSize); + defaultScene.SurfaceResized(newSize.width, newSize.height); - DALI_TEST_EQUALS( stage.GetSize(), newSize, TEST_LOCATION ); - DALI_TEST_EQUALS( defaultScene.GetSize(), newSize, TEST_LOCATION ); + DALI_TEST_EQUALS(stage.GetSize(), newSize, TEST_LOCATION); + DALI_TEST_EQUALS(defaultScene.GetSize(), newSize, TEST_LOCATION); // Render after resizing surface application.SendNotification(); application.Render(0); // Check that the viewport is handled properly - DALI_TEST_CHECK( callStack.FindMethodAndGetParameters("Viewport", viewportParams ) ); + DALI_TEST_CHECK(callStack.FindMethodAndGetParameters("Viewport", viewportParams)); // Second render-task should not be affected Rect viewport = newTask.GetViewport(); - int width = viewport.width; - int height = viewport.height; - DALI_TEST_EQUALS( width, testWidth, TEST_LOCATION ); - DALI_TEST_EQUALS( height, testHeight, TEST_LOCATION ); + int width = viewport.width; + int height = viewport.height; + DALI_TEST_EQUALS(width, testWidth, TEST_LOCATION); + DALI_TEST_EQUALS(height, testHeight, TEST_LOCATION); END_TEST; } int UtcDaliSceneSurfaceResizedAdditionalScene(void) { - tet_infoline( "Ensure resizing of the surface is handled properly on additional scenes" ); + tet_infoline("Ensure resizing of the surface is handled properly on additional scenes"); TestApplication application; - Vector2 originalSurfaceSize( 500.0f, 1000.0f ); + Vector2 originalSurfaceSize(500.0f, 1000.0f); - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, originalSurfaceSize.width, originalSurfaceSize.height ) ); - auto scene = Integration::Scene::New( surface ); + auto scene = Integration::Scene::New(Size(originalSurfaceSize.width, originalSurfaceSize.height)); // Ensure stage size does NOT match the surface size - auto stage = Stage::GetCurrent(); + auto stage = Stage::GetCurrent(); const auto stageSize = stage.GetSize(); - DALI_TEST_CHECK( stageSize != originalSurfaceSize ); - DALI_TEST_EQUALS( originalSurfaceSize, scene.GetSize(), TEST_LOCATION ); + DALI_TEST_CHECK(stageSize != originalSurfaceSize); + DALI_TEST_EQUALS(originalSurfaceSize, scene.GetSize(), TEST_LOCATION); // Resize the surface and inform the scene accordingly - Vector2 newSize( 1000.0f, 2000.0f ); - DALI_TEST_CHECK( stage.GetSize() != newSize ); - surface.MoveResize( PositionSize( 0, 0, newSize.width, newSize.height ) ); - scene.SurfaceResized(); + Vector2 newSize(1000.0f, 2000.0f); + DALI_TEST_CHECK(stage.GetSize() != newSize); + scene.SurfaceResized(newSize.width, newSize.height); // Ensure the stage hasn't been resized - DALI_TEST_EQUALS( stage.GetSize(), stageSize, TEST_LOCATION ); - DALI_TEST_EQUALS( scene.GetSize(), newSize, TEST_LOCATION ); + DALI_TEST_EQUALS(stage.GetSize(), stageSize, TEST_LOCATION); + DALI_TEST_EQUALS(scene.GetSize(), newSize, TEST_LOCATION); END_TEST; } -int UtcDaliSceneSetSurface(void) +#define CLIPPING_RECT_X (16) +#define CLIPPING_RECT_Y (768) +#define CLIPPING_RECT_WIDTH (32) +#define CLIPPING_RECT_HEIGHT (32) + +int UtcDaliSceneSurfaceRotatedWithAngle0(void) { - tet_infoline( "Scene::SetSurface test" ); + tet_infoline("Ensure rotation of the surface is handled properly with Angle 0"); - TestApplication application; + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); - // Create a scene with a surface and ensure the size and surface is set correctly on the scene - Vector2 surfaceSize( 480.0f, 800.0f ); - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, surfaceSize.width, surfaceSize.height ) ); - auto scene = Integration::Scene::New( surface ); - DALI_TEST_EQUALS( scene.GetSize(), surfaceSize, TEST_LOCATION ); - DALI_TEST_CHECK( scene.GetSurface() == &surface ); - - // Create a new surface and set that on the scene - Vector2 newSurfaceSize( 1000.0f, 1000.0f ); - TestRenderSurface newSurface( PositionSize( 0.0f, 0.0f, newSurfaceSize.width, newSurfaceSize.height ) ); - scene.SetSurface( newSurface ); - DALI_TEST_EQUALS( scene.GetSize(), newSurfaceSize, TEST_LOCATION ); - DALI_TEST_CHECK( scene.GetSurface() == &newSurface ); - - // Ensure setting the same surface again doesn't have any side effects - scene.SetSurface( newSurface ); - DALI_TEST_EQUALS( scene.GetSize(), newSurfaceSize, TEST_LOCATION ); - DALI_TEST_CHECK( scene.GetSurface() == &newSurface ); + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + // consume the orientating changing flag by first rendering + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 0, 0); + + // Check current orientations + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); END_TEST; } -int UtcDaliSceneKeyEventGeneratedSignalP(void) +int UtcDaliSceneSurfaceRotatedWithAngle90(void) { - TestApplication application; - Dali::Integration::Scene scene = application.GetScene(); + tet_infoline("Ensure rotation of the surface is handled properly with Angle 90"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); - KeyEventGeneratedSignalData data; - KeyEventGeneratedReceivedFunctor functor( data ); - scene.KeyEventGeneratedSignal().Connect( &application, functor ); + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); - Integration::KeyEvent event( "a", "", "a", 0, 0, 0, Integration::KeyEvent::Up, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ); - application.ProcessEvent( event ); + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( event.keyModifier == data.receivedKeyEvent.keyModifier ); - DALI_TEST_CHECK( event.keyName == data.receivedKeyEvent.keyPressedName ); - DALI_TEST_CHECK( event.keyString == data.receivedKeyEvent.keyPressed ); - DALI_TEST_CHECK( event.state == static_cast( data.receivedKeyEvent.state ) ); + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); - data.Reset(); + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); - Integration::KeyEvent event2( "i", "", "i", 0, 0, 0, Integration::KeyEvent::Up, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ); - application.ProcessEvent( event2 ); + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( event2.keyModifier == data.receivedKeyEvent.keyModifier ); - DALI_TEST_CHECK( event2.keyName == data.receivedKeyEvent.keyPressedName ); - DALI_TEST_CHECK( event2.keyString == data.receivedKeyEvent.keyPressed ); - DALI_TEST_CHECK( event2.state == static_cast( data.receivedKeyEvent.state ) ); + application.SendNotification(); - data.Reset(); + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 90, 0); - Integration::KeyEvent event3( "a", "", "a", 0, 0, 0, Integration::KeyEvent::Down, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ); - application.ProcessEvent( event3 ); + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( event3.keyModifier == data.receivedKeyEvent.keyModifier ); - DALI_TEST_CHECK( event3.keyName == data.receivedKeyEvent.keyPressedName ); - DALI_TEST_CHECK( event3.keyString == data.receivedKeyEvent.keyPressed ); - DALI_TEST_CHECK( event3.state == static_cast( data.receivedKeyEvent.state ) ); + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); - data.Reset(); + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + // Total angle is 90, (90 + 0 = 90) + clippingRect.x = TestApplication::DEFAULT_SURFACE_HEIGHT - (CLIPPING_RECT_Y + CLIPPING_RECT_HEIGHT); + clippingRect.y = CLIPPING_RECT_X; + clippingRect.width = CLIPPING_RECT_HEIGHT; + clippingRect.height = CLIPPING_RECT_WIDTH; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 90, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneScreenRotatedWithAngle90(void) +{ + tet_infoline("Ensure rotation of the screen is handled properly with Angle 90"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 0, 90); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + // Total angle is 90, (0 + 90 = 90) + clippingRect.x = TestApplication::DEFAULT_SURFACE_HEIGHT - (CLIPPING_RECT_Y + CLIPPING_RECT_HEIGHT); + clippingRect.y = CLIPPING_RECT_X; + clippingRect.width = CLIPPING_RECT_HEIGHT; + clippingRect.height = CLIPPING_RECT_WIDTH; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 90, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSurfaceAndScreenRotatedWithAngle90(void) +{ + tet_infoline("Ensure rotation of the surface and the screen is handled properly with Angle 90"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 90, 90); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + // Total angle is 180.(90 + 90 = 180) + clippingRect.x = TestApplication::DEFAULT_SURFACE_WIDTH - (CLIPPING_RECT_X + CLIPPING_RECT_WIDTH); + clippingRect.y = TestApplication::DEFAULT_SURFACE_HEIGHT - (CLIPPING_RECT_Y + CLIPPING_RECT_HEIGHT); + clippingRect.width = CLIPPING_RECT_WIDTH; + clippingRect.height = CLIPPING_RECT_HEIGHT; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 90, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 90, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSurfaceRotatedWithAngle180(void) +{ + tet_infoline("Ensure rotation of the surface is handled properly with Angle 180"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 180, 0); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); - Integration::KeyEvent event4( "a", "", "a", 0, 0, 0, Integration::KeyEvent::Up, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ); - application.ProcessEvent( event4 ); + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + clippingRect.x = TestApplication::DEFAULT_SURFACE_WIDTH - (CLIPPING_RECT_X + CLIPPING_RECT_WIDTH); + clippingRect.y = TestApplication::DEFAULT_SURFACE_HEIGHT - (CLIPPING_RECT_Y + CLIPPING_RECT_HEIGHT); + clippingRect.width = CLIPPING_RECT_WIDTH; + clippingRect.height = CLIPPING_RECT_HEIGHT; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 180, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneScreenRotatedWithAngle180(void) +{ + tet_infoline("Ensure rotation of the screen is handled properly with Angle 180"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 0, 180); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + clippingRect.x = TestApplication::DEFAULT_SURFACE_WIDTH - (CLIPPING_RECT_X + CLIPPING_RECT_WIDTH); + clippingRect.y = TestApplication::DEFAULT_SURFACE_HEIGHT - (CLIPPING_RECT_Y + CLIPPING_RECT_HEIGHT); + clippingRect.width = CLIPPING_RECT_WIDTH; + clippingRect.height = CLIPPING_RECT_HEIGHT; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 180, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSurfaceAndScreenRotatedWithAngle180(void) +{ + tet_infoline("Ensure rotation of the surface and the screen is handled properly with Angle 180"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + // consume the orientating changing flag by first rendering + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 180, 180); + + // Check current orientations + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 180, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 180, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSurfaceRotatedWithAngle270(void) +{ + tet_infoline("Ensure rotation of the surface is handled properly with Angle 270"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 270, 0); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + // Total angle is 270. (270 + 0 = 270) + clippingRect.x = CLIPPING_RECT_Y; + clippingRect.y = TestApplication::DEFAULT_SURFACE_WIDTH - (CLIPPING_RECT_X + CLIPPING_RECT_WIDTH); + clippingRect.width = CLIPPING_RECT_HEIGHT; + clippingRect.height = CLIPPING_RECT_WIDTH; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 270, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneScreenRotatedWithAngle270(void) +{ + tet_infoline("Ensure rotation of the screen is handled properly with Angle 270"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 0, 270); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + // Total angle is 270. (0 + 270 = 270) + clippingRect.x = CLIPPING_RECT_Y; + clippingRect.y = TestApplication::DEFAULT_SURFACE_WIDTH - (CLIPPING_RECT_X + CLIPPING_RECT_WIDTH); + clippingRect.width = CLIPPING_RECT_HEIGHT; + clippingRect.height = CLIPPING_RECT_WIDTH; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 270, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSurfaceAndScreenRotatedWithAngle270(void) +{ + tet_infoline("Ensure rotation of the surface and the screen is handled properly with Angle 270"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 270, 270); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + // Total angle is 180.(270 + 270 - 360 = 180) + clippingRect.x = TestApplication::DEFAULT_SURFACE_WIDTH - (CLIPPING_RECT_X + CLIPPING_RECT_WIDTH); + clippingRect.y = TestApplication::DEFAULT_SURFACE_HEIGHT - (CLIPPING_RECT_Y + CLIPPING_RECT_HEIGHT); + clippingRect.width = CLIPPING_RECT_WIDTH; + clippingRect.height = CLIPPING_RECT_HEIGHT; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 270, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 270, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSetSurfaceRotationCompletedAcknowledgementWithAngle90(void) +{ + tet_infoline("Ensure to acknowledge for completing surface 90 angle rotaiton"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 90, 0); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.GetScene().SetRotationCompletedAcknowledgement(); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + clippingRect.x = TestApplication::DEFAULT_SURFACE_HEIGHT - (CLIPPING_RECT_Y + CLIPPING_RECT_HEIGHT); + clippingRect.y = CLIPPING_RECT_X; + clippingRect.width = CLIPPING_RECT_HEIGHT; + clippingRect.height = CLIPPING_RECT_WIDTH; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 90, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + bool isSetRotationCompletedAcknowledgementSet = application.GetScene().IsRotationCompletedAcknowledgementSet(); + DALI_TEST_EQUALS(isSetRotationCompletedAcknowledgementSet, true, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSetScreenRotationCompletedAcknowledgementWithAngle90(void) +{ + tet_infoline("Ensure to acknowledge for completing screen 90 angle rotaiton"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 0, 90); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.GetScene().SetRotationCompletedAcknowledgement(); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + clippingRect.x = TestApplication::DEFAULT_SURFACE_HEIGHT - (CLIPPING_RECT_Y + CLIPPING_RECT_HEIGHT); + clippingRect.y = CLIPPING_RECT_X; + clippingRect.width = CLIPPING_RECT_HEIGHT; + clippingRect.height = CLIPPING_RECT_WIDTH; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 90, TEST_LOCATION); + + bool isSetRotationCompletedAcknowledgementSet = application.GetScene().IsRotationCompletedAcknowledgementSet(); + DALI_TEST_EQUALS(isSetRotationCompletedAcknowledgementSet, true, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSetSurfaceAndScreenRotationCompletedAcknowledgementWithAngle90(void) +{ + tet_infoline("Ensure to acknowledge for completing surface and screen 90 angle rotaiton"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + + damagedRects.clear(); + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + 90, 90); + + // Check current surface orientation + int32_t orientation = application.GetScene().GetCurrentSurfaceOrientation(); + int32_t screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should not be changed yet. + DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 0, TEST_LOCATION); + + application.GetScene().SetRotationCompletedAcknowledgement(); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + + clippingRect = Rect(CLIPPING_RECT_X, CLIPPING_RECT_Y, CLIPPING_RECT_WIDTH, CLIPPING_RECT_HEIGHT); // in screen coordinates, includes 3 last frames updates + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // It is recalculation for glScissor. + // Because surface is rotated and glScissor is called with recalcurated value. + clippingRect.x = TestApplication::DEFAULT_SURFACE_WIDTH - (CLIPPING_RECT_X + CLIPPING_RECT_WIDTH); + clippingRect.y = TestApplication::DEFAULT_SURFACE_HEIGHT - (CLIPPING_RECT_Y + CLIPPING_RECT_HEIGHT); + clippingRect.width = CLIPPING_RECT_WIDTH; + clippingRect.height = CLIPPING_RECT_HEIGHT; + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Check current orientations + orientation = application.GetScene().GetCurrentSurfaceOrientation(); + screenOrientation = application.GetScene().GetCurrentScreenOrientation(); + + // It should be changed. + DALI_TEST_EQUALS(orientation, 90, TEST_LOCATION); + DALI_TEST_EQUALS(screenOrientation, 90, TEST_LOCATION); + + bool isSetRotationCompletedAcknowledgementSet = application.GetScene().IsRotationCompletedAcknowledgementSet(); + DALI_TEST_EQUALS(isSetRotationCompletedAcknowledgementSet, true, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSurfaceRotatedPartialUpdate(void) +{ + tet_infoline("Ensure rotation of the surface and partial update are handled properly"); + + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + std::vector> damagedRects; + Rect clippingRect; + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + clippingRect = TestApplication::DEFAULT_SURFACE_RECT; + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + actor.SetProperty(Actor::Property::SIZE, Vector3(32.0f, 32.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + clippingRect = Rect(224, 384, 48, 48); // in screen coordinates + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + damagedRects.clear(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + damagedRects.clear(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // Ensure the damaged rect is empty + DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION); + + // Rotate surface + application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_SURFACE_WIDTH, + 90, 0); + + damagedRects.clear(); + + application.SendNotification(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + clippingRect = Rect(224, 224, 208, 208); // in screen coordinates, merged value with the previous rect + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + END_TEST; +} + +int UtcDaliSceneKeyEventGeneratedSignalP(void) +{ + TestApplication application; + Dali::Integration::Scene scene = application.GetScene(); + + KeyEventGeneratedSignalData data; + KeyEventGeneratedReceivedFunctor functor(data); + scene.KeyEventGeneratedSignal().Connect(&application, functor); + + Integration::KeyEvent event("a", "", "a", 0, 0, 0, Integration::KeyEvent::UP, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event); + + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event.keyModifier == data.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event.keyName == data.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event.keyString == data.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event.state == static_cast(data.receivedKeyEvent.GetState())); + + data.Reset(); + + Integration::KeyEvent event2("i", "", "i", 0, 0, 0, Integration::KeyEvent::UP, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event2); + + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event2.keyModifier == data.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event2.keyName == data.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event2.keyString == data.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event2.state == static_cast(data.receivedKeyEvent.GetState())); + + data.Reset(); + + Integration::KeyEvent event3("a", "", "a", 0, 0, 0, Integration::KeyEvent::DOWN, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event3); + + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event3.keyModifier == data.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event3.keyName == data.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event3.keyString == data.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event3.state == static_cast(data.receivedKeyEvent.GetState())); + + data.Reset(); + + Integration::KeyEvent event4("a", "", "a", 0, 0, 0, Integration::KeyEvent::UP, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event4); + + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event4.keyModifier == data.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event4.keyName == data.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event4.keyString == data.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event4.state == static_cast(data.receivedKeyEvent.GetState())); + END_TEST; +} + +int UtcDaliSceneEnsureReplacedSurfaceKeepsClearColor(void) +{ + tet_infoline("Ensure we keep background color when the scene surface is replaced "); + + TestApplication application; + + // Create a new scene and set the background color of the main scene + auto defaultScene = application.GetScene(); + defaultScene.SetBackgroundColor(Color::BLUE); + + // 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 + 1, TEST_LOCATION); + DALI_TEST_EQUALS(glAbstraction.GetLastClearColor(), Color::BLUE, TEST_LOCATION); + + defaultScene.SurfaceReplaced(); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(glAbstraction.GetClearCountCalled(), clearCountBefore + 2, TEST_LOCATION); + DALI_TEST_EQUALS(glAbstraction.GetLastClearColor(), Color::BLUE, TEST_LOCATION); + + // Check when the main render task viewport is set the clear color is clipped using scissors + TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace(); + TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace(); + scissorTrace.Enable(true); + enabledDisableTrace.Enable(true); + + defaultScene.GetRenderTaskList().GetTask(0).SetViewport(Viewport(0.0f, 0.0f, 100.0f, 100.0f)); + + application.SendNotification(); + application.Render(); + + // Check scissor test was enabled. + std::ostringstream scissor; + scissor << std::hex << GL_SCISSOR_TEST; + DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", scissor.str())); + + // Check the scissor was set, and the coordinates are correct. + DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", "0, 700, 100, 100")); + + DALI_TEST_EQUALS(glAbstraction.GetClearCountCalled(), clearCountBefore + 3, TEST_LOCATION); + DALI_TEST_EQUALS(glAbstraction.GetLastClearColor(), Color::BLUE, TEST_LOCATION); + + scissorTrace.Enable(false); + scissorTrace.Reset(); + + enabledDisableTrace.Enable(false); + enabledDisableTrace.Reset(); + + END_TEST; +} + +int UtcDaliSceneEnsureRenderTargetRecreated(void) +{ + tet_infoline("Ensure render target is re-created when surface replaced "); + + TestApplication application; + + // Create a new scene and set the background color of the main scene + auto defaultScene = application.GetScene(); + defaultScene.SetBackgroundColor(Color::BLUE); + + auto actor = CreateRenderableActor(); + defaultScene.Add(actor); + + auto& graphicsController = application.GetGraphicsController(); + + application.SendNotification(); + application.Render(); + + TraceCallStack& graphicsCallStack = graphicsController.mCallStack; + TraceCallStack::NamedParams empty{}; + const TraceCallStack::NamedParams* matching = graphicsCallStack.FindLastMatch("PresentRenderTarget", empty); + DALI_TEST_CHECK(matching != nullptr); + + graphicsCallStack.Reset(); + + int fakeSurface1; + Graphics::RenderTargetCreateInfo createInfo{}; + createInfo.SetSurface(&fakeSurface1).SetExtent(Graphics::Extent2D{480u, 800u}); + defaultScene.SetSurfaceRenderTarget(createInfo); + + application.SendNotification(); + application.Render(); + + TraceCallStack::NamedParams query1; + query1["surface"] << std::hex << &fakeSurface1; + const TraceCallStack::NamedParams* matching2 = graphicsCallStack.FindLastMatch("CreateRenderTarget", query1); + DALI_TEST_CHECK(matching2 != nullptr); + + const TraceCallStack::NamedParams* matching3 = graphicsCallStack.FindLastMatch("PresentRenderTarget", empty); + DALI_TEST_CHECK(matching3 != nullptr); + DALI_TEST_EQUALS((*matching3)["surface"].str(), query1["surface"].str(), TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneEmptySceneRendering(void) +{ + tet_infoline("Ensure not rendering before a Renderer is added"); + + TestApplication application; + TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); + + // Render without any renderer + application.SendNotification(); + application.Render(); + + // Check the clear count and the render status + DALI_TEST_EQUALS(glAbstraction.GetClearCountCalled(), 0, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetRenderNeedsPostRender(), false, TEST_LOCATION); + + // Add a Renderer + Geometry geometry = CreateQuadGeometry(); + Shader shader = CreateShader(); + Renderer renderer = Renderer::New(geometry, shader); + + // Render before adding renderer + application.SendNotification(); + application.Render(); + + // Check the clear count and the render status + DALI_TEST_EQUALS(glAbstraction.GetClearCountCalled(), 0, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetRenderNeedsPostRender(), false, TEST_LOCATION); + + Actor actor = Actor::New(); + actor.AddRenderer(renderer); + + actor.SetProperty(Actor::Property::SIZE, Vector2(400, 400)); + application.GetScene().Add(actor); + + // Render + application.SendNotification(); + application.Render(); + + // Check the clear count and the render status + DALI_TEST_EQUALS(glAbstraction.GetClearCountCalled(), 1, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetRenderNeedsPostRender(), true, TEST_LOCATION); + + // Remove the Renderer + application.GetScene().Remove(actor); + actor.Reset(); + renderer.Reset(); + + // Render + application.SendNotification(); + application.Render(); + + // Check the clear count and the render status + DALI_TEST_EQUALS(glAbstraction.GetClearCountCalled(), 2, TEST_LOCATION); // Should be cleared + DALI_TEST_EQUALS(application.GetRenderNeedsPostRender(), true, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneFrameRenderedPresentedCallback(void) +{ + tet_infoline("UtcDaliSceneFrameRenderedCallback"); + + TestApplication application; + + // Add a Renderer + Geometry geometry = CreateQuadGeometry(); + Shader shader = CreateShader(); + Renderer renderer = Renderer::New(geometry, shader); + + Actor actor = Actor::New(); + actor.AddRenderer(renderer); + application.GetScene().Add(actor); + + Dali::Integration::Scene scene = application.GetScene(); + + int frameId = 1; + scene.AddFrameRenderedCallback(std::unique_ptr(MakeCallback(&FrameCallback)), frameId); + scene.AddFramePresentedCallback(std::unique_ptr(MakeCallback(&FrameCallback)), frameId); + + // Render + application.SendNotification(); + application.Render(); + + Dali::Integration::Scene::FrameCallbackContainer callbackContainer; + scene.GetFrameRenderedCallback(callbackContainer); + + DALI_TEST_EQUALS(callbackContainer.size(), 1, TEST_LOCATION); + DALI_TEST_EQUALS(callbackContainer[0].second, frameId, TEST_LOCATION); + + callbackContainer.clear(); + + scene.GetFramePresentedCallback(callbackContainer); + + DALI_TEST_EQUALS(callbackContainer.size(), 1, TEST_LOCATION); + DALI_TEST_EQUALS(callbackContainer[0].second, frameId, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneWheelEventGeneratedSignalP(void) +{ + TestApplication application; + Dali::Integration::Scene scene = application.GetScene(); + + WheelEventGeneratedSignalData data; + WheelEventGeneratedReceivedFunctor functor(data); + scene.WheelEventGeneratedSignal().Connect(&application, functor); + + Integration::WheelEvent event(Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2(0.0f, 0.0f), 1, 1000u); + application.ProcessEvent(event); + + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(static_cast(event.type) == data.receivedWheelEvent.GetType()); + DALI_TEST_CHECK(event.direction == data.receivedWheelEvent.GetDirection()); + DALI_TEST_CHECK(event.modifiers == data.receivedWheelEvent.GetModifiers()); + DALI_TEST_CHECK(event.point == data.receivedWheelEvent.GetPoint()); + DALI_TEST_CHECK(event.delta == data.receivedWheelEvent.GetDelta()); + DALI_TEST_CHECK(event.timeStamp == data.receivedWheelEvent.GetTime()); + + data.Reset(); + + Integration::WheelEvent event2(Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2(0.0f, 0.0f), -1, 1000u); + application.ProcessEvent(event2); + + DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(static_cast(event2.type) == data.receivedWheelEvent.GetType()); + DALI_TEST_CHECK(event2.direction == data.receivedWheelEvent.GetDirection()); + DALI_TEST_CHECK(event2.modifiers == data.receivedWheelEvent.GetModifiers()); + DALI_TEST_CHECK(event2.point == data.receivedWheelEvent.GetPoint()); + DALI_TEST_CHECK(event2.delta == data.receivedWheelEvent.GetDelta()); + DALI_TEST_CHECK(event2.timeStamp == data.receivedWheelEvent.GetTime()); + END_TEST; +} + +int UtcDaliSceneSignalInterceptKeyEventP(void) +{ + TestApplication application; + Dali::Integration::Scene scene = application.GetScene(); + + KeyEventSignalData data; + KeyEventReceivedFunctor functor(data); + scene.KeyEventSignal().Connect(&application, functor); + + KeyEventGeneratedSignalData interceptData; + KeyEventGeneratedReceivedFunctor interceptFunctor(interceptData); + scene.InterceptKeyEventSignal().Connect(&application, interceptFunctor); + + Integration::KeyEvent event("i", "", "i", 0, 0, 0, Integration::KeyEvent::DOWN, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event); + + DALI_TEST_EQUALS(true, interceptData.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event.keyModifier == interceptData.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event.keyName == interceptData.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event.keyString == interceptData.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event.state == static_cast(interceptData.receivedKeyEvent.GetState())); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); + + data.Reset(); + interceptData.Reset(); + + Integration::KeyEvent event2("i", "", "i", 0, 0, 0, Integration::KeyEvent::UP, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event2); + + DALI_TEST_EQUALS(true, interceptData.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event2.keyModifier == interceptData.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event2.keyName == interceptData.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event2.keyString == interceptData.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event2.state == static_cast(interceptData.receivedKeyEvent.GetState())); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); + + data.Reset(); + interceptData.Reset(); + + Integration::KeyEvent event3("a", "", "a", 0, 0, 0, Integration::KeyEvent::DOWN, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event3); + + DALI_TEST_EQUALS(true, interceptData.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event3.keyModifier == interceptData.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event3.keyName == interceptData.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event3.keyString == interceptData.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event3.state == static_cast(interceptData.receivedKeyEvent.GetState())); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); + + data.Reset(); + interceptData.Reset(); + + Integration::KeyEvent event4("a", "", "a", 0, 0, 0, Integration::KeyEvent::UP, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE); + application.ProcessEvent(event4); + + DALI_TEST_EQUALS(true, interceptData.functorCalled, TEST_LOCATION); + DALI_TEST_CHECK(event4.keyModifier == interceptData.receivedKeyEvent.GetKeyModifier()); + DALI_TEST_CHECK(event4.keyName == interceptData.receivedKeyEvent.GetKeyName()); + DALI_TEST_CHECK(event4.keyString == interceptData.receivedKeyEvent.GetKeyString()); + DALI_TEST_CHECK(event4.state == static_cast(interceptData.receivedKeyEvent.GetState())); + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); + END_TEST; +} + +int UtcDaliSceneSignalInterceptKeyEventN(void) +{ + TestApplication application; + Dali::Integration::Scene scene = application.GetScene(); + + KeyEventGeneratedSignalData data; + KeyEventGeneratedReceivedFunctor functor(data); + scene.InterceptKeyEventSignal().Connect(&application, functor); + + // Check that a non-pressed key events data is not modified. + DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneGetOverlayLayer(void) +{ + TestApplication application; + tet_infoline("Testing Dali::Integration::Scene::GetOverlayLayer"); + + Dali::Integration::Scene scene = application.GetScene(); + + // Check we get a valid instance. + RenderTaskList tasks = scene.GetRenderTaskList(); + + // There should be 1 task by default. + DALI_TEST_EQUALS(tasks.GetTaskCount(), 1u, TEST_LOCATION); + RenderTask defaultTask = tasks.GetTask(0u); + DALI_TEST_EQUALS(scene.GetRootLayer(), defaultTask.GetSourceActor(), TEST_LOCATION); + + Layer layer = scene.GetOverlayLayer(); + // There should be 2 task by default. + DALI_TEST_EQUALS(tasks.GetTaskCount(), 2u, TEST_LOCATION); + RenderTask overlayTask = tasks.GetTask(1u); + DALI_TEST_EQUALS(overlayTask, tasks.GetOverlayTask(), TEST_LOCATION); + DALI_TEST_CHECK(scene.GetRootLayer() != overlayTask.GetSourceActor()); + DALI_TEST_CHECK(overlayTask != defaultTask); + DALI_TEST_EQUALS(overlayTask.GetClearEnabled(), false, TEST_LOCATION); + DALI_TEST_EQUALS(overlayTask.IsExclusive(), true, TEST_LOCATION); + + // If new render task is created, the last task is overlayTask + RenderTask newTask = scene.GetRenderTaskList().CreateTask(); + DALI_TEST_EQUALS(tasks.GetTaskCount(), 3u, TEST_LOCATION); + DALI_TEST_EQUALS(newTask, tasks.GetTask(1u), TEST_LOCATION); + DALI_TEST_EQUALS(overlayTask, tasks.GetTask(2u), TEST_LOCATION); + + // Render + application.SendNotification(); + application.Render(); + + tasks.RemoveTask(overlayTask); + DALI_TEST_EQUALS(tasks.GetTaskCount(), 2u, TEST_LOCATION); + DALI_TEST_EQUALS(tasks.GetTask(0u), defaultTask, TEST_LOCATION); + DALI_TEST_EQUALS(tasks.GetTask(1u), newTask, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneSurfaceResizedWithOverlayLayer(void) +{ + tet_infoline("Ensure resizing of the surface is handled properly"); + + TestApplication application; + + auto scene = application.GetScene(); + DALI_TEST_CHECK(scene); + + const RenderTaskList& tasks = scene.GetRenderTaskList(); + DALI_TEST_EQUALS(tasks.GetTaskCount(), 1u, TEST_LOCATION); + RenderTask defaultTask = tasks.GetTask(0u); + DALI_TEST_EQUALS(scene.GetRootLayer(), defaultTask.GetSourceActor(), TEST_LOCATION); + + // Ensure stage size matches the scene size + auto stage = Stage::GetCurrent(); + Vector2 sceneSize = stage.GetSize(); + Viewport sceneViewport(0, 0, sceneSize.x, sceneSize.y); + DALI_TEST_EQUALS(stage.GetSize(), scene.GetSize(), TEST_LOCATION); + Viewport defaultViewport = defaultTask.GetViewport(); + DALI_TEST_EQUALS(defaultViewport, sceneViewport, TEST_LOCATION); + + Layer layer = scene.GetOverlayLayer(); + // There should be 2 task by default. + DALI_TEST_EQUALS(tasks.GetTaskCount(), 2u, TEST_LOCATION); + RenderTask overlayTask = tasks.GetTask(1u); + Viewport overlayViewport = defaultTask.GetViewport(); + DALI_TEST_EQUALS(defaultViewport, overlayViewport, TEST_LOCATION); + + // Resize the scene + Vector2 newSize(1000.0f, 2000.0f); + DALI_TEST_CHECK(stage.GetSize() != newSize); + scene.SurfaceResized(newSize.width, newSize.height); + Viewport newViewport(0, 0, newSize.x, newSize.y); + DALI_TEST_EQUALS(newViewport, defaultTask.GetViewport(), TEST_LOCATION); + DALI_TEST_EQUALS(newViewport, defaultTask.GetViewport(), TEST_LOCATION); - DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION ); - DALI_TEST_CHECK( event4.keyModifier == data.receivedKeyEvent.keyModifier ); - DALI_TEST_CHECK( event4.keyName == data.receivedKeyEvent.keyPressedName ); - DALI_TEST_CHECK( event4.keyString == data.receivedKeyEvent.keyPressed ); - DALI_TEST_CHECK( event4.state == static_cast( data.receivedKeyEvent.state ) ); END_TEST; }