X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-HitTestAlgorithm.cpp;h=a9167e093ab5312d1a61c0ed7afdd8d29758519d;hb=c4750afbf79f15bf71e2aa8ef54f84750463aae2;hp=cea3e03270554190620004e49c58d9921183bdfc;hpb=67a0905ecef82293464cbf8c95bf8258c0a8ba90;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-HitTestAlgorithm.cpp b/automated-tests/src/dali/utc-Dali-HitTestAlgorithm.cpp index cea3e03..a9167e0 100644 --- a/automated-tests/src/dali/utc-Dali-HitTestAlgorithm.cpp +++ b/automated-tests/src/dali/utc-Dali-HitTestAlgorithm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -214,8 +214,12 @@ int UtcDaliHitTestAlgorithmOrtho02(void) Dali::CameraActor cameraActor = defaultRenderTask.GetCameraActor(); Vector2 stageSize(stage.GetSize()); - cameraActor.SetOrthographicProjection(-stageSize.x * 0.3f, stageSize.x * 0.7f, stageSize.y * 0.3f, -stageSize.y * 0.7f, 800.0f, 4895.0f); - cameraActor.SetProperty(Actor::Property::POSITION, Vector3(0.0f, 0.0f, 1600.0f)); + cameraActor.SetOrthographicProjection(stageSize); + cameraActor.SetNearClippingPlane(800.0f); + cameraActor.SetFarClippingPlane(4895.0f); + + // Move camera not centered position. + cameraActor.SetProperty(Actor::Property::POSITION, Vector3(stageSize.x * 0.2f, stageSize.y * 0.2f, 1600.0f)); Vector2 actorSize(stageSize * 0.5f); // Create two actors with half the size of the stage and set them to be partially overlapping @@ -570,3 +574,129 @@ int UtcDaliHitTestAlgorithmDoesWantedHitTest(void) END_TEST; } + +int UtcDaliHitTestAlgorithmOrder(void) +{ + TestApplication application; + tet_infoline("Testing Dali::HitTestAlgorithm between On/Off render task"); + + Stage stage = Stage::GetCurrent(); + Vector2 stageSize(stage.GetSize()); + + Actor blue = Actor::New(); + blue[Dali::Actor::Property::NAME] = "Blue"; + blue[Dali::Actor::Property::ANCHOR_POINT] = AnchorPoint::CENTER; + blue[Dali::Actor::Property::PARENT_ORIGIN] = ParentOrigin::CENTER; + blue[Dali::Actor::Property::WIDTH_RESIZE_POLICY] = ResizePolicy::FILL_TO_PARENT; + blue[Dali::Actor::Property::HEIGHT_RESIZE_POLICY] = ResizePolicy::FILL_TO_PARENT; + + Actor green = Actor::New(); + green[Dali::Actor::Property::NAME] = "Green"; + green[Dali::Actor::Property::ANCHOR_POINT] = AnchorPoint::CENTER; + green[Dali::Actor::Property::PARENT_ORIGIN] = ParentOrigin::CENTER; + green[Dali::Actor::Property::WIDTH_RESIZE_POLICY] = ResizePolicy::FILL_TO_PARENT; + green[Dali::Actor::Property::HEIGHT_RESIZE_POLICY] = ResizePolicy::FILL_TO_PARENT; + + stage.Add(blue); + stage.Add(green); + + RenderTaskList renderTaskList = stage.GetRenderTaskList(); + RenderTask offRenderTask = renderTaskList.CreateTask(); + + Dali::CameraActor cameraActor = Dali::CameraActor::New(stageSize); + cameraActor[Dali::Actor::Property::ANCHOR_POINT] = AnchorPoint::CENTER; + cameraActor[Dali::Actor::Property::PARENT_ORIGIN] = ParentOrigin::CENTER; + stage.Add(cameraActor); + + offRenderTask.SetExclusive(true); + offRenderTask.SetInputEnabled(true); + offRenderTask.SetCameraActor(cameraActor); + offRenderTask.SetSourceActor(green); + offRenderTask.SetScreenToFrameBufferMappingActor(green); + + Dali::Texture texture = Dali::Texture::New(TextureType::TEXTURE_2D, Pixel::RGB888, unsigned(stageSize.width), unsigned(stageSize.height)); + FrameBuffer renderTarget = FrameBuffer::New(stageSize.width, stageSize.height, FrameBuffer::Attachment::DEPTH); + renderTarget.AttachColorTexture(texture); + offRenderTask.SetFrameBuffer(renderTarget); + + // Render and notify + application.SendNotification(); + application.Render(10); + + HitTestAlgorithm::Results results; + HitTest(stage, stageSize / 2.0f, results, &DefaultIsActorTouchableFunction); + DALI_TEST_CHECK(results.actor == green); + + END_TEST; +} + +int UtcDaliHitTestAlgorithmBuildPickingRay01(void) +{ + TestApplication application; + tet_infoline("Testing Dali::HitTestAlgorithm::BuildPickingRay positive test"); + + Stage stage = Stage::GetCurrent(); + RenderTaskList renderTaskList = stage.GetRenderTaskList(); + RenderTask defaultRenderTask = renderTaskList.GetTask(0u); + Dali::CameraActor cameraActor = defaultRenderTask.GetCameraActor(); + + Vector2 stageSize(stage.GetSize()); + + Vector2 actorSize(stageSize * 0.5f); + // Create two actors with half the size of the stage and set them to be overlapping + Actor blue = Actor::New(); + blue.SetProperty(Actor::Property::NAME, "Blue"); + blue.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + blue.SetProperty(Actor::Property::PARENT_ORIGIN, AnchorPoint::CENTER); + blue.SetProperty(Actor::Property::SIZE, actorSize); + + Actor green = Actor::New(); + green.SetProperty(Actor::Property::NAME, "Green"); + green.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + green.SetProperty(Actor::Property::PARENT_ORIGIN, AnchorPoint::CENTER); + green.SetProperty(Actor::Property::SIZE, actorSize); + + // Add the actors to the view + stage.Add(blue); + stage.Add(green); + + // Render and notify + application.SendNotification(); + application.Render(0); + + Vector2 screenCoords(stageSize * 0.5f); // touch center of screen + Vector3 origin; + Vector3 direction; + bool built = HitTestAlgorithm::BuildPickingRay(defaultRenderTask, screenCoords, origin, direction); + + Vector3 camPos = cameraActor[Actor::Property::POSITION]; + DALI_TEST_EQUALS(built, true, TEST_LOCATION); + DALI_TEST_EQUALS(camPos, origin, TEST_LOCATION); + direction.Normalize(); + DALI_TEST_EQUALS(direction, -Vector3::ZAXIS, 0.01f, TEST_LOCATION); + + screenCoords.x = stageSize.width * 0.75f; + built = HitTestAlgorithm::BuildPickingRay(defaultRenderTask, screenCoords, origin, direction); + DALI_TEST_EQUALS(built, true, TEST_LOCATION); + DALI_TEST_EQUALS(camPos, origin, TEST_LOCATION); + direction.Normalize(); + DALI_TEST_EQUALS(direction, Vector3(0.075f, 0.0f, -1.0f), 0.01f, TEST_LOCATION); + + screenCoords.x = 0.0f; + screenCoords.y = 0.0f; + built = HitTestAlgorithm::BuildPickingRay(defaultRenderTask, screenCoords, origin, direction); + DALI_TEST_EQUALS(built, true, TEST_LOCATION); + DALI_TEST_EQUALS(camPos, origin, TEST_LOCATION); + direction.Normalize(); + DALI_TEST_EQUALS(direction, Vector3(-0.144f, -0.24f, -0.96f), 0.01f, TEST_LOCATION); + + screenCoords.x = stageSize.width; + screenCoords.y = stageSize.height; + built = HitTestAlgorithm::BuildPickingRay(defaultRenderTask, screenCoords, origin, direction); + DALI_TEST_EQUALS(built, true, TEST_LOCATION); + DALI_TEST_EQUALS(camPos, origin, TEST_LOCATION); + direction.Normalize(); + DALI_TEST_EQUALS(direction, Vector3(0.144f, 0.24f, -0.96f), 0.01f, TEST_LOCATION); + + END_TEST; +}