Makes SceneView return DestinationCamera during Camera Transition 16/317116/4
authorSeungho Baek <sbsh.baek@samsung.com>
Wed, 4 Sep 2024 06:24:55 +0000 (15:24 +0900)
committerSeungho Baek <sbsh.baek@samsung.com>
Wed, 4 Sep 2024 08:19:34 +0000 (17:19 +0900)
Change-Id: I07d5e79a859f53700325a36b02bfdbe68e00e085
Signed-off-by: Seungho Baek <sbsh.baek@samsung.com>
automated-tests/src/dali-scene3d-internal/CMakeLists.txt
automated-tests/src/dali-scene3d-internal/utc-Dali-SceneViewImpl.cpp [new file with mode: 0644]
automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp
dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp

index 8385cb9..1c4f40a 100755 (executable)
@@ -18,6 +18,7 @@ SET(TC_SOURCES
   utc-Dali-MaterialImpl.cpp
   utc-Dali-ModelCacheManager.cpp
   utc-Dali-ModelPrimitiveImpl.cpp
+  utc-Dali-SceneViewImpl.cpp
 )
 
 # List of test harness files (Won't get parsed for test cases)
diff --git a/automated-tests/src/dali-scene3d-internal/utc-Dali-SceneViewImpl.cpp b/automated-tests/src/dali-scene3d-internal/utc-Dali-SceneViewImpl.cpp
new file mode 100644 (file)
index 0000000..0689257
--- /dev/null
@@ -0,0 +1,450 @@
+/*
+ * Copyright (c) 2024 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dali-toolkit-test-suite-utils.h>
+#include <toolkit-event-thread-callback.h>
+#include <toolkit-timer.h>
+
+#include <dali-toolkit/dali-toolkit.h>
+#include <stdlib.h>
+#include <iostream>
+
+#include <dali-scene3d/public-api/controls/model/model.h>
+#include <dali-scene3d/public-api/controls/scene-view/scene-view.h>
+#include <dali-scene3d/internal/controls/scene-view/scene-view-impl.h>
+#include <dali/devel-api/actors/camera-actor-devel.h>
+
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+namespace
+{
+
+// Functor to test whether a Finish signal is emitted
+struct TransitionFinishCheck
+{
+  TransitionFinishCheck(bool& signalReceived)
+  : mSignalReceived(signalReceived)
+  {
+  }
+
+  void operator()(Scene3D::SceneView& sceneView)
+  {
+    mSignalReceived = true;
+  }
+
+  void Reset()
+  {
+    mSignalReceived = false;
+  }
+
+  void CheckSignalReceived()
+  {
+    if(!mSignalReceived)
+    {
+      tet_printf("Expected Finish signal was not received\n");
+      tet_result(TET_FAIL);
+    }
+    else
+    {
+      tet_result(TET_PASS);
+    }
+  }
+
+  void CheckSignalNotReceived()
+  {
+    if(mSignalReceived)
+    {
+      tet_printf("Unexpected Finish signal was received\n");
+      tet_result(TET_FAIL);
+    }
+    else
+    {
+      tet_result(TET_PASS);
+    }
+  }
+
+  bool& mSignalReceived; // owned by individual tests
+};
+
+}
+
+int UtcDaliSceneViewImplCameraTransitionFail(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::SceneView view = Scene3D::SceneView::New();
+  application.GetScene().Add(view);
+
+  CameraActor camera1 = CameraActor::New3DCamera();
+  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
+  view.AddCamera(camera1);
+  DALI_TEST_CHECK(!camera1.GetParent());
+  view.SelectCamera("camera1");
+  DALI_TEST_CHECK(camera1.GetParent());
+  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
+
+  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
+  view.Add(camera1);
+
+  bool                  signalReceived(false);
+  TransitionFinishCheck finishCheck(signalReceived);
+  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
+
+  view.StartCameraTransition("camera1", 1.0f);
+
+  application.SendNotification();
+  application.Render(500);
+  application.SendNotification();
+
+  // We didn't expect the animation to finish yet
+  finishCheck.CheckSignalNotReceived();
+
+  application.SendNotification();
+  application.Render(600);
+  application.SendNotification();
+
+  finishCheck.CheckSignalNotReceived();
+
+  CameraActor finalCamera = view.GetSelectedCamera();
+  DALI_TEST_EQUALS(finalCamera, camera1, TEST_LOCATION);
+
+  END_TEST;
+}
+
+int UtcDaliSceneViewImplCameraChangeDuringTransition(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::SceneView view = Scene3D::SceneView::New();
+  application.GetScene().Add(view);
+
+  CameraActor camera1 = CameraActor::New3DCamera();
+  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
+  view.AddCamera(camera1);
+  DALI_TEST_CHECK(!camera1.GetParent());
+  view.SelectCamera("camera1");
+  DALI_TEST_CHECK(camera1.GetParent());
+  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
+
+  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
+  view.Add(camera1);
+
+  CameraActor camera2 = CameraActor::New3DCamera();
+  camera2.SetProperty(Dali::Actor::Property::NAME, "camera2");
+  view.AddCamera(camera2);
+  camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f);
+
+  application.SendNotification();
+  application.Render();
+
+  bool                  signalReceived(false);
+  TransitionFinishCheck finishCheck(signalReceived);
+  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
+
+  view.StartCameraTransition("camera2", 1.0f);
+
+  CameraActor camera3 = CameraActor::New3DCamera();
+  camera3.SetProperty(Dali::Actor::Property::NAME, "camera3");
+  view.AddCamera(camera3);
+  view.SelectCamera("camera3");
+
+  DALI_TEST_NOT_EQUALS(camera3, view.GetSelectedCamera(), 0.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(camera2, view.GetSelectedCamera(), TEST_LOCATION);
+
+  application.SendNotification();
+  application.Render(500);
+  application.SendNotification();
+
+  // We didn't expect the animation to finish yet
+  finishCheck.CheckSignalNotReceived();
+
+  Dali::Scene3D::Internal::SceneView& sceneViewImpl = Dali::Scene3D::GetImpl(view);
+  auto renderTask = sceneViewImpl.GetRenderTask();
+  DALI_TEST_CHECK(renderTask);
+
+  CameraActor currentCamera = renderTask.GetCameraActor();
+  DALI_TEST_CHECK(currentCamera);
+  DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION);
+  DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION);
+
+  view.SelectCamera(view.GetCameraCount() - 1);
+  DALI_TEST_NOT_EQUALS(camera3, view.GetSelectedCamera(), 0.0f, TEST_LOCATION);
+  DALI_TEST_NOT_EQUALS(currentCamera, view.GetSelectedCamera(), 0.0f, TEST_LOCATION);
+
+  application.SendNotification();
+  application.Render(600);
+  application.SendNotification();
+
+  finishCheck.CheckSignalReceived();
+
+  CameraActor finalCamera = view.GetSelectedCamera();
+  DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION);
+
+  view.SelectCamera("camera3");
+  DALI_TEST_EQUALS(camera3, view.GetSelectedCamera(), TEST_LOCATION);
+
+  END_TEST;
+}
+
+int UtcDaliSceneViewImplStartCameraTransitionDuringTransition(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::SceneView view = Scene3D::SceneView::New();
+  application.GetScene().Add(view);
+
+  CameraActor camera1 = CameraActor::New3DCamera();
+  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
+  view.AddCamera(camera1);
+  DALI_TEST_CHECK(!camera1.GetParent());
+  view.SelectCamera("camera1");
+  DALI_TEST_CHECK(camera1.GetParent());
+  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
+
+  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
+  view.Add(camera1);
+
+  CameraActor camera2 = CameraActor::New3DCamera();
+  camera2.SetProperty(Dali::Actor::Property::NAME, "camera2");
+  view.AddCamera(camera2);
+  camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f);
+
+  application.SendNotification();
+  application.Render();
+
+  bool                  signalReceived(false);
+  TransitionFinishCheck finishCheck(signalReceived);
+  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
+
+  view.StartCameraTransition("camera2", 1.0f);
+
+  application.SendNotification();
+  application.Render(500);
+  application.SendNotification();
+
+  // We didn't expect the animation to finish yet
+  finishCheck.CheckSignalNotReceived();
+
+  CameraActor camera3 = CameraActor::New3DCamera();
+  camera3.SetProperty(Dali::Actor::Property::NAME, "camera3");
+  view.AddCamera(camera3);
+
+  view.StartCameraTransition("camera3", 1.0f);
+
+  application.SendNotification();
+  application.Render(600);
+  application.SendNotification();
+
+  finishCheck.CheckSignalReceived();
+
+  CameraActor finalCamera = view.GetSelectedCamera();
+  DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION);
+
+  END_TEST;
+}
+
+int UtcDaliSceneViewImplCameraTransition1(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::SceneView view = Scene3D::SceneView::New();
+  application.GetScene().Add(view);
+
+  CameraActor camera1 = CameraActor::New3DCamera();
+  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
+  view.AddCamera(camera1);
+  DALI_TEST_CHECK(!camera1.GetParent());
+  view.SelectCamera("camera1");
+  DALI_TEST_CHECK(camera1.GetParent());
+  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
+
+  Scene3D::Model model1 = Scene3D::Model::New();
+  model1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
+  view.Add(model1);
+
+  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
+  camera1.SetNearClippingPlane(10.0f);
+  camera1.SetFarClippingPlane(100.0f);
+  model1.Add(camera1);
+
+  CameraActor camera2 = CameraActor::New3DCamera();
+  camera2.SetProperty(Dali::Actor::Property::NAME, "camera2");
+  view.AddCamera(camera2);
+  camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f);
+  camera2.SetNearClippingPlane(5.0f);
+  camera2.SetFarClippingPlane(50.0f);
+
+  Scene3D::Model model2 = Scene3D::Model::New();
+  model2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f);
+  view.Add(model2);
+  model2.Add(camera2);
+
+  application.SendNotification();
+  application.Render();
+
+  camera1.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL);
+  camera2.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL);
+  camera1.SetFieldOfView(1.0f); // Vertical : 1.0f, Horizontal : 0.533293254f
+  camera2.SetFieldOfView(1.0f); // Vertical : 1.65924551f, Horizontal : 1.0f
+  camera1.SetAspectRatio(0.5f);
+  camera2.SetAspectRatio(0.5f);
+  tet_printf("camera1 fov : %f\n", camera1.GetFieldOfView());
+  tet_printf("camera2 fov : %f\n", camera2.GetFieldOfView());
+  tet_printf("camera1 aspect : %f\n", camera1.GetAspectRatio());
+  tet_printf("camera2 aspect : %f\n", camera2.GetAspectRatio());
+  tet_printf("camera1 direction : %d\n", camera1.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION));
+  tet_printf("camera2 direction : %d\n", camera2.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION));
+
+  bool                  signalReceived(false);
+  TransitionFinishCheck finishCheck(signalReceived);
+  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
+
+  view.StartCameraTransition("camera2", 1.0f);
+
+  application.SendNotification();
+  application.Render(500);
+  application.SendNotification();
+
+  // We didn't expect the animation to finish yet
+  finishCheck.CheckSignalNotReceived();
+
+
+  Dali::Scene3D::Internal::SceneView& sceneViewImpl = Dali::Scene3D::GetImpl(view);
+  auto renderTask = sceneViewImpl.GetRenderTask();
+  DALI_TEST_CHECK(renderTask);
+
+  CameraActor currentCamera = renderTask.GetCameraActor();
+  DALI_TEST_CHECK(currentCamera);
+  DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION);
+  DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION);
+
+  Vector3 currentPosition = currentCamera.GetCurrentProperty<Vector3>(Dali::Actor::Property::POSITION);
+  DALI_TEST_EQUALS(currentPosition, Vector3::ONE * 50.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(currentCamera.GetNearClippingPlane(), 5.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(currentCamera.GetFarClippingPlane(), 100.0f, TEST_LOCATION);
+  float currentFov =  (0.533293254f + 1.0f) / 2.0f;
+  DALI_TEST_EQUALS(currentCamera.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL, TEST_LOCATION);
+  DALI_TEST_EQUALS(currentCamera.GetCurrentProperty<float>(Dali::CameraActor::Property::FIELD_OF_VIEW), currentFov, 0.05f, TEST_LOCATION);
+
+  application.SendNotification();
+  application.Render(600);
+  application.SendNotification();
+
+  finishCheck.CheckSignalReceived();
+
+  CameraActor finalCamera = view.GetSelectedCamera();
+  DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION);
+
+  END_TEST;
+}
+
+int UtcDaliSceneViewImplCameraTransition2(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::SceneView view = Scene3D::SceneView::New();
+  application.GetScene().Add(view);
+
+  CameraActor camera1 = CameraActor::New3DCamera();
+  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
+  view.AddCamera(camera1);
+  DALI_TEST_CHECK(!camera1.GetParent());
+  view.SelectCamera("camera1");
+  DALI_TEST_CHECK(camera1.GetParent());
+  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
+
+  Scene3D::Model model1 = Scene3D::Model::New();
+  model1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
+  view.Add(model1);
+
+  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
+  camera1.SetNearClippingPlane(10.0f);
+  camera1.SetFarClippingPlane(100.0f);
+  model1.Add(camera1);
+
+  CameraActor camera2 = CameraActor::New3DCamera();
+  camera2.SetProperty(Dali::Actor::Property::NAME, "camera2");
+  view.AddCamera(camera2);
+  camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 200.0f);
+  camera2.SetNearClippingPlane(5.0f);
+  camera2.SetFarClippingPlane(50.0f);
+  // Camera2 is not added on SceneView, it will added on root layer automatically.
+
+  application.SendNotification();
+  application.Render();
+
+  bool                  signalReceived(false);
+  TransitionFinishCheck finishCheck(signalReceived);
+  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
+
+  camera1.SetProjectionMode(Dali::Camera::ProjectionMode::ORTHOGRAPHIC_PROJECTION);
+  camera2.SetProjectionMode(Dali::Camera::ProjectionMode::ORTHOGRAPHIC_PROJECTION);
+  camera1.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL);
+  camera2.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL);
+
+  camera1.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 10.0f);  // Vertical : 10.0f, Horizontal : 5.0f
+  camera2.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 10.0f);  // Vertical : 20.0f, Horizontal : 10.0f
+  camera1.SetAspectRatio(0.5f);
+  camera2.SetAspectRatio(0.5f);
+
+  tet_printf("camera1 fov : %f\n", camera1.GetProperty<float>(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE));
+  tet_printf("camera2 fov : %f\n", camera2.GetProperty<float>(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE));
+  tet_printf("camera1 aspect : %f\n", camera1.GetAspectRatio());
+  tet_printf("camera2 aspect : %f\n", camera2.GetAspectRatio());
+  tet_printf("camera1 direction : %f\n", camera1.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION));
+  tet_printf("camera2 direction : %f\n", camera2.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION));
+
+  int camera2Index = view.GetCameraCount() - 1;
+  view.StartCameraTransition(camera2Index, 1.0f);
+
+  application.SendNotification();
+  application.Render(500);
+  application.SendNotification();
+
+  // We didn't expect the animation to finish yet
+  finishCheck.CheckSignalNotReceived();
+
+  Dali::Scene3D::Internal::SceneView& sceneViewImpl = Dali::Scene3D::GetImpl(view);
+  auto renderTask = sceneViewImpl.GetRenderTask();
+  DALI_TEST_CHECK(renderTask);
+
+  CameraActor currentCamera = renderTask.GetCameraActor();
+  DALI_TEST_CHECK(currentCamera);
+  DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION);
+  DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION);
+
+  Vector3 currentPosition = currentCamera.GetCurrentProperty<Vector3>(Dali::Actor::Property::POSITION);
+  DALI_TEST_EQUALS(currentPosition, Vector3::ONE * 50.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(currentCamera.GetNearClippingPlane(), 5.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(currentCamera.GetFarClippingPlane(), 100.0f, TEST_LOCATION);
+  float currentOrthographicSize = (5.0f + 10.0f) / 2.0f;
+  DALI_TEST_EQUALS(currentCamera.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL, TEST_LOCATION);
+  DALI_TEST_EQUALS(currentCamera.GetCurrentProperty<float>(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), currentOrthographicSize, 0.05f, TEST_LOCATION);
+
+  application.SendNotification();
+  application.Render(600);
+  application.SendNotification();
+
+  finishCheck.CheckSignalReceived();
+
+  CameraActor finalCamera = view.GetSelectedCamera();
+  DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION);
+
+  END_TEST;
+}
index 7b70199..4e77816 100644 (file)
@@ -1571,403 +1571,3 @@ int UtcDaliSceneViewSelectCamera(void)
 
   END_TEST;
 }
-
-
-// Functor to test whether a Finish signal is emitted
-struct TransitionFinishCheck
-{
-  TransitionFinishCheck(bool& signalReceived)
-  : mSignalReceived(signalReceived)
-  {
-  }
-
-  void operator()(Scene3D::SceneView& sceneView)
-  {
-    mSignalReceived = true;
-  }
-
-  void Reset()
-  {
-    mSignalReceived = false;
-  }
-
-  void CheckSignalReceived()
-  {
-    if(!mSignalReceived)
-    {
-      tet_printf("Expected Finish signal was not received\n");
-      tet_result(TET_FAIL);
-    }
-    else
-    {
-      tet_result(TET_PASS);
-    }
-  }
-
-  void CheckSignalNotReceived()
-  {
-    if(mSignalReceived)
-    {
-      tet_printf("Unexpected Finish signal was received\n");
-      tet_result(TET_FAIL);
-    }
-    else
-    {
-      tet_result(TET_PASS);
-    }
-  }
-
-  bool& mSignalReceived; // owned by individual tests
-};
-
-int UtcDaliSceneViewCameraTransitionFail(void)
-{
-  ToolkitTestApplication application;
-
-  Scene3D::SceneView view = Scene3D::SceneView::New();
-  application.GetScene().Add(view);
-
-  CameraActor camera1 = CameraActor::New3DCamera();
-  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
-  view.AddCamera(camera1);
-  DALI_TEST_CHECK(!camera1.GetParent());
-  view.SelectCamera("camera1");
-  DALI_TEST_CHECK(camera1.GetParent());
-  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
-
-  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
-  view.Add(camera1);
-
-  bool                  signalReceived(false);
-  TransitionFinishCheck finishCheck(signalReceived);
-  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
-
-  view.StartCameraTransition("camera1", 1.0f);
-
-  application.SendNotification();
-  application.Render(500);
-  application.SendNotification();
-
-  // We didn't expect the animation to finish yet
-  finishCheck.CheckSignalNotReceived();
-
-  application.SendNotification();
-  application.Render(600);
-  application.SendNotification();
-
-  finishCheck.CheckSignalNotReceived();
-
-  CameraActor finalCamera = view.GetSelectedCamera();
-  DALI_TEST_EQUALS(finalCamera, camera1, TEST_LOCATION);
-
-  END_TEST;
-}
-
-int UtcDaliSceneViewCameraChangeDuringTransition(void)
-{
-  ToolkitTestApplication application;
-
-  Scene3D::SceneView view = Scene3D::SceneView::New();
-  application.GetScene().Add(view);
-
-  CameraActor camera1 = CameraActor::New3DCamera();
-  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
-  view.AddCamera(camera1);
-  DALI_TEST_CHECK(!camera1.GetParent());
-  view.SelectCamera("camera1");
-  DALI_TEST_CHECK(camera1.GetParent());
-  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
-
-  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
-  view.Add(camera1);
-
-  CameraActor camera2 = CameraActor::New3DCamera();
-  camera2.SetProperty(Dali::Actor::Property::NAME, "camera2");
-  view.AddCamera(camera2);
-  camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f);
-
-  application.SendNotification();
-  application.Render();
-
-  bool                  signalReceived(false);
-  TransitionFinishCheck finishCheck(signalReceived);
-  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
-
-  view.StartCameraTransition("camera2", 1.0f);
-
-  CameraActor camera3 = CameraActor::New3DCamera();
-  camera3.SetProperty(Dali::Actor::Property::NAME, "camera3");
-  view.AddCamera(camera3);
-  view.SelectCamera("camera3");
-
-  DALI_TEST_NOT_EQUALS(camera3, view.GetSelectedCamera(), 0.0f, TEST_LOCATION);
-  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
-
-  application.SendNotification();
-  application.Render(500);
-  application.SendNotification();
-
-  // We didn't expect the animation to finish yet
-  finishCheck.CheckSignalNotReceived();
-
-  CameraActor currentCamera = view.GetSelectedCamera();
-  DALI_TEST_CHECK(currentCamera);
-  DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION);
-  DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION);
-
-  view.SelectCamera(view.GetCameraCount() - 1);
-  DALI_TEST_NOT_EQUALS(camera3, view.GetSelectedCamera(), 0.0f, TEST_LOCATION);
-  DALI_TEST_EQUALS(currentCamera, view.GetSelectedCamera(), TEST_LOCATION);
-
-  application.SendNotification();
-  application.Render(600);
-  application.SendNotification();
-
-  finishCheck.CheckSignalReceived();
-
-  CameraActor finalCamera = view.GetSelectedCamera();
-  DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION);
-
-  view.SelectCamera("camera3");
-  DALI_TEST_EQUALS(camera3, view.GetSelectedCamera(), TEST_LOCATION);
-
-  END_TEST;
-}
-
-int UtcDaliSceneViewStartCameraTransitionDuringTransition(void)
-{
-  ToolkitTestApplication application;
-
-  Scene3D::SceneView view = Scene3D::SceneView::New();
-  application.GetScene().Add(view);
-
-  CameraActor camera1 = CameraActor::New3DCamera();
-  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
-  view.AddCamera(camera1);
-  DALI_TEST_CHECK(!camera1.GetParent());
-  view.SelectCamera("camera1");
-  DALI_TEST_CHECK(camera1.GetParent());
-  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
-
-  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
-  view.Add(camera1);
-
-  CameraActor camera2 = CameraActor::New3DCamera();
-  camera2.SetProperty(Dali::Actor::Property::NAME, "camera2");
-  view.AddCamera(camera2);
-  camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f);
-
-  application.SendNotification();
-  application.Render();
-
-  bool                  signalReceived(false);
-  TransitionFinishCheck finishCheck(signalReceived);
-  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
-
-  view.StartCameraTransition("camera2", 1.0f);
-
-  application.SendNotification();
-  application.Render(500);
-  application.SendNotification();
-
-  // We didn't expect the animation to finish yet
-  finishCheck.CheckSignalNotReceived();
-
-  CameraActor camera3 = CameraActor::New3DCamera();
-  camera3.SetProperty(Dali::Actor::Property::NAME, "camera3");
-  view.AddCamera(camera3);
-
-  view.StartCameraTransition("camera3", 1.0f);
-
-  application.SendNotification();
-  application.Render(600);
-  application.SendNotification();
-
-  finishCheck.CheckSignalReceived();
-
-  CameraActor finalCamera = view.GetSelectedCamera();
-  DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION);
-
-  END_TEST;
-}
-
-int UtcDaliSceneViewCameraTransition1(void)
-{
-  ToolkitTestApplication application;
-
-  Scene3D::SceneView view = Scene3D::SceneView::New();
-  application.GetScene().Add(view);
-
-  CameraActor camera1 = CameraActor::New3DCamera();
-  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
-  view.AddCamera(camera1);
-  DALI_TEST_CHECK(!camera1.GetParent());
-  view.SelectCamera("camera1");
-  DALI_TEST_CHECK(camera1.GetParent());
-  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
-
-  Scene3D::Model model1 = Scene3D::Model::New();
-  model1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
-  view.Add(model1);
-
-  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
-  camera1.SetNearClippingPlane(10.0f);
-  camera1.SetFarClippingPlane(100.0f);
-  model1.Add(camera1);
-
-  CameraActor camera2 = CameraActor::New3DCamera();
-  camera2.SetProperty(Dali::Actor::Property::NAME, "camera2");
-  view.AddCamera(camera2);
-  camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f);
-  camera2.SetNearClippingPlane(5.0f);
-  camera2.SetFarClippingPlane(50.0f);
-
-  Scene3D::Model model2 = Scene3D::Model::New();
-  model2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f);
-  view.Add(model2);
-  model2.Add(camera2);
-
-  application.SendNotification();
-  application.Render();
-
-  camera1.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL);
-  camera2.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL);
-  camera1.SetFieldOfView(1.0f); // Vertical : 1.0f, Horizontal : 0.533293254f
-  camera2.SetFieldOfView(1.0f); // Vertical : 1.65924551f, Horizontal : 1.0f
-  camera1.SetAspectRatio(0.5f);
-  camera2.SetAspectRatio(0.5f);
-  tet_printf("camera1 fov : %f\n", camera1.GetFieldOfView());
-  tet_printf("camera2 fov : %f\n", camera2.GetFieldOfView());
-  tet_printf("camera1 aspect : %f\n", camera1.GetAspectRatio());
-  tet_printf("camera2 aspect : %f\n", camera2.GetAspectRatio());
-  tet_printf("camera1 direction : %d\n", camera1.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION));
-  tet_printf("camera2 direction : %d\n", camera2.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION));
-
-  bool                  signalReceived(false);
-  TransitionFinishCheck finishCheck(signalReceived);
-  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
-
-  view.StartCameraTransition("camera2", 1.0f);
-
-  application.SendNotification();
-  application.Render(500);
-  application.SendNotification();
-
-  // We didn't expect the animation to finish yet
-  finishCheck.CheckSignalNotReceived();
-
-  CameraActor currentCamera = view.GetSelectedCamera();
-  DALI_TEST_CHECK(currentCamera);
-  DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION);
-  DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION);
-
-  Vector3 currentPosition = currentCamera.GetCurrentProperty<Vector3>(Dali::Actor::Property::POSITION);
-  DALI_TEST_EQUALS(currentPosition, Vector3::ONE * 50.0f, TEST_LOCATION);
-  DALI_TEST_EQUALS(currentCamera.GetNearClippingPlane(), 5.0f, TEST_LOCATION);
-  DALI_TEST_EQUALS(currentCamera.GetFarClippingPlane(), 100.0f, TEST_LOCATION);
-  float currentFov =  (0.533293254f + 1.0f) / 2.0f;
-  DALI_TEST_EQUALS(currentCamera.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL, TEST_LOCATION);
-  DALI_TEST_EQUALS(currentCamera.GetCurrentProperty<float>(Dali::CameraActor::Property::FIELD_OF_VIEW), currentFov, 0.05f, TEST_LOCATION);
-
-  application.SendNotification();
-  application.Render(600);
-  application.SendNotification();
-
-  finishCheck.CheckSignalReceived();
-
-  CameraActor finalCamera = view.GetSelectedCamera();
-  DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION);
-
-  END_TEST;
-}
-
-int UtcDaliSceneViewCameraTransition2(void)
-{
-  ToolkitTestApplication application;
-
-  Scene3D::SceneView view = Scene3D::SceneView::New();
-  application.GetScene().Add(view);
-
-  CameraActor camera1 = CameraActor::New3DCamera();
-  camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
-  view.AddCamera(camera1);
-  DALI_TEST_CHECK(!camera1.GetParent());
-  view.SelectCamera("camera1");
-  DALI_TEST_CHECK(camera1.GetParent());
-  DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
-
-  Scene3D::Model model1 = Scene3D::Model::New();
-  model1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
-  view.Add(model1);
-
-  camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f);
-  camera1.SetNearClippingPlane(10.0f);
-  camera1.SetFarClippingPlane(100.0f);
-  model1.Add(camera1);
-
-  CameraActor camera2 = CameraActor::New3DCamera();
-  camera2.SetProperty(Dali::Actor::Property::NAME, "camera2");
-  view.AddCamera(camera2);
-  camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 200.0f);
-  camera2.SetNearClippingPlane(5.0f);
-  camera2.SetFarClippingPlane(50.0f);
-  // Camera2 is not added on SceneView, it will added on root layer automatically.
-
-  application.SendNotification();
-  application.Render();
-
-  bool                  signalReceived(false);
-  TransitionFinishCheck finishCheck(signalReceived);
-  view.CameraTransitionFinishedSignal().Connect(&application, finishCheck);
-
-  camera1.SetProjectionMode(Dali::Camera::ProjectionMode::ORTHOGRAPHIC_PROJECTION);
-  camera2.SetProjectionMode(Dali::Camera::ProjectionMode::ORTHOGRAPHIC_PROJECTION);
-  camera1.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL);
-  camera2.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL);
-
-  camera1.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 10.0f);  // Vertical : 10.0f, Horizontal : 5.0f
-  camera2.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 10.0f);  // Vertical : 20.0f, Horizontal : 10.0f
-  camera1.SetAspectRatio(0.5f);
-  camera2.SetAspectRatio(0.5f);
-
-  tet_printf("camera1 fov : %f\n", camera1.GetProperty<float>(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE));
-  tet_printf("camera2 fov : %f\n", camera2.GetProperty<float>(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE));
-  tet_printf("camera1 aspect : %f\n", camera1.GetAspectRatio());
-  tet_printf("camera2 aspect : %f\n", camera2.GetAspectRatio());
-  tet_printf("camera1 direction : %f\n", camera1.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION));
-  tet_printf("camera2 direction : %f\n", camera2.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION));
-
-  int camera2Index = view.GetCameraCount() - 1;
-  view.StartCameraTransition(camera2Index, 1.0f);
-
-  application.SendNotification();
-  application.Render(500);
-  application.SendNotification();
-
-  // We didn't expect the animation to finish yet
-  finishCheck.CheckSignalNotReceived();
-
-  CameraActor currentCamera = view.GetSelectedCamera();
-  DALI_TEST_CHECK(currentCamera);
-  DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION);
-  DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION);
-
-  Vector3 currentPosition = currentCamera.GetCurrentProperty<Vector3>(Dali::Actor::Property::POSITION);
-  DALI_TEST_EQUALS(currentPosition, Vector3::ONE * 50.0f, TEST_LOCATION);
-  DALI_TEST_EQUALS(currentCamera.GetNearClippingPlane(), 5.0f, TEST_LOCATION);
-  DALI_TEST_EQUALS(currentCamera.GetFarClippingPlane(), 100.0f, TEST_LOCATION);
-  float currentOrthographicSize = (5.0f + 10.0f) / 2.0f;
-  DALI_TEST_EQUALS(currentCamera.GetProperty<Dali::DevelCameraActor::ProjectionDirection>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL, TEST_LOCATION);
-  DALI_TEST_EQUALS(currentCamera.GetCurrentProperty<float>(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), currentOrthographicSize, 0.05f, TEST_LOCATION);
-
-  application.SendNotification();
-  application.Render(600);
-  application.SendNotification();
-
-  finishCheck.CheckSignalReceived();
-
-  CameraActor finalCamera = view.GetSelectedCamera();
-  DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION);
-
-  END_TEST;
-}
\ No newline at end of file
index f7251b3..f570010 100644 (file)
@@ -443,7 +443,7 @@ uint32_t SceneView::GetCameraCount() const
 
 CameraActor SceneView::GetSelectedCamera() const
 {
-  return mSelectedCamera;
+  return (mInCameraTransition && mTransitionDestinationCamera) ? mTransitionDestinationCamera : mSelectedCamera;
 }
 
 CameraActor SceneView::GetCamera(uint32_t index) const