2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 // Enable debug log for test coverage
19 #define DEBUG_ENABLED 1
21 #include <dali-test-suite-utils.h>
22 #include <dali/devel-api/actors/actor-devel.h>
23 #include <dali/devel-api/common/capabilities.h>
24 #include <dali/integration-api/debug.h>
25 #include <dali/integration-api/events/hover-event-integ.h>
26 #include <dali/integration-api/events/touch-event-integ.h>
27 #include <dali/public-api/dali-core.h>
28 #include <mesh-builder.h>
29 #include <test-actor-utils.h>
31 #include <cfloat> // For FLT_MAX
41 void utc_dali_actor_startup(void)
43 test_return_value = TET_UNDEF;
46 void utc_dali_actor_cleanup(void)
48 test_return_value = TET_PASS;
53 bool gTouchCallBackCalled = false;
54 bool gTouchCallBackCalled2 = false;
55 bool gTouchCallBackCalled3 = false;
57 bool gHoverCallBackCalled = false;
59 static bool gTestConstraintCalled;
61 LayoutDirection::Type gLayoutDirectionType;
65 void operator()(Vector4& color, const PropertyInputContainer& /* inputs */)
67 gTestConstraintCalled = true;
72 * TestConstraint reference.
73 * When constraint is called, the resultRef is updated
74 * with the value supplied.
77 struct TestConstraintRef
79 TestConstraintRef(unsigned int& resultRef, unsigned int value)
80 : mResultRef(resultRef),
85 void operator()(T& current, const PropertyInputContainer& /* inputs */)
90 unsigned int& mResultRef;
94 static bool TestTouchCallback(Actor, const TouchEvent&)
96 gTouchCallBackCalled = true;
101 static bool TestTouchCallback2(Actor, const TouchEvent&)
103 gTouchCallBackCalled2 = true;
108 static bool TestTouchCallback3(Actor, const TouchEvent&)
110 gTouchCallBackCalled3 = true;
115 static void ResetTouchCallbacks()
117 gTouchCallBackCalled = false;
118 gTouchCallBackCalled2 = false;
119 gTouchCallBackCalled3 = false;
122 static bool TestCallback3(Actor actor, const HoverEvent& event)
124 gHoverCallBackCalled = true;
129 // validation stuff for onstage & offstage signals
130 static std::vector<std::string> gActorNamesOnOffScene;
131 static int gOnSceneCallBackCalled;
132 void OnSceneCallback(Actor actor)
134 ++gOnSceneCallBackCalled;
135 gActorNamesOnOffScene.push_back(actor.GetProperty<std::string>(Actor::Property::NAME));
136 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE) == true);
138 static int gOffSceneCallBackCalled;
139 void OffSceneCallback(Actor actor)
141 ++gOffSceneCallBackCalled;
142 gActorNamesOnOffScene.push_back(actor.GetProperty<std::string>(Actor::Property::NAME));
143 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE) == false);
146 struct PositionComponentConstraint
148 PositionComponentConstraint()
152 void operator()(Vector3& pos, const PropertyInputContainer& inputs)
154 const Matrix& m = inputs[0]->GetMatrix();
157 m.GetTransformComponents(pos, rot, scale);
161 struct OrientationComponentConstraint
163 OrientationComponentConstraint()
167 void operator()(Quaternion& orientation, const PropertyInputContainer& inputs)
169 const Quaternion& parentOrientation = inputs[0]->GetQuaternion();
172 orientation = parentOrientation;
177 static bool gOnRelayoutCallBackCalled = false;
178 static std::vector<std::string> gActorNamesRelayout;
180 void OnRelayoutCallback(Actor actor)
182 gOnRelayoutCallBackCalled = true;
183 gActorNamesRelayout.push_back(actor.GetProperty<std::string>(Actor::Property::NAME));
186 struct VisibilityChangedFunctorData
188 VisibilityChangedFunctorData()
191 type(DevelActor::VisibilityChange::SELF),
200 type = DevelActor::VisibilityChange::SELF;
204 void Check(bool compareCalled, Actor compareActor, bool compareVisible, DevelActor::VisibilityChange::Type compareType, const char* location)
206 DALI_TEST_EQUALS(called, compareCalled, TEST_INNER_LOCATION(location));
207 DALI_TEST_EQUALS(actor, compareActor, TEST_INNER_LOCATION(location));
208 DALI_TEST_EQUALS(visible, compareVisible, TEST_INNER_LOCATION(location));
209 DALI_TEST_EQUALS((int)type, (int)compareType, TEST_INNER_LOCATION(location));
212 void Check(bool compareCalled, const std::string& location)
214 DALI_TEST_EQUALS(called, compareCalled, TEST_INNER_LOCATION(location));
219 DevelActor::VisibilityChange::Type type;
223 struct VisibilityChangedFunctor
225 VisibilityChangedFunctor(VisibilityChangedFunctorData& dataVar)
230 void operator()(Actor actor, bool visible, DevelActor::VisibilityChange::Type type)
233 data.visible = visible;
238 VisibilityChangedFunctorData& data;
241 struct VisibilityChangedVoidFunctor
243 VisibilityChangedVoidFunctor(bool& signalCalled)
244 : mSignalCalled(signalCalled)
250 mSignalCalled = true;
256 struct ChildOrderChangedFunctor
258 ChildOrderChangedFunctor(bool& signalCalled, Actor& actor)
259 : mSignalCalled(signalCalled),
264 void operator()(Actor actor)
266 mSignalCalled = true;
274 struct CulledPropertyNotificationFunctor
276 CulledPropertyNotificationFunctor(bool& signalCalled, PropertyNotification& propertyNotification)
277 : mSignalCalled(signalCalled),
278 mPropertyNotification(propertyNotification)
282 void operator()(PropertyNotification& source)
284 mSignalCalled = true;
285 mPropertyNotification = source;
289 PropertyNotification& mPropertyNotification;
292 } // anonymous namespace
294 //& purpose: Testing New API
295 int UtcDaliActorNew(void)
297 TestApplication application;
299 Actor actor = Actor::New();
301 DALI_TEST_CHECK(actor);
305 //& purpose: Testing Dali::Actor::DownCast()
306 int UtcDaliActorDownCastP(void)
308 TestApplication application;
309 tet_infoline("Testing Dali::Actor::DownCast()");
311 Actor actor = Actor::New();
312 BaseHandle object(actor);
313 Actor actor2 = Actor::DownCast(object);
314 DALI_TEST_CHECK(actor2);
318 //& purpose: Testing Dali::Actor::DownCast()
319 int UtcDaliActorDownCastN(void)
321 TestApplication application;
322 tet_infoline("Testing Dali::Actor::DownCast()");
324 BaseHandle unInitializedObject;
325 Actor actor = Actor::DownCast(unInitializedObject);
326 DALI_TEST_CHECK(!actor);
330 int UtcDaliActorMoveConstructor(void)
332 TestApplication application;
334 Actor actor = Actor::New();
335 DALI_TEST_CHECK(actor);
337 int id = actor.GetProperty<int>(Actor::Property::ID);
339 Actor moved = std::move(actor);
340 DALI_TEST_CHECK(moved);
341 DALI_TEST_EQUALS(id, moved.GetProperty<int>(Actor::Property::ID), TEST_LOCATION);
342 DALI_TEST_CHECK(!actor);
347 int UtcDaliActorMoveAssignment(void)
349 TestApplication application;
351 Actor actor = Actor::New();
352 DALI_TEST_CHECK(actor);
354 int id = actor.GetProperty<int>(Actor::Property::ID);
357 moved = std::move(actor);
358 DALI_TEST_CHECK(moved);
359 DALI_TEST_EQUALS(id, moved.GetProperty<int>(Actor::Property::ID), TEST_LOCATION);
360 DALI_TEST_CHECK(!actor);
365 //& purpose: Testing Dali::Actor::GetName()
366 int UtcDaliActorGetName(void)
368 TestApplication application;
370 Actor actor = Actor::New();
372 DALI_TEST_CHECK(actor.GetProperty<std::string>(Actor::Property::NAME).empty());
376 //& purpose: Testing Dali::Actor::SetName()
377 int UtcDaliActorSetName(void)
379 TestApplication application;
381 string str("ActorName");
382 Actor actor = Actor::New();
384 actor.SetProperty(Actor::Property::NAME, str);
385 DALI_TEST_CHECK(actor.GetProperty<std::string>(Actor::Property::NAME) == str);
389 int UtcDaliActorGetId(void)
391 tet_infoline("Testing Dali::Actor::UtcDaliActo.GetProperty< int >( Actor::Property::ID )");
392 TestApplication application;
394 Actor first = Actor::New();
395 Actor second = Actor::New();
396 Actor third = Actor::New();
398 DALI_TEST_CHECK(first.GetProperty<int>(Actor::Property::ID) != second.GetProperty<int>(Actor::Property::ID));
399 DALI_TEST_CHECK(second.GetProperty<int>(Actor::Property::ID) != third.GetProperty<int>(Actor::Property::ID));
403 int UtcDaliActorIsRoot(void)
405 TestApplication application;
407 Actor actor = Actor::New();
408 DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::IS_ROOT));
410 // get the root layer
411 actor = application.GetScene().GetLayer(0);
412 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::IS_ROOT));
416 int UtcDaliActorOnScene(void)
418 TestApplication application;
420 Actor actor = Actor::New();
421 DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
423 // get the root layer
424 actor = application.GetScene().GetLayer(0);
425 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
429 int UtcDaliActorIsLayer(void)
431 TestApplication application;
433 Actor actor = Actor::New();
434 DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::IS_LAYER));
436 // get the root layer
437 actor = application.GetScene().GetLayer(0);
438 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::IS_LAYER));
442 int UtcDaliActorGetLayer(void)
444 TestApplication application;
446 Actor actor = Actor::New();
447 application.GetScene().Add(actor);
448 Layer layer = actor.GetLayer();
450 DALI_TEST_CHECK(layer);
452 // get the root layers layer
453 actor = application.GetScene().GetLayer(0);
454 DALI_TEST_CHECK(actor.GetLayer());
458 int UtcDaliActorAddP(void)
460 tet_infoline("Testing Actor::Add");
461 TestApplication application;
463 Actor parent = Actor::New();
464 Actor child = Actor::New();
466 DALI_TEST_EQUALS(parent.GetChildCount(), 0u, TEST_LOCATION);
470 DALI_TEST_EQUALS(parent.GetChildCount(), 1u, TEST_LOCATION);
472 Actor parent2 = Actor::New();
475 DALI_TEST_EQUALS(parent.GetChildCount(), 0u, TEST_LOCATION);
476 DALI_TEST_EQUALS(parent2.GetChildCount(), 1u, TEST_LOCATION);
478 // try Adding to same parent again, works
480 DALI_TEST_EQUALS(parent2.GetChildCount(), 1u, TEST_LOCATION);
482 // try reparenting an orphaned child
484 Actor temporaryParent = Actor::New();
485 temporaryParent.Add(child);
486 DALI_TEST_EQUALS(parent2.GetChildCount(), 0u, TEST_LOCATION);
488 // temporaryParent has now died, reparent the orphaned child
490 DALI_TEST_EQUALS(parent2.GetChildCount(), 1u, TEST_LOCATION);
495 int UtcDaliActorAddN(void)
497 tet_infoline("Testing Actor::Add");
498 TestApplication application;
500 Actor child = Actor::New();
502 Actor parent2 = Actor::New();
508 parent2.Add(parent2);
509 tet_printf("Assertion test failed - no Exception\n");
510 tet_result(TET_FAIL);
512 catch(Dali::DaliException& e)
514 DALI_TEST_PRINT_ASSERT(e);
515 DALI_TEST_ASSERT(e, "&mOwner != &child", TEST_LOCATION);
516 DALI_TEST_EQUALS(parent2.GetChildCount(), 1u, TEST_LOCATION);
520 tet_printf("Assertion test failed - wrong Exception\n");
521 tet_result(TET_FAIL);
524 // try reparenting root
527 parent2.Add(application.GetScene().GetLayer(0));
528 tet_printf("Assertion test failed - no Exception\n");
529 tet_result(TET_FAIL);
531 catch(Dali::DaliException& e)
533 DALI_TEST_PRINT_ASSERT(e);
534 DALI_TEST_ASSERT(e, "!child.IsRoot()", TEST_LOCATION);
535 DALI_TEST_EQUALS(parent2.GetChildCount(), 1u, TEST_LOCATION);
539 tet_printf("Assertion test failed - wrong Exception\n");
540 tet_result(TET_FAIL);
548 tet_printf("Assertion test failed - no Exception\n");
549 tet_result(TET_FAIL);
551 catch(Dali::DaliException& e)
553 DALI_TEST_PRINT_ASSERT(e);
554 DALI_TEST_ASSERT(e, "actor", TEST_LOCATION);
555 DALI_TEST_EQUALS(parent2.GetChildCount(), 1u, TEST_LOCATION);
559 tet_printf("Assertion test failed - wrong Exception\n");
560 tet_result(TET_FAIL);
566 int UtcDaliActorRemoveN(void)
568 tet_infoline("Testing Actor::Remove");
569 TestApplication application;
571 Actor parent = Actor::New();
572 Actor child = Actor::New();
573 DALI_TEST_EQUALS(parent.GetChildCount(), 0u, TEST_LOCATION);
576 DALI_TEST_EQUALS(parent.GetChildCount(), 1u, TEST_LOCATION);
578 parent.Remove(child);
579 DALI_TEST_EQUALS(parent.GetChildCount(), 0u, TEST_LOCATION);
581 // remove again, no problem
582 parent.Remove(child);
583 DALI_TEST_EQUALS(parent.GetChildCount(), 0u, TEST_LOCATION);
587 DALI_TEST_EQUALS(parent.GetChildCount(), 1u, TEST_LOCATION);
588 // try Remove self, its a no-op
589 parent.Remove(parent);
590 DALI_TEST_EQUALS(parent.GetChildCount(), 1u, TEST_LOCATION);
596 parent.Remove(empty);
597 tet_printf("Assertion test failed - no Exception\n");
598 tet_result(TET_FAIL);
600 catch(Dali::DaliException& e)
602 DALI_TEST_PRINT_ASSERT(e);
603 DALI_TEST_ASSERT(e, "actor", TEST_LOCATION);
604 DALI_TEST_EQUALS(parent.GetChildCount(), 1u, TEST_LOCATION);
608 tet_printf("Assertion test failed - wrong Exception\n");
609 tet_result(TET_FAIL);
614 int UtcDaliActorRemoveP(void)
616 TestApplication application;
618 Actor parent = Actor::New();
619 Actor child = Actor::New();
620 Actor random = Actor::New();
622 application.GetScene().Add(parent);
624 DALI_TEST_CHECK(parent.GetChildCount() == 0);
628 DALI_TEST_CHECK(parent.GetChildCount() == 1);
630 parent.Remove(random);
632 DALI_TEST_CHECK(parent.GetChildCount() == 1);
634 application.GetScene().Remove(parent);
636 DALI_TEST_CHECK(parent.GetChildCount() == 1);
640 int UtcDaliActorGetChildCount(void)
642 TestApplication application;
644 Actor parent = Actor::New();
645 Actor child = Actor::New();
647 DALI_TEST_CHECK(parent.GetChildCount() == 0);
651 DALI_TEST_CHECK(parent.GetChildCount() == 1);
655 int UtcDaliActorGetChildren01(void)
657 TestApplication application;
659 Actor parent = Actor::New();
660 Actor first = Actor::New();
661 Actor second = Actor::New();
662 Actor third = Actor::New();
668 DALI_TEST_CHECK(parent.GetChildAt(0) == first);
669 DALI_TEST_CHECK(parent.GetChildAt(1) == second);
670 DALI_TEST_CHECK(parent.GetChildAt(2) == third);
674 int UtcDaliActorGetChildren02(void)
676 TestApplication application;
678 Actor parent = Actor::New();
679 Actor first = Actor::New();
680 Actor second = Actor::New();
681 Actor third = Actor::New();
687 const Actor& constParent = parent;
689 DALI_TEST_CHECK(constParent.GetChildAt(0) == first);
690 DALI_TEST_CHECK(constParent.GetChildAt(1) == second);
691 DALI_TEST_CHECK(constParent.GetChildAt(2) == third);
695 int UtcDaliActorGetParent01(void)
697 TestApplication application;
699 Actor parent = Actor::New();
700 Actor child = Actor::New();
704 DALI_TEST_CHECK(child.GetParent() == parent);
708 int UtcDaliActorGetParent02(void)
710 TestApplication application;
712 Actor actor = Actor::New();
714 DALI_TEST_CHECK(!actor.GetParent());
718 int UtcDaliActorCustomProperty(void)
720 TestApplication application;
722 Actor actor = Actor::New();
723 application.GetScene().Add(actor);
725 float startValue(1.0f);
726 Property::Index index = actor.RegisterProperty("testProperty", startValue);
727 DALI_TEST_CHECK(actor.GetProperty<float>(index) == startValue);
729 application.SendNotification();
730 application.Render(0);
731 DALI_TEST_CHECK(actor.GetProperty<float>(index) == startValue);
733 actor.SetProperty(index, 5.0f);
735 application.SendNotification();
736 application.Render(0);
737 DALI_TEST_CHECK(actor.GetProperty<float>(index) == 5.0f);
741 int UtcDaliActorCustomPropertyIntToFloat(void)
743 TestApplication application;
745 Actor actor = Actor::New();
746 application.GetScene().Add(actor);
748 float startValue(5.0f);
749 Property::Index index = actor.RegisterProperty("testProperty", startValue);
750 DALI_TEST_CHECK(actor.GetProperty<float>(index) == startValue);
752 application.SendNotification();
753 application.Render(0);
754 DALI_TEST_CHECK(actor.GetProperty<float>(index) == startValue);
756 actor.SetProperty(index, int(1));
758 application.SendNotification();
759 application.Render(0);
760 DALI_TEST_CHECK(actor.GetProperty<float>(index) == 1.0f);
764 int UtcDaliActorCustomPropertyFloatToInt(void)
766 TestApplication application;
768 Actor actor = Actor::New();
769 application.GetScene().Add(actor);
772 Property::Index index = actor.RegisterProperty("testProperty", startValue);
773 DALI_TEST_CHECK(actor.GetProperty<int>(index) == startValue);
775 application.SendNotification();
776 application.Render(0);
777 DALI_TEST_CHECK(actor.GetProperty<int>(index) == startValue);
779 actor.SetProperty(index, float(1.5));
781 application.SendNotification();
782 application.Render(0);
783 DALI_TEST_CHECK(actor.GetProperty<int>(index) == 1);
787 int UtcDaliActorSetParentOrigin(void)
789 TestApplication application;
791 Actor actor = Actor::New();
793 Vector3 vector(0.7f, 0.8f, 0.9f);
794 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN));
796 actor.SetProperty(Actor::Property::PARENT_ORIGIN, vector);
798 // flush the queue and render once
799 application.SendNotification();
800 application.Render();
802 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN));
804 application.GetScene().Add(actor);
806 actor.SetProperty(Actor::Property::PARENT_ORIGIN, Vector3(0.1f, 0.2f, 0.3f));
808 // flush the queue and render once
809 application.SendNotification();
810 application.Render();
812 DALI_TEST_EQUALS(Vector3(0.1f, 0.2f, 0.3f), actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), TEST_LOCATION);
814 application.GetScene().Remove(actor);
818 int UtcDaliActorSetParentOriginIndividual(void)
820 TestApplication application;
822 Actor actor = Actor::New();
824 Vector3 vector(0.7f, 0.8f, 0.9f);
825 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN));
827 actor.SetProperty(Actor::Property::PARENT_ORIGIN_X, vector.x);
829 // flush the queue and render once
830 application.SendNotification();
831 application.Render();
833 DALI_TEST_EQUALS(vector.x, actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN).x, TEST_LOCATION);
835 actor.SetProperty(Actor::Property::PARENT_ORIGIN_Y, vector.y);
837 // flush the queue and render once
838 application.SendNotification();
839 application.Render();
841 DALI_TEST_EQUALS(vector.y, actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN).y, TEST_LOCATION);
843 actor.SetProperty(Actor::Property::PARENT_ORIGIN_Z, vector.z);
845 // flush the queue and render once
846 application.SendNotification();
847 application.Render();
849 DALI_TEST_EQUALS(vector.z, actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN).z, TEST_LOCATION);
854 int UtcDaliActorGetCurrentParentOrigin(void)
856 TestApplication application;
858 Actor actor = Actor::New();
860 Vector3 vector(0.7f, 0.8f, 0.9f);
861 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN));
863 actor.SetProperty(Actor::Property::PARENT_ORIGIN, vector);
865 // flush the queue and render once
866 application.SendNotification();
867 application.Render();
869 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN));
873 int UtcDaliActorSetAnchorPoint(void)
875 TestApplication application;
877 Actor actor = Actor::New();
879 Vector3 vector(0.7f, 0.8f, 0.9f);
880 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT));
882 actor.SetProperty(Actor::Property::ANCHOR_POINT, vector);
884 // flush the queue and render once
885 application.SendNotification();
886 application.Render();
888 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT));
890 application.GetScene().Add(actor);
892 actor.SetProperty(Actor::Property::ANCHOR_POINT, Vector3(0.1f, 0.2f, 0.3f));
893 // flush the queue and render once
894 application.SendNotification();
895 application.Render();
897 DALI_TEST_EQUALS(Vector3(0.1f, 0.2f, 0.3f), actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), TEST_LOCATION);
899 application.GetScene().Remove(actor);
903 int UtcDaliActorSetAnchorPointIndividual(void)
905 TestApplication application;
907 Actor actor = Actor::New();
909 Vector3 vector(0.7f, 0.8f, 0.9f);
910 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT));
912 actor.SetProperty(Actor::Property::ANCHOR_POINT_X, vector.x);
914 // flush the queue and render once
915 application.SendNotification();
916 application.Render();
918 DALI_TEST_EQUALS(vector.x, actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT).x, TEST_LOCATION);
920 actor.SetProperty(Actor::Property::ANCHOR_POINT_Y, vector.y);
922 // flush the queue and render once
923 application.SendNotification();
924 application.Render();
926 DALI_TEST_EQUALS(vector.y, actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT).y, TEST_LOCATION);
928 actor.SetProperty(Actor::Property::ANCHOR_POINT_Z, vector.z);
930 // flush the queue and render once
931 application.SendNotification();
932 application.Render();
934 DALI_TEST_EQUALS(vector.z, actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT).z, TEST_LOCATION);
939 int UtcDaliActorGetCurrentAnchorPoint(void)
941 TestApplication application;
943 Actor actor = Actor::New();
945 Vector3 vector(0.7f, 0.8f, 0.9f);
946 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT));
948 actor.SetProperty(Actor::Property::ANCHOR_POINT, vector);
950 // flush the queue and render once
951 application.SendNotification();
952 application.Render();
954 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT));
958 int UtcDaliActorSetSize01(void)
960 TestApplication application;
962 Actor actor = Actor::New();
963 Vector3 vector(100.0f, 100.0f, 0.0f);
965 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
967 actor.SetProperty(Actor::Property::SIZE, Vector2(vector.x, vector.y));
969 // Immediately retrieve the size after setting
970 Vector3 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
971 DALI_TEST_EQUALS(currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION);
972 DALI_TEST_EQUALS(vector.width, actor.GetProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
973 DALI_TEST_EQUALS(vector.height, actor.GetProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
974 DALI_TEST_EQUALS(vector.depth, actor.GetProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
976 // Flush the queue and render once
977 application.SendNotification();
978 application.Render();
980 // Check the size in the new frame
981 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
983 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
984 DALI_TEST_EQUALS(currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION);
985 DALI_TEST_EQUALS(vector.width, actor.GetProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
986 DALI_TEST_EQUALS(vector.height, actor.GetProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
987 DALI_TEST_EQUALS(vector.depth, actor.GetProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
989 // Check async behaviour
990 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
991 DALI_TEST_EQUALS(currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION);
992 DALI_TEST_EQUALS(vector.width, actor.GetCurrentProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
993 DALI_TEST_EQUALS(vector.height, actor.GetCurrentProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
994 DALI_TEST_EQUALS(vector.depth, actor.GetCurrentProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
996 // Change the resize policy and check whether the size stays the same
997 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
999 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1000 DALI_TEST_EQUALS(currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1002 // Set a new size after resize policy is changed and check the new size
1003 actor.SetProperty(Actor::Property::SIZE, Vector3(0.1f, 0.2f, 0.0f));
1005 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1006 DALI_TEST_EQUALS(currentSize, Vector3(0.1f, 0.2f, 0.0f), Math::MACHINE_EPSILON_0, TEST_LOCATION);
1008 // Change the resize policy again and check whether the new size stays the same
1009 actor.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
1011 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1012 DALI_TEST_EQUALS(currentSize, Vector3(0.1f, 0.2f, 0.0f), Math::MACHINE_EPSILON_0, TEST_LOCATION);
1014 // Set another new size after resize policy is changed and check the new size
1015 actor.SetProperty(Actor::Property::SIZE, Vector3(50.0f, 60.0f, 0.0f));
1017 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1018 DALI_TEST_EQUALS(currentSize, Vector3(50.0f, 60.0f, 0.0f), Math::MACHINE_EPSILON_0, TEST_LOCATION);
1023 int UtcDaliActorSetSize02(void)
1025 TestApplication application;
1027 Actor actor = Actor::New();
1028 Vector3 vector(100.0f, 100.0f, 100.0f);
1030 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1032 actor.SetProperty(Actor::Property::SIZE, Vector3(vector.x, vector.y, vector.z));
1034 // Immediately check the size after setting
1035 Vector3 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1036 DALI_TEST_EQUALS(currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1038 // flush the queue and render once
1039 application.SendNotification();
1040 application.Render();
1042 // Check the size in the new frame
1043 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1045 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1046 DALI_TEST_EQUALS(currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1051 // SetSize(Vector2 size)
1052 int UtcDaliActorSetSize03(void)
1054 TestApplication application;
1056 Actor actor = Actor::New();
1057 Vector3 vector(100.0f, 100.0f, 0.0f);
1059 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1061 actor.SetProperty(Actor::Property::SIZE, Vector2(vector.x, vector.y));
1063 // Immediately check the size after setting
1064 Vector3 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1065 DALI_TEST_EQUALS(currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1067 // flush the queue and render once
1068 application.SendNotification();
1069 application.Render();
1071 // Check the size in the new frame
1072 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1074 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1075 DALI_TEST_EQUALS(currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1080 // SetSize(Vector3 size)
1081 int UtcDaliActorSetSize04(void)
1083 TestApplication application;
1085 Actor actor = Actor::New();
1086 Vector3 vector(100.0f, 100.0f, 100.0f);
1088 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1090 actor.SetProperty(Actor::Property::SIZE, vector);
1092 // Immediately check the size after setting
1093 Vector3 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1094 DALI_TEST_EQUALS(currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1096 // flush the queue and render once
1097 application.SendNotification();
1098 application.Render();
1100 // Check the size in the new frame
1101 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1103 application.GetScene().Add(actor);
1104 actor.SetProperty(Actor::Property::SIZE, Vector3(0.1f, 0.2f, 0.3f));
1106 // Immediately check the size after setting
1107 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1108 DALI_TEST_EQUALS(currentSize, Vector3(0.1f, 0.2f, 0.3f), Math::MACHINE_EPSILON_0, TEST_LOCATION);
1110 // flush the queue and render once
1111 application.SendNotification();
1112 application.Render();
1114 // Check the size in the new frame
1115 DALI_TEST_EQUALS(Vector3(0.1f, 0.2f, 0.3f), actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE), TEST_LOCATION);
1117 currentSize = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
1118 DALI_TEST_EQUALS(currentSize, Vector3(0.1f, 0.2f, 0.3f), Math::MACHINE_EPSILON_0, TEST_LOCATION);
1120 application.GetScene().Remove(actor);
1124 int UtcDaliActorSetSizeIndividual(void)
1126 TestApplication application;
1128 Actor actor = Actor::New();
1130 Vector3 vector(0.7f, 0.8f, 0.9f);
1131 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1133 actor.SetProperty(Actor::Property::SIZE_WIDTH, vector.width);
1135 // Immediately check the width after setting
1136 float sizeWidth = actor.GetProperty(Actor::Property::SIZE_WIDTH).Get<float>();
1137 DALI_TEST_EQUALS(sizeWidth, vector.width, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1139 // flush the queue and render once
1140 application.SendNotification();
1141 application.Render();
1143 // Check the width in the new frame
1144 DALI_TEST_EQUALS(vector.width, actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE).width, TEST_LOCATION);
1146 sizeWidth = actor.GetProperty(Actor::Property::SIZE_WIDTH).Get<float>();
1147 DALI_TEST_EQUALS(sizeWidth, vector.width, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1149 actor.SetProperty(Actor::Property::SIZE_HEIGHT, vector.height);
1151 // Immediately check the height after setting
1152 float sizeHeight = actor.GetProperty(Actor::Property::SIZE_HEIGHT).Get<float>();
1153 DALI_TEST_EQUALS(sizeHeight, vector.height, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1155 // flush the queue and render once
1156 application.SendNotification();
1157 application.Render();
1159 // Check the height in the new frame
1160 DALI_TEST_EQUALS(vector.height, actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE).height, TEST_LOCATION);
1162 sizeHeight = actor.GetProperty(Actor::Property::SIZE_HEIGHT).Get<float>();
1163 DALI_TEST_EQUALS(sizeHeight, vector.height, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1165 actor.SetProperty(Actor::Property::SIZE_DEPTH, vector.depth);
1167 // Immediately check the depth after setting
1168 float sizeDepth = actor.GetProperty(Actor::Property::SIZE_DEPTH).Get<float>();
1169 DALI_TEST_EQUALS(sizeDepth, vector.depth, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1171 // flush the queue and render once
1172 application.SendNotification();
1173 application.Render();
1175 // Check the depth in the new frame
1176 DALI_TEST_EQUALS(vector.depth, actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE).depth, TEST_LOCATION);
1178 sizeDepth = actor.GetProperty(Actor::Property::SIZE_DEPTH).Get<float>();
1179 DALI_TEST_EQUALS(sizeDepth, vector.depth, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1181 // Change the resize policy and check whether the size stays the same
1182 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
1184 sizeWidth = actor.GetProperty(Actor::Property::SIZE_WIDTH).Get<float>();
1185 DALI_TEST_EQUALS(sizeWidth, vector.width, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1187 sizeHeight = actor.GetProperty(Actor::Property::SIZE_HEIGHT).Get<float>();
1188 DALI_TEST_EQUALS(sizeHeight, vector.height, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1190 sizeDepth = actor.GetProperty(Actor::Property::SIZE_DEPTH).Get<float>();
1191 DALI_TEST_EQUALS(sizeDepth, vector.depth, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1193 // Change the resize policy again and check whether the size stays the same
1194 actor.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
1196 sizeWidth = actor.GetProperty(Actor::Property::SIZE_WIDTH).Get<float>();
1197 DALI_TEST_EQUALS(sizeWidth, vector.width, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1199 sizeHeight = actor.GetProperty(Actor::Property::SIZE_HEIGHT).Get<float>();
1200 DALI_TEST_EQUALS(sizeHeight, vector.height, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1202 sizeDepth = actor.GetProperty(Actor::Property::SIZE_DEPTH).Get<float>();
1203 DALI_TEST_EQUALS(sizeDepth, vector.depth, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1208 int UtcDaliActorSetSizeIndividual02(void)
1210 TestApplication application;
1212 Actor actor = Actor::New();
1213 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
1214 application.GetScene().Add(actor);
1216 Vector3 vector(100.0f, 200.0f, 400.0f);
1217 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1219 actor.SetProperty(Actor::Property::SIZE_WIDTH, vector.width);
1220 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::SIZE_WIDTH).Get<float>(), vector.width, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1222 actor.SetProperty(Actor::Property::SIZE_HEIGHT, vector.height);
1223 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::SIZE_HEIGHT).Get<float>(), vector.height, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1225 actor.SetProperty(Actor::Property::SIZE_DEPTH, vector.depth);
1226 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::SIZE_DEPTH).Get<float>(), vector.depth, Math::MACHINE_EPSILON_0, TEST_LOCATION);
1228 // flush the queue and render once
1229 application.SendNotification();
1230 application.Render();
1232 // Check the width in the new frame
1233 DALI_TEST_EQUALS(vector.width, actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE).width, TEST_LOCATION);
1234 DALI_TEST_EQUALS(vector.height, actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE).height, TEST_LOCATION);
1239 int UtcDaliActorGetCurrentSize(void)
1241 TestApplication application;
1243 Actor actor = Actor::New();
1244 Vector3 vector(100.0f, 100.0f, 20.0f);
1246 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1248 actor.SetProperty(Actor::Property::SIZE, vector);
1250 // flush the queue and render once
1251 application.SendNotification();
1252 application.Render();
1254 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1258 int UtcDaliActorGetNaturalSize(void)
1260 TestApplication application;
1262 Actor actor = Actor::New();
1263 Vector3 vector(0.0f, 0.0f, 0.0f);
1265 DALI_TEST_CHECK(actor.GetNaturalSize() == vector);
1270 int UtcDaliActorGetCurrentSizeImmediate(void)
1272 TestApplication application;
1274 Actor actor = Actor::New();
1275 Vector3 vector(100.0f, 100.0f, 20.0f);
1277 DALI_TEST_CHECK(vector != actor.GetTargetSize());
1278 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1280 actor.SetProperty(Actor::Property::SIZE, vector);
1282 DALI_TEST_CHECK(vector == actor.GetTargetSize());
1283 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1285 // flush the queue and render once
1286 application.SendNotification();
1287 application.Render();
1289 DALI_TEST_CHECK(vector == actor.GetTargetSize());
1290 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
1293 // Build the animation
1294 const float durationSeconds = 2.0f;
1295 Animation animation = Animation::New(durationSeconds);
1296 const Vector3 targetValue(10.0f, 20.0f, 30.0f);
1297 animation.AnimateTo(Property(actor, Actor::Property::SIZE), targetValue);
1299 DALI_TEST_CHECK(actor.GetTargetSize() == vector);
1301 application.GetScene().Add(actor);
1303 // Start the animation
1306 application.SendNotification();
1307 application.Render(static_cast<unsigned int>(durationSeconds * 1000.0f));
1309 DALI_TEST_CHECK(actor.GetTargetSize() == targetValue);
1314 int UtcDaliActorCalculateScreenExtents(void)
1316 TestApplication application;
1318 Actor actor = Actor::New();
1320 actor.SetProperty(Actor::Property::POSITION, Vector3(2.0f, 2.0f, 16.0f));
1321 actor.SetProperty(Actor::Property::SIZE, Vector3{1.0f, 1.0f, 1.0f});
1323 application.SendNotification();
1324 application.Render();
1326 auto expectedExtent = Rect<>{-0.5f, -0.5f, 1.0f, 1.0f};
1327 auto actualExtent = DevelActor::CalculateScreenExtents(actor);
1328 DALI_TEST_EQUALS(expectedExtent.x, actualExtent.x, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
1329 DALI_TEST_EQUALS(expectedExtent.y, actualExtent.y, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
1330 DALI_TEST_EQUALS(expectedExtent.width, actualExtent.width, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
1331 DALI_TEST_EQUALS(expectedExtent.height, actualExtent.height, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
1333 application.GetScene().Remove(actor);
1337 // SetPosition(float x, float y)
1338 int UtcDaliActorSetPosition01(void)
1340 TestApplication application;
1342 Actor actor = Actor::New();
1344 // Set to random to start off with
1345 actor.SetProperty(Actor::Property::POSITION, Vector3(120.0f, 120.0f, 0.0f));
1347 Vector3 vector(100.0f, 100.0f, 0.0f);
1349 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1351 actor.SetProperty(Actor::Property::POSITION, Vector2(vector.x, vector.y));
1352 // flush the queue and render once
1353 application.SendNotification();
1354 application.Render();
1355 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1357 application.GetScene().Add(actor);
1358 actor.SetProperty(Actor::Property::POSITION, Vector3(0.1f, 0.2f, 0.3f));
1359 // flush the queue and render once
1360 application.SendNotification();
1361 application.Render();
1362 DALI_TEST_EQUALS(Vector3(0.1f, 0.2f, 0.3f), actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
1364 actor.SetProperty(Actor::Property::POSITION_X, 1.0f);
1365 actor.SetProperty(Actor::Property::POSITION_Y, 1.1f);
1366 actor.SetProperty(Actor::Property::POSITION_Z, 1.2f);
1367 // flush the queue and render once
1368 application.SendNotification();
1369 application.Render();
1370 DALI_TEST_EQUALS(Vector3(1.0f, 1.1f, 1.2f), actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
1372 actor.TranslateBy(Vector3(0.1f, 0.1f, 0.1f));
1373 // flush the queue and render once
1374 application.SendNotification();
1375 application.Render();
1376 DALI_TEST_EQUALS(Vector3(1.1f, 1.2f, 1.3f), actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION), Math::MACHINE_EPSILON_10000, TEST_LOCATION);
1378 application.GetScene().Remove(actor);
1382 // SetPosition(float x, float y, float z)
1383 int UtcDaliActorSetPosition02(void)
1385 TestApplication application;
1387 Actor actor = Actor::New();
1389 // Set to random to start off with
1390 actor.SetProperty(Actor::Property::POSITION, Vector3(120.0f, 120.0f, 120.0f));
1392 Vector3 vector(100.0f, 100.0f, 100.0f);
1394 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1396 actor.SetProperty(Actor::Property::POSITION, Vector3(vector.x, vector.y, vector.z));
1398 // flush the queue and render once
1399 application.SendNotification();
1400 application.Render();
1402 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1406 // SetPosition(Vector3 position)
1407 int UtcDaliActorSetPosition03(void)
1409 TestApplication application;
1411 Actor actor = Actor::New();
1413 // Set to random to start off with
1414 actor.SetProperty(Actor::Property::POSITION, Vector3(120.0f, 120.0f, 120.0f));
1416 Vector3 vector(100.0f, 100.0f, 100.0f);
1418 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1420 actor.SetProperty(Actor::Property::POSITION, vector);
1422 // flush the queue and render once
1423 application.SendNotification();
1424 application.Render();
1426 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1430 int UtcDaliActorSetX(void)
1432 TestApplication application;
1434 Actor actor = Actor::New();
1436 Vector3 vector(100.0f, 0.0f, 0.0f);
1438 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1440 actor.SetProperty(Actor::Property::POSITION_X, 100.0f);
1442 // flush the queue and render once
1443 application.SendNotification();
1444 application.Render();
1446 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1450 int UtcDaliActorSetY(void)
1452 TestApplication application;
1454 Actor actor = Actor::New();
1456 Vector3 vector(0.0f, 100.0f, 0.0f);
1458 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1460 actor.SetProperty(Actor::Property::POSITION_Y, 100.0f);
1462 // flush the queue and render once
1463 application.SendNotification();
1464 application.Render();
1466 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1470 int UtcDaliActorSetZ(void)
1472 TestApplication application;
1474 Actor actor = Actor::New();
1476 Vector3 vector(0.0f, 0.0f, 100.0f);
1478 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1480 actor.SetProperty(Actor::Property::POSITION_Z, 100.0f);
1482 // flush the queue and render once
1483 application.SendNotification();
1484 application.Render();
1486 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1490 int UtcDaliActorSetPositionProperties(void)
1492 TestApplication application;
1494 Actor actor = Actor::New();
1496 Vector3 vector(0.7f, 0.8f, 0.9f);
1497 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1499 actor.SetProperty(Actor::Property::POSITION_X, vector.x);
1500 DALI_TEST_EQUALS(vector.x, actor.GetProperty<Vector3>(Actor::Property::POSITION).x, TEST_LOCATION);
1501 DALI_TEST_EQUALS(vector.x, actor.GetProperty<float>(Actor::Property::POSITION_X), TEST_LOCATION);
1503 // flush the queue and render once
1504 application.SendNotification();
1505 application.Render();
1507 DALI_TEST_EQUALS(vector.x, actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION).x, TEST_LOCATION);
1508 DALI_TEST_EQUALS(vector.x, actor.GetProperty<Vector3>(Actor::Property::POSITION).x, TEST_LOCATION);
1509 DALI_TEST_EQUALS(vector.x, actor.GetProperty<float>(Actor::Property::POSITION_X), TEST_LOCATION);
1510 DALI_TEST_EQUALS(vector.x, actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION).x, TEST_LOCATION);
1511 DALI_TEST_EQUALS(vector.x, actor.GetCurrentProperty<float>(Actor::Property::POSITION_X), TEST_LOCATION);
1513 actor.SetProperty(Actor::Property::POSITION_Y, vector.y);
1514 DALI_TEST_EQUALS(vector.y, actor.GetProperty<Vector3>(Actor::Property::POSITION).y, TEST_LOCATION);
1515 DALI_TEST_EQUALS(vector.y, actor.GetProperty<float>(Actor::Property::POSITION_Y), TEST_LOCATION);
1517 // flush the queue and render once
1518 application.SendNotification();
1519 application.Render();
1521 DALI_TEST_EQUALS(vector.y, actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION).y, TEST_LOCATION);
1522 DALI_TEST_EQUALS(vector.y, actor.GetProperty<Vector3>(Actor::Property::POSITION).y, TEST_LOCATION);
1523 DALI_TEST_EQUALS(vector.y, actor.GetProperty<float>(Actor::Property::POSITION_Y), TEST_LOCATION);
1524 DALI_TEST_EQUALS(vector.y, actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION).y, TEST_LOCATION);
1525 DALI_TEST_EQUALS(vector.y, actor.GetCurrentProperty<float>(Actor::Property::POSITION_Y), TEST_LOCATION);
1527 actor.SetProperty(Actor::Property::POSITION_Z, vector.z);
1528 DALI_TEST_EQUALS(vector.z, actor.GetProperty<Vector3>(Actor::Property::POSITION).z, TEST_LOCATION);
1529 DALI_TEST_EQUALS(vector.z, actor.GetProperty<float>(Actor::Property::POSITION_Z), TEST_LOCATION);
1531 // flush the queue and render once
1532 application.SendNotification();
1533 application.Render();
1535 DALI_TEST_EQUALS(vector.z, actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION).z, TEST_LOCATION);
1536 DALI_TEST_EQUALS(vector.z, actor.GetProperty<Vector3>(Actor::Property::POSITION).z, TEST_LOCATION);
1537 DALI_TEST_EQUALS(vector.z, actor.GetProperty<float>(Actor::Property::POSITION_Z), TEST_LOCATION);
1538 DALI_TEST_EQUALS(vector.z, actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION).z, TEST_LOCATION);
1539 DALI_TEST_EQUALS(vector.z, actor.GetCurrentProperty<float>(Actor::Property::POSITION_Z), TEST_LOCATION);
1544 int UtcDaliActorTranslateBy(void)
1546 TestApplication application;
1548 Actor actor = Actor::New();
1549 Vector3 vector(100.0f, 100.0f, 100.0f);
1551 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1553 actor.SetProperty(Actor::Property::POSITION, vector);
1555 // flush the queue and render once
1556 application.SendNotification();
1557 application.Render();
1559 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1561 actor.TranslateBy(vector);
1563 // flush the queue and render once
1564 application.SendNotification();
1565 application.Render();
1567 DALI_TEST_CHECK(vector * 2.0f == actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1571 int UtcDaliActorGetCurrentPosition(void)
1573 TestApplication application;
1575 Actor actor = Actor::New();
1576 Vector3 setVector(100.0f, 100.0f, 0.0f);
1577 actor.SetProperty(Actor::Property::POSITION, setVector);
1579 // flush the queue and render once
1580 application.SendNotification();
1581 application.Render();
1583 DALI_TEST_CHECK(actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION) == setVector);
1587 int UtcDaliActorGetCurrentWorldPosition(void)
1589 TestApplication application;
1591 Actor parent = Actor::New();
1592 Vector3 parentPosition(1.0f, 2.0f, 3.0f);
1593 parent.SetProperty(Actor::Property::POSITION, parentPosition);
1594 parent.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1595 parent.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
1596 application.GetScene().Add(parent);
1598 Actor child = Actor::New();
1599 child.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1600 child.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
1601 Vector3 childPosition(6.0f, 6.0f, 6.0f);
1602 child.SetProperty(Actor::Property::POSITION, childPosition);
1605 // The actors should not have a world position yet
1606 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3::ZERO, TEST_LOCATION);
1607 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3::ZERO, TEST_LOCATION);
1609 application.SendNotification();
1610 application.Render(0);
1612 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::POSITION), parentPosition, TEST_LOCATION);
1613 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::POSITION), childPosition, TEST_LOCATION);
1615 // The actors should have a world position now
1616 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), parentPosition, TEST_LOCATION);
1617 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), parentPosition + childPosition, TEST_LOCATION);
1621 int UtcDaliActorSetInheritPosition(void)
1623 tet_infoline("Testing Actor::SetInheritPosition");
1624 TestApplication application;
1626 Actor parent = Actor::New();
1627 Vector3 parentPosition(1.0f, 2.0f, 3.0f);
1628 parent.SetProperty(Actor::Property::POSITION, parentPosition);
1629 parent.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1630 parent.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
1631 application.GetScene().Add(parent);
1633 Actor child = Actor::New();
1634 child.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1635 child.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
1636 Vector3 childPosition(10.0f, 11.0f, 12.0f);
1637 child.SetProperty(Actor::Property::POSITION, childPosition);
1640 // The actors should not have a world position yet
1641 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3::ZERO, TEST_LOCATION);
1642 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3::ZERO, TEST_LOCATION);
1644 // first test default, which is to inherit position
1645 DALI_TEST_EQUALS(child.GetProperty<bool>(Actor::Property::INHERIT_POSITION), true, TEST_LOCATION);
1646 application.SendNotification();
1647 application.Render(0); // should only really call Update as Render is not required to update scene
1648 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::POSITION), parentPosition, TEST_LOCATION);
1649 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::POSITION), childPosition, TEST_LOCATION);
1650 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), parentPosition, TEST_LOCATION);
1651 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), parentPosition + childPosition, TEST_LOCATION);
1653 //Change child position
1654 Vector3 childOffset(-1.0f, 1.0f, 0.0f);
1655 child.SetProperty(Actor::Property::POSITION, childOffset);
1657 // Use local position as world postion
1658 child.SetProperty(Actor::Property::INHERIT_POSITION, false);
1659 DALI_TEST_EQUALS(child.GetProperty<bool>(Actor::Property::INHERIT_POSITION), false, TEST_LOCATION);
1660 application.SendNotification();
1661 application.Render(0); // should only really call Update as Render is not required to update scene
1662 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::POSITION), parentPosition, TEST_LOCATION);
1663 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::POSITION), childOffset, TEST_LOCATION);
1664 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), parentPosition, TEST_LOCATION);
1665 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), childOffset, TEST_LOCATION);
1667 //Change back to inherit position from parent
1668 child.SetProperty(Actor::Property::INHERIT_POSITION, true);
1669 DALI_TEST_EQUALS(child.GetProperty<bool>(Actor::Property::INHERIT_POSITION), true, TEST_LOCATION);
1670 application.SendNotification();
1671 application.Render(0); // should only really call Update as Render is not required to update scene
1672 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::POSITION), parentPosition, TEST_LOCATION);
1673 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::POSITION), childOffset, TEST_LOCATION);
1674 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), parentPosition, TEST_LOCATION);
1675 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), parentPosition + childOffset, TEST_LOCATION);
1679 int UtcDaliActorInheritOpacity(void)
1681 tet_infoline("Testing Actor::Inherit Opacity");
1682 TestApplication application;
1684 Actor parent = Actor::New();
1685 Actor child = Actor::New();
1687 application.GetScene().Add(parent);
1689 DALI_TEST_EQUALS(parent.GetProperty(Actor::Property::COLOR_ALPHA).Get<float>(), 1.0f, 0.0001f, TEST_LOCATION);
1690 DALI_TEST_EQUALS(child.GetProperty(Actor::Property::COLOR_ALPHA).Get<float>(), 1.0f, 0.0001f, TEST_LOCATION);
1692 // flush the queue and render once
1693 application.SendNotification();
1694 application.Render();
1696 parent.SetProperty(Actor::Property::OPACITY, 0.1f);
1698 DALI_TEST_EQUALS(parent.GetProperty(Actor::Property::COLOR_ALPHA).Get<float>(), 0.1f, 0.0001f, TEST_LOCATION);
1699 DALI_TEST_EQUALS(child.GetProperty(Actor::Property::COLOR_ALPHA).Get<float>(), 1.0f, 0.0001f, TEST_LOCATION);
1701 application.SendNotification();
1702 application.Render();
1704 DALI_TEST_EQUALS(parent.GetProperty(Actor::Property::WORLD_COLOR).Get<Vector4>(), Vector4(1.f, 1.f, 1.f, 0.1f), 0.0001f, TEST_LOCATION);
1705 DALI_TEST_EQUALS(parent.GetCurrentProperty(Actor::Property::COLOR_ALPHA).Get<float>(), 0.1f, 0.0001f, TEST_LOCATION);
1706 DALI_TEST_EQUALS(parent.GetCurrentProperty(Actor::Property::WORLD_COLOR).Get<Vector4>(), Vector4(1.f, 1.f, 1.f, 0.1f), 0.0001f, TEST_LOCATION);
1707 DALI_TEST_EQUALS(child.GetProperty(Actor::Property::WORLD_COLOR).Get<Vector4>(), Vector4(1.f, 1.f, 1.f, 0.1f), 0.0001f, TEST_LOCATION);
1708 DALI_TEST_EQUALS(child.GetCurrentProperty(Actor::Property::WORLD_COLOR).Get<Vector4>(), Vector4(1.f, 1.f, 1.f, 0.1f), 0.0001f, TEST_LOCATION);
1709 DALI_TEST_EQUALS(child.GetCurrentProperty(Actor::Property::COLOR_ALPHA).Get<float>(), 1.f, 0.0001f, TEST_LOCATION);
1714 // SetOrientation(float angleRadians, Vector3 axis)
1715 int UtcDaliActorSetOrientation01(void)
1717 TestApplication application;
1719 Quaternion rotation(Radian(0.785f), Vector3(1.0f, 1.0f, 0.0f));
1720 Actor actor = Actor::New();
1722 actor.SetProperty(Actor::Property::ORIENTATION, rotation);
1724 // flush the queue and render once
1725 application.SendNotification();
1726 application.Render();
1728 DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1732 int UtcDaliActorSetOrientation02(void)
1734 TestApplication application;
1736 Actor actor = Actor::New();
1738 Radian angle(0.785f);
1739 Vector3 axis(1.0f, 1.0f, 0.0f);
1741 actor.SetProperty(Actor::Property::ORIENTATION, Quaternion(angle, axis));
1742 Quaternion rotation(angle, axis);
1743 // flush the queue and render once
1744 application.SendNotification();
1745 application.Render();
1746 DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1748 application.GetScene().Add(actor);
1749 actor.RotateBy(Degree(360), axis);
1750 DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1752 actor.SetProperty(Actor::Property::ORIENTATION, Quaternion(Degree(0), Vector3(1.0f, 0.0f, 0.0f)));
1753 Quaternion result(Radian(0), Vector3(1.0f, 0.0f, 0.0f));
1754 // flush the queue and render once
1755 application.SendNotification();
1756 application.Render();
1757 DALI_TEST_EQUALS(result, actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1759 actor.SetProperty(Actor::Property::ORIENTATION, Quaternion(angle, axis));
1760 // flush the queue and render once
1761 application.SendNotification();
1762 application.Render();
1763 DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1765 application.GetScene().Remove(actor);
1769 // SetOrientation(float angleRadians, Vector3 axis)
1770 int UtcDaliActorSetOrientationProperty(void)
1772 TestApplication application;
1774 Quaternion rotation(Radian(0.785f), Vector3(1.0f, 1.0f, 0.0f));
1775 Actor actor = Actor::New();
1777 actor.SetProperty(Actor::Property::ORIENTATION, rotation);
1778 DALI_TEST_EQUALS(rotation, actor.GetProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1780 // flush the queue and render once
1781 application.SendNotification();
1782 application.Render();
1784 DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1785 DALI_TEST_EQUALS(rotation, actor.GetProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1786 DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1790 // RotateBy(float angleRadians, Vector3 axis)
1791 int UtcDaliActorRotateBy01(void)
1793 TestApplication application;
1795 Actor actor = Actor::New();
1797 Radian angle(M_PI * 0.25f);
1798 actor.RotateBy((angle), Vector3::ZAXIS);
1799 // flush the queue and render once
1800 application.SendNotification();
1801 application.Render();
1802 DALI_TEST_EQUALS(Quaternion(angle, Vector3::ZAXIS), actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1804 application.GetScene().Add(actor);
1806 actor.RotateBy(angle, Vector3::ZAXIS);
1807 // flush the queue and render once
1808 application.SendNotification();
1809 application.Render();
1810 DALI_TEST_EQUALS(Quaternion(angle * 2.0f, Vector3::ZAXIS), actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1812 application.GetScene().Remove(actor);
1816 // RotateBy(Quaternion relativeRotation)
1817 int UtcDaliActorRotateBy02(void)
1819 TestApplication application;
1821 Actor actor = Actor::New();
1823 Radian angle(M_PI * 0.25f);
1824 Quaternion rotation(angle, Vector3::ZAXIS);
1825 actor.RotateBy(rotation);
1826 // flush the queue and render once
1827 application.SendNotification();
1828 application.Render();
1829 DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1831 actor.RotateBy(rotation);
1832 // flush the queue and render once
1833 application.SendNotification();
1834 application.Render();
1835 DALI_TEST_EQUALS(Quaternion(angle * 2.0f, Vector3::ZAXIS), actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1839 int UtcDaliActorGetCurrentOrientation(void)
1841 TestApplication application;
1842 Actor actor = Actor::New();
1844 Quaternion rotation(Radian(0.785f), Vector3(1.0f, 1.0f, 0.0f));
1845 actor.SetProperty(Actor::Property::ORIENTATION, rotation);
1846 // flush the queue and render once
1847 application.SendNotification();
1848 application.Render();
1849 DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
1853 int UtcDaliActorGetCurrentWorldOrientation(void)
1855 tet_infoline("Testing Actor::GetCurrentWorldRotation");
1856 TestApplication application;
1858 Actor parent = Actor::New();
1859 Radian rotationAngle(Degree(90.0f));
1860 Quaternion rotation(rotationAngle, Vector3::YAXIS);
1861 parent.SetProperty(Actor::Property::ORIENTATION, rotation);
1862 application.GetScene().Add(parent);
1864 Actor child = Actor::New();
1865 child.SetProperty(Actor::Property::ORIENTATION, rotation);
1868 // The actors should not have a world rotation yet
1869 DALI_TEST_EQUALS(parent.GetCurrentProperty<Quaternion>(Actor::Property::WORLD_ORIENTATION), Quaternion(Radian(0.0f), Vector3::YAXIS), 0.001, TEST_LOCATION);
1870 DALI_TEST_EQUALS(child.GetCurrentProperty<Quaternion>(Actor::Property::WORLD_ORIENTATION), Quaternion(Radian(0.0f), Vector3::YAXIS), 0.001, TEST_LOCATION);
1872 application.SendNotification();
1873 application.Render(0);
1875 DALI_TEST_EQUALS(parent.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), rotation, 0.001, TEST_LOCATION);
1876 DALI_TEST_EQUALS(child.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), rotation, 0.001, TEST_LOCATION);
1878 // The actors should have a world rotation now
1879 DALI_TEST_EQUALS(parent.GetCurrentProperty<Quaternion>(Actor::Property::WORLD_ORIENTATION), Quaternion(rotationAngle, Vector3::YAXIS), 0.001, TEST_LOCATION);
1880 DALI_TEST_EQUALS(child.GetCurrentProperty<Quaternion>(Actor::Property::WORLD_ORIENTATION), Quaternion(rotationAngle * 2.0f, Vector3::YAXIS), 0.001, TEST_LOCATION);
1882 // turn off child rotation inheritance
1883 child.SetProperty(Actor::Property::INHERIT_ORIENTATION, false);
1884 DALI_TEST_EQUALS(child.GetProperty<bool>(Actor::Property::INHERIT_ORIENTATION), false, TEST_LOCATION);
1885 application.SendNotification();
1886 application.Render(0);
1888 // The actors should have a world rotation now
1889 DALI_TEST_EQUALS(parent.GetCurrentProperty<Quaternion>(Actor::Property::WORLD_ORIENTATION), Quaternion(rotationAngle, Vector3::YAXIS), 0.001, TEST_LOCATION);
1890 DALI_TEST_EQUALS(child.GetCurrentProperty<Quaternion>(Actor::Property::WORLD_ORIENTATION), rotation, 0.001, TEST_LOCATION);
1894 // SetScale(float scale)
1895 int UtcDaliActorSetScale01(void)
1897 TestApplication application;
1899 Actor actor = Actor::New();
1901 // Set to random value first -.GetCurrentProperty< Vector3 >( Actor::Property::SCALE ) asserts if called before SetScale()
1902 actor.SetProperty(Actor::Property::SCALE, 0.25f);
1904 Vector3 scale(10.0f, 10.0f, 10.0f);
1905 DALI_TEST_CHECK(actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE) != scale);
1907 actor.SetProperty(Actor::Property::SCALE, scale.x);
1909 // flush the queue and render once
1910 application.SendNotification();
1911 application.Render();
1913 DALI_TEST_CHECK(actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE) == scale);
1917 // SetScale(float scaleX, float scaleY, float scaleZ)
1918 int UtcDaliActorSetScale02(void)
1920 TestApplication application;
1921 Vector3 scale(10.0f, 10.0f, 10.0f);
1923 Actor actor = Actor::New();
1925 // Set to random value first -.GetCurrentProperty< Vector3 >( Actor::Property::SCALE ) asserts if called before SetScale()
1926 actor.SetProperty(Actor::Property::SCALE, Vector3(12.0f, 1.0f, 2.0f));
1928 DALI_TEST_CHECK(actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE) != scale);
1930 actor.SetProperty(Actor::Property::SCALE, Vector3(scale.x, scale.y, scale.z));
1931 // flush the queue and render once
1932 application.SendNotification();
1933 application.Render();
1934 DALI_TEST_CHECK(actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE) == scale);
1936 // add to stage and test
1937 application.GetScene().Add(actor);
1938 actor.SetProperty(Actor::Property::SCALE, Vector3(2.0f, 2.0f, 2.0f));
1939 // flush the queue and render once
1940 application.SendNotification();
1941 application.Render();
1942 DALI_TEST_EQUALS(Vector3(2.0f, 2.0f, 2.0f), actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE), 0.001, TEST_LOCATION);
1944 application.GetScene().Remove(actor);
1949 // SetScale(Vector3 scale)
1950 int UtcDaliActorSetScale03(void)
1952 TestApplication application;
1953 Vector3 scale(10.0f, 10.0f, 10.0f);
1955 Actor actor = Actor::New();
1957 // Set to random value first -.GetCurrentProperty< Vector3 >( Actor::Property::SCALE ) asserts if called before SetScale()
1958 actor.SetProperty(Actor::Property::SCALE, Vector3(12.0f, 1.0f, 2.0f));
1960 DALI_TEST_CHECK(actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE) != scale);
1962 actor.SetProperty(Actor::Property::SCALE, scale);
1964 // flush the queue and render once
1965 application.SendNotification();
1966 application.Render();
1968 DALI_TEST_CHECK(actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE) == scale);
1972 int UtcDaliActorSetScaleIndividual(void)
1974 TestApplication application;
1976 Actor actor = Actor::New();
1978 Vector3 vector(0.7f, 0.8f, 0.9f);
1979 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE));
1981 actor.SetProperty(Actor::Property::SCALE_X, vector.x);
1982 DALI_TEST_EQUALS(vector.x, actor.GetProperty<float>(Actor::Property::SCALE_X), TEST_LOCATION);
1984 // flush the queue and render once
1985 application.SendNotification();
1986 application.Render();
1988 DALI_TEST_EQUALS(vector.x, actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE).x, TEST_LOCATION);
1989 DALI_TEST_EQUALS(vector.x, actor.GetProperty<float>(Actor::Property::SCALE_X), TEST_LOCATION);
1990 DALI_TEST_EQUALS(vector.x, actor.GetCurrentProperty<float>(Actor::Property::SCALE_X), TEST_LOCATION);
1992 actor.SetProperty(Actor::Property::SCALE_Y, vector.y);
1993 DALI_TEST_EQUALS(vector.y, actor.GetProperty<float>(Actor::Property::SCALE_Y), TEST_LOCATION);
1995 // flush the queue and render once
1996 application.SendNotification();
1997 application.Render();
1999 DALI_TEST_EQUALS(vector.y, actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE).y, TEST_LOCATION);
2000 DALI_TEST_EQUALS(vector.y, actor.GetProperty<float>(Actor::Property::SCALE_Y), TEST_LOCATION);
2001 DALI_TEST_EQUALS(vector.y, actor.GetCurrentProperty<float>(Actor::Property::SCALE_Y), TEST_LOCATION);
2003 actor.SetProperty(Actor::Property::SCALE_Z, vector.z);
2004 DALI_TEST_EQUALS(vector.z, actor.GetProperty<float>(Actor::Property::SCALE_Z), TEST_LOCATION);
2006 // flush the queue and render once
2007 application.SendNotification();
2008 application.Render();
2010 DALI_TEST_EQUALS(vector.z, actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE).z, TEST_LOCATION);
2011 DALI_TEST_EQUALS(vector.z, actor.GetProperty<float>(Actor::Property::SCALE_Z), TEST_LOCATION);
2012 DALI_TEST_EQUALS(vector.z, actor.GetCurrentProperty<float>(Actor::Property::SCALE_Z), TEST_LOCATION);
2014 DALI_TEST_EQUALS(vector, actor.GetProperty<Vector3>(Actor::Property::SCALE), TEST_LOCATION);
2015 DALI_TEST_EQUALS(vector, actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE), TEST_LOCATION);
2020 int UtcDaliActorScaleBy(void)
2022 TestApplication application;
2023 Actor actor = Actor::New();
2024 Vector3 vector(100.0f, 100.0f, 100.0f);
2026 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE));
2028 actor.SetProperty(Actor::Property::SCALE, vector);
2030 // flush the queue and render once
2031 application.SendNotification();
2032 application.Render();
2034 DALI_TEST_CHECK(vector == actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE));
2036 actor.ScaleBy(vector);
2038 // flush the queue and render once
2039 application.SendNotification();
2040 application.Render();
2042 DALI_TEST_CHECK(vector * 100.0f == actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE));
2046 int UtcDaliActorGetCurrentScale(void)
2048 TestApplication application;
2049 Vector3 scale(12.0f, 1.0f, 2.0f);
2051 Actor actor = Actor::New();
2053 actor.SetProperty(Actor::Property::SCALE, scale);
2055 // flush the queue and render once
2056 application.SendNotification();
2057 application.Render();
2059 DALI_TEST_CHECK(actor.GetCurrentProperty<Vector3>(Actor::Property::SCALE) == scale);
2063 int UtcDaliActorGetCurrentWorldScale(void)
2065 TestApplication application;
2067 Actor parent = Actor::New();
2068 Vector3 parentScale(1.0f, 2.0f, 3.0f);
2069 parent.SetProperty(Actor::Property::SCALE, parentScale);
2070 application.GetScene().Add(parent);
2072 Actor child = Actor::New();
2073 Vector3 childScale(2.0f, 2.0f, 2.0f);
2074 child.SetProperty(Actor::Property::SCALE, childScale);
2077 // The actors should not have a scale yet
2078 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::SCALE), Vector3::ONE, TEST_LOCATION);
2079 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::SCALE), Vector3::ONE, TEST_LOCATION);
2081 // The actors should not have a world scale yet
2082 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::WORLD_SCALE), Vector3::ONE, TEST_LOCATION);
2083 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_SCALE), Vector3::ONE, TEST_LOCATION);
2085 application.SendNotification();
2086 application.Render(0);
2088 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::SCALE), parentScale, TEST_LOCATION);
2089 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::SCALE), childScale, TEST_LOCATION);
2091 // The actors should have a world scale now
2092 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector3>(Actor::Property::WORLD_SCALE), parentScale, TEST_LOCATION);
2093 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_SCALE), parentScale * childScale, TEST_LOCATION);
2097 int UtcDaliActorInheritScale(void)
2099 tet_infoline("Testing Actor::SetInheritScale");
2100 TestApplication application;
2102 Actor parent = Actor::New();
2103 Vector3 parentScale(1.0f, 2.0f, 3.0f);
2104 parent.SetProperty(Actor::Property::SCALE, parentScale);
2105 application.GetScene().Add(parent);
2107 Actor child = Actor::New();
2108 Vector3 childScale(2.0f, 2.0f, 2.0f);
2109 child.SetProperty(Actor::Property::SCALE, childScale);
2112 application.SendNotification();
2113 application.Render(0);
2115 DALI_TEST_EQUALS(child.GetProperty<bool>(Actor::Property::INHERIT_SCALE), true, TEST_LOCATION);
2116 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_SCALE), parentScale * childScale, TEST_LOCATION);
2118 child.SetProperty(Actor::Property::INHERIT_SCALE, false);
2119 DALI_TEST_EQUALS(child.GetProperty<bool>(Actor::Property::INHERIT_SCALE), false, TEST_LOCATION);
2121 application.SendNotification();
2122 application.Render(0);
2124 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::WORLD_SCALE), childScale, TEST_LOCATION);
2128 int UtcDaliActorSetVisible(void)
2130 TestApplication application;
2132 Actor actor = Actor::New();
2133 actor.SetProperty(Actor::Property::VISIBLE, false);
2134 // flush the queue and render once
2135 application.SendNotification();
2136 application.Render();
2137 DALI_TEST_CHECK(actor.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == false);
2139 actor.SetProperty(Actor::Property::VISIBLE, true);
2140 // flush the queue and render once
2141 application.SendNotification();
2142 application.Render();
2143 DALI_TEST_CHECK(actor.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == true);
2145 // put actor on stage
2146 application.GetScene().Add(actor);
2147 actor.SetProperty(Actor::Property::VISIBLE, false);
2148 // flush the queue and render once
2149 application.SendNotification();
2150 application.Render();
2151 DALI_TEST_CHECK(actor.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == false);
2155 int UtcDaliActorIsVisible(void)
2157 TestApplication application;
2159 Actor actor = Actor::New();
2161 DALI_TEST_CHECK(actor.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == true);
2165 int UtcDaliActorSetOpacity(void)
2167 TestApplication application;
2169 Actor actor = Actor::New();
2170 // initial opacity is 1
2171 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::OPACITY), 1.0f, TEST_LOCATION);
2173 actor.SetProperty(Actor::Property::OPACITY, 0.4f);
2174 // flush the queue and render once
2175 application.SendNotification();
2176 application.Render();
2177 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.4f, TEST_LOCATION);
2179 // change opacity, actor is on stage to change is not immediate
2180 actor.SetProperty(Actor::Property::OPACITY, actor.GetCurrentProperty<float>(Actor::Property::OPACITY) + 0.1f);
2181 // flush the queue and render once
2182 application.SendNotification();
2183 application.Render();
2184 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.5f, TEST_LOCATION);
2186 // put actor on stage
2187 application.GetScene().Add(actor);
2189 // change opacity, actor is on stage to change is not immediate
2190 actor.SetProperty(Actor::Property::OPACITY, 0.9f);
2191 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.5f, TEST_LOCATION);
2192 // flush the queue and render once
2193 application.SendNotification();
2194 application.Render();
2195 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.9f, TEST_LOCATION);
2197 // change opacity, actor is on stage to change is not immediate
2198 actor.SetProperty(Actor::Property::OPACITY, actor.GetCurrentProperty<float>(Actor::Property::OPACITY) - 0.9f);
2199 // flush the queue and render once
2200 application.SendNotification();
2201 application.Render();
2202 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.0f, TEST_LOCATION);
2206 int UtcDaliActorGetCurrentOpacity(void)
2208 TestApplication application;
2210 Actor actor = Actor::New();
2211 DALI_TEST_CHECK(actor.GetCurrentProperty<float>(Actor::Property::OPACITY) != 0.5f);
2213 actor.SetProperty(Actor::Property::OPACITY, 0.5f);
2214 // flush the queue and render once
2215 application.SendNotification();
2216 application.Render();
2217 DALI_TEST_CHECK(actor.GetCurrentProperty<float>(Actor::Property::OPACITY) == 0.5f);
2221 int UtcDaliActorSetSensitive(void)
2223 TestApplication application;
2224 Actor actor = Actor::New();
2226 bool sensitive = !actor.GetProperty<bool>(Actor::Property::SENSITIVE);
2228 actor.SetProperty(Actor::Property::SENSITIVE, sensitive);
2230 DALI_TEST_CHECK(sensitive == actor.GetProperty<bool>(Actor::Property::SENSITIVE));
2234 int UtcDaliActorIsSensitive(void)
2236 TestApplication application;
2237 Actor actor = Actor::New();
2238 actor.SetProperty(Actor::Property::SENSITIVE, false);
2240 DALI_TEST_CHECK(false == actor.GetProperty<bool>(Actor::Property::SENSITIVE));
2244 int UtcDaliActorSetColor(void)
2246 TestApplication application;
2247 Actor actor = Actor::New();
2248 Vector4 color(1.0f, 1.0f, 1.0f, 0.5f);
2250 DALI_TEST_CHECK(color != actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR));
2252 actor.SetProperty(Actor::Property::COLOR, color);
2253 // flush the queue and render once
2254 application.SendNotification();
2255 application.Render();
2256 DALI_TEST_CHECK(color == actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR));
2258 actor.SetProperty(Actor::Property::COLOR, actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR) + Vector4(-0.4f, -0.5f, -0.6f, -0.4f));
2259 // flush the queue and render once
2260 application.SendNotification();
2261 application.Render();
2262 DALI_TEST_EQUALS(Vector4(0.6f, 0.5f, 0.4f, 0.1f), actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR), TEST_LOCATION);
2264 application.GetScene().Add(actor);
2265 actor.SetProperty(Actor::Property::COLOR, color);
2266 // flush the queue and render once
2267 application.SendNotification();
2268 application.Render();
2269 DALI_TEST_EQUALS(color, actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR), TEST_LOCATION);
2271 actor.SetProperty(Actor::Property::COLOR, actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR) + Vector4(1.1f, 1.1f, 1.1f, 1.1f));
2272 // flush the queue and render once
2273 application.SendNotification();
2274 application.Render();
2275 // Actor color is not clamped
2276 DALI_TEST_EQUALS(Vector4(2.1f, 2.1f, 2.1f, 1.6f), actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR), TEST_LOCATION);
2277 // world color is clamped
2278 DALI_TEST_EQUALS(Vector4(1.0f, 1.0f, 1.0f, 1.0f), actor.GetCurrentProperty<Vector4>(Actor::Property::WORLD_COLOR), TEST_LOCATION);
2280 actor.SetProperty(Actor::Property::COLOR, color);
2281 DALI_TEST_EQUALS(color, actor.GetProperty<Vector4>(Actor::Property::COLOR), TEST_LOCATION);
2283 Vector3 newColor(1.0f, 0.0f, 0.0f);
2284 actor.SetProperty(Actor::Property::COLOR, newColor);
2285 DALI_TEST_EQUALS(Vector4(newColor.r, newColor.g, newColor.b, 1.0f), actor.GetProperty<Vector4>(Actor::Property::COLOR), TEST_LOCATION);
2287 application.GetScene().Remove(actor);
2291 int UtcDaliActorSetColorIndividual(void)
2293 TestApplication application;
2295 Actor actor = Actor::New();
2297 Vector4 vector(0.7f, 0.8f, 0.9f, 0.6f);
2298 DALI_TEST_CHECK(vector != actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR));
2300 actor.SetProperty(Actor::Property::COLOR_RED, vector.r);
2301 DALI_TEST_EQUALS(vector.r, actor.GetProperty<float>(Actor::Property::COLOR_RED), TEST_LOCATION);
2303 // flush the queue and render once
2304 application.SendNotification();
2305 application.Render();
2307 DALI_TEST_EQUALS(vector.r, actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR).r, TEST_LOCATION);
2308 DALI_TEST_EQUALS(vector.r, actor.GetProperty<float>(Actor::Property::COLOR_RED), TEST_LOCATION);
2309 DALI_TEST_EQUALS(vector.r, actor.GetCurrentProperty<float>(Actor::Property::COLOR_RED), TEST_LOCATION);
2311 actor.SetProperty(Actor::Property::COLOR_GREEN, vector.g);
2312 DALI_TEST_EQUALS(vector.g, actor.GetProperty<float>(Actor::Property::COLOR_GREEN), TEST_LOCATION);
2314 // flush the queue and render once
2315 application.SendNotification();
2316 application.Render();
2318 DALI_TEST_EQUALS(vector.g, actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR).g, TEST_LOCATION);
2319 DALI_TEST_EQUALS(vector.g, actor.GetProperty<float>(Actor::Property::COLOR_GREEN), TEST_LOCATION);
2320 DALI_TEST_EQUALS(vector.g, actor.GetCurrentProperty<float>(Actor::Property::COLOR_GREEN), TEST_LOCATION);
2322 actor.SetProperty(Actor::Property::COLOR_BLUE, vector.b);
2323 DALI_TEST_EQUALS(vector.b, actor.GetProperty<float>(Actor::Property::COLOR_BLUE), TEST_LOCATION);
2325 // flush the queue and render once
2326 application.SendNotification();
2327 application.Render();
2329 DALI_TEST_EQUALS(vector.b, actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR).b, TEST_LOCATION);
2330 DALI_TEST_EQUALS(vector.b, actor.GetProperty<float>(Actor::Property::COLOR_BLUE), TEST_LOCATION);
2331 DALI_TEST_EQUALS(vector.b, actor.GetCurrentProperty<float>(Actor::Property::COLOR_BLUE), TEST_LOCATION);
2333 actor.SetProperty(Actor::Property::COLOR_ALPHA, vector.a);
2334 DALI_TEST_EQUALS(vector.a, actor.GetProperty<float>(Actor::Property::COLOR_ALPHA), TEST_LOCATION);
2336 // flush the queue and render once
2337 application.SendNotification();
2338 application.Render();
2340 DALI_TEST_EQUALS(vector.a, actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR).a, TEST_LOCATION);
2341 DALI_TEST_EQUALS(vector.a, actor.GetProperty<float>(Actor::Property::COLOR_ALPHA), TEST_LOCATION);
2342 DALI_TEST_EQUALS(vector.a, actor.GetCurrentProperty<float>(Actor::Property::COLOR_ALPHA), TEST_LOCATION);
2344 DALI_TEST_EQUALS(vector, actor.GetProperty<Vector4>(Actor::Property::COLOR), TEST_LOCATION);
2345 DALI_TEST_EQUALS(vector, actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR), TEST_LOCATION);
2347 actor.SetProperty(Actor::Property::OPACITY, 0.2f);
2349 // flush the queue and render once
2350 application.SendNotification();
2351 application.Render();
2353 DALI_TEST_EQUALS(0.2f, actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR).a, TEST_LOCATION);
2358 int UtcDaliActorGetCurrentColor(void)
2360 TestApplication application;
2361 Actor actor = Actor::New();
2362 Vector4 color(1.0f, 1.0f, 1.0f, 0.5f);
2364 actor.SetProperty(Actor::Property::COLOR, color);
2365 // flush the queue and render once
2366 application.SendNotification();
2367 application.Render();
2368 DALI_TEST_CHECK(color == actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR));
2372 int UtcDaliActorGetCurrentWorldColor(void)
2374 tet_infoline("Actor::GetCurrentWorldColor");
2375 TestApplication application;
2377 Actor parent = Actor::New();
2378 Vector4 parentColor(1.0f, 0.5f, 0.0f, 0.8f);
2379 parent.SetProperty(Actor::Property::COLOR, parentColor);
2380 application.GetScene().Add(parent);
2382 Actor child = Actor::New();
2383 Vector4 childColor(0.5f, 0.6f, 0.5f, 1.0f);
2384 child.SetProperty(Actor::Property::COLOR, childColor);
2387 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector4>(Actor::Property::COLOR), Color::WHITE, TEST_LOCATION);
2388 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector4>(Actor::Property::COLOR), Color::WHITE, TEST_LOCATION);
2390 // verify the default color mode
2391 DALI_TEST_EQUALS(USE_OWN_MULTIPLY_PARENT_ALPHA, child.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), TEST_LOCATION);
2393 // The actors should not have a world color yet
2394 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector4>(Actor::Property::WORLD_COLOR), Color::WHITE, TEST_LOCATION);
2395 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector4>(Actor::Property::WORLD_COLOR), Color::WHITE, TEST_LOCATION);
2397 application.SendNotification();
2398 application.Render(0);
2400 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector4>(Actor::Property::COLOR), parentColor, TEST_LOCATION);
2401 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector4>(Actor::Property::COLOR), childColor, TEST_LOCATION);
2403 // The actors should have a world color now
2404 DALI_TEST_EQUALS(parent.GetCurrentProperty<Vector4>(Actor::Property::WORLD_COLOR), parentColor, TEST_LOCATION);
2405 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector4>(Actor::Property::WORLD_COLOR), Vector4(childColor.r, childColor.g, childColor.b, childColor.a * parentColor.a), TEST_LOCATION);
2408 child.SetProperty(Actor::Property::COLOR_MODE, USE_OWN_COLOR);
2409 application.SendNotification();
2410 application.Render(0);
2411 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector4>(Actor::Property::WORLD_COLOR), childColor, TEST_LOCATION);
2414 child.SetProperty(Actor::Property::COLOR_MODE, USE_PARENT_COLOR);
2415 application.SendNotification();
2416 application.Render(0);
2417 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector4>(Actor::Property::COLOR), childColor, TEST_LOCATION);
2418 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector4>(Actor::Property::WORLD_COLOR), parentColor, TEST_LOCATION);
2421 child.SetProperty(Actor::Property::COLOR_MODE, USE_OWN_MULTIPLY_PARENT_ALPHA);
2422 application.SendNotification();
2423 application.Render(0);
2424 Vector4 expectedColor(childColor);
2425 expectedColor.a *= parentColor.a;
2426 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector4>(Actor::Property::COLOR), childColor, TEST_LOCATION);
2427 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector4>(Actor::Property::WORLD_COLOR), expectedColor, TEST_LOCATION);
2431 int UtcDaliActorSetColorMode(void)
2433 tet_infoline("Actor::SetColorMode");
2434 TestApplication application;
2435 Actor actor = Actor::New();
2436 Actor child = Actor::New();
2439 actor.SetProperty(Actor::Property::COLOR_MODE, USE_OWN_COLOR);
2440 DALI_TEST_EQUALS(USE_OWN_COLOR, actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), TEST_LOCATION);
2442 actor.SetProperty(Actor::Property::COLOR_MODE, USE_OWN_MULTIPLY_PARENT_COLOR);
2443 DALI_TEST_EQUALS(USE_OWN_MULTIPLY_PARENT_COLOR, actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), TEST_LOCATION);
2445 actor.SetProperty(Actor::Property::COLOR_MODE, USE_PARENT_COLOR);
2446 DALI_TEST_EQUALS(USE_PARENT_COLOR, actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), TEST_LOCATION);
2448 actor.SetProperty(Actor::Property::COLOR_MODE, USE_OWN_MULTIPLY_PARENT_ALPHA);
2449 DALI_TEST_EQUALS(USE_OWN_MULTIPLY_PARENT_ALPHA, actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), TEST_LOCATION);
2453 int UtcDaliActorScreenToLocal(void)
2455 TestApplication application;
2456 Actor actor = Actor::New();
2457 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2458 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
2459 actor.SetProperty(Actor::Property::POSITION, Vector2(10.0f, 10.0f));
2460 application.GetScene().Add(actor);
2462 // flush the queue and render once
2463 application.SendNotification();
2464 application.Render();
2469 application.SendNotification();
2470 application.Render();
2472 DALI_TEST_CHECK(actor.ScreenToLocal(localX, localY, 50.0f, 50.0f));
2474 DALI_TEST_EQUALS(localX, 40.0f, 0.01f, TEST_LOCATION);
2475 DALI_TEST_EQUALS(localY, 40.0f, 0.01f, TEST_LOCATION);
2479 int UtcDaliActorSetLeaveRequired(void)
2481 TestApplication application;
2483 Actor actor = Actor::New();
2485 actor.SetProperty(Actor::Property::LEAVE_REQUIRED, false);
2486 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::LEAVE_REQUIRED) == false);
2488 actor.SetProperty(Actor::Property::LEAVE_REQUIRED, true);
2489 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::LEAVE_REQUIRED) == true);
2493 int UtcDaliActorGetLeaveRequired(void)
2495 TestApplication application;
2497 Actor actor = Actor::New();
2499 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::LEAVE_REQUIRED) == false);
2503 int UtcDaliActorSetKeyboardFocusable(void)
2505 TestApplication application;
2507 Actor actor = Actor::New();
2509 actor.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
2510 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE) == true);
2512 actor.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, false);
2513 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE) == false);
2517 int UtcDaliActorIsKeyboardFocusable(void)
2519 TestApplication application;
2521 Actor actor = Actor::New();
2523 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE) == false);
2527 int UtcDaliActorRemoveConstraints(void)
2529 tet_infoline(" UtcDaliActorRemoveConstraints");
2530 TestApplication application;
2532 gTestConstraintCalled = false;
2534 Actor actor = Actor::New();
2536 Constraint constraint = Constraint::New<Vector4>(actor, Actor::Property::COLOR, TestConstraint());
2538 actor.RemoveConstraints();
2540 DALI_TEST_CHECK(gTestConstraintCalled == false);
2542 application.GetScene().Add(actor);
2545 // flush the queue and render once
2546 application.SendNotification();
2547 application.Render();
2549 actor.RemoveConstraints();
2551 DALI_TEST_CHECK(gTestConstraintCalled == true);
2555 int UtcDaliActorRemoveConstraintTag(void)
2557 tet_infoline(" UtcDaliActorRemoveConstraintTag");
2558 TestApplication application;
2560 Actor actor = Actor::New();
2562 // 1. Apply Constraint1 and Constraint2, and test...
2563 unsigned int result1 = 0u;
2564 unsigned int result2 = 0u;
2566 unsigned constraint1Tag = 1u;
2567 Constraint constraint1 = Constraint::New<Vector4>(actor, Actor::Property::COLOR, TestConstraintRef<Vector4>(result1, 1));
2568 constraint1.SetTag(constraint1Tag);
2569 constraint1.Apply();
2571 unsigned constraint2Tag = 2u;
2572 Constraint constraint2 = Constraint::New<Vector4>(actor, Actor::Property::COLOR, TestConstraintRef<Vector4>(result2, 2));
2573 constraint2.SetTag(constraint2Tag);
2574 constraint2.Apply();
2576 application.GetScene().Add(actor);
2577 // flush the queue and render once
2578 application.SendNotification();
2579 application.Render();
2581 DALI_TEST_EQUALS(result1, 1u, TEST_LOCATION);
2582 DALI_TEST_EQUALS(result2, 2u, TEST_LOCATION);
2584 // 2. Remove Constraint1 and test...
2587 actor.RemoveConstraints(constraint1Tag);
2588 // make color property dirty, which will trigger constraints to be reapplied.
2589 actor.SetProperty(Actor::Property::COLOR, Color::WHITE);
2590 // flush the queue and render once
2591 application.SendNotification();
2592 application.Render();
2594 DALI_TEST_EQUALS(result1, 0u, TEST_LOCATION); ///< constraint 1 should not apply now.
2595 DALI_TEST_EQUALS(result2, 2u, TEST_LOCATION);
2597 // 3. Re-Apply Constraint1 and test...
2600 constraint1.Apply();
2601 // make color property dirty, which will trigger constraints to be reapplied.
2602 actor.SetProperty(Actor::Property::COLOR, Color::WHITE);
2603 // flush the queue and render once
2604 application.SendNotification();
2605 application.Render();
2607 DALI_TEST_EQUALS(result1, 1u, TEST_LOCATION);
2608 DALI_TEST_EQUALS(result2, 2u, TEST_LOCATION);
2610 // 2. Remove Constraint2 and test...
2613 actor.RemoveConstraints(constraint2Tag);
2614 // make color property dirty, which will trigger constraints to be reapplied.
2615 actor.SetProperty(Actor::Property::COLOR, Color::WHITE);
2616 // flush the queue and render once
2617 application.SendNotification();
2618 application.Render();
2620 DALI_TEST_EQUALS(result1, 1u, TEST_LOCATION);
2621 DALI_TEST_EQUALS(result2, 0u, TEST_LOCATION); ///< constraint 2 should not apply now.
2623 // 2. Remove Constraint1 as well and test...
2626 actor.RemoveConstraints(constraint1Tag);
2627 // make color property dirty, which will trigger constraints to be reapplied.
2628 actor.SetProperty(Actor::Property::COLOR, Color::WHITE);
2629 // flush the queue and render once
2630 application.SendNotification();
2631 application.Render();
2633 DALI_TEST_EQUALS(result1, 0u, TEST_LOCATION); ///< constraint 1 should not apply now.
2634 DALI_TEST_EQUALS(result2, 0u, TEST_LOCATION); ///< constraint 2 should not apply now.
2638 int UtcDaliActorTouchedSignal(void)
2640 TestApplication application;
2642 ResetTouchCallbacks();
2644 // get the root layer
2645 Actor actor = application.GetScene().GetRootLayer();
2646 DALI_TEST_CHECK(gTouchCallBackCalled == false);
2648 application.SendNotification();
2649 application.Render();
2651 // connect to its touch signal
2652 actor.TouchedSignal().Connect(TestTouchCallback);
2654 // simulate a touch event in the middle of the screen
2655 Vector2 touchPoint(application.GetScene().GetSize() * 0.5);
2656 Dali::Integration::Point point;
2657 point.SetDeviceId(1);
2658 point.SetState(PointState::DOWN);
2659 point.SetScreenPosition(Vector2(touchPoint.x, touchPoint.y));
2660 Dali::Integration::TouchEvent touchEvent;
2661 touchEvent.AddPoint(point);
2662 application.ProcessEvent(touchEvent);
2664 DALI_TEST_CHECK(gTouchCallBackCalled == true);
2668 int UtcDaliActorHoveredSignal(void)
2670 TestApplication application;
2672 gHoverCallBackCalled = false;
2674 // get the root layer
2675 Actor actor = application.GetScene().GetRootLayer();
2676 DALI_TEST_CHECK(gHoverCallBackCalled == false);
2678 application.SendNotification();
2679 application.Render();
2681 // connect to its hover signal
2682 actor.HoveredSignal().Connect(TestCallback3);
2684 // simulate a hover event in the middle of the screen
2685 Vector2 touchPoint(application.GetScene().GetSize() * 0.5);
2686 Dali::Integration::Point point;
2687 point.SetDeviceId(1);
2688 point.SetState(PointState::MOTION);
2689 point.SetScreenPosition(Vector2(touchPoint.x, touchPoint.y));
2690 Dali::Integration::HoverEvent hoverEvent;
2691 hoverEvent.AddPoint(point);
2692 application.ProcessEvent(hoverEvent);
2694 DALI_TEST_CHECK(gHoverCallBackCalled == true);
2698 int UtcDaliActorOnOffSceneSignal(void)
2700 tet_infoline("Testing Dali::Actor::OnSceneSignal() and OffSceneSignal()");
2702 TestApplication application;
2705 gOnSceneCallBackCalled = gOffSceneCallBackCalled = 0;
2706 gActorNamesOnOffScene.clear();
2708 Actor parent = Actor::New();
2709 parent.SetProperty(Actor::Property::NAME, "parent");
2710 parent.OnSceneSignal().Connect(OnSceneCallback);
2711 parent.OffSceneSignal().Connect(OffSceneCallback);
2713 DALI_TEST_CHECK(gOnSceneCallBackCalled == 0);
2714 DALI_TEST_CHECK(gOffSceneCallBackCalled == 0);
2716 // add parent to the scene
2717 application.GetScene().Add(parent);
2718 // onstage emitted, offstage not
2719 DALI_TEST_EQUALS(gOnSceneCallBackCalled, 1, TEST_LOCATION);
2720 DALI_TEST_EQUALS(gOffSceneCallBackCalled, 0, TEST_LOCATION);
2721 DALI_TEST_EQUALS("parent", gActorNamesOnOffScene[0], TEST_LOCATION);
2723 // test adding a child, should get onstage emitted
2725 gOnSceneCallBackCalled = gOffSceneCallBackCalled = 0;
2726 gActorNamesOnOffScene.clear();
2728 Actor child = Actor::New();
2729 child.SetProperty(Actor::Property::NAME, "child");
2730 child.OnSceneSignal().Connect(OnSceneCallback);
2731 child.OffSceneSignal().Connect(OffSceneCallback);
2732 parent.Add(child); // add child
2733 // onscene emitted, offscene not
2734 DALI_TEST_EQUALS(gOnSceneCallBackCalled, 1, TEST_LOCATION);
2735 DALI_TEST_EQUALS(gOffSceneCallBackCalled, 0, TEST_LOCATION);
2736 DALI_TEST_EQUALS("child", gActorNamesOnOffScene[0], TEST_LOCATION);
2738 // test removing parent from the scene
2740 gOnSceneCallBackCalled = gOffSceneCallBackCalled = 0;
2741 gActorNamesOnOffScene.clear();
2743 application.GetScene().Remove(parent);
2744 // onscene not emitted, offscene is
2745 DALI_TEST_EQUALS(gOnSceneCallBackCalled, 0, TEST_LOCATION);
2746 DALI_TEST_EQUALS(gOffSceneCallBackCalled, 2, TEST_LOCATION);
2747 DALI_TEST_EQUALS("child", gActorNamesOnOffScene[0], TEST_LOCATION);
2748 DALI_TEST_EQUALS("parent", gActorNamesOnOffScene[1], TEST_LOCATION);
2750 // test adding parent back to the scene
2752 gOnSceneCallBackCalled = gOffSceneCallBackCalled = 0;
2753 gActorNamesOnOffScene.clear();
2755 application.GetScene().Add(parent);
2756 // onscene emitted, offscene not
2757 DALI_TEST_EQUALS(gOnSceneCallBackCalled, 2, TEST_LOCATION);
2758 DALI_TEST_EQUALS(gOffSceneCallBackCalled, 0, TEST_LOCATION);
2759 DALI_TEST_EQUALS("parent", gActorNamesOnOffScene[0], TEST_LOCATION);
2760 DALI_TEST_EQUALS("child", gActorNamesOnOffScene[1], TEST_LOCATION);
2762 // test removing child
2764 gOnSceneCallBackCalled = gOffSceneCallBackCalled = 0;
2765 gActorNamesOnOffScene.clear();
2767 parent.Remove(child);
2768 // onscene not emitted, offscene is
2769 DALI_TEST_EQUALS(gOnSceneCallBackCalled, 0, TEST_LOCATION);
2770 DALI_TEST_EQUALS(gOffSceneCallBackCalled, 1, TEST_LOCATION);
2771 DALI_TEST_EQUALS("child", gActorNamesOnOffScene[0], TEST_LOCATION);
2773 // test removing parent
2775 gOnSceneCallBackCalled = gOffSceneCallBackCalled = 0;
2776 gActorNamesOnOffScene.clear();
2778 application.GetScene().Remove(parent);
2779 // onscene not emitted, offscene is
2780 DALI_TEST_EQUALS(gOnSceneCallBackCalled, 0, TEST_LOCATION);
2781 DALI_TEST_EQUALS(gOffSceneCallBackCalled, 1, TEST_LOCATION);
2782 DALI_TEST_EQUALS("parent", gActorNamesOnOffScene[0], TEST_LOCATION);
2786 int UtcDaliActorFindChildByName(void)
2788 tet_infoline("Testing Dali::Actor::FindChildByName()");
2789 TestApplication application;
2791 Actor parent = Actor::New();
2792 parent.SetProperty(Actor::Property::NAME, "parent");
2793 Actor first = Actor::New();
2794 first.SetProperty(Actor::Property::NAME, "first");
2795 Actor second = Actor::New();
2796 second.SetProperty(Actor::Property::NAME, "second");
2801 Actor found = parent.FindChildByName("foo");
2802 DALI_TEST_CHECK(!found);
2804 found = parent.FindChildByName("parent");
2805 DALI_TEST_CHECK(found == parent);
2807 found = parent.FindChildByName("first");
2808 DALI_TEST_CHECK(found == first);
2810 found = parent.FindChildByName("second");
2811 DALI_TEST_CHECK(found == second);
2815 int UtcDaliActorFindChildById(void)
2817 tet_infoline("Testing Dali::Actor::UtcDaliActorFindChildById()");
2818 TestApplication application;
2820 Actor parent = Actor::New();
2821 Actor first = Actor::New();
2822 Actor second = Actor::New();
2827 Actor found = parent.FindChildById(100000);
2828 DALI_TEST_CHECK(!found);
2830 found = parent.FindChildById(parent.GetProperty<int>(Actor::Property::ID));
2831 DALI_TEST_CHECK(found == parent);
2833 found = parent.FindChildById(first.GetProperty<int>(Actor::Property::ID));
2834 DALI_TEST_CHECK(found == first);
2836 found = parent.FindChildById(second.GetProperty<int>(Actor::Property::ID));
2837 DALI_TEST_CHECK(found == second);
2841 int UtcDaliActorHitTest(void)
2846 HitTestData(const Vector3& scale, const Vector2& touchPoint, bool result)
2848 mTouchPoint(touchPoint),
2854 Vector2 mTouchPoint;
2858 TestApplication application;
2859 tet_infoline(" UtcDaliActorHitTest");
2861 // Fill a vector with different hit tests.
2862 struct HitTestData* hitTestData[] = {
2863 // scale touch point result
2864 new HitTestData(Vector3(100.f, 100.f, 1.f), Vector2(289.f, 400.f), true), // touch point close to the right edge (inside)
2865 new HitTestData(Vector3(100.f, 100.f, 1.f), Vector2(291.f, 400.f), false), // touch point close to the right edge (outside)
2866 new HitTestData(Vector3(110.f, 100.f, 1.f), Vector2(291.f, 400.f), true), // same point as above with a wider scale. Should be inside.
2867 new HitTestData(Vector3(100.f, 100.f, 1.f), Vector2(200.f, 451.f), false), // touch point close to the down edge (outside)
2868 new HitTestData(Vector3(100.f, 110.f, 1.f), Vector2(200.f, 451.f), true), // same point as above with a wider scale. Should be inside.
2872 // get the root layer
2873 Actor actor = Actor::New();
2874 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
2875 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2877 application.GetScene().Add(actor);
2879 ResetTouchCallbacks();
2881 unsigned int index = 0;
2882 while(NULL != hitTestData[index])
2884 actor.SetProperty(Actor::Property::SIZE, Vector2(1.f, 1.f));
2885 actor.SetProperty(Actor::Property::SCALE, Vector3(hitTestData[index]->mScale.x, hitTestData[index]->mScale.y, hitTestData[index]->mScale.z));
2887 // flush the queue and render once
2888 application.SendNotification();
2889 application.Render();
2891 DALI_TEST_CHECK(!gTouchCallBackCalled);
2893 // connect to its touch signal
2894 actor.TouchedSignal().Connect(TestTouchCallback);
2896 Dali::Integration::Point point;
2897 point.SetState(PointState::DOWN);
2898 point.SetScreenPosition(Vector2(hitTestData[index]->mTouchPoint.x, hitTestData[index]->mTouchPoint.y));
2899 Dali::Integration::TouchEvent event;
2900 event.AddPoint(point);
2902 // flush the queue and render once
2903 application.SendNotification();
2904 application.Render();
2905 application.ProcessEvent(event);
2907 DALI_TEST_CHECK(gTouchCallBackCalled == hitTestData[index]->mResult);
2909 if(gTouchCallBackCalled != hitTestData[index]->mResult)
2910 tet_printf("Test failed:\nScale %f %f %f\nTouchPoint %f, %f\nResult %d\n",
2911 hitTestData[index]->mScale.x,
2912 hitTestData[index]->mScale.y,
2913 hitTestData[index]->mScale.z,
2914 hitTestData[index]->mTouchPoint.x,
2915 hitTestData[index]->mTouchPoint.y,
2916 hitTestData[index]->mResult);
2918 ResetTouchCallbacks();
2924 int UtcDaliActorSetDrawMode(void)
2926 TestApplication application;
2927 tet_infoline(" UtcDaliActorSetDrawModeOverlay");
2929 Actor a = Actor::New();
2931 application.GetScene().Add(a);
2932 application.SendNotification();
2933 application.Render(0);
2934 application.SendNotification();
2935 application.Render(1);
2937 DALI_TEST_CHECK(DrawMode::NORMAL == a.GetProperty<DrawMode::Type>(Actor::Property::DRAW_MODE)); // Ensure overlay is off by default
2939 a.SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D);
2940 application.SendNotification();
2941 application.Render(1);
2943 DALI_TEST_CHECK(DrawMode::OVERLAY_2D == a.GetProperty<DrawMode::Type>(Actor::Property::DRAW_MODE)); // Check Actor is overlay
2945 a.SetProperty(Actor::Property::DRAW_MODE, DrawMode::NORMAL);
2946 application.SendNotification();
2947 application.Render(1);
2949 DALI_TEST_CHECK(DrawMode::NORMAL == a.GetProperty<DrawMode::Type>(Actor::Property::DRAW_MODE)); // Check Actor is normal
2953 int UtcDaliActorSetDrawModeOverlayRender(void)
2955 TestApplication application;
2956 tet_infoline(" UtcDaliActorSetDrawModeOverlayRender");
2958 application.SendNotification();
2959 application.Render(1);
2961 std::vector<GLuint> ids;
2962 ids.push_back(8); // first rendered actor
2963 ids.push_back(9); // second rendered actor
2964 ids.push_back(10); // third rendered actor
2965 application.GetGlAbstraction().SetNextTextureIds(ids);
2967 Texture imageA = CreateTexture(TextureType::TEXTURE_2D, Pixel::Format::RGBA8888, 16, 16);
2968 Texture imageB = CreateTexture(TextureType::TEXTURE_2D, Pixel::Format::RGBA8888, 16, 16);
2969 Texture imageC = CreateTexture(TextureType::TEXTURE_2D, Pixel::Format::RGBA8888, 16, 16);
2970 Actor a = CreateRenderableActor(imageA);
2971 Actor b = CreateRenderableActor(imageB);
2972 Actor c = CreateRenderableActor(imageC);
2974 application.SendNotification();
2975 application.Render(1);
2977 //Textures are bound when first created. Clear bound textures vector
2978 application.GetGlAbstraction().ClearBoundTextures();
2980 // Render a,b,c as regular non-overlays. so order will be:
2984 application.GetScene().Add(a);
2985 application.GetScene().Add(b);
2986 application.GetScene().Add(c);
2988 application.SendNotification();
2989 application.Render(1);
2991 // Should be 3 textures changes.
2992 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures(GL_TEXTURE0);
2993 typedef std::vector<GLuint>::size_type TextureSize;
2994 DALI_TEST_EQUALS(boundTextures.size(), static_cast<TextureSize>(3), TEST_LOCATION);
2995 if(boundTextures.size() == 3)
2997 DALI_TEST_CHECK(boundTextures[0] == 8u);
2998 DALI_TEST_CHECK(boundTextures[1] == 9u);
2999 DALI_TEST_CHECK(boundTextures[2] == 10u);
3002 // Now texture ids have been set, we can monitor their render order.
3003 // render a as an overlay (last), so order will be:
3007 a.SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D);
3008 application.GetGlAbstraction().ClearBoundTextures();
3010 application.SendNotification();
3011 application.Render(1);
3013 // Should be 3 texture changes.
3014 DALI_TEST_EQUALS(boundTextures.size(), static_cast<TextureSize>(3), TEST_LOCATION);
3015 if(boundTextures.size() == 3)
3017 DALI_TEST_CHECK(boundTextures[0] == 9u);
3018 DALI_TEST_CHECK(boundTextures[1] == 10u);
3019 DALI_TEST_CHECK(boundTextures[2] == 8u);
3024 int UtcDaliActorGetCurrentWorldMatrix(void)
3026 TestApplication application;
3027 tet_infoline(" UtcDaliActorGetCurrentWorldMatrix");
3029 Actor parent = Actor::New();
3030 parent.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3031 parent.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
3032 Vector3 parentPosition(10.0f, 20.0f, 30.0f);
3033 Radian rotationAngle(Degree(85.0f));
3034 Quaternion parentRotation(rotationAngle, Vector3::ZAXIS);
3035 Vector3 parentScale(1.0f, 2.0f, 3.0f);
3036 parent.SetProperty(Actor::Property::POSITION, parentPosition);
3037 parent.SetProperty(Actor::Property::ORIENTATION, parentRotation);
3038 parent.SetProperty(Actor::Property::SCALE, parentScale);
3039 application.GetScene().Add(parent);
3041 Actor child = Actor::New();
3042 child.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3043 Vector3 childPosition(0.0f, 0.0f, 100.0f);
3044 Radian childRotationAngle(Degree(23.0f));
3045 Quaternion childRotation(childRotationAngle, Vector3::YAXIS);
3046 Vector3 childScale(2.0f, 2.0f, 2.0f);
3047 child.SetProperty(Actor::Property::POSITION, childPosition);
3048 child.SetProperty(Actor::Property::ORIENTATION, childRotation);
3049 child.SetProperty(Actor::Property::SCALE, childScale);
3052 application.SendNotification();
3053 application.Render(0);
3054 application.Render();
3055 application.SendNotification();
3057 Matrix parentMatrix(false);
3058 parentMatrix.SetTransformComponents(parentScale, parentRotation, parentPosition);
3060 Matrix childMatrix(false);
3061 childMatrix.SetTransformComponents(childScale, childRotation, childPosition);
3063 //Child matrix should be the composition of child and parent
3064 Matrix childWorldMatrix(false);
3065 Matrix::Multiply(childWorldMatrix, childMatrix, parentMatrix);
3067 DALI_TEST_EQUALS(parent.GetCurrentProperty<Matrix>(Actor::Property::WORLD_MATRIX), parentMatrix, 0.001, TEST_LOCATION);
3068 DALI_TEST_EQUALS(child.GetCurrentProperty<Matrix>(Actor::Property::WORLD_MATRIX), childWorldMatrix, 0.001, TEST_LOCATION);
3072 int UtcDaliActorConstrainedToWorldMatrix(void)
3074 TestApplication application;
3075 tet_infoline(" UtcDaliActorConstrainedToWorldMatrix");
3077 Actor parent = Actor::New();
3078 parent.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3079 parent.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
3080 Vector3 parentPosition(10.0f, 20.0f, 30.0f);
3081 Radian rotationAngle(Degree(85.0f));
3082 Quaternion parentRotation(rotationAngle, Vector3::ZAXIS);
3083 Vector3 parentScale(1.0f, 2.0f, 3.0f);
3084 parent.SetProperty(Actor::Property::POSITION, parentPosition);
3085 parent.SetProperty(Actor::Property::ORIENTATION, parentRotation);
3086 parent.SetProperty(Actor::Property::SCALE, parentScale);
3087 application.GetScene().Add(parent);
3089 Actor child = Actor::New();
3090 child.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3091 Constraint posConstraint = Constraint::New<Vector3>(child, Actor::Property::POSITION, PositionComponentConstraint());
3092 posConstraint.AddSource(Source(parent, Actor::Property::WORLD_MATRIX));
3093 posConstraint.Apply();
3095 application.GetScene().Add(child);
3097 application.SendNotification();
3098 application.Render(0);
3099 application.Render();
3100 application.SendNotification();
3102 Matrix parentMatrix(false);
3103 parentMatrix.SetTransformComponents(parentScale, parentRotation, parentPosition);
3105 DALI_TEST_EQUALS(parent.GetCurrentProperty<Matrix>(Actor::Property::WORLD_MATRIX), parentMatrix, 0.001, TEST_LOCATION);
3106 DALI_TEST_EQUALS(child.GetCurrentProperty<Vector3>(Actor::Property::POSITION), parent.GetCurrentProperty<Vector3>(Actor::Property::POSITION), 0.001, TEST_LOCATION);
3110 int UtcDaliActorConstrainedToOrientation(void)
3112 TestApplication application;
3113 tet_infoline(" UtcDaliActorConstrainedToOrientation");
3115 Actor parent = Actor::New();
3116 parent.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3117 parent.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
3118 Vector3 parentPosition(10.0f, 20.0f, 30.0f);
3119 Radian rotationAngle(Degree(85.0f));
3120 Quaternion parentRotation(rotationAngle, Vector3::ZAXIS);
3121 Vector3 parentScale(1.0f, 2.0f, 3.0f);
3122 parent.SetProperty(Actor::Property::POSITION, parentPosition);
3123 parent.SetProperty(Actor::Property::ORIENTATION, parentRotation);
3124 parent.SetProperty(Actor::Property::SCALE, parentScale);
3125 application.GetScene().Add(parent);
3127 Actor child = Actor::New();
3128 child.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3129 Constraint posConstraint = Constraint::New<Quaternion>(child, Actor::Property::ORIENTATION, OrientationComponentConstraint());
3130 posConstraint.AddSource(Source(parent, Actor::Property::ORIENTATION));
3131 posConstraint.Apply();
3133 application.GetScene().Add(child);
3135 application.SendNotification();
3136 application.Render(0);
3137 application.Render();
3138 application.SendNotification();
3140 DALI_TEST_EQUALS(child.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), parent.GetCurrentProperty<Quaternion>(Actor::Property::ORIENTATION), 0.001, TEST_LOCATION);
3144 int UtcDaliActorConstrainedToOpacity(void)
3146 TestApplication application;
3147 tet_infoline(" UtcDaliActorConstrainedToOpacity");
3149 Actor parent = Actor::New();
3150 parent.SetProperty(Actor::Property::OPACITY, 0.7f);
3151 application.GetScene().Add(parent);
3153 Actor child = Actor::New();
3154 Constraint opacityConstraint = Constraint::New<float>(child, Actor::Property::OPACITY, EqualToConstraint());
3155 opacityConstraint.AddSource(Source(parent, Actor::Property::OPACITY));
3156 opacityConstraint.Apply();
3158 application.GetScene().Add(child);
3160 application.SendNotification();
3161 application.Render(0);
3162 application.Render();
3163 application.SendNotification();
3165 DALI_TEST_EQUALS(child.GetCurrentProperty<float>(Actor::Property::OPACITY), parent.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.001f, TEST_LOCATION);
3167 parent.SetProperty(Actor::Property::OPACITY, 0.3f);
3169 application.SendNotification();
3170 application.Render(0);
3171 application.Render();
3172 application.SendNotification();
3174 DALI_TEST_EQUALS(child.GetCurrentProperty<float>(Actor::Property::OPACITY), parent.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.001f, TEST_LOCATION);
3179 int UtcDaliActorUnparent(void)
3181 TestApplication application;
3182 tet_infoline(" UtcDaliActorUnparent");
3184 Actor parent = Actor::New();
3185 application.GetScene().Add(parent);
3187 Actor child = Actor::New();
3189 DALI_TEST_EQUALS(parent.GetChildCount(), 0u, TEST_LOCATION);
3190 DALI_TEST_CHECK(!child.GetParent());
3192 // Test that calling Unparent with no parent is a NOOP
3195 DALI_TEST_EQUALS(parent.GetChildCount(), 0u, TEST_LOCATION);
3196 DALI_TEST_CHECK(!child.GetParent());
3198 // Test that Unparent works
3201 DALI_TEST_EQUALS(parent.GetChildCount(), 1u, TEST_LOCATION);
3202 DALI_TEST_CHECK(parent == child.GetParent());
3206 DALI_TEST_EQUALS(parent.GetChildCount(), 0u, TEST_LOCATION);
3207 DALI_TEST_CHECK(!child.GetParent());
3209 // Test that UnparentAndReset works
3212 DALI_TEST_EQUALS(parent.GetChildCount(), 1u, TEST_LOCATION);
3213 DALI_TEST_CHECK(parent == child.GetParent());
3215 UnparentAndReset(child);
3217 DALI_TEST_EQUALS(parent.GetChildCount(), 0u, TEST_LOCATION);
3218 DALI_TEST_CHECK(!child);
3220 // Test that UnparentAndReset is a NOOP with empty handle
3221 UnparentAndReset(child);
3223 DALI_TEST_CHECK(!child);
3227 int UtcDaliActorGetChildAt(void)
3229 TestApplication application;
3230 tet_infoline(" UtcDaliActorGetChildAt");
3232 Actor parent = Actor::New();
3233 application.GetScene().Add(parent);
3235 Actor child0 = Actor::New();
3238 Actor child1 = Actor::New();
3241 Actor child2 = Actor::New();
3244 DALI_TEST_EQUALS(parent.GetChildAt(0), child0, TEST_LOCATION);
3245 DALI_TEST_EQUALS(parent.GetChildAt(1), child1, TEST_LOCATION);
3246 DALI_TEST_EQUALS(parent.GetChildAt(2), child2, TEST_LOCATION);
3250 int UtcDaliActorSetGetOverlay(void)
3252 TestApplication application;
3253 tet_infoline(" UtcDaliActorSetGetOverlay");
3255 Actor parent = Actor::New();
3256 parent.SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D);
3257 DALI_TEST_CHECK(parent.GetProperty<DrawMode::Type>(Actor::Property::DRAW_MODE) == DrawMode::OVERLAY_2D);
3261 int UtcDaliActorCreateDestroy(void)
3263 Actor* actor = new Actor;
3264 DALI_TEST_CHECK(actor);
3271 struct PropertyStringIndex
3273 const char* const name;
3274 const Property::Index index;
3275 const Property::Type type;
3278 const PropertyStringIndex PROPERTY_TABLE[] =
3280 {"parentOrigin", Actor::Property::PARENT_ORIGIN, Property::VECTOR3},
3281 {"parentOriginX", Actor::Property::PARENT_ORIGIN_X, Property::FLOAT},
3282 {"parentOriginY", Actor::Property::PARENT_ORIGIN_Y, Property::FLOAT},
3283 {"parentOriginZ", Actor::Property::PARENT_ORIGIN_Z, Property::FLOAT},
3284 {"anchorPoint", Actor::Property::ANCHOR_POINT, Property::VECTOR3},
3285 {"anchorPointX", Actor::Property::ANCHOR_POINT_X, Property::FLOAT},
3286 {"anchorPointY", Actor::Property::ANCHOR_POINT_Y, Property::FLOAT},
3287 {"anchorPointZ", Actor::Property::ANCHOR_POINT_Z, Property::FLOAT},
3288 {"size", Actor::Property::SIZE, Property::VECTOR3},
3289 {"sizeWidth", Actor::Property::SIZE_WIDTH, Property::FLOAT},
3290 {"sizeHeight", Actor::Property::SIZE_HEIGHT, Property::FLOAT},
3291 {"sizeDepth", Actor::Property::SIZE_DEPTH, Property::FLOAT},
3292 {"position", Actor::Property::POSITION, Property::VECTOR3},
3293 {"positionX", Actor::Property::POSITION_X, Property::FLOAT},
3294 {"positionY", Actor::Property::POSITION_Y, Property::FLOAT},
3295 {"positionZ", Actor::Property::POSITION_Z, Property::FLOAT},
3296 {"worldPosition", Actor::Property::WORLD_POSITION, Property::VECTOR3},
3297 {"worldPositionX", Actor::Property::WORLD_POSITION_X, Property::FLOAT},
3298 {"worldPositionY", Actor::Property::WORLD_POSITION_Y, Property::FLOAT},
3299 {"worldPositionZ", Actor::Property::WORLD_POSITION_Z, Property::FLOAT},
3300 {"orientation", Actor::Property::ORIENTATION, Property::ROTATION},
3301 {"worldOrientation", Actor::Property::WORLD_ORIENTATION, Property::ROTATION},
3302 {"scale", Actor::Property::SCALE, Property::VECTOR3},
3303 {"scaleX", Actor::Property::SCALE_X, Property::FLOAT},
3304 {"scaleY", Actor::Property::SCALE_Y, Property::FLOAT},
3305 {"scaleZ", Actor::Property::SCALE_Z, Property::FLOAT},
3306 {"worldScale", Actor::Property::WORLD_SCALE, Property::VECTOR3},
3307 {"visible", Actor::Property::VISIBLE, Property::BOOLEAN},
3308 {"color", Actor::Property::COLOR, Property::VECTOR4},
3309 {"colorRed", Actor::Property::COLOR_RED, Property::FLOAT},
3310 {"colorGreen", Actor::Property::COLOR_GREEN, Property::FLOAT},
3311 {"colorBlue", Actor::Property::COLOR_BLUE, Property::FLOAT},
3312 {"colorAlpha", Actor::Property::COLOR_ALPHA, Property::FLOAT},
3313 {"worldColor", Actor::Property::WORLD_COLOR, Property::VECTOR4},
3314 {"worldMatrix", Actor::Property::WORLD_MATRIX, Property::MATRIX},
3315 {"name", Actor::Property::NAME, Property::STRING},
3316 {"sensitive", Actor::Property::SENSITIVE, Property::BOOLEAN},
3317 {"leaveRequired", Actor::Property::LEAVE_REQUIRED, Property::BOOLEAN},
3318 {"inheritOrientation", Actor::Property::INHERIT_ORIENTATION, Property::BOOLEAN},
3319 {"inheritScale", Actor::Property::INHERIT_SCALE, Property::BOOLEAN},
3320 {"colorMode", Actor::Property::COLOR_MODE, Property::INTEGER},
3321 {"drawMode", Actor::Property::DRAW_MODE, Property::INTEGER},
3322 {"sizeModeFactor", Actor::Property::SIZE_MODE_FACTOR, Property::VECTOR3},
3323 {"widthResizePolicy", Actor::Property::WIDTH_RESIZE_POLICY, Property::STRING},
3324 {"heightResizePolicy", Actor::Property::HEIGHT_RESIZE_POLICY, Property::STRING},
3325 {"sizeScalePolicy", Actor::Property::SIZE_SCALE_POLICY, Property::INTEGER},
3326 {"widthForHeight", Actor::Property::WIDTH_FOR_HEIGHT, Property::BOOLEAN},
3327 {"heightForWidth", Actor::Property::HEIGHT_FOR_WIDTH, Property::BOOLEAN},
3328 {"padding", Actor::Property::PADDING, Property::VECTOR4},
3329 {"minimumSize", Actor::Property::MINIMUM_SIZE, Property::VECTOR2},
3330 {"maximumSize", Actor::Property::MAXIMUM_SIZE, Property::VECTOR2},
3331 {"inheritPosition", Actor::Property::INHERIT_POSITION, Property::BOOLEAN},
3332 {"clippingMode", Actor::Property::CLIPPING_MODE, Property::STRING},
3333 {"opacity", Actor::Property::OPACITY, Property::FLOAT},
3335 const unsigned int PROPERTY_TABLE_COUNT = sizeof(PROPERTY_TABLE) / sizeof(PROPERTY_TABLE[0]);
3336 } // unnamed namespace
3338 int UtcDaliActorProperties(void)
3340 TestApplication application;
3342 Actor actor = Actor::New();
3344 for(unsigned int i = 0; i < PROPERTY_TABLE_COUNT; ++i)
3346 tet_printf("Checking %s == %d\n", PROPERTY_TABLE[i].name, PROPERTY_TABLE[i].index);
3347 DALI_TEST_EQUALS(actor.GetPropertyName(PROPERTY_TABLE[i].index), PROPERTY_TABLE[i].name, TEST_LOCATION);
3348 DALI_TEST_EQUALS(actor.GetPropertyIndex(PROPERTY_TABLE[i].name), PROPERTY_TABLE[i].index, TEST_LOCATION);
3349 DALI_TEST_EQUALS(actor.GetPropertyType(PROPERTY_TABLE[i].index), PROPERTY_TABLE[i].type, TEST_LOCATION);
3354 int UtcDaliRelayoutProperties_ResizePolicies(void)
3356 TestApplication application;
3358 Actor actor = Actor::New();
3361 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::WIDTH_RESIZE_POLICY).Get<std::string>(), "USE_NATURAL_SIZE", TEST_LOCATION);
3362 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::HEIGHT_RESIZE_POLICY).Get<std::string>(), "USE_NATURAL_SIZE", TEST_LOCATION);
3364 // Set resize policy for all dimensions
3365 actor.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
3366 for(unsigned int i = 0; i < Dimension::DIMENSION_COUNT; ++i)
3368 DALI_TEST_EQUALS(actor.GetResizePolicy(static_cast<Dimension::Type>(1 << i)), ResizePolicy::USE_NATURAL_SIZE, TEST_LOCATION);
3371 // Set individual dimensions
3372 const char* const widthPolicy = "FILL_TO_PARENT";
3373 const char* const heightPolicy = "FIXED";
3375 actor.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, widthPolicy);
3376 actor.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, heightPolicy);
3378 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::WIDTH_RESIZE_POLICY).Get<std::string>(), widthPolicy, TEST_LOCATION);
3379 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::HEIGHT_RESIZE_POLICY).Get<std::string>(), heightPolicy, TEST_LOCATION);
3381 // Set individual dimensions using enums
3382 ResizePolicy::Type widthPolicyEnum = ResizePolicy::USE_ASSIGNED_SIZE;
3383 ResizePolicy::Type heightPolicyEnum = ResizePolicy::SIZE_RELATIVE_TO_PARENT;
3385 actor.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, widthPolicyEnum);
3386 actor.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, heightPolicyEnum);
3388 DALI_TEST_EQUALS(static_cast<int>(actor.GetResizePolicy(Dimension::WIDTH)), static_cast<int>(widthPolicyEnum), TEST_LOCATION);
3389 DALI_TEST_EQUALS(static_cast<int>(actor.GetResizePolicy(Dimension::HEIGHT)), static_cast<int>(heightPolicyEnum), TEST_LOCATION);
3394 int UtcDaliRelayoutProperties_SizeScalePolicy(void)
3396 TestApplication application;
3398 Actor actor = Actor::New();
3401 DALI_TEST_EQUALS(actor.GetProperty<SizeScalePolicy::Type>(Actor::Property::SIZE_SCALE_POLICY), SizeScalePolicy::USE_SIZE_SET, TEST_LOCATION);
3403 SizeScalePolicy::Type policy = SizeScalePolicy::FILL_WITH_ASPECT_RATIO;
3404 actor.SetProperty(Actor::Property::SIZE_SCALE_POLICY, policy);
3405 DALI_TEST_EQUALS(actor.GetProperty<SizeScalePolicy::Type>(Actor::Property::SIZE_SCALE_POLICY), policy, TEST_LOCATION);
3408 const SizeScalePolicy::Type policy1 = SizeScalePolicy::FIT_WITH_ASPECT_RATIO;
3409 const SizeScalePolicy::Type policy2 = SizeScalePolicy::FILL_WITH_ASPECT_RATIO;
3411 actor.SetProperty(Actor::Property::SIZE_SCALE_POLICY, policy1);
3412 DALI_TEST_EQUALS(actor.GetProperty<SizeScalePolicy::Type>(Actor::Property::SIZE_SCALE_POLICY), policy1, TEST_LOCATION);
3414 actor.SetProperty(Actor::Property::SIZE_SCALE_POLICY, policy2);
3415 DALI_TEST_EQUALS(actor.GetProperty<SizeScalePolicy::Type>(Actor::Property::SIZE_SCALE_POLICY), policy2, TEST_LOCATION);
3420 int UtcDaliRelayoutProperties_SizeModeFactor(void)
3422 TestApplication application;
3424 Actor actor = Actor::New();
3427 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::SIZE_MODE_FACTOR).Get<Vector3>(), Vector3(1.0f, 1.0f, 1.0f), TEST_LOCATION);
3428 DALI_TEST_EQUALS(actor.GetProperty<Vector3>(Actor::Property::SIZE_MODE_FACTOR), Vector3(1.0f, 1.0f, 1.0f), TEST_LOCATION);
3430 Vector3 sizeMode(1.0f, 2.0f, 3.0f);
3431 actor.SetProperty(Actor::Property::SIZE_MODE_FACTOR, sizeMode);
3432 DALI_TEST_EQUALS(actor.GetProperty<Vector3>(Actor::Property::SIZE_MODE_FACTOR), sizeMode, TEST_LOCATION);
3435 Vector3 sizeMode1(2.0f, 3.0f, 4.0f);
3437 actor.SetProperty(Actor::Property::SIZE_MODE_FACTOR, sizeMode1);
3438 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::SIZE_MODE_FACTOR).Get<Vector3>(), sizeMode1, TEST_LOCATION);
3443 int UtcDaliRelayoutProperties_DimensionDependency(void)
3445 TestApplication application;
3447 Actor actor = Actor::New();
3450 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::WIDTH_FOR_HEIGHT).Get<bool>(), false, TEST_LOCATION);
3451 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::HEIGHT_FOR_WIDTH).Get<bool>(), false, TEST_LOCATION);
3454 actor.SetProperty(Actor::Property::WIDTH_FOR_HEIGHT, true);
3455 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::WIDTH_FOR_HEIGHT).Get<bool>(), true, TEST_LOCATION);
3457 actor.SetProperty(Actor::Property::HEIGHT_FOR_WIDTH, true);
3458 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::HEIGHT_FOR_WIDTH).Get<bool>(), true, TEST_LOCATION);
3460 // Test setting another resize policy
3461 actor.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FIXED");
3462 DALI_TEST_EQUALS(actor.GetProperty(Actor::Property::WIDTH_FOR_HEIGHT).Get<bool>(), false, TEST_LOCATION);
3467 int UtcDaliRelayoutProperties_Padding(void)
3469 TestApplication application;
3471 Actor actor = Actor::New();
3474 Vector4 padding(1.0f, 2.0f, 3.0f, 4.0f);
3477 actor.SetProperty(Actor::Property::PADDING, padding);
3478 Vector4 paddingResult = actor.GetProperty(Actor::Property::PADDING).Get<Vector4>();
3480 DALI_TEST_EQUALS(paddingResult, padding, Math::MACHINE_EPSILON_0, TEST_LOCATION);
3485 int UtcDaliRelayoutProperties_MinimumMaximumSize(void)
3487 TestApplication application;
3489 Actor actor = Actor::New();
3492 Vector2 minSize(1.0f, 2.0f);
3494 actor.SetProperty(Actor::Property::MINIMUM_SIZE, minSize);
3495 Vector2 resultMin = actor.GetProperty(Actor::Property::MINIMUM_SIZE).Get<Vector2>();
3497 DALI_TEST_EQUALS(resultMin, minSize, Math::MACHINE_EPSILON_0, TEST_LOCATION);
3499 Vector2 maxSize(3.0f, 4.0f);
3501 actor.SetProperty(Actor::Property::MAXIMUM_SIZE, maxSize);
3502 Vector2 resultMax = actor.GetProperty(Actor::Property::MAXIMUM_SIZE).Get<Vector2>();
3504 DALI_TEST_EQUALS(resultMax, maxSize, Math::MACHINE_EPSILON_0, TEST_LOCATION);
3509 int UtcDaliActorGetHeightForWidth(void)
3511 TestApplication application;
3513 Actor actor = Actor::New();
3515 DALI_TEST_EQUALS(actor.GetHeightForWidth(1.0f), 1.0f, TEST_LOCATION);
3520 int UtcDaliActorGetWidthForHeight(void)
3522 TestApplication application;
3524 Actor actor = Actor::New();
3526 DALI_TEST_EQUALS(actor.GetWidthForHeight(1.0f), 1.0f, TEST_LOCATION);
3531 int UtcDaliActorGetRelayoutSize(void)
3533 TestApplication application;
3535 Actor actor = Actor::New();
3537 // Add actor to stage
3538 application.GetScene().Add(actor);
3540 DALI_TEST_EQUALS(actor.GetRelayoutSize(Dimension::WIDTH), 0.0f, TEST_LOCATION);
3542 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::WIDTH);
3543 actor.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 0.0f));
3545 // Flush the queue and render once
3546 application.SendNotification();
3547 application.Render();
3549 DALI_TEST_EQUALS(actor.GetRelayoutSize(Dimension::WIDTH), 1.0f, TEST_LOCATION);
3554 int UtcDaliActorSetPadding(void)
3556 TestApplication application;
3558 Actor actor = Actor::New();
3561 padding = actor.GetProperty<Vector4>(Actor::Property::PADDING);
3563 DALI_TEST_EQUALS(padding.left, 0.0f, TEST_LOCATION);
3564 DALI_TEST_EQUALS(padding.right, 0.0f, TEST_LOCATION);
3565 DALI_TEST_EQUALS(padding.bottom, 0.0f, TEST_LOCATION);
3566 DALI_TEST_EQUALS(padding.top, 0.0f, TEST_LOCATION);
3568 Padding padding2(1.0f, 2.0f, 3.0f, 4.0f);
3569 actor.SetProperty(Actor::Property::PADDING, padding2);
3571 padding = actor.GetProperty<Vector4>(Actor::Property::PADDING);
3573 DALI_TEST_EQUALS(padding.left, padding2.left, TEST_LOCATION);
3574 DALI_TEST_EQUALS(padding.right, padding2.right, TEST_LOCATION);
3575 DALI_TEST_EQUALS(padding.bottom, padding2.bottom, TEST_LOCATION);
3576 DALI_TEST_EQUALS(padding.top, padding2.top, TEST_LOCATION);
3581 int UtcDaliActorSetMinimumSize(void)
3583 TestApplication application;
3585 Actor actor = Actor::New();
3587 Vector2 size = actor.GetProperty<Vector2>(Actor::Property::MINIMUM_SIZE);
3589 DALI_TEST_EQUALS(size.width, 0.0f, TEST_LOCATION);
3590 DALI_TEST_EQUALS(size.height, 0.0f, TEST_LOCATION);
3592 Vector2 size2(1.0f, 2.0f);
3593 actor.SetProperty(Actor::Property::MINIMUM_SIZE, size2);
3595 size = actor.GetProperty<Vector2>(Actor::Property::MINIMUM_SIZE);
3597 DALI_TEST_EQUALS(size.width, size2.width, TEST_LOCATION);
3598 DALI_TEST_EQUALS(size.height, size2.height, TEST_LOCATION);
3603 int UtcDaliActorSetMaximumSize(void)
3605 TestApplication application;
3607 Actor actor = Actor::New();
3609 Vector2 size = actor.GetProperty<Vector2>(Actor::Property::MAXIMUM_SIZE);
3611 DALI_TEST_EQUALS(size.width, FLT_MAX, TEST_LOCATION);
3612 DALI_TEST_EQUALS(size.height, FLT_MAX, TEST_LOCATION);
3614 Vector2 size2(1.0f, 2.0f);
3615 actor.SetProperty(Actor::Property::MAXIMUM_SIZE, size2);
3617 size = actor.GetProperty<Vector2>(Actor::Property::MAXIMUM_SIZE);
3619 DALI_TEST_EQUALS(size.width, size2.width, TEST_LOCATION);
3620 DALI_TEST_EQUALS(size.height, size2.height, TEST_LOCATION);
3625 int UtcDaliActorOnRelayoutSignal(void)
3627 tet_infoline("Testing Dali::Actor::OnRelayoutSignal()");
3629 TestApplication application;
3632 gOnRelayoutCallBackCalled = false;
3633 gActorNamesRelayout.clear();
3635 Actor actor = Actor::New();
3636 actor.SetProperty(Actor::Property::NAME, "actor");
3637 actor.OnRelayoutSignal().Connect(OnRelayoutCallback);
3640 DALI_TEST_CHECK(!gOnRelayoutCallBackCalled);
3642 // Add actor to stage
3643 application.GetScene().Add(actor);
3645 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
3646 actor.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 2.0));
3648 // Flush the queue and render once
3649 application.SendNotification();
3650 application.Render();
3652 // OnRelayout emitted
3653 DALI_TEST_EQUALS(gOnRelayoutCallBackCalled, true, TEST_LOCATION);
3654 DALI_TEST_EQUALS("actor", gActorNamesRelayout[0], TEST_LOCATION);
3659 int UtcDaliActorGetHierachyDepth(void)
3661 TestApplication application;
3662 tet_infoline("Testing Dali::Actor::GetHierarchyDepth()");
3664 /* Build tree of actors:
3674 * GetHierarchyDepth should return 1 for A, 2 for B and C, and 3 for D, E and F.
3676 Integration::Scene stage(application.GetScene());
3678 Actor actorA = Actor::New();
3679 Actor actorB = Actor::New();
3680 Actor actorC = Actor::New();
3681 Actor actorD = Actor::New();
3682 Actor actorE = Actor::New();
3683 Actor actorF = Actor::New();
3685 //Test that root actor has depth equal 0
3686 DALI_TEST_EQUALS(0, stage.GetRootLayer().GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3688 //Test actors return depth -1 when not connected to the tree
3689 DALI_TEST_EQUALS(-1, actorA.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3690 DALI_TEST_EQUALS(-1, actorB.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3691 DALI_TEST_EQUALS(-1, actorC.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3692 DALI_TEST_EQUALS(-1, actorD.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3693 DALI_TEST_EQUALS(-1, actorE.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3694 DALI_TEST_EQUALS(-1, actorF.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3696 //Create the hierarchy
3704 //Test actors return correct depth
3705 DALI_TEST_EQUALS(1, actorA.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3706 DALI_TEST_EQUALS(2, actorB.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3707 DALI_TEST_EQUALS(2, actorC.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3708 DALI_TEST_EQUALS(3, actorD.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3709 DALI_TEST_EQUALS(3, actorE.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3710 DALI_TEST_EQUALS(3, actorF.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3712 //Removing actorB from the hierarchy. actorB, actorD and actorE should now have depth equal -1
3713 actorA.Remove(actorB);
3715 DALI_TEST_EQUALS(-1, actorB.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3716 DALI_TEST_EQUALS(-1, actorD.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3717 DALI_TEST_EQUALS(-1, actorE.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3719 //Removing actorA from the stage. All actors should have depth equal -1
3720 stage.Remove(actorA);
3722 DALI_TEST_EQUALS(-1, actorA.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3723 DALI_TEST_EQUALS(-1, actorB.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3724 DALI_TEST_EQUALS(-1, actorC.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3725 DALI_TEST_EQUALS(-1, actorD.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3726 DALI_TEST_EQUALS(-1, actorE.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3727 DALI_TEST_EQUALS(-1, actorF.GetProperty<int>(Actor::Property::HIERARCHY_DEPTH), TEST_LOCATION);
3732 int UtcDaliActorAnchorPointPropertyAsString(void)
3734 TestApplication application;
3736 Actor actor = Actor::New();
3738 actor.SetProperty(Actor::Property::ANCHOR_POINT, "TOP_LEFT");
3739 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::TOP_LEFT, TEST_LOCATION);
3741 actor.SetProperty(Actor::Property::ANCHOR_POINT, "TOP_CENTER");
3742 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::TOP_CENTER, TEST_LOCATION);
3744 actor.SetProperty(Actor::Property::ANCHOR_POINT, "TOP_RIGHT");
3745 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::TOP_RIGHT, TEST_LOCATION);
3747 actor.SetProperty(Actor::Property::ANCHOR_POINT, "CENTER_LEFT");
3748 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::CENTER_LEFT, TEST_LOCATION);
3750 actor.SetProperty(Actor::Property::ANCHOR_POINT, "CENTER");
3751 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::CENTER, TEST_LOCATION);
3753 actor.SetProperty(Actor::Property::ANCHOR_POINT, "CENTER_RIGHT");
3754 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::CENTER_RIGHT, TEST_LOCATION);
3756 actor.SetProperty(Actor::Property::ANCHOR_POINT, "BOTTOM_LEFT");
3757 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::BOTTOM_LEFT, TEST_LOCATION);
3759 actor.SetProperty(Actor::Property::ANCHOR_POINT, "BOTTOM_CENTER");
3760 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::BOTTOM_CENTER, TEST_LOCATION);
3762 actor.SetProperty(Actor::Property::ANCHOR_POINT, "BOTTOM_RIGHT");
3763 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::BOTTOM_RIGHT, TEST_LOCATION);
3765 // Invalid should not change anything
3766 actor.SetProperty(Actor::Property::ANCHOR_POINT, "INVALID_ARG");
3767 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), ParentOrigin::BOTTOM_RIGHT, TEST_LOCATION);
3772 int UtcDaliActorParentOriginPropertyAsString(void)
3774 TestApplication application;
3776 Actor actor = Actor::New();
3778 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "TOP_LEFT");
3779 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::TOP_LEFT, TEST_LOCATION);
3781 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "TOP_CENTER");
3782 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::TOP_CENTER, TEST_LOCATION);
3784 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "TOP_RIGHT");
3785 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::TOP_RIGHT, TEST_LOCATION);
3787 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "CENTER_LEFT");
3788 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::CENTER_LEFT, TEST_LOCATION);
3790 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "CENTER");
3791 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::CENTER, TEST_LOCATION);
3793 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "CENTER_RIGHT");
3794 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::CENTER_RIGHT, TEST_LOCATION);
3796 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "BOTTOM_LEFT");
3797 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::BOTTOM_LEFT, TEST_LOCATION);
3799 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "BOTTOM_CENTER");
3800 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::BOTTOM_CENTER, TEST_LOCATION);
3802 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "BOTTOM_RIGHT");
3803 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::BOTTOM_RIGHT, TEST_LOCATION);
3805 // Invalid should not change anything
3806 actor.SetProperty(Actor::Property::PARENT_ORIGIN, "INVALID_ARG");
3807 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::BOTTOM_RIGHT, TEST_LOCATION);
3812 int UtcDaliActorColorModePropertyAsString(void)
3814 TestApplication application;
3816 Actor actor = Actor::New();
3818 actor.SetProperty(Actor::Property::COLOR_MODE, "USE_OWN_COLOR");
3819 DALI_TEST_EQUALS(actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), USE_OWN_COLOR, TEST_LOCATION);
3821 actor.SetProperty(Actor::Property::COLOR_MODE, "USE_PARENT_COLOR");
3822 DALI_TEST_EQUALS(actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), USE_PARENT_COLOR, TEST_LOCATION);
3824 actor.SetProperty(Actor::Property::COLOR_MODE, "USE_OWN_MULTIPLY_PARENT_COLOR");
3825 DALI_TEST_EQUALS(actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), USE_OWN_MULTIPLY_PARENT_COLOR, TEST_LOCATION);
3827 actor.SetProperty(Actor::Property::COLOR_MODE, "USE_OWN_MULTIPLY_PARENT_ALPHA");
3828 DALI_TEST_EQUALS(actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), USE_OWN_MULTIPLY_PARENT_ALPHA, TEST_LOCATION);
3830 // Invalid should not change anything
3831 actor.SetProperty(Actor::Property::COLOR_MODE, "INVALID_ARG");
3832 DALI_TEST_EQUALS(actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), USE_OWN_MULTIPLY_PARENT_ALPHA, TEST_LOCATION);
3837 int UtcDaliActorDrawModePropertyAsString(void)
3839 TestApplication application;
3841 Actor actor = Actor::New();
3843 actor.SetProperty(Actor::Property::DRAW_MODE, "NORMAL");
3844 DALI_TEST_EQUALS(actor.GetProperty<DrawMode::Type>(Actor::Property::DRAW_MODE), DrawMode::NORMAL, TEST_LOCATION);
3846 actor.SetProperty(Actor::Property::DRAW_MODE, "OVERLAY_2D");
3847 DALI_TEST_EQUALS(actor.GetProperty<DrawMode::Type>(Actor::Property::DRAW_MODE), DrawMode::OVERLAY_2D, TEST_LOCATION);
3849 // Invalid should not change anything
3850 actor.SetProperty(Actor::Property::DRAW_MODE, "INVALID_ARG");
3851 DALI_TEST_EQUALS(actor.GetProperty<DrawMode::Type>(Actor::Property::DRAW_MODE), DrawMode::OVERLAY_2D, TEST_LOCATION);
3856 int UtcDaliActorColorModePropertyAsEnum(void)
3858 TestApplication application;
3860 Actor actor = Actor::New();
3862 actor.SetProperty(Actor::Property::COLOR_MODE, USE_OWN_COLOR);
3863 DALI_TEST_EQUALS(actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), USE_OWN_COLOR, TEST_LOCATION);
3865 actor.SetProperty(Actor::Property::COLOR_MODE, USE_PARENT_COLOR);
3866 DALI_TEST_EQUALS(actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), USE_PARENT_COLOR, TEST_LOCATION);
3868 actor.SetProperty(Actor::Property::COLOR_MODE, USE_OWN_MULTIPLY_PARENT_COLOR);
3869 DALI_TEST_EQUALS(actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), USE_OWN_MULTIPLY_PARENT_COLOR, TEST_LOCATION);
3871 actor.SetProperty(Actor::Property::COLOR_MODE, USE_OWN_MULTIPLY_PARENT_ALPHA);
3872 DALI_TEST_EQUALS(actor.GetProperty<ColorMode>(Actor::Property::COLOR_MODE), USE_OWN_MULTIPLY_PARENT_ALPHA, TEST_LOCATION);
3877 int UtcDaliActorDrawModePropertyAsEnum(void)
3879 TestApplication application;
3881 Actor actor = Actor::New();
3883 actor.SetProperty(Actor::Property::DRAW_MODE, DrawMode::NORMAL);
3884 DALI_TEST_EQUALS(actor.GetProperty<DrawMode::Type>(Actor::Property::DRAW_MODE), DrawMode::NORMAL, TEST_LOCATION);
3886 actor.SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D);
3887 DALI_TEST_EQUALS(actor.GetProperty<DrawMode::Type>(Actor::Property::DRAW_MODE), DrawMode::OVERLAY_2D, TEST_LOCATION);
3892 int UtcDaliActorAddRendererP(void)
3894 tet_infoline("Testing Actor::AddRenderer");
3895 TestApplication application;
3897 Actor actor = Actor::New();
3899 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
3901 Geometry geometry = CreateQuadGeometry();
3902 Shader shader = CreateShader();
3903 Renderer renderer = Renderer::New(geometry, shader);
3905 actor.AddRenderer(renderer);
3906 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
3907 DALI_TEST_EQUALS(actor.GetRendererAt(0), renderer, TEST_LOCATION);
3912 int UtcDaliActorAddRendererN01(void)
3914 tet_infoline("Testing Actor::AddRenderer");
3915 TestApplication application;
3917 Actor actor = Actor::New();
3923 actor.AddRenderer(renderer);
3924 tet_printf("Assertion test failed - no Exception\n");
3925 tet_result(TET_FAIL);
3927 catch(Dali::DaliException& e)
3929 DALI_TEST_PRINT_ASSERT(e);
3930 DALI_TEST_ASSERT(e, "Renderer handle is empty", TEST_LOCATION);
3931 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
3935 tet_printf("Assertion test failed - wrong Exception\n");
3936 tet_result(TET_FAIL);
3942 int UtcDaliActorAddRendererN02(void)
3944 tet_infoline("UtcDaliActorAddRendererN02");
3950 TestApplication application;
3952 Geometry geometry = CreateQuadGeometry();
3953 Shader shader = CreateShader();
3954 renderer = Renderer::New(geometry, shader);
3956 actor = Actor::New();
3959 // try illegal AddRenderer
3962 actor.AddRenderer(renderer);
3963 tet_printf("Assertion test failed - no Exception\n");
3964 tet_result(TET_FAIL);
3966 catch(Dali::DaliException& e)
3968 DALI_TEST_PRINT_ASSERT(e);
3969 DALI_TEST_ASSERT(e, "EventThreadServices::IsCoreRunning()", TEST_LOCATION);
3973 tet_printf("Assertion test failed - wrong Exception\n");
3974 tet_result(TET_FAIL);
3980 int UtcDaliActorAddRendererOnScene(void)
3982 tet_infoline("Testing Actor::AddRenderer");
3983 TestApplication application;
3985 Actor actor = Actor::New();
3986 application.GetScene().Add(actor);
3988 application.SendNotification();
3989 application.Render(0);
3991 Geometry geometry = CreateQuadGeometry();
3992 Shader shader = CreateShader();
3993 Renderer renderer = Renderer::New(geometry, shader);
3995 application.SendNotification();
3996 application.Render(0);
4000 actor.AddRenderer(renderer);
4001 tet_result(TET_PASS);
4005 tet_result(TET_FAIL);
4011 int UtcDaliActorRemoveRendererP1(void)
4013 tet_infoline("Testing Actor::RemoveRenderer");
4014 TestApplication application;
4016 Actor actor = Actor::New();
4018 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
4021 Geometry geometry = CreateQuadGeometry();
4022 Shader shader = CreateShader();
4023 Renderer renderer = Renderer::New(geometry, shader);
4025 actor.AddRenderer(renderer);
4026 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
4027 DALI_TEST_EQUALS(actor.GetRendererAt(0), renderer, TEST_LOCATION);
4029 application.SendNotification();
4030 application.Render();
4034 Renderer renderer = actor.GetRendererAt(0);
4035 actor.RemoveRenderer(renderer);
4036 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
4038 application.SendNotification();
4039 application.Render();
4042 // Call one final time to ensure that the renderer is actually removed after
4043 // the handle goes out of scope, and excercises the deletion code path in
4044 // scene graph and render.
4045 application.SendNotification();
4046 application.Render();
4051 int UtcDaliActorRemoveRendererP2(void)
4053 tet_infoline("Testing Actor::RemoveRenderer");
4054 TestApplication application;
4056 Actor actor = Actor::New();
4058 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
4060 Geometry geometry = CreateQuadGeometry();
4061 Shader shader = CreateShader();
4062 Renderer renderer = Renderer::New(geometry, shader);
4064 actor.AddRenderer(renderer);
4065 application.SendNotification();
4066 application.Render();
4068 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
4069 DALI_TEST_EQUALS(actor.GetRendererAt(0), renderer, TEST_LOCATION);
4071 actor.RemoveRenderer(0);
4072 application.SendNotification();
4073 application.Render();
4075 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
4077 // Shut down whilst holding onto the renderer handle.
4081 int UtcDaliActorRemoveRendererN(void)
4083 tet_infoline("Testing Actor::RemoveRenderer");
4084 TestApplication application;
4086 Actor actor = Actor::New();
4088 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
4090 Geometry geometry = CreateQuadGeometry();
4091 Shader shader = CreateShader();
4092 Renderer renderer = Renderer::New(geometry, shader);
4094 actor.AddRenderer(renderer);
4095 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
4096 DALI_TEST_EQUALS(actor.GetRendererAt(0), renderer, TEST_LOCATION);
4098 actor.RemoveRenderer(10);
4099 DALI_TEST_EQUALS(actor.GetRendererAt(0), renderer, TEST_LOCATION);
4100 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
4105 // Clipping test helper functions:
4106 Actor CreateActorWithContent(uint32_t width, uint32_t height)
4108 Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, width, height);
4109 Actor actor = CreateRenderableActor(image);
4111 // Setup dimensions and position so actor is not skipped by culling.
4112 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
4113 actor.SetProperty(Actor::Property::SIZE, Vector2(width, height));
4114 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4115 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
4120 Actor CreateActorWithContent16x16()
4122 return CreateActorWithContent(16, 16);
4125 void GenerateTrace(TestApplication& application, TraceCallStack& enabledDisableTrace, TraceCallStack& stencilTrace)
4127 enabledDisableTrace.Reset();
4128 stencilTrace.Reset();
4129 enabledDisableTrace.Enable(true);
4130 stencilTrace.Enable(true);
4132 application.SendNotification();
4133 application.Render();
4135 enabledDisableTrace.Enable(false);
4136 stencilTrace.Enable(false);
4139 void CheckColorMask(TestGlAbstraction& glAbstraction, bool maskValue)
4141 const TestGlAbstraction::ColorMaskParams& colorMaskParams = glAbstraction.GetColorMaskParams();
4143 DALI_TEST_EQUALS<bool>(colorMaskParams.red, maskValue, TEST_LOCATION);
4144 DALI_TEST_EQUALS<bool>(colorMaskParams.green, maskValue, TEST_LOCATION);
4145 DALI_TEST_EQUALS<bool>(colorMaskParams.blue, maskValue, TEST_LOCATION);
4147 // @todo only test alpha if the framebuffer has an alpha channel
4148 //DALI_TEST_EQUALS<bool>(colorMaskParams.alpha, maskValue, TEST_LOCATION);
4151 int UtcDaliActorPropertyClippingP(void)
4153 // This test checks the clippingMode property.
4154 tet_infoline("Testing Actor::Property::ClippingMode: P");
4155 TestApplication application;
4157 Actor actor = Actor::New();
4159 // Check default clippingEnabled value.
4160 Property::Value getValue(actor.GetProperty(Actor::Property::CLIPPING_MODE));
4163 bool getValueResult = getValue.Get(value);
4164 DALI_TEST_CHECK(getValueResult);
4168 DALI_TEST_EQUALS<int>(value, ClippingMode::DISABLED, TEST_LOCATION);
4171 // Check setting the property to the stencil mode.
4172 actor.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
4174 // Check the new value was set.
4175 getValue = actor.GetProperty(Actor::Property::CLIPPING_MODE);
4176 getValueResult = getValue.Get(value);
4177 DALI_TEST_CHECK(getValueResult);
4181 DALI_TEST_EQUALS<int>(value, ClippingMode::CLIP_CHILDREN, TEST_LOCATION);
4184 // Check setting the property to the scissor mode.
4185 actor.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4187 // Check the new value was set.
4188 getValue = actor.GetProperty(Actor::Property::CLIPPING_MODE);
4189 getValueResult = getValue.Get(value);
4190 DALI_TEST_CHECK(getValueResult);
4194 DALI_TEST_EQUALS<int>(value, ClippingMode::CLIP_TO_BOUNDING_BOX, TEST_LOCATION);
4199 int UtcDaliActorPropertyClippingN(void)
4201 // Negative test case for Clipping.
4202 tet_infoline("Testing Actor::Property::ClippingMode: N");
4203 TestApplication application;
4205 Actor actor = Actor::New();
4207 // Check default clippingEnabled value.
4208 Property::Value getValue(actor.GetProperty(Actor::Property::CLIPPING_MODE));
4211 bool getValueResult = getValue.Get(value);
4212 DALI_TEST_CHECK(getValueResult);
4216 DALI_TEST_EQUALS<int>(value, ClippingMode::DISABLED, TEST_LOCATION);
4219 // Check setting an invalid property value won't change the current property value.
4220 actor.SetProperty(Actor::Property::CLIPPING_MODE, "INVALID_PROPERTY");
4222 getValue = actor.GetProperty(Actor::Property::CLIPPING_MODE);
4223 getValueResult = getValue.Get(value);
4224 DALI_TEST_CHECK(getValueResult);
4228 DALI_TEST_EQUALS<int>(value, ClippingMode::DISABLED, TEST_LOCATION);
4234 int UtcDaliActorPropertyClippingActor(void)
4236 // This test checks that an actor is correctly setup for clipping.
4237 tet_infoline("Testing Actor::Property::ClippingMode: CLIP_CHILDREN actor");
4238 TestApplication application;
4240 // @todo temporary until stencil code has been fixed.
4241 #ifdef TEMPORARY_TEST_REMOVAL
4243 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4244 TraceCallStack& stencilTrace = glAbstraction.GetStencilFunctionTrace();
4245 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
4246 size_t startIndex = 0u;
4248 // Create a clipping actor.
4249 Actor actorDepth1Clip = CreateActorWithContent16x16();
4250 actorDepth1Clip.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
4251 application.GetScene().Add(actorDepth1Clip);
4253 // Gather the call trace.
4254 GenerateTrace(application, enabledDisableTrace, stencilTrace);
4256 // Check we are writing to the color buffer.
4257 CheckColorMask(glAbstraction, true);
4259 // Check the stencil buffer was enabled.
4260 std::ostringstream oss;
4261 oss << std::hex << GL_STENCIL_TEST;
4262 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", oss.str()));
4264 // Check the stencil buffer was cleared.
4265 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("ClearStencil", "0", startIndex));
4267 // Check the correct setup was done to write to the first bit-plane (only) of the stencil buffer.
4268 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilFunc", "514, 1, 0", startIndex)); // 514 is GL_EQUAL, But testing no bit-planes for the first clipping node.
4269 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilMask", "1", startIndex));
4270 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilOp", "7680, 7681, 7681", startIndex)); // GL_KEEP, GL_REPLACE, GL_REPLACE
4272 DALI_TEST_CHECK(true);
4278 int UtcDaliActorPropertyClippingActorEnableThenDisable(void)
4280 // This test checks that an actor is correctly setup for clipping and then correctly setup when clipping is disabled
4281 tet_infoline("Testing Actor::Property::ClippingMode: CLIP_CHILDREN actor enable and then disable");
4282 TestApplication application;
4284 // @todo temporary until stencil code has been fixed.
4285 #ifdef TEMPORARY_TEST_REMOVAL
4287 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4288 TraceCallStack& stencilTrace = glAbstraction.GetStencilFunctionTrace();
4289 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
4290 size_t startIndex = 0u;
4292 // Create a clipping actor.
4293 Actor actorDepth1Clip = CreateActorWithContent16x16();
4294 actorDepth1Clip.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
4295 application.GetScene().Add(actorDepth1Clip);
4297 // Gather the call trace.
4298 GenerateTrace(application, enabledDisableTrace, stencilTrace);
4300 // Check we are writing to the color buffer.
4301 CheckColorMask(glAbstraction, true);
4303 // Check the stencil buffer was enabled.
4304 std::ostringstream oss;
4305 oss << std::hex << GL_STENCIL_TEST;
4306 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", oss.str()));
4308 // Check the stencil buffer was cleared.
4309 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("ClearStencil", "0", startIndex));
4311 // Check the correct setup was done to write to the first bit-plane (only) of the stencil buffer.
4312 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilFunc", "514, 1, 0", startIndex)); // 514 is GL_EQUAL, But testing no bit-planes for the first clipping node.
4313 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilMask", "1", startIndex));
4314 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilOp", "7680, 7681, 7681", startIndex)); // GL_KEEP, GL_REPLACE, GL_REPLACE
4316 // Now disable the clipping
4317 actorDepth1Clip.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::DISABLED);
4319 // Gather the call trace.
4320 GenerateTrace(application, enabledDisableTrace, stencilTrace);
4322 // Check the stencil buffer was disabled.
4323 std::ostringstream stencil;
4324 stencil << std::hex << GL_STENCIL_TEST;
4325 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Disable", stencil.str()));
4327 // Ensure all values in stencil-mask are set to 1.
4329 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilMask", "255", startIndex));
4332 DALI_TEST_CHECK(true);
4338 int UtcDaliActorPropertyClippingNestedChildren(void)
4340 // This test checks that a hierarchy of actors are clipped correctly by
4341 // writing to and reading from the correct bit-planes of the stencil buffer.
4342 tet_infoline("Testing Actor::Property::ClippingMode: CLIP_CHILDREN nested children");
4344 // @todo temporary until stencil code has been fixed.
4345 #ifdef TEMPORARY_TEST_REMOVAL
4346 TestApplication application;
4347 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4348 TraceCallStack& stencilTrace = glAbstraction.GetStencilFunctionTrace();
4349 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
4351 // Create a clipping actor.
4352 Actor actorDepth1Clip = CreateActorWithContent16x16();
4353 actorDepth1Clip.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
4354 application.GetScene().Add(actorDepth1Clip);
4356 // Create a child actor.
4357 Actor childDepth2 = CreateActorWithContent16x16();
4358 actorDepth1Clip.Add(childDepth2);
4360 // Create another clipping actor.
4361 Actor childDepth2Clip = CreateActorWithContent16x16();
4362 childDepth2Clip.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
4363 childDepth2.Add(childDepth2Clip);
4365 // Create another 2 child actors. We do this so 2 nodes will have the same clipping ID.
4366 // This tests the sort algorithm.
4367 Actor childDepth3 = CreateActorWithContent16x16();
4368 childDepth2Clip.Add(childDepth3);
4369 Actor childDepth4 = CreateActorWithContent16x16();
4370 childDepth3.Add(childDepth4);
4372 // Gather the call trace.
4373 GenerateTrace(application, enabledDisableTrace, stencilTrace);
4375 // Check we are writing to the color buffer.
4376 CheckColorMask(glAbstraction, true);
4378 // Check the stencil buffer was enabled.
4379 std::ostringstream oss;
4380 oss << std::hex << GL_STENCIL_TEST;
4381 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", oss.str()));
4383 // Perform the test twice, once for 2D layer, and once for 3D.
4384 for(unsigned int i = 0u; i < 2u; ++i)
4386 size_t startIndex = 0u;
4388 // Check the stencil buffer was cleared.
4389 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("ClearStencil", "0", startIndex));
4391 // Check the correct setup was done to write to the first bit-plane (only) of the stencil buffer.
4392 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilFunc", "514, 1, 0", startIndex)); // 514 is GL_EQUAL, But testing no bit-planes for the first clipping node.
4393 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilMask", "1", startIndex)); // Write to the first bit-plane
4394 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilOp", "7680, 7681, 7681", startIndex)); // GL_KEEP, GL_REPLACE, GL_REPLACE
4396 // Check the correct setup was done to test against first bit-plane (only) of the stencil buffer.
4397 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilFunc", "514, 1, 1", startIndex)); // 514 is GL_EQUAL
4398 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilOp", "7680, 7680, 7680", startIndex)); // GL_KEEP, GL_KEEP, GL_KEEP
4400 // Check we are set up to write to the second bitplane of the stencil buffer (only).
4401 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilFunc", "514, 3, 1", startIndex)); // 514 is GL_EQUAL, Test both bit-planes 1 & 2
4402 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilMask", "3", startIndex)); // Write to second (and previous) bit-planes
4403 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilOp", "7680, 7681, 7681", startIndex)); // GL_KEEP, GL_REPLACE, GL_REPLACE
4405 // Check we are set up to test against both the first and second bit-planes of the stencil buffer.
4406 // (Both must be set to pass the check).
4407 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilFunc", "514, 3, 3", startIndex)); // 514 is GL_EQUAL, Test both bit-planes 1 & 2
4408 DALI_TEST_CHECK(stencilTrace.FindMethodAndParamsFromStartIndex("StencilOp", "7680, 7680, 7680", startIndex)); // GL_KEEP, GL_KEEP, GL_KEEP
4410 // If we are on the first loop, set the layer to 3D and loop to perform the test again.
4413 application.GetScene().GetRootLayer().SetProperty(Layer::Property::BEHAVIOR, Layer::LAYER_3D);
4414 GenerateTrace(application, enabledDisableTrace, stencilTrace);
4418 DALI_TEST_CHECK(true);
4424 int UtcDaliActorPropertyClippingActorDrawOrder(void)
4426 // This test checks that a hierarchy of actors are drawn in the correct order when clipping is enabled.
4427 tet_infoline("Testing Actor::Property::ClippingMode: CLIP_CHILDREN draw order");
4429 // @todo temporary until stencil code has been fixed.
4430 #ifdef TEMPORARY_TEST_REMOVAL
4431 TestApplication application;
4432 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4433 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
4435 /* We create a small tree of actors as follows:
4439 Clipping enabled -> B D
4443 The correct draw order is "ABCDE" (the same as if clipping was not enabled).
4446 for(int i = 0; i < 5; ++i)
4448 Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 16u, 16u);
4449 Actor actor = CreateRenderableActor(image);
4451 // Setup dimensions and position so actor is not skipped by culling.
4452 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
4453 actor.SetProperty(Actor::Property::SIZE, Vector2(16.0f, 16.0f));
4457 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4461 float b = i > 2 ? 1.0f : -1.0f;
4462 actor.SetProperty(Actor::Property::PARENT_ORIGIN, Vector3(0.5 + (0.2f * b), 0.8f, 0.8f));
4468 // Enable clipping on the actor at the top of the left branch.
4469 actors[1].SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
4471 // Build the scene graph.
4472 application.GetScene().Add(actors[0]);
4475 actors[0].Add(actors[1]);
4476 actors[1].Add(actors[2]);
4479 actors[0].Add(actors[3]);
4480 actors[3].Add(actors[4]);
4482 // Gather the call trace.
4483 enabledDisableTrace.Reset();
4484 enabledDisableTrace.Enable(true);
4485 application.SendNotification();
4486 application.Render();
4487 enabledDisableTrace.Enable(false);
4489 /* Check stencil is enabled and disabled again (as right-hand branch of tree is drawn).
4491 Note: Correct enable call trace: StackTrace: Index:0, Function:Enable, ParamList:3042 StackTrace: Index:1, Function:Enable, ParamList:2960 StackTrace: Index:2, Function:Disable, ParamList:2960
4492 Incorrect enable call trace: StackTrace: Index:0, Function:Enable, ParamList:3042 StackTrace: Index:1, Function:Enable, ParamList:2960
4494 size_t startIndex = 0u;
4495 std::ostringstream blend;
4496 blend << std::hex << GL_BLEND;
4497 std::ostringstream stencil;
4498 stencil << std::hex << GL_STENCIL_TEST;
4500 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParamsFromStartIndex("Enable", blend.str(), startIndex));
4501 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParamsFromStartIndex("Enable", stencil.str(), startIndex));
4502 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParamsFromStartIndex("Disable", stencil.str(), startIndex));
4504 // Swap the clipping actor from top of left branch to top of right branch.
4505 actors[1].SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::DISABLED);
4506 actors[3].SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
4508 // Gather the call trace.
4509 enabledDisableTrace.Reset();
4510 enabledDisableTrace.Enable(true);
4511 application.SendNotification();
4512 application.Render();
4513 enabledDisableTrace.Enable(false);
4515 // Check stencil is enabled but NOT disabled again (as right-hand branch of tree is drawn).
4516 // This proves the draw order has remained the same.
4518 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParamsFromStartIndex("Enable", stencil.str(), startIndex));
4519 DALI_TEST_CHECK(!enabledDisableTrace.FindMethodAndParamsFromStartIndex("Disable", stencil.str(), startIndex));
4522 DALI_TEST_CHECK(true);
4528 int UtcDaliActorPropertyScissorClippingActor(void)
4530 // This test checks that an actor is correctly setup for clipping.
4531 tet_infoline("Testing Actor::Property::ClippingMode: CLIP_TO_BOUNDING_BOX actor");
4532 TestApplication application;
4534 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4535 TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace();
4536 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
4538 const Vector2 stageSize(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT);
4539 const Vector2 imageSize(16.0f, 16.0f);
4541 // Create a clipping actor.
4542 Actor clippingActorA = CreateActorWithContent16x16();
4543 // Note: Scissor coords are have flipped Y values compared with DALi's coordinate system.
4544 // We choose BOTTOM_LEFT to give us x=0, y=0 starting coordinates for the first test.
4545 clippingActorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_LEFT);
4546 clippingActorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_LEFT);
4547 clippingActorA.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4548 application.GetScene().Add(clippingActorA);
4550 // Gather the call trace.
4551 GenerateTrace(application, enabledDisableTrace, scissorTrace);
4553 // Check we are writing to the color buffer.
4554 CheckColorMask(glAbstraction, true);
4556 // Check scissor test was enabled.
4558 std::ostringstream scissor;
4559 scissor << std::hex << GL_SCISSOR_TEST;
4560 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", scissor.str()));
4562 // Check the scissor was set, and the coordinates are correct.
4563 std::stringstream compareParametersString;
4564 compareParametersString << "0, 0, " << imageSize.x << ", " << imageSize.y;
4565 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", compareParametersString.str())); // Compare with 0, 0, 16, 16
4567 clippingActorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_RIGHT);
4568 clippingActorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_RIGHT);
4570 // Gather the call trace.
4571 GenerateTrace(application, enabledDisableTrace, scissorTrace);
4573 // Check the scissor was set, and the coordinates are correct.
4574 compareParametersString.str(std::string());
4575 compareParametersString.clear();
4576 compareParametersString << (stageSize.x - imageSize.x) << ", " << (stageSize.y - imageSize.y) << ", " << imageSize.x << ", " << imageSize.y;
4577 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", compareParametersString.str())); // Compare with 464, 784, 16, 16
4582 int UtcDaliActorPropertyScissorClippingActorSiblings(void)
4584 // This test checks that an actor is correctly setup for clipping.
4585 tet_infoline("Testing Actor::Property::ClippingMode: CLIP_TO_BOUNDING_BOX actors which are siblings");
4586 TestApplication application;
4588 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4589 TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace();
4590 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
4592 const Vector2 stageSize(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT);
4593 const Vector2 sizeA{stageSize.width, stageSize.height * 0.25f};
4594 const Vector2 sizeB{stageSize.width, stageSize.height * 0.05f};
4596 // Create a clipping actors.
4597 Actor clippingActorA = CreateActorWithContent(sizeA.width, sizeA.height);
4598 Actor clippingActorB = CreateActorWithContent(sizeB.width, sizeB.height);
4600 clippingActorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT);
4601 clippingActorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT);
4602 clippingActorA.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4604 clippingActorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT);
4605 clippingActorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT);
4606 clippingActorB.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4608 clippingActorA.SetProperty(Actor::Property::POSITION, Vector3(0.0f, -200.0f, 0.0f));
4609 clippingActorB.SetProperty(Actor::Property::POSITION, Vector3(0.0f, 0.0f, 0.0f));
4611 application.GetScene().Add(clippingActorA);
4612 application.GetScene().Add(clippingActorB);
4614 // Gather the call trace.
4615 GenerateTrace(application, enabledDisableTrace, scissorTrace);
4617 // Check we are writing to the color buffer.
4618 CheckColorMask(glAbstraction, true);
4620 // Check scissor test was enabled.
4621 std::ostringstream scissor;
4622 scissor << std::hex << GL_SCISSOR_TEST;
4623 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", scissor.str()));
4625 // Check the scissor was set, and the coordinates are correct.
4626 std::stringstream compareParametersString;
4628 std::string clipA("0, 500, 480, 200");
4629 std::string clipB("0, 380, 480, 40");
4631 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", clipA));
4632 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", clipB));
4637 int UtcDaliActorPropertyScissorClippingActorNested01(void)
4639 // This test checks that an actor is correctly setup for clipping.
4640 tet_infoline("Testing Actor::Property::ClippingMode: CLIP_TO_BOUNDING_BOX actor nested");
4641 TestApplication application;
4643 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4644 TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace();
4645 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
4647 const Vector2 stageSize(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT);
4648 const Vector2 imageSize(16.0f, 16.0f);
4650 /* Create a nest of 2 scissors to test nesting (intersecting clips).
4652 A is drawn first - with scissor clipping on
4653 B is drawn second - also with scissor clipping on
4654 C is the generated clipping region, the intersection ( A ∩ B )
4658 ┌───╂┄┄┄┐ ┃ ┌┄┄┄╆━━━┓ │
4659 │ ┃ ┊ ┃ ━━━━━> ┊ ┃ C ┃ │
4660 │ ┗━━━┿━━━┛ ┊ ┗━━━╃───┘
4664 We then reposition B around each corner of A to test the 4 overlap combinations (thus testing intersecting works correctly).
4667 // Create a clipping actor.
4668 Actor clippingActorA = CreateActorWithContent16x16();
4669 // Note: Scissor coords are have flipped Y values compared with DALi's coordinate system.
4670 // We choose BOTTOM_LEFT to give us x=0, y=0 starting coordinates for the first test.
4671 clippingActorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4672 clippingActorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
4673 clippingActorA.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4674 application.GetScene().Add(clippingActorA);
4676 // Create a child clipping actor.
4677 Actor clippingActorB = CreateActorWithContent16x16();
4678 clippingActorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4679 clippingActorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
4680 clippingActorB.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4681 clippingActorA.Add(clippingActorB);
4683 // positionModifiers is an array of positions to position B around.
4684 // expect is an array of expected scissor clip coordinate results.
4685 const Vector2 positionModifiers[4] = {Vector2(1.0f, 1.0f), Vector2(-1.0f, 1.0f), Vector2(-1.0f, -1.0f), Vector2(1.0f, -1.0f)};
4686 const Vector4 expect[4] = {Vector4(240, 392, 8, 8), Vector4(232, 392, 8, 8), Vector4(232, 400, 8, 8), Vector4(240, 400, 8, 8)};
4688 // Loop through each overlap combination.
4689 for(unsigned int test = 0u; test < 4u; ++test)
4691 // Position the child clipping actor so it intersects with the 1st clipping actor. This changes each loop.
4692 const Vector2 position = (imageSize / 2.0f) * positionModifiers[test];
4693 clippingActorB.SetProperty(Actor::Property::POSITION, Vector2(position.x, position.y));
4695 // Gather the call trace.
4696 GenerateTrace(application, enabledDisableTrace, scissorTrace);
4698 // Check we are writing to the color buffer.
4699 CheckColorMask(glAbstraction, true);
4701 // Check scissor test was enabled.
4702 std::ostringstream scissor;
4703 scissor << std::hex << GL_SCISSOR_TEST;
4704 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", scissor.str()));
4706 // Check the scissor was set, and the coordinates are correct.
4707 const Vector4& expectResults(expect[test]);
4708 std::stringstream compareParametersString;
4709 compareParametersString << expectResults.x << ", " << expectResults.y << ", " << expectResults.z << ", " << expectResults.w;
4710 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", compareParametersString.str())); // Compare with the expected result
4716 int UtcDaliActorPropertyScissorClippingActorNested02(void)
4718 // This test checks that an actor is correctly setup for clipping.
4719 tet_infoline("Testing Actor::Property::ClippingMode: CLIP_TO_BOUNDING_BOX actor nested");
4720 TestApplication application;
4722 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4723 TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace();
4724 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
4726 /* Create a nest of 2 scissors and siblings of the parent.
4736 const Vector2 stageSize(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT);
4737 const Vector2 sizeA{stageSize.width, stageSize.height * 0.25f};
4738 const Vector2 sizeB{stageSize.width, stageSize.height * 0.05f};
4739 const Vector2 sizeC{stageSize.width, stageSize.height * 0.25f};
4740 const Vector2 sizeD{stageSize.width, stageSize.height * 0.25f};
4741 const Vector2 sizeE{stageSize.width, stageSize.height * 0.05f};
4743 // Create a clipping actors.
4744 Actor clippingActorA = CreateActorWithContent(sizeA.width, sizeA.height);
4745 Actor clippingActorB = CreateActorWithContent(sizeB.width, sizeB.height);
4746 Actor clippingActorC = CreateActorWithContent(sizeC.width, sizeC.height);
4747 Actor clippingActorD = CreateActorWithContent(sizeD.width, sizeD.height);
4748 Actor clippingActorE = CreateActorWithContent(sizeE.width, sizeE.height);
4750 clippingActorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT);
4751 clippingActorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT);
4752 clippingActorA.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4754 clippingActorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT);
4755 clippingActorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT);
4756 clippingActorB.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4758 clippingActorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT);
4759 clippingActorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT);
4760 clippingActorC.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4762 clippingActorD.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT);
4763 clippingActorD.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT);
4764 clippingActorD.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4766 clippingActorE.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT);
4767 clippingActorE.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT);
4769 clippingActorA.SetProperty(Actor::Property::POSITION, Vector3(0.0f, -200.0f, 0.0f));
4770 clippingActorB.SetProperty(Actor::Property::POSITION, Vector3(0.0f, 0.0f, 0.0f));
4771 clippingActorC.SetProperty(Actor::Property::POSITION, Vector3(0.0f, 100.0f, 0.0f));
4772 clippingActorD.SetProperty(Actor::Property::POSITION, Vector3(0.0f, 0.0f, 0.0f));
4773 clippingActorE.SetProperty(Actor::Property::POSITION, Vector3(0.0f, 0.0f, 0.0f));
4775 application.GetScene().Add(clippingActorA);
4776 clippingActorA.Add(clippingActorB);
4777 application.GetScene().Add(clippingActorC);
4778 application.GetScene().Add(clippingActorD);
4779 clippingActorD.Add(clippingActorE);
4781 // Gather the call trace.
4782 GenerateTrace(application, enabledDisableTrace, scissorTrace);
4784 // Check we are writing to the color buffer.
4785 CheckColorMask(glAbstraction, true);
4787 // Check scissor test was enabled.
4788 std::ostringstream scissor;
4789 scissor << std::hex << GL_SCISSOR_TEST;
4790 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", scissor.str()));
4792 // Check the scissor was set, and the coordinates are correct.
4793 std::string clipA("0, 500, 480, 200");
4794 std::string clipB("0, 580, 480, 40");
4795 std::string clipC("0, 200, 480, 200");
4796 std::string clipD("0, 300, 480, 200");
4798 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", clipA));
4799 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", clipB));
4800 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", clipC));
4801 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", clipD));
4802 DALI_TEST_EQUALS(scissorTrace.CountMethod("Scissor"), 4, TEST_LOCATION); // Scissor rect should not be changed in clippingActorE case. So count should be 4.
4807 int UtcDaliActorPropertyClippingActorWithRendererOverride(void)
4809 // This test checks that an actor with clipping will be ignored if overridden by the Renderer properties.
4810 tet_infoline("Testing Actor::Property::CLIPPING_MODE actor with renderer override");
4811 TestApplication application;
4813 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4814 TraceCallStack& stencilTrace = glAbstraction.GetStencilFunctionTrace();
4815 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
4817 // Create a clipping actor.
4818 Actor actorDepth1Clip = CreateActorWithContent16x16();
4819 actorDepth1Clip.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
4820 application.GetScene().Add(actorDepth1Clip);
4822 // Turn the RenderMode to just "COLOR" at the Renderer level to ignore the clippingMode.
4823 actorDepth1Clip.GetRendererAt(0).SetProperty(Renderer::Property::RENDER_MODE, RenderMode::COLOR);
4825 // Gather the call trace.
4826 GenerateTrace(application, enabledDisableTrace, stencilTrace);
4828 // Check we are writing to the color buffer.
4829 CheckColorMask(glAbstraction, true);
4831 // Check the stencil buffer was not enabled.
4832 std::ostringstream stencil;
4833 stencil << std::hex << GL_STENCIL_TEST;
4834 DALI_TEST_CHECK(!enabledDisableTrace.FindMethodAndParams("Enable", stencil.str()));
4836 // Check stencil functions are not called.
4837 DALI_TEST_CHECK(!stencilTrace.FindMethod("StencilFunc"));
4838 // TODO: Temporarily commented out the line below when caching is disabled. Will need to add it back.
4839 // DALI_TEST_CHECK(!stencilTrace.FindMethod("StencilMask"));
4840 DALI_TEST_CHECK(!stencilTrace.FindMethod("StencilOp"));
4842 // Check that scissor clipping is overriden by the renderer properties.
4843 TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace();
4845 actorDepth1Clip.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
4847 // Gather the call trace.
4848 GenerateTrace(application, enabledDisableTrace, scissorTrace);
4850 // Check the stencil buffer was not enabled.
4851 std::ostringstream scissor;
4852 scissor << std::hex << GL_SCISSOR_TEST;
4853 DALI_TEST_CHECK(!enabledDisableTrace.FindMethodAndParams("Enable", scissor.str()));
4855 DALI_TEST_CHECK(!scissorTrace.FindMethod("StencilFunc"));
4860 int UtcDaliGetPropertyN(void)
4862 tet_infoline("Testing Actor::GetProperty returns a non valid value if property index is out of range");
4863 TestApplication application;
4865 Actor actor = Actor::New();
4867 unsigned int propertyCount = actor.GetPropertyCount();
4868 DALI_TEST_EQUALS(actor.GetProperty(Property::Index(propertyCount)).GetType(), Property::NONE, TEST_LOCATION);
4872 int UtcDaliActorRaiseLower(void)
4874 tet_infoline("UtcDaliActor Raise and Lower test\n");
4876 TestApplication application;
4878 Debug::Filter::SetGlobalLogLevel(Debug::Verbose);
4880 Integration::Scene stage(application.GetScene());
4882 Actor actorA = Actor::New();
4883 Actor actorB = Actor::New();
4884 Actor actorC = Actor::New();
4886 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
4887 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4889 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
4890 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4892 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
4893 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4895 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
4896 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
4898 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
4899 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
4901 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
4902 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
4908 ResetTouchCallbacks();
4910 application.SendNotification();
4911 application.Render();
4913 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
4914 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
4915 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
4917 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
4918 // Only top actor will get touched.
4919 actorA.TouchedSignal().Connect(TestTouchCallback);
4920 actorB.TouchedSignal().Connect(TestTouchCallback2);
4921 actorC.TouchedSignal().Connect(TestTouchCallback3);
4923 // Connect ChildOrderChangedSignal
4924 bool orderChangedSignal(false);
4925 Actor orderChangedActor;
4926 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
4927 DevelActor::ChildOrderChangedSignal(stage.GetRootLayer()).Connect(&application, f);
4929 Dali::Integration::Point point;
4930 point.SetDeviceId(1);
4931 point.SetState(PointState::DOWN);
4932 point.SetScreenPosition(Vector2(10.f, 10.f));
4933 Dali::Integration::TouchEvent touchEvent;
4934 touchEvent.AddPoint(point);
4936 application.ProcessEvent(touchEvent);
4938 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
4939 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
4940 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
4942 ResetTouchCallbacks();
4944 tet_printf("Testing Raising of Actor\n");
4946 int preActorOrder(0);
4947 int postActorOrder(0);
4949 Property::Value value = actorB.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER);
4950 value.Get(preActorOrder);
4952 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
4954 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
4955 DALI_TEST_EQUALS(orderChangedActor, actorB, TEST_LOCATION);
4957 // Ensure sort order is calculated before next touch event
4958 application.SendNotification();
4960 value = actorB.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER);
4961 value.Get(postActorOrder);
4963 tet_printf("Raised ActorB from (%d) to (%d) \n", preActorOrder, postActorOrder);
4965 application.ProcessEvent(touchEvent);
4967 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
4968 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
4969 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
4971 ResetTouchCallbacks();
4973 tet_printf("Testing Lowering of Actor\n");
4975 value = actorB.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER);
4976 value.Get(preActorOrder);
4978 orderChangedSignal = false;
4980 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
4982 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
4983 DALI_TEST_EQUALS(orderChangedActor, actorB, TEST_LOCATION);
4985 application.SendNotification(); // ensure sort order calculated before next touch event
4987 value = actorB.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER);
4988 value.Get(postActorOrder);
4990 tet_printf("Lowered ActorB from (%d) to (%d) \n", preActorOrder, postActorOrder);
4992 application.ProcessEvent(touchEvent);
4994 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
4995 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
4996 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
4998 ResetTouchCallbacks();
5000 Debug::Filter::SetGlobalLogLevel(Debug::NoLogging);
5005 int UtcDaliActorRaiseToTopLowerToBottom(void)
5007 tet_infoline("UtcDaliActorRaiseToTop and LowerToBottom test \n");
5009 TestApplication application;
5011 Integration::Scene stage(application.GetScene());
5013 Actor actorA = Actor::New();
5014 Actor actorB = Actor::New();
5015 Actor actorC = Actor::New();
5017 // Set up renderers to add to Actors, float value 1, 2, 3 assigned to each
5018 // enables checking of which actor the uniform is assigned too
5019 Shader shaderA = CreateShader();
5020 shaderA.RegisterProperty("uRendererColor", 1.f);
5022 Shader shaderB = CreateShader();
5023 shaderB.RegisterProperty("uRendererColor", 2.f);
5025 Shader shaderC = CreateShader();
5026 shaderC.RegisterProperty("uRendererColor", 3.f);
5028 Geometry geometry = CreateQuadGeometry();
5030 // Add renderers to Actors so ( uRendererColor, 1 ) is A, ( uRendererColor, 2 ) is B, and ( uRendererColor, 3 ) is C,
5031 Renderer rendererA = Renderer::New(geometry, shaderA);
5032 actorA.AddRenderer(rendererA);
5034 Renderer rendererB = Renderer::New(geometry, shaderB);
5035 actorB.AddRenderer(rendererB);
5037 Renderer rendererC = Renderer::New(geometry, shaderC);
5038 actorC.AddRenderer(rendererC);
5040 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5041 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5043 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5044 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5046 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5047 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5049 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5050 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5052 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5053 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5055 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5056 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5062 ResetTouchCallbacks();
5064 // Connect ChildOrderChangedSignal
5065 bool orderChangedSignal(false);
5066 Actor orderChangedActor;
5067 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
5068 DevelActor::ChildOrderChangedSignal(stage.GetRootLayer()).Connect(&application, f);
5070 // Set up gl abstraction trace so can query the set uniform order
5071 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
5072 glAbstraction.EnableSetUniformCallTrace(true);
5073 glAbstraction.ResetSetUniformCallStack();
5075 TraceCallStack& glSetUniformStack = glAbstraction.GetSetUniformTrace();
5077 application.SendNotification();
5078 application.Render();
5080 tet_printf("Trace Output:%s \n", glSetUniformStack.GetTraceString().c_str());
5082 // Test order of uniforms in stack
5083 int indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5084 int indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5085 int indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5087 bool CBA = (indexC > indexB) && (indexB > indexA);
5089 DALI_TEST_EQUALS(CBA, true, TEST_LOCATION);
5091 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5092 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5093 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5095 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
5096 // Only top actor will get touched.
5097 actorA.TouchedSignal().Connect(TestTouchCallback);
5098 actorB.TouchedSignal().Connect(TestTouchCallback2);
5099 actorC.TouchedSignal().Connect(TestTouchCallback3);
5101 Dali::Integration::Point point;
5102 point.SetDeviceId(1);
5103 point.SetState(PointState::DOWN);
5104 point.SetScreenPosition(Vector2(10.f, 10.f));
5105 Dali::Integration::TouchEvent touchEvent;
5106 touchEvent.AddPoint(point);
5108 application.ProcessEvent(touchEvent);
5110 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5111 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5112 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
5114 ResetTouchCallbacks();
5116 tet_printf("RaiseToTop ActorA\n");
5118 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5119 actorA.RaiseToTop();
5120 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5121 DALI_TEST_EQUALS(orderChangedActor, actorA, TEST_LOCATION);
5123 application.SendNotification(); // ensure sorting order is calculated before next touch event
5125 application.ProcessEvent(touchEvent);
5127 glSetUniformStack.Reset();
5129 application.SendNotification();
5130 application.Render();
5132 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5134 // Test order of uniforms in stack
5135 indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5136 indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5137 indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5139 tet_infoline("Testing A above C and B at bottom\n");
5140 bool ACB = (indexA > indexC) && (indexC > indexB);
5142 DALI_TEST_EQUALS(ACB, true, TEST_LOCATION);
5144 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
5145 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5146 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5148 ResetTouchCallbacks();
5150 tet_printf("RaiseToTop ActorB\n");
5152 orderChangedSignal = false;
5154 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5155 actorB.RaiseToTop();
5156 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5157 DALI_TEST_EQUALS(orderChangedActor, actorB, TEST_LOCATION);
5159 application.SendNotification(); // Ensure sort order is calculated before next touch event
5161 application.ProcessEvent(touchEvent);
5163 glSetUniformStack.Reset();
5165 application.SendNotification();
5166 application.Render();
5168 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5170 // Test order of uniforms in stack
5171 indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5172 indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5173 indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5175 tet_infoline("Testing B above A and C at bottom\n");
5176 bool BAC = (indexB > indexA) && (indexA > indexC);
5178 DALI_TEST_EQUALS(BAC, true, TEST_LOCATION);
5180 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5181 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
5182 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5184 ResetTouchCallbacks();
5186 tet_printf("LowerToBottom ActorA then ActorB leaving Actor C at Top\n");
5188 orderChangedSignal = false;
5190 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5191 actorA.LowerToBottom();
5192 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5193 DALI_TEST_EQUALS(orderChangedActor, actorA, TEST_LOCATION);
5195 application.SendNotification();
5196 application.Render();
5198 orderChangedSignal = false;
5200 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5201 actorB.LowerToBottom();
5202 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5203 DALI_TEST_EQUALS(orderChangedActor, actorB, TEST_LOCATION);
5205 application.SendNotification();
5206 application.Render();
5208 application.ProcessEvent(touchEvent);
5210 glSetUniformStack.Reset();
5212 application.SendNotification();
5213 application.Render();
5215 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5217 // Test order of uniforms in stack
5218 indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5219 indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5220 indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5222 tet_infoline("Testing C above A and B at bottom\n");
5223 bool CAB = (indexC > indexA) && (indexA > indexB);
5225 DALI_TEST_EQUALS(CAB, true, TEST_LOCATION);
5227 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5228 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5229 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
5231 ResetTouchCallbacks();
5236 int UtcDaliActorRaiseAbove(void)
5238 tet_infoline("UtcDaliActor RaiseToAbove test \n");
5240 TestApplication application;
5242 Integration::Scene stage(application.GetScene());
5244 Actor actorA = Actor::New();
5245 Actor actorB = Actor::New();
5246 Actor actorC = Actor::New();
5248 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5249 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5251 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5252 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5254 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5255 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5257 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5258 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5260 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5261 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5263 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5264 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5270 ResetTouchCallbacks();
5272 application.SendNotification();
5273 application.Render();
5275 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5276 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5277 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5279 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
5280 // Only top actor will get touched.
5281 actorA.TouchedSignal().Connect(TestTouchCallback);
5282 actorB.TouchedSignal().Connect(TestTouchCallback2);
5283 actorC.TouchedSignal().Connect(TestTouchCallback3);
5285 bool orderChangedSignal(false);
5286 Actor orderChangedActor;
5287 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
5288 DevelActor::ChildOrderChangedSignal(stage.GetRootLayer()).Connect(&application, f);
5290 Dali::Integration::Point point;
5291 point.SetDeviceId(1);
5292 point.SetState(PointState::DOWN);
5293 point.SetScreenPosition(Vector2(10.f, 10.f));
5294 Dali::Integration::TouchEvent touchEvent;
5295 touchEvent.AddPoint(point);
5297 application.ProcessEvent(touchEvent);
5299 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5300 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5301 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
5303 ResetTouchCallbacks();
5305 tet_printf("Raise actor B Above Actor C\n");
5307 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5308 actorB.RaiseAbove(actorC);
5309 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5310 DALI_TEST_EQUALS(orderChangedActor, actorB, TEST_LOCATION);
5312 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5313 application.SendNotification();
5314 application.ProcessEvent(touchEvent);
5316 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5317 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
5318 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5320 ResetTouchCallbacks();
5322 tet_printf("Raise actor A Above Actor B\n");
5324 orderChangedSignal = false;
5326 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5327 actorA.RaiseAbove(actorB);
5328 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5329 DALI_TEST_EQUALS(orderChangedActor, actorA, TEST_LOCATION);
5331 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5332 application.SendNotification();
5334 application.ProcessEvent(touchEvent); // process a touch event on ordered actors.
5336 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
5337 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5338 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5340 ResetTouchCallbacks();
5345 int UtcDaliActorRaiseAbove2(void)
5347 tet_infoline("UtcDaliActor RaiseToAbove test using SIBLING_ORDER property\n");
5349 TestApplication application;
5351 Integration::Scene stage(application.GetScene());
5353 Actor actorA = Actor::New();
5354 Actor actorB = Actor::New();
5355 Actor actorC = Actor::New();
5357 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5358 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5360 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5361 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5363 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5364 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5366 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5367 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5369 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5370 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5372 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5373 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5379 ResetTouchCallbacks();
5381 application.SendNotification();
5382 application.Render();
5384 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5385 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5386 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5388 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
5389 // Only top actor will get touched.
5390 actorA.TouchedSignal().Connect(TestTouchCallback);
5391 actorB.TouchedSignal().Connect(TestTouchCallback2);
5392 actorC.TouchedSignal().Connect(TestTouchCallback3);
5394 bool orderChangedSignal(false);
5395 Actor orderChangedActor;
5396 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
5397 DevelActor::ChildOrderChangedSignal(stage.GetRootLayer()).Connect(&application, f);
5399 Dali::Integration::Point point;
5400 point.SetDeviceId(1);
5401 point.SetState(PointState::DOWN);
5402 point.SetScreenPosition(Vector2(10.f, 10.f));
5403 Dali::Integration::TouchEvent touchEvent;
5404 touchEvent.AddPoint(point);
5406 application.ProcessEvent(touchEvent);
5408 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5409 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5410 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
5412 ResetTouchCallbacks();
5414 tet_printf("Raise actor B Above Actor C\n");
5416 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5417 int newOrder = actorC[DevelActor::Property::SIBLING_ORDER];
5418 actorB[DevelActor::Property::SIBLING_ORDER] = newOrder;
5419 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5420 DALI_TEST_EQUALS(orderChangedActor, actorB, TEST_LOCATION);
5422 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5423 application.SendNotification();
5424 application.ProcessEvent(touchEvent);
5426 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5427 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
5428 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5430 ResetTouchCallbacks();
5432 tet_printf("Raise actor A Above Actor B\n");
5434 orderChangedSignal = false;
5436 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5437 newOrder = actorB[DevelActor::Property::SIBLING_ORDER];
5438 actorA[DevelActor::Property::SIBLING_ORDER] = newOrder;
5439 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5440 DALI_TEST_EQUALS(orderChangedActor, actorA, TEST_LOCATION);
5442 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5443 application.SendNotification();
5445 application.ProcessEvent(touchEvent); // process a touch event on ordered actors.
5447 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
5448 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5449 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5451 ResetTouchCallbacks();
5456 int UtcDaliActorLowerBelow(void)
5458 tet_infoline("UtcDaliActor LowerBelow test \n");
5460 TestApplication application;
5462 Integration::Scene stage(application.GetScene());
5464 // Set up renderers to add to Actors, float value 1, 2, 3 assigned to each
5465 // enables checking of which actor the uniform is assigned too
5466 Shader shaderA = CreateShader();
5467 shaderA.RegisterProperty("uRendererColor", 1.f);
5469 Shader shaderB = CreateShader();
5470 shaderB.RegisterProperty("uRendererColor", 2.f);
5472 Shader shaderC = CreateShader();
5473 shaderC.RegisterProperty("uRendererColor", 3.f);
5475 Actor actorA = Actor::New();
5476 Actor actorB = Actor::New();
5477 Actor actorC = Actor::New();
5479 // Add renderers to Actors so ( uRendererColor, 1 ) is A, ( uRendererColor, 2 ) is B, and ( uRendererColor, 3 ) is C,
5480 Geometry geometry = CreateQuadGeometry();
5482 Renderer rendererA = Renderer::New(geometry, shaderA);
5483 actorA.AddRenderer(rendererA);
5485 Renderer rendererB = Renderer::New(geometry, shaderB);
5486 actorB.AddRenderer(rendererB);
5488 Renderer rendererC = Renderer::New(geometry, shaderC);
5489 actorC.AddRenderer(rendererC);
5491 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5492 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5494 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5495 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5497 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5498 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5500 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5501 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5503 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5504 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5506 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5507 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5509 Actor container = Actor::New();
5510 container.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5511 container.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
5512 stage.Add(container);
5514 container.Add(actorA);
5515 container.Add(actorB);
5516 container.Add(actorC);
5518 ResetTouchCallbacks();
5520 // Connect ChildOrderChangedSignal
5521 bool orderChangedSignal(false);
5522 Actor orderChangedActor;
5523 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
5524 DevelActor::ChildOrderChangedSignal(container).Connect(&application, f);
5526 // Set up gl abstraction trace so can query the set uniform order
5527 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
5528 glAbstraction.EnableSetUniformCallTrace(true);
5529 glAbstraction.ResetSetUniformCallStack();
5530 TraceCallStack& glSetUniformStack = glAbstraction.GetSetUniformTrace();
5532 glAbstraction.ResetSetUniformCallStack();
5534 application.SendNotification();
5535 application.Render();
5537 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5539 // Test order of uniforms in stack
5540 int indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5541 int indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5542 int indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5544 tet_infoline("Testing C above B and A at bottom\n");
5545 bool CBA = (indexC > indexB) && (indexB > indexA);
5547 DALI_TEST_EQUALS(CBA, true, TEST_LOCATION);
5549 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5550 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5551 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5553 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
5554 // Only top actor will get touched.
5555 actorA.TouchedSignal().Connect(TestTouchCallback);
5556 actorB.TouchedSignal().Connect(TestTouchCallback2);
5557 actorC.TouchedSignal().Connect(TestTouchCallback3);
5559 Dali::Integration::Point point;
5560 point.SetDeviceId(1);
5561 point.SetState(PointState::DOWN);
5562 point.SetScreenPosition(Vector2(10.f, 10.f));
5563 Dali::Integration::TouchEvent touchEvent;
5564 touchEvent.AddPoint(point);
5566 tet_infoline("UtcDaliActor Test Set up completed \n");
5568 application.ProcessEvent(touchEvent);
5570 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5571 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5572 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
5574 ResetTouchCallbacks();
5576 tet_printf("Lower actor C below Actor B ( actor B and A on same level due to insertion order) so C is below both \n");
5578 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5579 actorC.LowerBelow(actorB);
5580 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5581 DALI_TEST_EQUALS(orderChangedActor, actorC, TEST_LOCATION);
5583 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5584 application.SendNotification();
5585 application.Render();
5587 application.ProcessEvent(touchEvent); // touch event
5589 glSetUniformStack.Reset();
5591 application.SendNotification();
5592 application.Render();
5594 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5596 // Test order of uniforms in stack
5597 indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5598 indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5599 indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5601 tet_infoline("Testing render order is A, C, B");
5602 DALI_TEST_EQUALS(indexC > indexA, true, TEST_LOCATION);
5603 DALI_TEST_EQUALS(indexB > indexC, true, TEST_LOCATION);
5605 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5606 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
5607 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5609 ResetTouchCallbacks();
5611 tet_printf("Lower actor C below Actor A leaving B on top\n");
5613 orderChangedSignal = false;
5615 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5616 actorC.LowerBelow(actorA);
5617 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5618 DALI_TEST_EQUALS(orderChangedActor, actorC, TEST_LOCATION);
5620 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5621 application.SendNotification();
5622 application.Render();
5624 application.ProcessEvent(touchEvent);
5626 glSetUniformStack.Reset();
5628 application.Render();
5629 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5631 // Test order of uniforms in stack
5632 indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5633 indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5634 indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5636 DALI_TEST_EQUALS(indexA > indexC, true, TEST_LOCATION);
5637 DALI_TEST_EQUALS(indexB > indexA, true, TEST_LOCATION);
5639 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5640 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
5641 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5643 ResetTouchCallbacks();
5645 tet_printf("Lower actor B below Actor C leaving A on top\n");
5647 orderChangedSignal = false;
5649 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5650 actorB.LowerBelow(actorC);
5651 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5652 DALI_TEST_EQUALS(orderChangedActor, actorB, TEST_LOCATION);
5654 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5655 application.SendNotification();
5656 application.Render();
5658 application.ProcessEvent(touchEvent);
5660 glSetUniformStack.Reset();
5662 application.Render();
5663 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5665 // Test order of uniforms in stack
5666 indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5667 indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5668 indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5670 DALI_TEST_EQUALS(indexC > indexB, true, TEST_LOCATION);
5671 DALI_TEST_EQUALS(indexA > indexC, true, TEST_LOCATION);
5676 int UtcDaliActorLowerBelow2(void)
5678 tet_infoline("UtcDaliActor LowerBelow test using SIBLING_ORDER property\n");
5680 TestApplication application;
5682 Integration::Scene stage(application.GetScene());
5684 // Set up renderers to add to Actors, float value 1, 2, 3 assigned to each
5685 // enables checking of which actor the uniform is assigned too
5686 Shader shaderA = CreateShader();
5687 shaderA.RegisterProperty("uRendererColor", 1.f);
5689 Shader shaderB = CreateShader();
5690 shaderB.RegisterProperty("uRendererColor", 2.f);
5692 Shader shaderC = CreateShader();
5693 shaderC.RegisterProperty("uRendererColor", 3.f);
5695 Actor actorA = Actor::New();
5696 Actor actorB = Actor::New();
5697 Actor actorC = Actor::New();
5699 // Add renderers to Actors so ( uRendererColor, 1 ) is A, ( uRendererColor, 2 ) is B, and ( uRendererColor, 3 ) is C,
5700 Geometry geometry = CreateQuadGeometry();
5702 Renderer rendererA = Renderer::New(geometry, shaderA);
5703 actorA.AddRenderer(rendererA);
5705 Renderer rendererB = Renderer::New(geometry, shaderB);
5706 actorB.AddRenderer(rendererB);
5708 Renderer rendererC = Renderer::New(geometry, shaderC);
5709 actorC.AddRenderer(rendererC);
5711 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5712 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5714 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5715 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5717 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5718 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5720 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5721 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5723 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5724 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5726 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5727 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5729 Actor container = Actor::New();
5730 container.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5731 container.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
5732 stage.Add(container);
5734 container.Add(actorA);
5735 container.Add(actorB);
5736 container.Add(actorC);
5738 ResetTouchCallbacks();
5740 // Connect ChildOrderChangedSignal
5741 bool orderChangedSignal(false);
5742 Actor orderChangedActor;
5743 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
5744 DevelActor::ChildOrderChangedSignal(container).Connect(&application, f);
5746 // Set up gl abstraction trace so can query the set uniform order
5747 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
5748 glAbstraction.EnableSetUniformCallTrace(true);
5749 glAbstraction.ResetSetUniformCallStack();
5750 TraceCallStack& glSetUniformStack = glAbstraction.GetSetUniformTrace();
5752 glAbstraction.ResetSetUniformCallStack();
5754 application.SendNotification();
5755 application.Render();
5757 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5759 // Test order of uniforms in stack
5760 int indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5761 int indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5762 int indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5764 tet_infoline("Testing C above B and A at bottom\n");
5765 bool CBA = (indexC > indexB) && (indexB > indexA);
5767 DALI_TEST_EQUALS(CBA, true, TEST_LOCATION);
5769 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5770 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5771 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5773 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
5774 // Only top actor will get touched.
5775 actorA.TouchedSignal().Connect(TestTouchCallback);
5776 actorB.TouchedSignal().Connect(TestTouchCallback2);
5777 actorC.TouchedSignal().Connect(TestTouchCallback3);
5779 Dali::Integration::Point point;
5780 point.SetDeviceId(1);
5781 point.SetState(PointState::DOWN);
5782 point.SetScreenPosition(Vector2(10.f, 10.f));
5783 Dali::Integration::TouchEvent touchEvent;
5784 touchEvent.AddPoint(point);
5786 tet_infoline("UtcDaliActor Test Set up completed \n");
5788 application.ProcessEvent(touchEvent);
5790 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5791 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5792 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
5794 ResetTouchCallbacks();
5796 tet_printf("Lower actor C below Actor B ( actor B and A on same level due to insertion order) so C is below both \n");
5798 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5799 actorC[DevelActor::Property::SIBLING_ORDER] = 1;
5800 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5801 DALI_TEST_EQUALS(orderChangedActor, actorC, TEST_LOCATION);
5803 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5804 application.SendNotification();
5805 application.Render();
5807 application.ProcessEvent(touchEvent); // touch event
5809 glSetUniformStack.Reset();
5811 application.SendNotification();
5812 application.Render();
5814 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5816 // Test order of uniforms in stack
5817 indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5818 indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5819 indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5821 tet_infoline("Testing render order is A, C, B");
5822 DALI_TEST_EQUALS(indexC > indexA, true, TEST_LOCATION);
5823 DALI_TEST_EQUALS(indexB > indexC, true, TEST_LOCATION);
5825 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5826 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
5827 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5829 ResetTouchCallbacks();
5831 tet_printf("Lower actor C below Actor A leaving B on top\n");
5833 orderChangedSignal = false;
5835 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5836 actorC[DevelActor::Property::SIBLING_ORDER] = 0;
5837 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5838 DALI_TEST_EQUALS(orderChangedActor, actorC, TEST_LOCATION);
5840 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5841 application.SendNotification();
5842 application.Render();
5844 application.ProcessEvent(touchEvent);
5846 glSetUniformStack.Reset();
5848 application.Render();
5849 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5851 // Test order of uniforms in stack
5852 indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5853 indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5854 indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5856 DALI_TEST_EQUALS(indexA > indexC, true, TEST_LOCATION);
5857 DALI_TEST_EQUALS(indexB > indexA, true, TEST_LOCATION);
5859 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5860 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
5861 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5863 ResetTouchCallbacks();
5865 tet_printf("Lower actor B below Actor C leaving A on top\n");
5867 orderChangedSignal = false;
5869 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5870 actorB[DevelActor::Property::SIBLING_ORDER] = 0;
5871 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
5872 DALI_TEST_EQUALS(orderChangedActor, actorB, TEST_LOCATION);
5874 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5875 application.SendNotification();
5876 application.Render();
5878 application.ProcessEvent(touchEvent);
5880 glSetUniformStack.Reset();
5882 application.Render();
5883 tet_printf("Trace:%s \n", glSetUniformStack.GetTraceString().c_str());
5885 // Test order of uniforms in stack
5886 indexC = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "3.000000");
5887 indexB = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "2.000000");
5888 indexA = glSetUniformStack.FindIndexFromMethodAndParams("uRendererColor", "1.000000");
5890 DALI_TEST_EQUALS(indexC > indexB, true, TEST_LOCATION);
5891 DALI_TEST_EQUALS(indexA > indexC, true, TEST_LOCATION);
5896 int UtcDaliActorRaiseAboveDifferentParentsN(void)
5898 tet_infoline("UtcDaliActor RaiseToAbove test with actor and target actor having different parents \n");
5900 TestApplication application;
5902 Integration::Scene stage(application.GetScene());
5904 Actor parentA = Actor::New();
5905 Actor parentB = Actor::New();
5906 parentA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5907 parentA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5908 parentB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5909 parentB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5911 parentA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5912 parentA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5914 parentB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5915 parentB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5920 Actor actorA = Actor::New();
5921 Actor actorB = Actor::New();
5922 Actor actorC = Actor::New();
5924 parentA.Add(actorA);
5925 parentA.Add(actorB);
5927 tet_printf("Actor C added to different parent from A and B \n");
5928 parentB.Add(actorC);
5930 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5931 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5933 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5934 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5936 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
5937 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
5939 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5940 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5942 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5943 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5945 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
5946 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
5948 ResetTouchCallbacks();
5950 // Connect ChildOrderChangedSignal
5951 bool orderChangedSignal(false);
5952 Actor orderChangedActor;
5953 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
5954 DevelActor::ChildOrderChangedSignal(stage.GetRootLayer()).Connect(&application, f);
5956 application.SendNotification();
5957 application.Render();
5959 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5960 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5961 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
5963 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
5964 // Only top actor will get touched.
5965 actorA.TouchedSignal().Connect(TestTouchCallback);
5966 actorB.TouchedSignal().Connect(TestTouchCallback2);
5967 actorC.TouchedSignal().Connect(TestTouchCallback3);
5969 Dali::Integration::Point point;
5970 point.SetDeviceId(1);
5971 point.SetState(PointState::DOWN);
5972 point.SetScreenPosition(Vector2(10.f, 10.f));
5973 Dali::Integration::TouchEvent touchEvent;
5974 touchEvent.AddPoint(point);
5976 application.ProcessEvent(touchEvent);
5978 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5979 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5980 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
5982 ResetTouchCallbacks();
5984 tet_printf("Raise actor A Above Actor C which have different parents\n");
5986 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5987 actorA.RaiseAbove(actorC);
5988 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
5990 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
5991 application.SendNotification();
5993 application.ProcessEvent(touchEvent); // touch event
5995 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
5996 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
5997 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
5999 ResetTouchCallbacks();
6004 int UtcDaliActorRaiseLowerWhenUnparentedTargetN(void)
6006 tet_infoline("UtcDaliActor Test raiseAbove and lowerBelow api when target Actor has no parent \n");
6008 TestApplication application;
6010 Integration::Scene stage(application.GetScene());
6012 Actor actorA = Actor::New();
6013 Actor actorB = Actor::New();
6014 Actor actorC = Actor::New();
6016 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6017 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6019 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6020 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6022 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6023 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6025 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
6026 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
6028 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
6029 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
6031 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
6032 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
6034 ResetTouchCallbacks();
6036 // Connect ChildOrderChangedSignal
6037 bool orderChangedSignal(false);
6038 Actor orderChangedActor;
6039 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
6040 DevelActor::ChildOrderChangedSignal(stage.GetRootLayer()).Connect(&application, f);
6042 application.SendNotification();
6043 application.Render();
6045 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
6046 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6047 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6049 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
6050 // Only top actor will get touched.
6051 actorA.TouchedSignal().Connect(TestTouchCallback);
6052 actorB.TouchedSignal().Connect(TestTouchCallback2);
6053 actorC.TouchedSignal().Connect(TestTouchCallback3);
6055 Dali::Integration::Point point;
6056 point.SetDeviceId(1);
6057 point.SetState(PointState::DOWN);
6058 point.SetScreenPosition(Vector2(10.f, 10.f));
6059 Dali::Integration::TouchEvent touchEvent;
6060 touchEvent.AddPoint(point);
6062 tet_printf("Raise actor A Above Actor C which have no parents\n");
6064 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6065 actorA.RaiseAbove(actorC);
6066 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6068 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
6069 application.SendNotification();
6071 application.ProcessEvent(touchEvent);
6073 tet_printf("Not parented so RaiseAbove should show no effect\n");
6075 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
6076 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6077 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6079 ResetTouchCallbacks();
6081 orderChangedSignal = false;
6084 tet_printf("Lower actor A below Actor C when only A is not on stage \n");
6086 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6087 actorA.LowerBelow(actorC);
6088 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6090 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
6091 application.SendNotification();
6092 application.Render();
6094 application.ProcessEvent(touchEvent);
6096 tet_printf("Actor A not parented so LowerBelow should show no effect\n");
6097 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
6098 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
6099 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6101 ResetTouchCallbacks();
6103 orderChangedSignal = false;
6105 tet_printf("Adding Actor A to stage, will be on top\n");
6108 application.SendNotification();
6109 application.Render();
6111 tet_printf("Raise actor B Above Actor C when only B has a parent\n");
6113 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6114 actorB.RaiseAbove(actorC);
6115 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6117 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
6118 application.SendNotification();
6120 application.ProcessEvent(touchEvent);
6122 tet_printf("C not parented so RaiseAbove should show no effect\n");
6123 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
6124 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6125 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6127 ResetTouchCallbacks();
6129 orderChangedSignal = false;
6131 tet_printf("Lower actor A below Actor C when only A has a parent\n");
6133 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6134 actorA.LowerBelow(actorC);
6135 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6137 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
6138 application.SendNotification();
6140 application.ProcessEvent(touchEvent);
6142 tet_printf("C not parented so LowerBelow should show no effect\n");
6143 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
6144 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6145 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6147 ResetTouchCallbacks();
6149 orderChangedSignal = false;
6153 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6154 actorA.RaiseAbove(actorC);
6155 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
6156 DALI_TEST_EQUALS(orderChangedActor, actorA, TEST_LOCATION);
6158 // Ensure sorting happens at end of Core::ProcessEvents() before next touch
6159 application.SendNotification();
6160 application.Render();
6162 application.ProcessEvent(touchEvent);
6164 tet_printf("Raise actor A Above Actor C, now both have same parent \n");
6165 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
6166 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6167 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6172 int UtcDaliActorTestAllAPIwhenActorNotParented(void)
6174 tet_infoline("UtcDaliActor Test all raise/lower api when actor has no parent \n");
6176 TestApplication application;
6178 Integration::Scene stage(application.GetScene());
6180 Actor actorA = Actor::New();
6181 Actor actorB = Actor::New();
6182 Actor actorC = Actor::New();
6184 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6185 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6187 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6188 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6190 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6191 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6193 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
6194 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
6196 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
6197 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
6199 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
6200 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
6202 ResetTouchCallbacks();
6204 // Connect ChildOrderChangedSignal
6205 bool orderChangedSignal(false);
6206 Actor orderChangedActor;
6207 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
6208 DevelActor::ChildOrderChangedSignal(stage.GetRootLayer()).Connect(&application, f);
6210 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
6211 // Only top actor will get touched.
6212 actorA.TouchedSignal().Connect(TestTouchCallback);
6213 actorB.TouchedSignal().Connect(TestTouchCallback2);
6214 actorC.TouchedSignal().Connect(TestTouchCallback3);
6216 Dali::Integration::Point point;
6217 point.SetDeviceId(1);
6218 point.SetState(PointState::DOWN);
6219 point.SetScreenPosition(Vector2(10.f, 10.f));
6220 Dali::Integration::TouchEvent touchEvent;
6221 touchEvent.AddPoint(point);
6224 tet_printf("Raise actor B Above Actor C but B not parented\n");
6226 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6228 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6230 application.SendNotification();
6231 application.Render();
6233 application.ProcessEvent(touchEvent);
6235 tet_printf("Not parented so RaiseAbove should show no effect\n");
6237 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
6238 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6239 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6241 tet_printf("Raise actor B Above Actor C but B not parented\n");
6242 ResetTouchCallbacks();
6244 orderChangedSignal = false;
6246 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6248 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6250 // Sort actor tree before next touch event
6251 application.SendNotification();
6252 application.Render();
6254 application.ProcessEvent(touchEvent);
6256 tet_printf("Not parented so RaiseAbove should show no effect\n");
6258 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
6259 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6260 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6261 ResetTouchCallbacks();
6263 orderChangedSignal = false;
6265 tet_printf("Lower actor C below B but C not parented\n");
6267 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6269 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6271 // Sort actor tree before next touch event
6272 application.SendNotification();
6273 application.Render();
6275 application.ProcessEvent(touchEvent);
6277 tet_printf("Not parented so Lower should show no effect\n");
6279 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
6280 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6281 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6282 ResetTouchCallbacks();
6284 orderChangedSignal = false;
6286 tet_printf("Raise actor B to top\n");
6288 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6289 actorB.RaiseToTop();
6290 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6292 // Sort actor tree before next touch event
6293 application.SendNotification();
6294 application.Render();
6296 application.ProcessEvent(touchEvent);
6298 tet_printf("Not parented so RaiseToTop should show no effect\n");
6300 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
6301 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6302 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6303 ResetTouchCallbacks();
6305 orderChangedSignal = false;
6307 tet_printf("Add ActorB to stage so only Actor C not parented\n");
6311 tet_printf("Lower actor C to Bottom, B stays at top\n");
6313 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6314 actorC.LowerToBottom();
6315 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6317 application.SendNotification();
6318 application.Render();
6320 application.ProcessEvent(touchEvent);
6322 tet_printf("Not parented so LowerToBottom should show no effect\n");
6324 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
6325 DALI_TEST_EQUALS(gTouchCallBackCalled2, true, TEST_LOCATION);
6326 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6327 ResetTouchCallbacks();
6332 int UtcDaliActorRaiseAboveActorAndTargetTheSameN(void)
6334 tet_infoline("UtcDaliActor RaiseToAbove and test with actor provided as target resulting in a no operation \n");
6336 TestApplication application;
6338 Integration::Scene stage(application.GetScene());
6340 Actor actorA = Actor::New();
6341 Actor actorB = Actor::New();
6342 Actor actorC = Actor::New();
6344 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6345 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6347 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6348 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6350 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6351 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6353 actorA.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
6354 actorA.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
6356 actorB.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
6357 actorB.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
6359 actorC.SetProperty(Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT");
6360 actorC.SetProperty(Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT");
6366 // connect to actor touch signals, will use touch callbacks to determine which actor is on top.
6367 // Only top actor will get touched.
6368 actorA.TouchedSignal().Connect(TestTouchCallback);
6369 actorB.TouchedSignal().Connect(TestTouchCallback2);
6370 actorC.TouchedSignal().Connect(TestTouchCallback3);
6372 ResetTouchCallbacks();
6374 // Connect ChildOrderChangedSignal
6375 bool orderChangedSignal(false);
6376 Actor orderChangedActor;
6377 ChildOrderChangedFunctor f(orderChangedSignal, orderChangedActor);
6378 DevelActor::ChildOrderChangedSignal(stage.GetRootLayer()).Connect(&application, f);
6380 application.SendNotification();
6381 application.Render();
6383 Dali::Integration::Point point;
6384 point.SetDeviceId(1);
6385 point.SetState(PointState::DOWN);
6386 point.SetScreenPosition(Vector2(10.f, 10.f));
6387 Dali::Integration::TouchEvent touchEvent;
6388 touchEvent.AddPoint(point);
6390 application.ProcessEvent(touchEvent);
6392 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
6393 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6394 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
6396 ResetTouchCallbacks();
6398 tet_infoline("Raise actor A Above Actor A which is the same actor!!\n");
6400 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6401 actorA.RaiseAbove(actorA);
6402 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
6403 DALI_TEST_EQUALS(orderChangedActor, actorA, TEST_LOCATION);
6405 application.SendNotification();
6406 application.Render();
6408 application.ProcessEvent(touchEvent);
6410 tet_infoline("No target is source Actor so RaiseAbove should show no effect\n");
6412 DALI_TEST_EQUALS(gTouchCallBackCalled, false, TEST_LOCATION);
6413 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6414 DALI_TEST_EQUALS(gTouchCallBackCalled3, true, TEST_LOCATION);
6416 ResetTouchCallbacks();
6418 orderChangedSignal = false;
6420 DALI_TEST_EQUALS(orderChangedSignal, false, TEST_LOCATION);
6421 actorA.RaiseAbove(actorC);
6422 DALI_TEST_EQUALS(orderChangedSignal, true, TEST_LOCATION);
6423 DALI_TEST_EQUALS(orderChangedActor, actorA, TEST_LOCATION);
6425 application.SendNotification();
6426 application.Render();
6428 application.ProcessEvent(touchEvent);
6430 tet_infoline("Raise actor A Above Actor C which will now be successful \n");
6431 DALI_TEST_EQUALS(gTouchCallBackCalled, true, TEST_LOCATION);
6432 DALI_TEST_EQUALS(gTouchCallBackCalled2, false, TEST_LOCATION);
6433 DALI_TEST_EQUALS(gTouchCallBackCalled3, false, TEST_LOCATION);
6438 int UtcDaliActorGetScreenPosition(void)
6440 tet_infoline("UtcDaliActorGetScreenPosition Get screen coordinates of Actor \n");
6442 TestApplication application;
6444 Integration::Scene stage(application.GetScene());
6446 Actor actorA = Actor::New();
6447 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6449 Vector2 size2(10.0f, 20.0f);
6450 actorA.SetProperty(Actor::Property::SIZE, size2);
6452 actorA.SetProperty(Actor::Property::POSITION, Vector2(0.f, 0.f));
6454 tet_infoline("UtcDaliActorGetScreenPosition Center Anchor Point and 0,0 position \n");
6458 application.SendNotification();
6459 application.Render();
6461 Vector3 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6462 Vector2 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6464 tet_printf("Actor World Position ( %f %f ) AnchorPoint::CENTER \n", actorWorldPosition.x, actorWorldPosition.y);
6465 tet_printf("Actor Screen Position %f %f \n", actorScreenPosition.x, actorScreenPosition.y);
6467 DALI_TEST_EQUALS(actorScreenPosition.x, 0lu, TEST_LOCATION);
6468 DALI_TEST_EQUALS(actorScreenPosition.y, 0lu, TEST_LOCATION);
6470 tet_infoline("UtcDaliActorGetScreenPosition Top Left Anchor Point and 0,0 position \n");
6472 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6474 application.SendNotification();
6475 application.Render();
6477 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6478 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6480 tet_printf("Actor World Position ( %f %f ) AnchorPoint::TOP_LEFT \n", actorWorldPosition.x, actorWorldPosition.y);
6481 tet_printf("Actor Screen Position ( %f %f ) AnchorPoint::TOP_LEFT \n", actorScreenPosition.x, actorScreenPosition.y);
6483 DALI_TEST_EQUALS(actorScreenPosition.x, 0lu, TEST_LOCATION);
6484 DALI_TEST_EQUALS(actorScreenPosition.y, 0lu, TEST_LOCATION);
6486 tet_infoline("UtcDaliActorGetScreenPosition Bottom right Anchor Point and 0,0 position \n");
6488 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_RIGHT);
6490 application.SendNotification();
6491 application.Render();
6493 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6494 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6496 tet_printf("Actor World Position ( %f %f ) AnchorPoint::BOTTOM_RIGHT \n", actorWorldPosition.x, actorWorldPosition.y);
6497 tet_printf("Actor Screen Position ( %f %f ) AnchorPoint::BOTTOM_RIGHT \n", actorScreenPosition.x, actorScreenPosition.y);
6499 DALI_TEST_EQUALS(actorScreenPosition.x, 0lu, TEST_LOCATION);
6500 DALI_TEST_EQUALS(actorScreenPosition.y, 0lu, TEST_LOCATION);
6502 tet_infoline("UtcDaliActorGetScreenPosition Bottom right Anchor Point and 30,0 position \n");
6504 actorA.SetProperty(Actor::Property::POSITION, Vector2(30.0, 0.0));
6506 application.SendNotification();
6507 application.Render();
6509 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6510 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6512 tet_printf("Actor World Position ( %f %f ) AnchorPoint::BOTTOM_RIGHT Position x=30 y = 0.0 \n", actorWorldPosition.x, actorWorldPosition.y);
6513 tet_printf("Actor Screen Position ( %f %f ) AnchorPoint::BOTTOM_RIGHT Position x=30 y = 0.0 \n", actorScreenPosition.x, actorScreenPosition.y);
6515 DALI_TEST_EQUALS(actorScreenPosition.x, 30lu, TEST_LOCATION);
6516 DALI_TEST_EQUALS(actorScreenPosition.y, 0lu, TEST_LOCATION);
6518 tet_infoline("UtcDaliActorGetScreenPosition Bottom right Anchor Point and 30,420 position \n");
6520 actorA.SetProperty(Actor::Property::POSITION, Vector2(30.0, 420.0));
6522 application.SendNotification();
6523 application.Render();
6525 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6526 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6528 DALI_TEST_EQUALS(actorScreenPosition.x, 30lu, TEST_LOCATION);
6529 DALI_TEST_EQUALS(actorScreenPosition.y, 420lu, TEST_LOCATION);
6531 tet_printf("Actor World Position ( %f %f ) AnchorPoint::BOTTOM_RIGHT Position x=30 y = 420.0\n", actorWorldPosition.x, actorWorldPosition.y);
6532 tet_printf("Actor Screen Position( %f %f ) AnchorPoint::BOTTOM_RIGHT Position x=30 y = 420.0 \n", actorScreenPosition.x, actorScreenPosition.y);
6534 tet_infoline("UtcDaliActorGetScreenPosition Scale parent and check child's screen position \n");
6536 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6537 actorA.SetProperty(Actor::Property::POSITION, Vector2(30.0, 30.0));
6539 Actor actorB = Actor::New();
6540 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6541 actorB.SetProperty(Actor::Property::SIZE, size2);
6542 actorB.SetProperty(Actor::Property::POSITION, Vector2(10.f, 10.f));
6545 actorA.SetProperty(Actor::Property::SCALE, 2.0f);
6547 application.SendNotification();
6548 application.Render();
6550 actorScreenPosition = actorB.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6552 DALI_TEST_EQUALS(actorScreenPosition.x, 50lu, TEST_LOCATION);
6553 DALI_TEST_EQUALS(actorScreenPosition.y, 50lu, TEST_LOCATION);
6558 int UtcDaliActorGetScreenPositionAfterScaling(void)
6560 tet_infoline("UtcDaliActorGetScreenPositionAfterScaling Get screen coordinates of Actor \n");
6562 TestApplication application;
6564 Integration::Scene stage(application.GetScene());
6566 Actor actorA = Actor::New();
6567 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6569 Vector2 size2(10.0f, 20.0f);
6570 actorA.SetProperty(Actor::Property::SIZE, size2);
6571 actorA.SetProperty(Actor::Property::SCALE, 1.5f);
6572 actorA.SetProperty(Actor::Property::POSITION, Vector2(0.f, 0.f));
6574 tet_infoline("UtcDaliActorGetScreenPositionAfterScaling TopRight Anchor Point, scale 1.5f and 0,0 position \n");
6578 application.SendNotification();
6579 application.Render();
6581 Vector3 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6582 Vector2 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6584 tet_printf("Actor World Position ( %f %f ) AnchorPoint::TOP_LEFT \n", actorWorldPosition.x, actorWorldPosition.y);
6585 tet_printf("Actor Screen Position ( %f %f ) \n", actorScreenPosition.x, actorScreenPosition.y);
6587 DALI_TEST_EQUALS(actorScreenPosition.x, 0lu, TEST_LOCATION);
6588 DALI_TEST_EQUALS(actorScreenPosition.y, 0lu, TEST_LOCATION);
6590 tet_infoline("UtcDaliActorGetScreenPositionAfterScaling BOTTOM_RIGHT Anchor Point, scale 1.5f and 0,0 position \n");
6592 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_RIGHT);
6594 application.SendNotification();
6595 application.Render();
6597 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6598 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6600 tet_printf("Actor World Position ( %f %f ) AnchorPoint::BOTTOM_RIGHT \n", actorWorldPosition.x, actorWorldPosition.y);
6601 tet_printf("Actor Screen Position ( %f %f ) \n", actorScreenPosition.x, actorScreenPosition.y);
6603 DALI_TEST_EQUALS(actorScreenPosition.x, 0.0f, TEST_LOCATION);
6604 DALI_TEST_EQUALS(actorScreenPosition.y, 0.0f, TEST_LOCATION);
6609 int UtcDaliActorGetScreenPositionWithDifferentParentOrigin(void)
6611 tet_infoline("UtcDaliActorGetScreenPositionWithDifferentParentOrigin Changes parent origin which should not effect result \n");
6613 TestApplication application;
6615 Integration::Scene stage(application.GetScene());
6617 Actor actorA = Actor::New();
6618 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6619 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6620 Vector2 size2(10.0f, 20.0f);
6621 actorA.SetProperty(Actor::Property::SIZE, size2);
6622 actorA.SetProperty(Actor::Property::POSITION, Vector2(0.f, 0.f));
6624 tet_infoline(" TOP_LEFT Anchor Point, ParentOrigin::CENTER and 0,0 position \n");
6628 application.SendNotification();
6629 application.Render();
6631 Vector3 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6632 Vector2 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6634 tet_printf("Actor World Position ( %f %f ) AnchorPoint::TOP_LEFT ParentOrigin::CENTER \n", actorWorldPosition.x, actorWorldPosition.y);
6635 tet_printf("Actor Screen Position ( %f %f ) \n", actorScreenPosition.x, actorScreenPosition.y);
6637 DALI_TEST_EQUALS(actorScreenPosition.x, 240.0f, TEST_LOCATION);
6638 DALI_TEST_EQUALS(actorScreenPosition.y, 400.0f, TEST_LOCATION);
6640 tet_infoline(" BOTTOM_RIGHT Anchor Point, ParentOrigin::TOP_RIGHT and 0,0 position \n");
6642 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_RIGHT);
6643 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_RIGHT);
6645 application.SendNotification();
6646 application.Render();
6648 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6649 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6651 tet_printf("Actor World Position ( %f %f ) AnchorPoint::BOTTOM_RIGHT ParentOrigin::TOP_RIGHT \n", actorWorldPosition.x, actorWorldPosition.y);
6652 tet_printf("Actor Screen Position ( %f %f ) \n", actorScreenPosition.x, actorScreenPosition.y);
6654 DALI_TEST_EQUALS(actorScreenPosition.x, 480.0f, TEST_LOCATION);
6655 DALI_TEST_EQUALS(actorScreenPosition.y, 0.0f, TEST_LOCATION);
6661 int UtcDaliActorGetScreenPositionWithChildActors(void)
6663 tet_infoline("UtcDaliActorGetScreenPositionWithChildActors Check screen position with a tree of actors \n");
6665 TestApplication application;
6667 Integration::Scene stage(application.GetScene());
6669 tet_infoline("Create Child Actor 1 TOP_LEFT Anchor Point, ParentOrigin::CENTER and 0,0 position \n");
6671 Actor actorA = Actor::New();
6672 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6673 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6674 Vector2 size1(10.0f, 20.0f);
6675 actorA.SetProperty(Actor::Property::SIZE, size1);
6676 actorA.SetProperty(Actor::Property::POSITION, Vector2(0.f, 0.f));
6678 tet_infoline("Create Parent Actor 1 TOP_LEFT Anchor Point, ParentOrigin::CENTER and 0,0 position \n");
6680 Actor parentActorA = Actor::New();
6681 parentActorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6682 parentActorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6683 Vector2 size2(30.0f, 60.0f);
6684 parentActorA.SetProperty(Actor::Property::SIZE, size2);
6685 parentActorA.SetProperty(Actor::Property::POSITION, Vector2(0.f, 0.f));
6687 tet_infoline("Add child 1 to Parent 1 and check screen position \n");
6689 stage.Add(parentActorA);
6690 parentActorA.Add(actorA);
6692 application.SendNotification();
6693 application.Render();
6695 Vector3 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6696 Vector2 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6698 tet_printf("Actor World Position ( %f %f ) AnchorPoint::TOP_LEFT ParentOrigin::CENTER \n", actorWorldPosition.x, actorWorldPosition.y);
6699 tet_printf("Actor Screen Position ( %f %f ) \n", actorScreenPosition.x, actorScreenPosition.y);
6701 DALI_TEST_EQUALS(actorScreenPosition.x, 255.0f, TEST_LOCATION);
6702 DALI_TEST_EQUALS(actorScreenPosition.y, 430.0f, TEST_LOCATION);
6704 tet_infoline("Test 2\n");
6706 tet_infoline("change parent anchor point and parent origin then check screen position \n");
6708 parentActorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_LEFT);
6709 parentActorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
6711 application.SendNotification();
6712 application.Render();
6714 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6715 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6717 tet_printf("Actor World Position ( %f %f ) AnchorPoint::BOTTOM_LEFT ParentOrigin::TOP_LEFT \n", actorWorldPosition.x, actorWorldPosition.y);
6718 tet_printf("Actor Screen Position ( %f %f ) \n", actorScreenPosition.x, actorScreenPosition.y);
6720 DALI_TEST_EQUALS(actorScreenPosition.x, 15.0f, TEST_LOCATION);
6721 DALI_TEST_EQUALS(actorScreenPosition.y, -30.0f, TEST_LOCATION);
6726 int UtcDaliActorGetScreenPositionWithChildActors02(void)
6728 tet_infoline("UtcDaliActorGetScreenPositionWithChildActors02 Check screen position with a tree of actors \n");
6730 TestApplication application;
6732 Integration::Scene stage(application.GetScene());
6734 tet_infoline("Create Child Actor 1 TOP_LEFT Anchor Point, ParentOrigin::CENTER and 0,0 position \n");
6736 Actor actorA = Actor::New();
6737 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6738 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6739 Vector2 size1(10.0f, 20.0f);
6740 actorA.SetProperty(Actor::Property::SIZE, size1);
6741 actorA.SetProperty(Actor::Property::POSITION, Vector2(0.f, 0.f));
6743 tet_infoline("Create Parent Actor 1 TOP_LEFT Anchor Point, ParentOrigin::CENTER and 0,0 position \n");
6745 Actor parentActorA = Actor::New();
6746 parentActorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6747 parentActorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6748 Vector2 size2(30.0f, 60.0f);
6749 parentActorA.SetProperty(Actor::Property::SIZE, size2);
6750 parentActorA.SetProperty(Actor::Property::POSITION, Vector2(0.f, 0.f));
6752 tet_infoline("Create Grand Parent Actor 1 BOTTOM_LEFT Anchor Point, ParentOrigin::BOTTOM_LEFT and 0,0 position \n");
6754 Actor grandParentActorA = Actor::New();
6755 grandParentActorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_LEFT);
6756 grandParentActorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_LEFT);
6757 Vector2 size3(60.0f, 120.0f);
6758 grandParentActorA.SetProperty(Actor::Property::SIZE, size3);
6759 grandParentActorA.SetProperty(Actor::Property::POSITION, Vector2(0.f, 0.f));
6761 tet_infoline("Add Parent 1 to Grand Parent 1 \n");
6763 stage.Add(grandParentActorA);
6764 grandParentActorA.Add(parentActorA);
6766 tet_infoline("Add child 1 to Parent 1 and check screen position \n");
6768 parentActorA.Add(actorA);
6770 application.SendNotification();
6771 application.Render();
6773 Vector3 actorWorldPosition = actorA.GetProperty(Actor::Property::WORLD_POSITION).Get<Vector3>();
6774 Vector2 actorScreenPosition = actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>();
6776 tet_printf("Actor World Position ( %f %f ) AnchorPoint::TOP_LEFT ParentOrigin::CENTER \n", actorWorldPosition.x, actorWorldPosition.y);
6777 tet_printf("Actor Screen Position ( %f %f ) \n", actorScreenPosition.x, actorScreenPosition.y);
6779 DALI_TEST_EQUALS(actorScreenPosition.x, 45.0f, TEST_LOCATION);
6780 DALI_TEST_EQUALS(actorScreenPosition.y, 770.0f, TEST_LOCATION);
6785 int UtcDaliActorGetScreenPositionPositionUsesAnchorPointFalse(void)
6787 tet_infoline("UtcDaliActorGetScreenPositionPositionUsesAnchorPointFalse Check screen position where the position does not use the anchor point");
6789 TestApplication application;
6791 Integration::Scene stage(application.GetScene());
6793 tet_infoline("Create an actor with AnchorPoint::TOP_LEFT, ParentOrigin::CENTER and 0,0 position, POSITION_USES_ANCHOR false");
6795 Actor actorA = Actor::New();
6796 actorA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6797 actorA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6798 actorA.SetProperty(Actor::Property::POSITION_USES_ANCHOR_POINT, false);
6799 actorA.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 20.0f));
6802 tet_infoline("Create an Actor with AnchorPoint::BOTTOM_RIGHT, ParentOrigin::CENTER and 0,0 position, POSITION_USES_ANCHOR false");
6804 Actor actorB = Actor::New();
6805 actorB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_RIGHT);
6806 actorB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6807 actorB.SetProperty(Actor::Property::POSITION_USES_ANCHOR_POINT, false);
6808 Vector2 actorBSize(30.0f, 60.0f);
6809 actorB.SetProperty(Actor::Property::SIZE, actorBSize);
6812 tet_infoline("Create an actor with AnchorPoint::CENTER, ParentOrigin::CENTER and 0,0 position, POSITION_USES_ANCHOR false");
6814 Actor actorC = Actor::New();
6815 actorC.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6816 actorC.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6817 actorC.SetProperty(Actor::Property::POSITION_USES_ANCHOR_POINT, false);
6818 Vector2 actorCSize(60.0f, 120.0f);
6819 actorC.SetProperty(Actor::Property::SIZE, actorCSize);
6822 application.SendNotification();
6823 application.Render();
6825 tet_infoline("Despite differing sizes and anchor-points, the screen position for all actors is the same");
6827 Vector2 center(stage.GetSize() * 0.5f);
6829 DALI_TEST_EQUALS(actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>(), center, TEST_LOCATION);
6830 DALI_TEST_EQUALS(actorB.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>(), center, TEST_LOCATION);
6831 DALI_TEST_EQUALS(actorC.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>(), center, TEST_LOCATION);
6833 tet_infoline("Add scale to all actors");
6835 actorA.SetProperty(Actor::Property::SCALE, 2.0f);
6836 actorB.SetProperty(Actor::Property::SCALE, 2.0f);
6837 actorC.SetProperty(Actor::Property::SCALE, 2.0f);
6839 application.SendNotification();
6840 application.Render();
6842 DALI_TEST_EQUALS(actorA.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>(), center /* TOP_LEFT Anchor */, TEST_LOCATION);
6843 DALI_TEST_EQUALS(actorB.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>(), center - actorBSize /* BOTTOM_RIGHT Anchor */, TEST_LOCATION);
6844 DALI_TEST_EQUALS(actorC.GetProperty(Actor::Property::SCREEN_POSITION).Get<Vector2>(), center - actorCSize * 0.5f /* CENTER Anchor*/, TEST_LOCATION);
6849 int utcDaliActorPositionUsesAnchorPoint(void)
6851 TestApplication application;
6852 tet_infoline("Check default behaviour\n");
6854 Actor actor = Actor::New();
6855 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6856 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6857 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
6858 application.GetScene().Add(actor);
6860 application.SendNotification();
6861 application.Render();
6863 tet_infoline("Check that the world position is in the center\n");
6864 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(0.0f, 0.0f, 0.0f), TEST_LOCATION);
6866 tet_infoline("Set the position uses anchor point property to false\n");
6867 actor.SetProperty(Actor::Property::POSITION_USES_ANCHOR_POINT, false);
6869 application.SendNotification();
6870 application.Render();
6872 tet_infoline("Check that the world position has changed appropriately\n");
6873 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(50.0f, 50.0f, 0.0f), TEST_LOCATION);
6878 int utcDaliActorPositionUsesAnchorPointCheckScale(void)
6880 TestApplication application;
6881 tet_infoline("Check that the scale is adjusted appropriately when setting the positionUsesAnchorPoint to false\n");
6883 Actor actor = Actor::New();
6884 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6885 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6886 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
6887 actor.SetProperty(Actor::Property::SCALE, 2.0f);
6888 actor.SetProperty(Actor::Property::POSITION_USES_ANCHOR_POINT, false);
6889 application.GetScene().Add(actor);
6891 application.SendNotification();
6892 application.Render();
6894 tet_infoline("Check the world position is the same as it would be without a scale\n");
6895 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(50.0f, 50.0f, 0.0f), TEST_LOCATION);
6897 tet_infoline("Change the Anchor Point to TOP_LEFT and ensure the world position changes accordingly");
6898 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6899 application.SendNotification();
6900 application.Render();
6901 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(100.0f, 100.0f, 0.0f), TEST_LOCATION);
6903 tet_infoline("Change the Anchor Point to BOTTOM_RIGHT and ensure the world position changes accordingly");
6904 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_RIGHT);
6905 application.SendNotification();
6906 application.Render();
6907 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(0.0f, 0.0f, 0.0f), TEST_LOCATION);
6912 int utcDaliActorPositionUsesAnchorPointCheckRotation(void)
6914 TestApplication application;
6915 tet_infoline("Check that the rotation is adjusted appropriately when setting the positionUsesAnchorPoint to false\n");
6917 Actor actor = Actor::New();
6918 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6919 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6920 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
6921 actor.SetProperty(Actor::Property::ORIENTATION, Quaternion(Degree(90.0f), Vector3::ZAXIS));
6922 actor.SetProperty(Actor::Property::POSITION_USES_ANCHOR_POINT, false);
6923 application.GetScene().Add(actor);
6925 application.SendNotification();
6926 application.Render();
6928 tet_infoline("Check the world position is the same as it would be without a rotation\n");
6929 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(50.0f, 50.0f, 0.0f), TEST_LOCATION);
6931 tet_infoline("Change the Anchor Point to TOP_LEFT and ensure the world position changes accordingly");
6932 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6933 application.SendNotification();
6934 application.Render();
6935 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(-50.0f, 50.0f, 0.0f), TEST_LOCATION);
6937 tet_infoline("Change the Anchor Point to BOTTOM_RIGHT and ensure the world position changes accordingly");
6938 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_RIGHT);
6939 application.SendNotification();
6940 application.Render();
6941 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(150.0f, 50.0f, 0.0f), TEST_LOCATION);
6946 int utcDaliActorPositionUsesAnchorPointCheckScaleAndRotation(void)
6948 TestApplication application;
6949 tet_infoline("Check that the scale and rotation is adjusted appropriately when setting the positionUsesAnchorPoint to false\n");
6951 Actor actor = Actor::New();
6952 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6953 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6954 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
6955 actor.SetProperty(Actor::Property::ORIENTATION, Quaternion(Degree(90.0f), Vector3::ZAXIS));
6956 actor.SetProperty(Actor::Property::SCALE, 2.0f);
6957 actor.SetProperty(Actor::Property::POSITION_USES_ANCHOR_POINT, false);
6958 application.GetScene().Add(actor);
6960 application.SendNotification();
6961 application.Render();
6963 tet_infoline("Check the world position is the same as it would be without a scale and rotation\n");
6964 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(50.0f, 50.0f, 0.0f), TEST_LOCATION);
6966 tet_infoline("Change the Anchor Point to TOP_LEFT and ensure the world position changes accordingly");
6967 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
6968 application.SendNotification();
6969 application.Render();
6970 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(-100.0f, 100.0f, 0.0f), TEST_LOCATION);
6972 tet_infoline("Change the Anchor Point to BOTTOM_RIGHT and ensure the world position changes accordingly");
6973 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_RIGHT);
6974 application.SendNotification();
6975 application.Render();
6976 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), Vector3(200.0f, 0.0f, 0.0f), TEST_LOCATION);
6981 int utcDaliActorPositionUsesAnchorPointOnlyInheritPosition(void)
6983 TestApplication application;
6984 tet_infoline("Check that if not inheriting scale and position, then the position is adjusted appropriately when setting the positionUsesAnchorPoint to false\n");
6986 Actor parent = Actor::New();
6988 application.GetScene().Add(parent);
6989 Vector2 stageSize(application.GetScene().GetSize());
6991 Actor actor = Actor::New();
6992 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
6993 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
6994 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
6995 actor.SetProperty(Actor::Property::INHERIT_SCALE, false);
6996 actor.SetProperty(Actor::Property::INHERIT_ORIENTATION, false);
6997 actor.SetProperty(Actor::Property::POSITION_USES_ANCHOR_POINT, false);
7000 application.SendNotification();
7001 application.Render();
7003 const Vector3 expectedWorldPosition(-stageSize.width * 0.5f + 50.0f, -stageSize.height * 0.5f + 50.0f, 0.0f);
7005 tet_infoline("Check the world position is in the right place\n");
7006 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), expectedWorldPosition, TEST_LOCATION);
7008 tet_infoline("Change the Anchor Point to TOP_LEFT and ensure world position hasn't changed");
7009 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
7010 application.SendNotification();
7011 application.Render();
7012 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), expectedWorldPosition, TEST_LOCATION);
7014 tet_infoline("Change the Anchor Point to BOTTOM_RIGHT and ensure world position hasn't changed");
7015 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_RIGHT);
7016 application.SendNotification();
7017 application.Render();
7018 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), expectedWorldPosition, TEST_LOCATION);
7023 int utcDaliActorVisibilityChangeSignalSelf(void)
7025 TestApplication application;
7026 tet_infoline("Check that the visibility change signal is called when the visibility changes for the actor itself");
7028 Actor actor = Actor::New();
7030 VisibilityChangedFunctorData data;
7031 DevelActor::VisibilityChangedSignal(actor).Connect(&application, VisibilityChangedFunctor(data));
7033 actor.SetProperty(Actor::Property::VISIBLE, false);
7035 data.Check(true /* called */, actor, false /* not visible */, DevelActor::VisibilityChange::SELF, TEST_LOCATION);
7037 tet_infoline("Ensure functor is not called if we attempt to change the visibility to what it already is at");
7040 actor.SetProperty(Actor::Property::VISIBLE, false);
7041 data.Check(false /* not called */, TEST_LOCATION);
7043 tet_infoline("Change the visibility using properties, ensure called");
7046 actor.SetProperty(Actor::Property::VISIBLE, true);
7047 data.Check(true /* called */, actor, true /* visible */, DevelActor::VisibilityChange::SELF, TEST_LOCATION);
7049 tet_infoline("Set the visibility to current using properties, ensure not called");
7052 actor.SetProperty(Actor::Property::VISIBLE, true);
7053 data.Check(false /* not called */, TEST_LOCATION);
7058 int utcDaliActorVisibilityChangeSignalChildren(void)
7060 TestApplication application;
7061 tet_infoline("Check that the visibility change signal is called for the children when the visibility changes for the parent");
7063 Actor parent = Actor::New();
7064 Actor child = Actor::New();
7067 Actor grandChild = Actor::New();
7068 child.Add(grandChild);
7070 VisibilityChangedFunctorData parentData;
7071 VisibilityChangedFunctorData childData;
7072 VisibilityChangedFunctorData grandChildData;
7074 tet_infoline("Only connect the child and grandchild, ensure they are called and not the parent");
7075 DevelActor::VisibilityChangedSignal(child).Connect(&application, VisibilityChangedFunctor(childData));
7076 DevelActor::VisibilityChangedSignal(grandChild).Connect(&application, VisibilityChangedFunctor(grandChildData));
7078 parent.SetProperty(Actor::Property::VISIBLE, false);
7079 parentData.Check(false /* not called */, TEST_LOCATION);
7080 childData.Check(true /* called */, child, false /* not visible */, DevelActor::VisibilityChange::PARENT, TEST_LOCATION);
7081 grandChildData.Check(true /* called */, grandChild, false /* not visible */, DevelActor::VisibilityChange::PARENT, TEST_LOCATION);
7083 tet_infoline("Connect to the parent's signal as well and ensure all three are called");
7086 grandChildData.Reset();
7088 DevelActor::VisibilityChangedSignal(parent).Connect(&application, VisibilityChangedFunctor(parentData));
7090 parent.SetProperty(Actor::Property::VISIBLE, true);
7091 parentData.Check(true /* called */, parent, true /* visible */, DevelActor::VisibilityChange::SELF, TEST_LOCATION);
7092 childData.Check(true /* called */, child, true /* visible */, DevelActor::VisibilityChange::PARENT, TEST_LOCATION);
7093 grandChildData.Check(true /* called */, grandChild, true /* visible */, DevelActor::VisibilityChange::PARENT, TEST_LOCATION);
7095 tet_infoline("Ensure none of the functors are called if we attempt to change the visibility to what it already is at");
7098 grandChildData.Reset();
7100 parent.SetProperty(Actor::Property::VISIBLE, true);
7101 parentData.Check(false /* not called */, TEST_LOCATION);
7102 childData.Check(false /* not called */, TEST_LOCATION);
7103 grandChildData.Check(false /* not called */, TEST_LOCATION);
7108 int utcDaliActorVisibilityChangeSignalAfterAnimation(void)
7110 TestApplication application;
7111 tet_infoline("Check that the visibility change signal is emitted when the visibility changes when an animation starts");
7113 Actor actor = Actor::New();
7114 application.GetScene().Add(actor);
7116 application.SendNotification();
7117 application.Render();
7119 VisibilityChangedFunctorData data;
7120 DevelActor::VisibilityChangedSignal(actor).Connect(&application, VisibilityChangedFunctor(data));
7122 Animation animation = Animation::New(1.0f);
7123 animation.AnimateTo(Property(actor, Actor::Property::VISIBLE), false);
7125 data.Check(false, TEST_LOCATION);
7126 DALI_TEST_EQUALS(actor.GetProperty<bool>(Actor::Property::VISIBLE), true, TEST_LOCATION);
7127 DALI_TEST_EQUALS(actor.GetCurrentProperty<bool>(Actor::Property::VISIBLE), true, TEST_LOCATION);
7129 tet_infoline("Play the animation and check the property value");
7132 data.Check(true /* called */, actor, false /* not visible */, DevelActor::VisibilityChange::SELF, TEST_LOCATION);
7133 DALI_TEST_EQUALS(actor.GetProperty<bool>(Actor::Property::VISIBLE), false, TEST_LOCATION);
7135 tet_infoline("Animation not currently finished, so the current visibility should still be true");
7136 DALI_TEST_EQUALS(actor.GetCurrentProperty<bool>(Actor::Property::VISIBLE), true, TEST_LOCATION);
7138 application.SendNotification();
7139 application.Render(1100); // After the animation
7141 DALI_TEST_EQUALS(actor.GetCurrentProperty<bool>(Actor::Property::VISIBLE), false, TEST_LOCATION);
7146 int utcDaliActorVisibilityChangeSignalByName(void)
7148 TestApplication application;
7149 tet_infoline("Check that the visibility change signal is called when the visibility changes for the actor itself");
7151 Actor actor = Actor::New();
7153 bool signalCalled = false;
7154 actor.ConnectSignal(&application, "visibilityChanged", VisibilityChangedVoidFunctor(signalCalled));
7155 DALI_TEST_EQUALS(signalCalled, false, TEST_LOCATION);
7156 actor.SetProperty(Actor::Property::VISIBLE, false);
7157 DALI_TEST_EQUALS(signalCalled, true, TEST_LOCATION);
7159 tet_infoline("Ensure functor is not called if we attempt to change the visibility to what it already is at");
7160 signalCalled = false;
7161 actor.SetProperty(Actor::Property::VISIBLE, false);
7162 DALI_TEST_EQUALS(signalCalled, false, TEST_LOCATION);
7164 tet_infoline("Change the visibility using properties, ensure called");
7165 actor.SetProperty(Actor::Property::VISIBLE, true);
7166 DALI_TEST_EQUALS(signalCalled, true, TEST_LOCATION);
7168 tet_infoline("Set the visibility to current using properties, ensure not called");
7169 signalCalled = false;
7171 actor.SetProperty(Actor::Property::VISIBLE, true);
7172 DALI_TEST_EQUALS(signalCalled, false, TEST_LOCATION);
7177 static void LayoutDirectionChanged(Actor actor, LayoutDirection::Type type)
7179 gLayoutDirectionType = type;
7182 int UtcDaliActorLayoutDirectionProperty(void)
7184 TestApplication application;
7185 tet_infoline("Check layout direction property");
7187 Actor actor0 = Actor::New();
7188 DALI_TEST_EQUALS(actor0.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7189 application.GetScene().Add(actor0);
7191 application.SendNotification();
7192 application.Render();
7194 Actor actor1 = Actor::New();
7195 DALI_TEST_EQUALS(actor1.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7196 Actor actor2 = Actor::New();
7197 DALI_TEST_EQUALS(actor2.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7198 Actor actor3 = Actor::New();
7199 DALI_TEST_EQUALS(actor3.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7200 Actor actor4 = Actor::New();
7201 DALI_TEST_EQUALS(actor4.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7202 Actor actor5 = Actor::New();
7203 DALI_TEST_EQUALS(actor5.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7204 Actor actor6 = Actor::New();
7205 DALI_TEST_EQUALS(actor6.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7206 Actor actor7 = Actor::New();
7207 DALI_TEST_EQUALS(actor7.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7208 Actor actor8 = Actor::New();
7209 DALI_TEST_EQUALS(actor8.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7210 Actor actor9 = Actor::New();
7211 DALI_TEST_EQUALS(actor9.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7214 gLayoutDirectionType = LayoutDirection::LEFT_TO_RIGHT;
7215 actor2.LayoutDirectionChangedSignal().Connect(LayoutDirectionChanged);
7217 DALI_TEST_EQUALS(actor1.GetProperty<bool>(Actor::Property::INHERIT_LAYOUT_DIRECTION), true, TEST_LOCATION);
7218 actor1.SetProperty(Actor::Property::LAYOUT_DIRECTION, LayoutDirection::RIGHT_TO_LEFT);
7219 DALI_TEST_EQUALS(actor1.GetProperty<bool>(Actor::Property::INHERIT_LAYOUT_DIRECTION), false, TEST_LOCATION);
7221 DALI_TEST_EQUALS(actor1.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
7222 DALI_TEST_EQUALS(actor2.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
7223 DALI_TEST_EQUALS(gLayoutDirectionType, LayoutDirection::RIGHT_TO_LEFT, TEST_LOCATION);
7225 actor1.SetProperty(Actor::Property::INHERIT_LAYOUT_DIRECTION, true);
7227 DALI_TEST_EQUALS(actor1.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7228 DALI_TEST_EQUALS(actor2.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7230 application.GetScene().Add(actor3);
7237 actor3.SetProperty(Actor::Property::LAYOUT_DIRECTION, "RIGHT_TO_LEFT");
7238 actor5.SetProperty(Actor::Property::LAYOUT_DIRECTION, LayoutDirection::LEFT_TO_RIGHT);
7240 DALI_TEST_EQUALS(actor8.GetProperty<bool>(Actor::Property::INHERIT_LAYOUT_DIRECTION), true, TEST_LOCATION);
7241 actor8.SetProperty(Actor::Property::INHERIT_LAYOUT_DIRECTION, false);
7242 DALI_TEST_EQUALS(actor8.GetProperty<bool>(Actor::Property::INHERIT_LAYOUT_DIRECTION), false, TEST_LOCATION);
7244 actor7.SetProperty(Actor::Property::LAYOUT_DIRECTION, "RIGHT_TO_LEFT");
7246 DALI_TEST_EQUALS(actor3.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
7247 DALI_TEST_EQUALS(actor4.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
7248 DALI_TEST_EQUALS(actor5.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7249 DALI_TEST_EQUALS(actor6.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7250 DALI_TEST_EQUALS(actor7.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
7251 DALI_TEST_EQUALS(actor8.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7252 DALI_TEST_EQUALS(actor9.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7254 actor8.SetProperty(Actor::Property::LAYOUT_DIRECTION, "RIGHT_TO_LEFT");
7255 DALI_TEST_EQUALS(actor8.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
7256 DALI_TEST_EQUALS(actor9.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
7258 actor7.SetProperty(Actor::Property::LAYOUT_DIRECTION, LayoutDirection::LEFT_TO_RIGHT);
7259 DALI_TEST_EQUALS(actor7.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7260 DALI_TEST_EQUALS(actor8.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
7261 DALI_TEST_EQUALS(actor9.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
7263 actor8.SetProperty(Actor::Property::INHERIT_LAYOUT_DIRECTION, true);
7264 DALI_TEST_EQUALS(actor8.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7265 DALI_TEST_EQUALS(actor9.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7270 struct LayoutDirectionFunctor
7272 LayoutDirectionFunctor(bool& signalCalled)
7273 : mSignalCalled(signalCalled)
7277 LayoutDirectionFunctor(const LayoutDirectionFunctor& rhs)
7278 : mSignalCalled(rhs.mSignalCalled)
7284 mSignalCalled = true;
7287 bool& mSignalCalled;
7290 int UtcDaliActorLayoutDirectionSignal(void)
7292 TestApplication application;
7293 tet_infoline("Check changing layout direction property sends a signal");
7295 Actor actor = Actor::New();
7296 DALI_TEST_EQUALS(actor.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::LEFT_TO_RIGHT), TEST_LOCATION);
7297 application.GetScene().Add(actor);
7298 bool signalCalled = false;
7299 LayoutDirectionFunctor layoutDirectionFunctor(signalCalled);
7301 actor.ConnectSignal(&application, "layoutDirectionChanged", layoutDirectionFunctor);
7302 DALI_TEST_EQUALS(signalCalled, false, TEST_LOCATION);
7304 // Test that writing the same value doesn't send a signal
7305 actor.SetProperty(Actor::Property::LAYOUT_DIRECTION, LayoutDirection::LEFT_TO_RIGHT);
7306 DALI_TEST_EQUALS(signalCalled, false, TEST_LOCATION);
7308 // Test that writing a different value sends the signal
7309 signalCalled = false;
7310 actor.SetProperty(Actor::Property::LAYOUT_DIRECTION, LayoutDirection::RIGHT_TO_LEFT);
7311 DALI_TEST_EQUALS(signalCalled, true, TEST_LOCATION);
7313 signalCalled = false;
7314 actor.SetProperty(Actor::Property::LAYOUT_DIRECTION, LayoutDirection::RIGHT_TO_LEFT);
7315 DALI_TEST_EQUALS(signalCalled, false, TEST_LOCATION);
7320 struct ChildAddedSignalCheck
7322 ChildAddedSignalCheck(bool& signalReceived, Actor& childHandle)
7323 : mSignalReceived(signalReceived),
7324 mChildHandle(childHandle)
7328 void operator()(Actor childHandle)
7330 mSignalReceived = true;
7331 mChildHandle = childHandle;
7335 mSignalReceived = true;
7336 mChildHandle = Actor();
7339 bool& mSignalReceived;
7340 Actor& mChildHandle;
7343 int UtcDaliChildAddedSignalP1(void)
7345 TestApplication application;
7346 auto stage = application.GetScene();
7348 bool signalReceived = false;
7351 ChildAddedSignalCheck signal(signalReceived, childActor);
7352 DevelActor::ChildAddedSignal(stage.GetRootLayer()).Connect(&application, signal);
7353 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7355 auto actorA = Actor::New();
7357 DALI_TEST_EQUALS(signalReceived, true, TEST_LOCATION);
7358 DALI_TEST_EQUALS(childActor, actorA, TEST_LOCATION);
7359 signalReceived = false;
7361 auto actorB = Actor::New();
7363 DALI_TEST_EQUALS(signalReceived, true, TEST_LOCATION);
7364 DALI_TEST_EQUALS(childActor, actorB, TEST_LOCATION);
7369 int UtcDaliChildAddedSignalP2(void)
7371 TestApplication application;
7372 auto stage = application.GetScene();
7374 bool signalReceived = false;
7377 ChildAddedSignalCheck signal(signalReceived, childActor);
7378 tet_infoline("Connect to childAdded signal by name");
7380 stage.GetRootLayer().ConnectSignal(&application, "childAdded", signal);
7381 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7383 auto actorA = Actor::New();
7385 DALI_TEST_EQUALS(signalReceived, true, TEST_LOCATION);
7387 // Can't test which actor was added; signal signature is void() when connecting via name.
7388 signalReceived = false;
7390 auto actorB = Actor::New();
7392 DALI_TEST_EQUALS(signalReceived, true, TEST_LOCATION);
7397 int UtcDaliChildAddedSignalN(void)
7399 TestApplication application;
7400 auto stage = application.GetScene();
7402 bool signalReceived = false;
7405 ChildAddedSignalCheck signal(signalReceived, childActor);
7406 DevelActor::ChildAddedSignal(stage.GetRootLayer()).Connect(&application, signal);
7407 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7409 auto actorA = Actor::New();
7411 DALI_TEST_EQUALS(signalReceived, true, TEST_LOCATION);
7412 DALI_TEST_EQUALS(childActor, actorA, TEST_LOCATION);
7413 signalReceived = false;
7415 auto actorB = Actor::New();
7417 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7421 struct ChildRemovedSignalCheck
7423 ChildRemovedSignalCheck(bool& signalReceived, Actor& childHandle)
7424 : mSignalReceived(signalReceived),
7425 mChildHandle(childHandle)
7429 void operator()(Actor childHandle)
7431 mSignalReceived = true;
7432 mChildHandle = childHandle;
7437 mSignalReceived = true;
7440 bool& mSignalReceived;
7441 Actor& mChildHandle;
7444 int UtcDaliChildRemovedSignalP1(void)
7446 TestApplication application;
7447 auto stage = application.GetScene();
7449 bool signalReceived = false;
7452 ChildRemovedSignalCheck signal(signalReceived, childActor);
7453 DevelActor::ChildRemovedSignal(stage.GetRootLayer()).Connect(&application, signal);
7454 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7456 auto actorA = Actor::New();
7458 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7459 DALI_TEST_CHECK(!childActor);
7461 stage.Remove(actorA);
7462 DALI_TEST_EQUALS(childActor, actorA, TEST_LOCATION);
7463 DALI_TEST_EQUALS(signalReceived, true, TEST_LOCATION);
7465 signalReceived = false;
7466 auto actorB = Actor::New();
7468 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7470 stage.Remove(actorB);
7471 DALI_TEST_EQUALS(signalReceived, true, TEST_LOCATION);
7472 DALI_TEST_EQUALS(childActor, actorB, TEST_LOCATION);
7477 int UtcDaliChildRemovedSignalP2(void)
7479 TestApplication application;
7480 auto stage = application.GetScene();
7482 bool signalReceived = false;
7485 ChildAddedSignalCheck signal(signalReceived, childActor);
7486 tet_infoline("Connect to childRemoved signal by name");
7488 stage.GetRootLayer().ConnectSignal(&application, "childRemoved", signal);
7489 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7491 auto actorA = Actor::New();
7493 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7495 stage.Remove(actorA);
7496 DALI_TEST_EQUALS(signalReceived, true, TEST_LOCATION);
7498 signalReceived = false;
7499 auto actorB = Actor::New();
7501 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7503 stage.Remove(actorB);
7504 DALI_TEST_EQUALS(signalReceived, true, TEST_LOCATION);
7509 int UtcDaliChildRemovedSignalN(void)
7511 TestApplication application;
7512 auto stage = application.GetScene();
7514 bool signalReceived = false;
7517 ChildRemovedSignalCheck signal(signalReceived, childActor);
7518 DevelActor::ChildRemovedSignal(stage.GetRootLayer()).Connect(&application, signal);
7519 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7521 auto actorA = Actor::New();
7524 auto actorB = Actor::New();
7527 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7528 DALI_TEST_CHECK(!childActor);
7530 actorA.Remove(actorB);
7531 DALI_TEST_EQUALS(signalReceived, false, TEST_LOCATION);
7535 int UtcDaliChildMovedSignalP(void)
7537 TestApplication application;
7538 auto stage = application.GetScene();
7540 bool addedASignalReceived = false;
7541 bool removedASignalReceived = false;
7542 bool addedBSignalReceived = false;
7543 bool removedBSignalReceived = false;
7546 auto actorA = Actor::New();
7547 auto actorB = Actor::New();
7551 ChildAddedSignalCheck addedSignalA(addedASignalReceived, childActor);
7552 ChildRemovedSignalCheck removedSignalA(removedASignalReceived, childActor);
7553 ChildAddedSignalCheck addedSignalB(addedBSignalReceived, childActor);
7554 ChildRemovedSignalCheck removedSignalB(removedBSignalReceived, childActor);
7556 DevelActor::ChildAddedSignal(actorA).Connect(&application, addedSignalA);
7557 DevelActor::ChildRemovedSignal(actorA).Connect(&application, removedSignalA);
7558 DevelActor::ChildAddedSignal(actorB).Connect(&application, addedSignalB);
7559 DevelActor::ChildRemovedSignal(actorB).Connect(&application, removedSignalB);
7561 DALI_TEST_EQUALS(addedASignalReceived, false, TEST_LOCATION);
7562 DALI_TEST_EQUALS(removedASignalReceived, false, TEST_LOCATION);
7563 DALI_TEST_EQUALS(addedBSignalReceived, false, TEST_LOCATION);
7564 DALI_TEST_EQUALS(removedBSignalReceived, false, TEST_LOCATION);
7566 // Create a child of A
7568 auto child = Actor::New();
7571 DALI_TEST_EQUALS(addedASignalReceived, true, TEST_LOCATION);
7572 DALI_TEST_EQUALS(removedASignalReceived, false, TEST_LOCATION);
7573 DALI_TEST_EQUALS(addedBSignalReceived, false, TEST_LOCATION);
7574 DALI_TEST_EQUALS(removedBSignalReceived, false, TEST_LOCATION);
7575 DALI_TEST_EQUALS(childActor, child, TEST_LOCATION);
7578 addedASignalReceived = false;
7579 addedBSignalReceived = false;
7580 removedASignalReceived = false;
7581 removedBSignalReceived = false;
7583 actorB.Add(child); // Expect this child to be re-parented
7584 DALI_TEST_EQUALS(addedASignalReceived, false, TEST_LOCATION);
7585 DALI_TEST_EQUALS(removedASignalReceived, true, TEST_LOCATION);
7586 DALI_TEST_EQUALS(addedBSignalReceived, true, TEST_LOCATION);
7587 DALI_TEST_EQUALS(removedBSignalReceived, false, TEST_LOCATION);
7589 // Move child back to A:
7590 addedASignalReceived = false;
7591 addedBSignalReceived = false;
7592 removedASignalReceived = false;
7593 removedBSignalReceived = false;
7595 actorA.Add(child); // Expect this child to be re-parented
7596 DALI_TEST_EQUALS(addedASignalReceived, true, TEST_LOCATION);
7597 DALI_TEST_EQUALS(removedASignalReceived, false, TEST_LOCATION);
7598 DALI_TEST_EQUALS(addedBSignalReceived, false, TEST_LOCATION);
7599 DALI_TEST_EQUALS(removedBSignalReceived, true, TEST_LOCATION);
7604 int utcDaliActorCulled(void)
7606 TestApplication application;
7607 auto stage = application.GetScene();
7609 tet_infoline("Check that the actor is culled if the actor is out of the screen");
7611 Actor actor = Actor::New();
7612 actor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
7614 Geometry geometry = CreateQuadGeometry();
7615 Shader shader = CreateShader();
7616 Renderer renderer = Renderer::New(geometry, shader);
7617 actor.AddRenderer(renderer);
7621 application.SendNotification();
7622 application.Render(0);
7624 DALI_TEST_EQUALS(actor.GetProperty<bool>(Actor::Property::CULLED), false, TEST_LOCATION);
7626 PropertyNotification notification = actor.AddPropertyNotification(Actor::Property::CULLED, LessThanCondition(0.5f));
7627 notification.SetNotifyMode(PropertyNotification::NOTIFY_ON_CHANGED);
7629 // Connect NotifySignal
7630 bool propertyNotificationSignal(false);
7631 PropertyNotification source;
7632 CulledPropertyNotificationFunctor f(propertyNotificationSignal, source);
7633 notification.NotifySignal().Connect(&application, f);
7635 actor.SetProperty(Actor::Property::POSITION, Vector2(1000.0f, 1000.0f));
7637 application.SendNotification();
7638 application.Render();
7640 application.SendNotification();
7642 DALI_TEST_EQUALS(actor.GetProperty<bool>(Actor::Property::CULLED), true, TEST_LOCATION);
7644 DALI_TEST_EQUALS(propertyNotificationSignal, true, TEST_LOCATION);
7645 DALI_TEST_EQUALS(source.GetTargetProperty(), static_cast<int>(Actor::Property::CULLED), TEST_LOCATION);
7646 DALI_TEST_EQUALS(source.GetTarget().GetProperty<bool>(source.GetTargetProperty()), true, TEST_LOCATION);
7651 int utcDaliEnsureRenderWhenRemovingLastRenderableActor(void)
7653 TestApplication application;
7654 auto stage = application.GetScene();
7656 tet_infoline("Ensure we clear the screen when the last actor is removed");
7658 Actor actor = CreateRenderableActor();
7659 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
7662 application.SendNotification();
7663 application.Render();
7665 auto& glAbstraction = application.GetGlAbstraction();
7666 const auto clearCountBefore = glAbstraction.GetClearCountCalled();
7670 application.SendNotification();
7671 application.Render();
7673 DALI_TEST_EQUALS(glAbstraction.GetClearCountCalled(), clearCountBefore + 1, TEST_LOCATION);
7678 int utcDaliEnsureRenderWhenMakingLastActorInvisible(void)
7680 TestApplication application;
7681 auto stage = application.GetScene();
7683 tet_infoline("Ensure we clear the screen when the last actor is made invisible");
7685 Actor actor = CreateRenderableActor();
7686 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
7689 application.SendNotification();
7690 application.Render();
7692 auto& glAbstraction = application.GetGlAbstraction();
7693 const auto clearCountBefore = glAbstraction.GetClearCountCalled();
7695 actor.SetProperty(Actor::Property::VISIBLE, false);
7697 application.SendNotification();
7698 application.Render();
7700 DALI_TEST_EQUALS(glAbstraction.GetClearCountCalled(), clearCountBefore + 1, TEST_LOCATION);
7705 int utcDaliActorGetSizeAfterAnimation(void)
7707 TestApplication application;
7708 tet_infoline("Check the actor size before / after an animation is finished");
7710 Vector3 actorSize(100.0f, 100.0f, 0.0f);
7712 Actor actor = Actor::New();
7713 actor.SetProperty(Actor::Property::SIZE, actorSize);
7714 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
7715 application.GetScene().Add(actor);
7717 // Size should be updated without rendering.
7718 Vector3 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7719 DALI_TEST_EQUALS(size, actorSize, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7721 application.SendNotification();
7722 application.Render();
7724 // Size and current size should be updated.
7725 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7726 DALI_TEST_EQUALS(size, actorSize, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7727 DALI_TEST_EQUALS(actorSize.width, actor.GetProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7728 DALI_TEST_EQUALS(actorSize.height, actor.GetProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7729 DALI_TEST_EQUALS(actorSize.depth, actor.GetProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7731 Vector3 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
7732 DALI_TEST_EQUALS(currentSize, actorSize, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7733 DALI_TEST_EQUALS(actorSize.width, actor.GetCurrentProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7734 DALI_TEST_EQUALS(actorSize.height, actor.GetCurrentProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7735 DALI_TEST_EQUALS(actorSize.depth, actor.GetCurrentProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7738 actorSize = Vector3(200.0f, 200.0f, 0.0f);
7739 actor.SetProperty(Actor::Property::SIZE, actorSize);
7741 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7742 DALI_TEST_EQUALS(size, actorSize, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7744 Vector3 targetValue(10.0f, 20.0f, 0.0f);
7746 Animation animation = Animation::New(1.0f);
7747 animation.AnimateTo(Property(actor, Actor::Property::SIZE), targetValue);
7750 // Size should be updated without rendering.
7751 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7752 DALI_TEST_EQUALS(size, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7754 application.SendNotification();
7755 application.Render(1100); // After the animation
7757 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7758 DALI_TEST_EQUALS(size, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7759 DALI_TEST_EQUALS(targetValue.width, actor.GetProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7760 DALI_TEST_EQUALS(targetValue.height, actor.GetProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7761 DALI_TEST_EQUALS(targetValue.depth, actor.GetProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7763 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
7764 DALI_TEST_EQUALS(currentSize, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7765 DALI_TEST_EQUALS(targetValue.width, actor.GetCurrentProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7766 DALI_TEST_EQUALS(targetValue.height, actor.GetCurrentProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7767 DALI_TEST_EQUALS(targetValue.depth, actor.GetCurrentProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7769 targetValue.width = 50.0f;
7772 animation.AnimateTo(Property(actor, Actor::Property::SIZE_WIDTH), targetValue.width);
7775 application.SendNotification();
7776 application.Render(1100); // After the animation
7778 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7779 DALI_TEST_EQUALS(size, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7780 DALI_TEST_EQUALS(targetValue.width, actor.GetProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7781 DALI_TEST_EQUALS(targetValue.height, actor.GetProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7782 DALI_TEST_EQUALS(targetValue.depth, actor.GetProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7784 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
7785 DALI_TEST_EQUALS(currentSize, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7786 DALI_TEST_EQUALS(targetValue.width, actor.GetCurrentProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7787 DALI_TEST_EQUALS(targetValue.height, actor.GetCurrentProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7788 DALI_TEST_EQUALS(targetValue.depth, actor.GetCurrentProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7790 targetValue.height = 70.0f;
7793 animation.AnimateTo(Property(actor, Actor::Property::SIZE_HEIGHT), targetValue.height);
7796 application.SendNotification();
7797 application.Render(1100); // After the animation
7799 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7800 DALI_TEST_EQUALS(size, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7801 DALI_TEST_EQUALS(targetValue.width, actor.GetProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7802 DALI_TEST_EQUALS(targetValue.height, actor.GetProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7803 DALI_TEST_EQUALS(targetValue.depth, actor.GetProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7805 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
7806 DALI_TEST_EQUALS(currentSize, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7807 DALI_TEST_EQUALS(targetValue.width, actor.GetCurrentProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7808 DALI_TEST_EQUALS(targetValue.height, actor.GetCurrentProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7809 DALI_TEST_EQUALS(targetValue.depth, actor.GetCurrentProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7811 Vector3 offset(10.0f, 20.0f, 0.0f);
7814 animation.AnimateBy(Property(actor, Actor::Property::SIZE), offset);
7817 application.SendNotification();
7818 application.Render(1100); // After the animation
7820 targetValue += offset;
7822 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7823 DALI_TEST_EQUALS(size, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7824 DALI_TEST_EQUALS(targetValue.width, actor.GetProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7825 DALI_TEST_EQUALS(targetValue.height, actor.GetProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7826 DALI_TEST_EQUALS(targetValue.depth, actor.GetProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7828 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
7829 DALI_TEST_EQUALS(currentSize, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7830 DALI_TEST_EQUALS(targetValue.width, actor.GetCurrentProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7831 DALI_TEST_EQUALS(targetValue.height, actor.GetCurrentProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7832 DALI_TEST_EQUALS(targetValue.depth, actor.GetCurrentProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7834 offset.width = 20.0f;
7837 animation.AnimateBy(Property(actor, Actor::Property::SIZE_WIDTH), offset.width);
7840 application.SendNotification();
7841 application.Render(1100); // After the animation
7843 targetValue.width += offset.width;
7845 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7846 DALI_TEST_EQUALS(size, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7847 DALI_TEST_EQUALS(targetValue.width, actor.GetProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7848 DALI_TEST_EQUALS(targetValue.height, actor.GetProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7849 DALI_TEST_EQUALS(targetValue.depth, actor.GetProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7851 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
7852 DALI_TEST_EQUALS(currentSize, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7853 DALI_TEST_EQUALS(targetValue.width, actor.GetCurrentProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7854 DALI_TEST_EQUALS(targetValue.height, actor.GetCurrentProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7855 DALI_TEST_EQUALS(targetValue.depth, actor.GetCurrentProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7857 offset.height = 10.0f;
7860 animation.AnimateBy(Property(actor, Actor::Property::SIZE_HEIGHT), offset.height);
7863 application.SendNotification();
7864 application.Render(1100); // After the animation
7866 targetValue.height += offset.height;
7868 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7869 DALI_TEST_EQUALS(size, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7870 DALI_TEST_EQUALS(targetValue.width, actor.GetProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7871 DALI_TEST_EQUALS(targetValue.height, actor.GetProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7872 DALI_TEST_EQUALS(targetValue.depth, actor.GetProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7874 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
7875 DALI_TEST_EQUALS(currentSize, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7876 DALI_TEST_EQUALS(targetValue.width, actor.GetCurrentProperty<float>(Actor::Property::SIZE_WIDTH), TEST_LOCATION);
7877 DALI_TEST_EQUALS(targetValue.height, actor.GetCurrentProperty<float>(Actor::Property::SIZE_HEIGHT), TEST_LOCATION);
7878 DALI_TEST_EQUALS(targetValue.depth, actor.GetCurrentProperty<float>(Actor::Property::SIZE_DEPTH), TEST_LOCATION);
7881 actorSize = Vector3(300.0f, 300.0f, 0.0f);
7883 actor.SetProperty(Actor::Property::SIZE, actorSize);
7885 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7886 DALI_TEST_EQUALS(size, actorSize, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7888 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
7889 DALI_TEST_EQUALS(currentSize, targetValue, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7891 application.SendNotification();
7892 application.Render();
7894 size = actor.GetProperty(Actor::Property::SIZE).Get<Vector3>();
7895 DALI_TEST_EQUALS(size, actorSize, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7897 currentSize = actor.GetCurrentProperty(Actor::Property::SIZE).Get<Vector3>();
7898 DALI_TEST_EQUALS(currentSize, actorSize, Math::MACHINE_EPSILON_0, TEST_LOCATION);
7903 int utcDaliActorPartialUpdate(void)
7905 TestApplication application(
7906 TestApplication::DEFAULT_SURFACE_WIDTH,
7907 TestApplication::DEFAULT_SURFACE_HEIGHT,
7908 TestApplication::DEFAULT_HORIZONTAL_DPI,
7909 TestApplication::DEFAULT_VERTICAL_DPI,
7913 tet_infoline("Check the damaged area");
7915 const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams());
7917 std::vector<Rect<int>> damagedRects;
7918 Rect<int> clippingRect;
7919 application.SendNotification();
7920 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
7922 // First render pass, nothing to render, adaptor would just do swap buffer.
7923 DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION);
7924 application.RenderWithPartialUpdate(damagedRects, clippingRect);
7926 Actor actor = CreateRenderableActor();
7927 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
7928 actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f));
7929 actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
7930 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
7931 application.GetScene().Add(actor);
7933 application.SendNotification();
7935 // 1. Actor added, damaged rect is added size of actor
7936 damagedRects.clear();
7937 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
7938 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
7941 clippingRect = Rect<int>(16, 768, 32, 32); // in screen coordinates, includes 3 last frames updates
7942 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
7943 application.RenderWithPartialUpdate(damagedRects, clippingRect);
7944 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
7945 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
7946 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
7947 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
7950 actor.SetProperty(Actor::Property::SIZE, Vector3(32.0f, 32.0f, 0));
7951 application.SendNotification();
7953 damagedRects.clear();
7954 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
7955 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
7958 clippingRect = Rect<int>(16, 752, 48, 48); // in screen coordinates, includes 3 last frames updates
7959 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
7960 application.RenderWithPartialUpdate(damagedRects, clippingRect);
7961 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
7962 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
7963 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
7964 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
7966 // 3. Set new position
7967 actor.SetProperty(Actor::Property::POSITION, Vector3(32.0f, 32.0f, 0));
7968 application.SendNotification();
7970 damagedRects.clear();
7971 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
7972 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
7975 clippingRect = Rect<int>(16, 736, 64, 64); // in screen coordinates, includes 3 last frames updates
7976 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
7977 application.RenderWithPartialUpdate(damagedRects, clippingRect);
7978 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
7979 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
7980 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
7981 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
7983 application.GetScene().Remove(actor);
7984 application.SendNotification();
7986 // Actor removed, last 3 dirty rects are reported. Adaptor would merge them together.
7987 damagedRects.clear();
7988 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
7989 DALI_TEST_EQUALS(damagedRects.size(), 3, TEST_LOCATION);
7991 clippingRect = damagedRects[0];
7992 clippingRect.Merge(damagedRects[1]);
7993 clippingRect.Merge(damagedRects[2]);
7995 DALI_TEST_EQUALS(clippingRect.IsEmpty(), false, TEST_LOCATION);
7996 DALI_TEST_EQUALS(clippingRect.IsValid(), true, TEST_LOCATION);
7997 DALI_TEST_EQUALS<Rect<int>>(clippingRect, Rect<int>(16, 736, 64, 64), TEST_LOCATION);
7999 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8000 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8001 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8002 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8003 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8008 int utcDaliActorPartialUpdateSetColor(void)
8010 TestApplication application(
8011 TestApplication::DEFAULT_SURFACE_WIDTH,
8012 TestApplication::DEFAULT_SURFACE_HEIGHT,
8013 TestApplication::DEFAULT_HORIZONTAL_DPI,
8014 TestApplication::DEFAULT_VERTICAL_DPI,
8018 tet_infoline("Check uniform update");
8020 const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams());
8022 std::vector<Rect<int>> damagedRects;
8023 Rect<int> clippingRect;
8024 application.SendNotification();
8025 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8027 // First render pass, nothing to render, adaptor would just do swap buffer.
8028 DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION);
8029 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8031 Actor actor = CreateRenderableActor();
8032 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
8033 actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f));
8034 actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
8035 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
8036 application.GetScene().Add(actor);
8038 application.SendNotification();
8040 // 1. Actor added, damaged rect is added size of actor
8041 damagedRects.clear();
8042 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8043 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
8046 clippingRect = Rect<int>(16, 768, 32, 32); // in screen coordinates, includes 3 last frames updates
8047 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8048 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8049 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8050 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8051 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8052 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8054 damagedRects.clear();
8055 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8057 damagedRects.clear();
8058 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8061 actor.SetProperty(Actor::Property::COLOR, Vector3(1.0f, 0.0f, 0.0f));
8062 application.SendNotification();
8064 damagedRects.clear();
8065 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8066 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
8069 clippingRect = Rect<int>(16, 768, 32, 32); // in screen coordinates, includes 3 last frames updates
8070 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8071 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8072 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8073 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8074 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8075 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8080 const std::string SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME("uLightCameraProjectionMatrix");
8081 const std::string SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME("uLightCameraViewMatrix");
8082 const std::string SHADER_SHADOW_COLOR_PROPERTY_NAME("uShadowColor");
8083 const char* const RENDER_SHADOW_VERTEX_SOURCE =
8084 " uniform mediump mat4 uLightCameraProjectionMatrix;\n"
8085 " uniform mediump mat4 uLightCameraViewMatrix;\n"
8089 " gl_Position = uProjection * uModelView * vec4(aPosition,1.0);\n"
8090 " vec4 textureCoords = uLightCameraProjectionMatrix * uLightCameraViewMatrix * uModelMatrix * vec4(aPosition,1.0);\n"
8091 " vTexCoord = 0.5 + 0.5 * (textureCoords.xy/textureCoords.w);\n"
8094 const char* const RENDER_SHADOW_FRAGMENT_SOURCE =
8095 "uniform lowp vec4 uShadowColor;\n"
8098 " lowp float alpha;\n"
8099 " alpha = texture2D(sTexture, vec2(vTexCoord.x, vTexCoord.y)).a;\n"
8100 " gl_FragColor = vec4(uShadowColor.rgb, uShadowColor.a * alpha);\n"
8103 int utcDaliActorPartialUpdateSetProperty(void)
8105 TestApplication application(
8106 TestApplication::DEFAULT_SURFACE_WIDTH,
8107 TestApplication::DEFAULT_SURFACE_HEIGHT,
8108 TestApplication::DEFAULT_HORIZONTAL_DPI,
8109 TestApplication::DEFAULT_VERTICAL_DPI,
8113 tet_infoline("Set/Update property with partial update");
8115 const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams());
8117 std::vector<Rect<int>> damagedRects;
8118 Rect<int> clippingRect;
8119 application.SendNotification();
8120 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8122 // First render pass, nothing to render, adaptor would just do swap buffer.
8123 DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION);
8124 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8126 Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 4u, 4u);
8127 Actor actor = CreateRenderableActor(image, RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE);
8128 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
8129 actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f));
8130 actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
8131 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
8132 application.GetScene().Add(actor);
8134 actor.RegisterProperty(SHADER_SHADOW_COLOR_PROPERTY_NAME, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
8136 damagedRects.clear();
8137 application.SendNotification();
8138 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8139 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
8142 clippingRect = Rect<int>(16, 768, 32, 32); // in screen coordinates, includes 3 last frames updates
8143 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8144 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8145 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8146 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8147 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8148 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8150 Property::Index shadowColorPropertyIndex = actor.GetPropertyIndex(SHADER_SHADOW_COLOR_PROPERTY_NAME);
8151 actor.SetProperty(shadowColorPropertyIndex, Vector4(1.0f, 1.0f, 0.0f, 1.0f));
8153 damagedRects.clear();
8154 application.SendNotification();
8155 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8156 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
8158 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8159 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8160 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8161 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8162 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8163 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8165 // Should be no damage rects, nothing changed
8166 damagedRects.clear();
8167 application.SendNotification();
8168 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8169 DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION);
8171 // Should be 1 damage rect due to change in size
8172 damagedRects.clear();
8173 actor.SetProperty(Actor::Property::SIZE, Vector3(26.0f, 26.0f, 0.0f));
8174 application.SendNotification();
8175 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8176 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
8178 clippingRect = Rect<int>(16, 752, 32, 48); // new clipping rect size increased due to change in actor size
8179 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8180 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8181 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8182 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8183 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8184 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8186 damagedRects.clear();
8187 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8188 DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION);
8193 int utcDaliActorPartialUpdateTwoActors(void)
8195 TestApplication application(
8196 TestApplication::DEFAULT_SURFACE_WIDTH,
8197 TestApplication::DEFAULT_SURFACE_HEIGHT,
8198 TestApplication::DEFAULT_HORIZONTAL_DPI,
8199 TestApplication::DEFAULT_VERTICAL_DPI,
8203 tet_infoline("Check the damaged rects with partial update and two actors");
8205 const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams());
8207 Actor actor = CreateRenderableActor();
8208 actor.SetProperty(Actor::Property::POSITION, Vector3(100.0f, 100.0f, 0.0f));
8209 actor.SetProperty(Actor::Property::SIZE, Vector3(50.0f, 50.0f, 0.0f));
8210 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
8211 application.GetScene().Add(actor);
8213 Actor actor2 = CreateRenderableActor();
8214 actor2.SetProperty(Actor::Property::POSITION, Vector3(150.0f, 150.0f, 0.0f));
8215 actor2.SetProperty(Actor::Property::SIZE, Vector3(100.0f, 100.0f, 0.0f));
8216 actor2.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
8217 application.GetScene().Add(actor2);
8219 application.SendNotification();
8220 std::vector<Rect<int>> damagedRects;
8221 application.PreRenderWithPartialUpdate(TestApplication::DEFAULT_RENDER_INTERVAL, nullptr, damagedRects);
8223 DALI_TEST_EQUALS(damagedRects.size(), 2, TEST_LOCATION);
8224 DALI_TEST_EQUALS<Rect<int>>(Rect<int>(64, 672, 64, 64), damagedRects[0], TEST_LOCATION);
8225 DALI_TEST_EQUALS<Rect<int>>(Rect<int>(96, 592, 112, 112), damagedRects[1], TEST_LOCATION);
8227 // in screen coordinates, adaptor would calculate it using previous frames information
8228 Rect<int> clippingRect = Rect<int>(64, 592, 144, 192);
8229 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8231 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8232 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8233 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8234 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8239 int utcDaliActorPartialUpdateActorsWithSizeHint(void)
8241 TestApplication application(
8242 TestApplication::DEFAULT_SURFACE_WIDTH,
8243 TestApplication::DEFAULT_SURFACE_HEIGHT,
8244 TestApplication::DEFAULT_HORIZONTAL_DPI,
8245 TestApplication::DEFAULT_VERTICAL_DPI,
8249 tet_infoline("Check the damaged rect with partial update and actor size hint");
8251 const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams());
8253 Actor actor = CreateRenderableActor();
8254 actor.SetProperty(Actor::Property::POSITION, Vector3(64.0f, 64.0f, 0.0f));
8255 actor.SetProperty(Actor::Property::SIZE, Vector3(32.0f, 32.0f, 0.0f));
8256 actor.SetProperty(DevelActor::Property::UPDATE_SIZE_HINT, Vector3(64.0f, 64.0f, 0.0f));
8257 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
8258 application.GetScene().Add(actor);
8260 application.SendNotification();
8261 std::vector<Rect<int>> damagedRects;
8262 application.PreRenderWithPartialUpdate(TestApplication::DEFAULT_RENDER_INTERVAL, nullptr, damagedRects);
8264 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
8266 Rect<int> clippingRect = Rect<int>(32, 704, 80, 80);
8267 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8269 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8271 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8272 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8273 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8274 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8279 int utcDaliActorPartialUpdateAnimation(void)
8281 TestApplication application(
8282 TestApplication::DEFAULT_SURFACE_WIDTH,
8283 TestApplication::DEFAULT_SURFACE_HEIGHT,
8284 TestApplication::DEFAULT_HORIZONTAL_DPI,
8285 TestApplication::DEFAULT_VERTICAL_DPI,
8289 tet_infoline("Check the damaged area with partial update and animation");
8291 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
8292 drawTrace.Enable(true);
8295 Actor actor1 = CreateRenderableActor();
8296 actor1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
8297 actor1.SetProperty(Actor::Property::SIZE, Vector3(80.0f, 80.0f, 0.0f));
8298 application.GetScene().Add(actor1);
8300 Actor actor2 = CreateRenderableActor();
8301 actor2.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
8302 actor2.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
8303 application.GetScene().Add(actor2);
8305 std::vector<Rect<int>> damagedRects;
8306 Rect<int> clippingRect;
8307 Rect<int> expectedRect1, expectedRect2;
8309 application.SendNotification();
8310 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8312 DALI_TEST_EQUALS(damagedRects.size(), 2, TEST_LOCATION);
8315 expectedRect1 = Rect<int>(0, 720, 96, 96); // in screen coordinates, includes 3 last frames updates
8316 expectedRect2 = Rect<int>(0, 784, 32, 32); // in screen coordinates, includes 3 last frames updates
8317 DALI_TEST_EQUALS<Rect<int>>(expectedRect1, damagedRects[0], TEST_LOCATION);
8318 DALI_TEST_EQUALS<Rect<int>>(expectedRect2, damagedRects[1], TEST_LOCATION);
8320 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8322 damagedRects.clear();
8323 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8324 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8326 // Make an animation
8327 Animation animation = Animation::New(1.0f);
8328 animation.AnimateTo(Property(actor2, Actor::Property::POSITION_X), 160.0f, TimePeriod(0.5f, 0.5f));
8331 application.SendNotification();
8333 damagedRects.clear();
8334 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8335 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8338 damagedRects.clear();
8340 // In animation deley time
8341 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8342 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8345 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION);
8348 damagedRects.clear();
8350 // Also in animation deley time
8351 application.PreRenderWithPartialUpdate(100, nullptr, damagedRects);
8352 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8355 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION);
8357 // Unparent 2 actors and make a new actor
8361 Actor actor3 = CreateRenderableActor();
8362 actor3.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
8363 actor3.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
8364 application.GetScene().Add(actor3);
8366 application.SendNotification();
8368 // Started animation
8369 damagedRects.clear();
8370 application.PreRenderWithPartialUpdate(500, nullptr, damagedRects);
8371 DALI_TEST_EQUALS(damagedRects.size(), 5, TEST_LOCATION);
8373 // The first dirty rect is actor3's.
8374 // We don't know the exact dirty rect of actor2
8375 DALI_TEST_EQUALS<Rect<int>>(expectedRect2, damagedRects[0], TEST_LOCATION);
8376 DALI_TEST_EQUALS<Rect<int>>(expectedRect1, damagedRects[1], TEST_LOCATION);
8378 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8380 // Finished animation, but the actior was already unparented
8381 damagedRects.clear();
8382 application.PreRenderWithPartialUpdate(500, nullptr, damagedRects);
8384 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
8385 DALI_TEST_EQUALS<Rect<int>>(expectedRect2, damagedRects[0], TEST_LOCATION);
8387 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8392 int utcDaliActorPartialUpdateChangeVisibility(void)
8394 TestApplication application(
8395 TestApplication::DEFAULT_SURFACE_WIDTH,
8396 TestApplication::DEFAULT_SURFACE_HEIGHT,
8397 TestApplication::DEFAULT_HORIZONTAL_DPI,
8398 TestApplication::DEFAULT_VERTICAL_DPI,
8402 tet_infoline("Check the damaged rect with partial update and visibility change");
8404 const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams());
8406 Actor actor = CreateRenderableActor();
8407 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
8408 actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f));
8409 actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
8410 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
8411 application.GetScene().Add(actor);
8413 application.SendNotification();
8415 std::vector<Rect<int>> damagedRects;
8416 Rect<int> clippingRect;
8418 // 1. Actor added, damaged rect is added size of actor
8419 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8420 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
8423 clippingRect = Rect<int>(16, 768, 32, 32); // in screen coordinates, includes 3 last frames updates
8424 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8425 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8426 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8427 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8428 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8429 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8431 damagedRects.clear();
8432 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8433 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8435 damagedRects.clear();
8436 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8437 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8439 // Ensure the damaged rect is empty
8440 DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION);
8442 // 2. Make the Actor invisible
8443 actor.SetProperty(Actor::Property::VISIBLE, false);
8444 application.SendNotification();
8446 damagedRects.clear();
8447 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8448 DALI_TEST_CHECK(damagedRects.size() > 0);
8449 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8451 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8452 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8453 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8454 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8455 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8457 // 3. Make the Actor visible again
8458 actor.SetProperty(Actor::Property::VISIBLE, true);
8459 application.SendNotification();
8461 damagedRects.clear();
8462 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8463 DALI_TEST_CHECK(damagedRects.size() > 0);
8464 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8466 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8467 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8468 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8469 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8470 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8475 int utcDaliActorPartialUpdateOnOffScene(void)
8477 TestApplication application(
8478 TestApplication::DEFAULT_SURFACE_WIDTH,
8479 TestApplication::DEFAULT_SURFACE_HEIGHT,
8480 TestApplication::DEFAULT_HORIZONTAL_DPI,
8481 TestApplication::DEFAULT_VERTICAL_DPI,
8485 tet_infoline("Check the damaged rect with partial update and on/off scene");
8487 const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams());
8489 Actor actor = CreateRenderableActor();
8490 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
8491 actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f));
8492 actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
8493 actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
8494 application.GetScene().Add(actor);
8496 application.SendNotification();
8498 std::vector<Rect<int>> damagedRects;
8499 Rect<int> clippingRect;
8501 // 1. Actor added, damaged rect is added size of actor
8502 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8503 DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION);
8506 clippingRect = Rect<int>(16, 768, 32, 32); // in screen coordinates, includes 3 last frames updates
8507 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8508 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8509 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8510 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8511 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8512 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8514 damagedRects.clear();
8515 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8516 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8518 damagedRects.clear();
8519 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8520 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8522 // Ensure the damaged rect is empty
8523 DALI_TEST_EQUALS(damagedRects.size(), 0, TEST_LOCATION);
8525 // 2. Remove the Actor from the Scene
8527 application.SendNotification();
8529 damagedRects.clear();
8530 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8531 DALI_TEST_CHECK(damagedRects.size() > 0);
8532 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8534 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8535 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8536 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8537 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8538 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8540 // 3. Add the Actor to the Scene again
8541 application.GetScene().Add(actor);
8542 application.SendNotification();
8544 damagedRects.clear();
8545 application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects);
8546 DALI_TEST_CHECK(damagedRects.size() > 0);
8547 DALI_TEST_EQUALS<Rect<int>>(clippingRect, damagedRects[0], TEST_LOCATION);
8549 application.RenderWithPartialUpdate(damagedRects, clippingRect);
8550 DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION);
8551 DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION);
8552 DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION);
8553 DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION);
8558 int UtcDaliActorCaptureAllTouchAfterStartPropertyP(void)
8560 TestApplication application;
8562 Actor actor = Actor::New();
8563 DALI_TEST_EQUALS(actor.GetProperty(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START).Get<bool>(), false, TEST_LOCATION);
8564 actor.SetProperty(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START, true);
8565 DALI_TEST_EQUALS(actor.GetProperty(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START).Get<bool>(), true, TEST_LOCATION);
8566 DALI_TEST_EQUALS(actor.GetPropertyType(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START), Property::BOOLEAN, TEST_LOCATION);
8567 DALI_TEST_EQUALS(actor.IsPropertyWritable(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START), true, TEST_LOCATION);
8568 DALI_TEST_EQUALS(actor.IsPropertyAnimatable(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START), false, TEST_LOCATION);
8569 DALI_TEST_EQUALS(actor.IsPropertyAConstraintInput(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START), false, TEST_LOCATION);
8570 DALI_TEST_EQUALS(actor.GetPropertyName(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START), "captureAllTouchAfterStart", TEST_LOCATION);
8574 int UtcDaliActorCaptureAllTouchAfterStartPropertyN(void)
8576 TestApplication application;
8578 Actor actor = Actor::New();
8580 // Make sure setting invalid types does not cause a crash
8583 actor.SetProperty(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START, 1.0f);
8584 actor.SetProperty(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START, Vector2::ONE);
8585 actor.SetProperty(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START, Vector3::ONE);
8586 actor.SetProperty(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START, Vector4::ONE);
8587 actor.SetProperty(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START, Property::Map());
8588 actor.SetProperty(DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START, Property::Array());
8589 tet_result(TET_PASS);
8593 tet_result(TET_FAIL);
8598 int UtcDaliActorTouchAreaPropertyP(void)
8600 TestApplication application;
8602 Actor actor = Actor::New();
8603 Vector2 touchArea = actor.GetProperty(DevelActor::Property::TOUCH_AREA).Get<Vector2>();
8604 DALI_TEST_EQUALS(touchArea, Vector2::ZERO, TEST_LOCATION);
8605 actor.SetProperty(DevelActor::Property::TOUCH_AREA, Vector2(10.f, 10.f));
8606 touchArea = actor.GetProperty(DevelActor::Property::TOUCH_AREA).Get<Vector2>();
8607 DALI_TEST_EQUALS(touchArea, Vector2(10.f, 10.f), TEST_LOCATION);
8611 int UtcDaliActorTouchAreaPropertyN(void)
8613 TestApplication application;
8615 Actor actor = Actor::New();
8617 // Make sure setting invalid types does not cause a crash
8620 actor.SetProperty(DevelActor::Property::TOUCH_AREA, 1.0f);
8621 actor.SetProperty(DevelActor::Property::TOUCH_AREA, Vector2::ONE);
8622 actor.SetProperty(DevelActor::Property::TOUCH_AREA, Vector3::ONE);
8623 actor.SetProperty(DevelActor::Property::TOUCH_AREA, Vector4::ONE);
8624 actor.SetProperty(DevelActor::Property::TOUCH_AREA, Property::Map());
8625 actor.SetProperty(DevelActor::Property::TOUCH_AREA, Property::Array());
8626 tet_result(TET_PASS);
8630 tet_result(TET_FAIL);
8635 int UtcDaliActorLowerBelowNegative(void)
8637 TestApplication application;
8638 Dali::Actor instance;
8642 instance.LowerBelow(arg1);
8643 DALI_TEST_CHECK(false); // Should not get here
8647 DALI_TEST_CHECK(true); // We expect an assert
8652 int UtcDaliActorRaiseAboveNegative(void)
8654 TestApplication application;
8655 Dali::Actor instance;
8659 instance.RaiseAbove(arg1);
8660 DALI_TEST_CHECK(false); // Should not get here
8664 DALI_TEST_CHECK(true); // We expect an assert
8669 int UtcDaliActorRaiseToTopNegative(void)
8671 TestApplication application;
8672 Dali::Actor instance;
8675 instance.RaiseToTop();
8676 DALI_TEST_CHECK(false); // Should not get here
8680 DALI_TEST_CHECK(true); // We expect an assert
8685 int UtcDaliActorAddRendererNegative(void)
8687 TestApplication application;
8688 Dali::Actor instance;
8691 Dali::Renderer arg1;
8692 instance.AddRenderer(arg1);
8693 DALI_TEST_CHECK(false); // Should not get here
8697 DALI_TEST_CHECK(true); // We expect an assert
8702 int UtcDaliActorTouchedSignalNegative(void)
8704 TestApplication application;
8705 Dali::Actor instance;
8708 instance.TouchedSignal();
8709 DALI_TEST_CHECK(false); // Should not get here
8713 DALI_TEST_CHECK(true); // We expect an assert
8718 int UtcDaliActorTranslateByNegative(void)
8720 TestApplication application;
8721 Dali::Actor instance;
8725 instance.TranslateBy(arg1);
8726 DALI_TEST_CHECK(false); // Should not get here
8730 DALI_TEST_CHECK(true); // We expect an assert
8735 int UtcDaliActorFindChildByIdNegative(void)
8737 TestApplication application;
8738 Dali::Actor instance;
8741 unsigned int arg1 = 0u;
8742 instance.FindChildById(arg1);
8743 DALI_TEST_CHECK(false); // Should not get here
8747 DALI_TEST_CHECK(true); // We expect an assert
8752 int UtcDaliActorGetRendererAtNegative(void)
8754 TestApplication application;
8755 Dali::Actor instance;
8758 unsigned int arg1 = 0u;
8759 instance.GetRendererAt(arg1);
8760 DALI_TEST_CHECK(false); // Should not get here
8764 DALI_TEST_CHECK(true); // We expect an assert
8769 int UtcDaliActorHoveredSignalNegative(void)
8771 TestApplication application;
8772 Dali::Actor instance;
8775 instance.HoveredSignal();
8776 DALI_TEST_CHECK(false); // Should not get here
8780 DALI_TEST_CHECK(true); // We expect an assert
8785 int UtcDaliActorLowerToBottomNegative(void)
8787 TestApplication application;
8788 Dali::Actor instance;
8791 instance.LowerToBottom();
8792 DALI_TEST_CHECK(false); // Should not get here
8796 DALI_TEST_CHECK(true); // We expect an assert
8801 int UtcDaliActorOnSceneSignalNegative(void)
8803 TestApplication application;
8804 Dali::Actor instance;
8807 instance.OnSceneSignal();
8808 DALI_TEST_CHECK(false); // Should not get here
8812 DALI_TEST_CHECK(true); // We expect an assert
8817 int UtcDaliActorOffSceneSignalNegative(void)
8819 TestApplication application;
8820 Dali::Actor instance;
8823 instance.OffSceneSignal();
8824 DALI_TEST_CHECK(false); // Should not get here
8828 DALI_TEST_CHECK(true); // We expect an assert
8833 int UtcDaliActorRemoveRendererNegative01(void)
8835 TestApplication application;
8836 Dali::Actor instance;
8839 unsigned int arg1 = 0u;
8840 instance.RemoveRenderer(arg1);
8841 DALI_TEST_CHECK(false); // Should not get here
8845 DALI_TEST_CHECK(true); // We expect an assert
8850 int UtcDaliActorRemoveRendererNegative02(void)
8852 TestApplication application;
8853 Dali::Actor instance;
8856 Dali::Renderer arg1;
8857 instance.RemoveRenderer(arg1);
8858 DALI_TEST_CHECK(false); // Should not get here
8862 DALI_TEST_CHECK(true); // We expect an assert
8867 int UtcDaliActorFindChildByNameNegative(void)
8869 TestApplication application;
8870 Dali::Actor instance;
8874 instance.FindChildByName(arg1);
8875 DALI_TEST_CHECK(false); // Should not get here
8879 DALI_TEST_CHECK(true); // We expect an assert
8884 int UtcDaliActorSetResizePolicyNegative(void)
8886 TestApplication application;
8887 Dali::Actor instance;
8890 Dali::ResizePolicy::Type arg1 = ResizePolicy::USE_NATURAL_SIZE;
8891 Dali::Dimension::Type arg2 = Dimension::ALL_DIMENSIONS;
8892 instance.SetResizePolicy(arg1, arg2);
8893 DALI_TEST_CHECK(false); // Should not get here
8897 DALI_TEST_CHECK(true); // We expect an assert
8902 int UtcDaliActorOnRelayoutSignalNegative(void)
8904 TestApplication application;
8905 Dali::Actor instance;
8908 instance.OnRelayoutSignal();
8909 DALI_TEST_CHECK(false); // Should not get here
8913 DALI_TEST_CHECK(true); // We expect an assert
8918 int UtcDaliActorWheelEventSignalNegative(void)
8920 TestApplication application;
8921 Dali::Actor instance;
8924 instance.WheelEventSignal();
8925 DALI_TEST_CHECK(false); // Should not get here
8929 DALI_TEST_CHECK(true); // We expect an assert
8934 int UtcDaliActorGetHeightForWidthNegative(void)
8936 TestApplication application;
8937 Dali::Actor instance;
8941 instance.GetHeightForWidth(arg1);
8942 DALI_TEST_CHECK(false); // Should not get here
8946 DALI_TEST_CHECK(true); // We expect an assert
8951 int UtcDaliActorGetWidthForHeightNegative(void)
8953 TestApplication application;
8954 Dali::Actor instance;
8958 instance.GetWidthForHeight(arg1);
8959 DALI_TEST_CHECK(false); // Should not get here
8963 DALI_TEST_CHECK(true); // We expect an assert
8968 int UtcDaliActorLayoutDirectionChangedSignalNegative(void)
8970 TestApplication application;
8971 Dali::Actor instance;
8974 instance.LayoutDirectionChangedSignal();
8975 DALI_TEST_CHECK(false); // Should not get here
8979 DALI_TEST_CHECK(true); // We expect an assert
8984 int UtcDaliActorAddNegative(void)
8986 TestApplication application;
8987 Dali::Actor instance;
8992 DALI_TEST_CHECK(false); // Should not get here
8996 DALI_TEST_CHECK(true); // We expect an assert
9001 int UtcDaliActorLowerNegative(void)
9003 TestApplication application;
9004 Dali::Actor instance;
9008 DALI_TEST_CHECK(false); // Should not get here
9012 DALI_TEST_CHECK(true); // We expect an assert
9017 int UtcDaliActorRaiseNegative(void)
9019 TestApplication application;
9020 Dali::Actor instance;
9024 DALI_TEST_CHECK(false); // Should not get here
9028 DALI_TEST_CHECK(true); // We expect an assert
9033 int UtcDaliActorRemoveNegative(void)
9035 TestApplication application;
9036 Dali::Actor instance;
9040 instance.Remove(arg1);
9041 DALI_TEST_CHECK(false); // Should not get here
9045 DALI_TEST_CHECK(true); // We expect an assert
9050 int UtcDaliActorScaleByNegative(void)
9052 TestApplication application;
9053 Dali::Actor instance;
9057 instance.ScaleBy(arg1);
9058 DALI_TEST_CHECK(false); // Should not get here
9062 DALI_TEST_CHECK(true); // We expect an assert
9067 int UtcDaliActorGetLayerNegative(void)
9069 TestApplication application;
9070 Dali::Actor instance;
9073 instance.GetLayer();
9074 DALI_TEST_CHECK(false); // Should not get here
9078 DALI_TEST_CHECK(true); // We expect an assert
9083 int UtcDaliActorRotateByNegative01(void)
9085 TestApplication application;
9086 Dali::Actor instance;
9089 Dali::Quaternion arg1;
9090 instance.RotateBy(arg1);
9091 DALI_TEST_CHECK(false); // Should not get here
9095 DALI_TEST_CHECK(true); // We expect an assert
9100 int UtcDaliActorRotateByNegative02(void)
9102 TestApplication application;
9103 Dali::Actor instance;
9108 instance.RotateBy(arg1, arg2);
9109 DALI_TEST_CHECK(false); // Should not get here
9113 DALI_TEST_CHECK(true); // We expect an assert
9118 int UtcDaliActorUnparentNegative(void)
9120 TestApplication application;
9121 Dali::Actor instance;
9124 instance.Unparent();
9125 DALI_TEST_CHECK(false); // Should not get here
9129 DALI_TEST_CHECK(true); // We expect an assert
9134 int UtcDaliActorGetChildAtNegative(void)
9136 TestApplication application;
9137 Dali::Actor instance;
9140 unsigned int arg1 = 0u;
9141 instance.GetChildAt(arg1);
9142 DALI_TEST_CHECK(false); // Should not get here
9146 DALI_TEST_CHECK(true); // We expect an assert
9151 int UtcDaliActorGetChildCountNegative(void)
9153 TestApplication application;
9154 Dali::Actor instance;
9157 instance.GetChildCount();
9158 DALI_TEST_CHECK(false); // Should not get here
9162 DALI_TEST_CHECK(true); // We expect an assert
9167 int UtcDaliActorGetTargetSizeNegative(void)
9169 TestApplication application;
9170 Dali::Actor instance;
9173 instance.GetTargetSize();
9174 DALI_TEST_CHECK(false); // Should not get here
9178 DALI_TEST_CHECK(true); // We expect an assert
9183 int UtcDaliActorScreenToLocalNegative(void)
9185 TestApplication application;
9186 Dali::Actor instance;
9193 instance.ScreenToLocal(arg1, arg2, arg3, arg4);
9194 DALI_TEST_CHECK(false); // Should not get here
9198 DALI_TEST_CHECK(true); // We expect an assert
9203 int UtcDaliActorGetNaturalSizeNegative(void)
9205 TestApplication application;
9206 Dali::Actor instance;
9209 instance.GetNaturalSize();
9210 DALI_TEST_CHECK(false); // Should not get here
9214 DALI_TEST_CHECK(true); // We expect an assert
9219 int UtcDaliActorGetRelayoutSizeNegative(void)
9221 TestApplication application;
9222 Dali::Actor instance;
9225 Dali::Dimension::Type arg1 = Dimension::HEIGHT;
9226 instance.GetRelayoutSize(arg1);
9227 DALI_TEST_CHECK(false); // Should not get here
9231 DALI_TEST_CHECK(true); // We expect an assert
9236 int UtcDaliActorGetResizePolicyNegative(void)
9238 TestApplication application;
9239 Dali::Actor instance;
9242 Dali::Dimension::Type arg1 = Dimension::ALL_DIMENSIONS;
9243 instance.GetResizePolicy(arg1);
9244 DALI_TEST_CHECK(false); // Should not get here
9248 DALI_TEST_CHECK(true); // We expect an assert
9253 int UtcDaliActorGetRendererCountNegative(void)
9255 TestApplication application;
9256 Dali::Actor instance;
9259 instance.GetRendererCount();
9260 DALI_TEST_CHECK(false); // Should not get here
9264 DALI_TEST_CHECK(true); // We expect an assert
9269 int UtcDaliActorGetParentNegative(void)
9271 TestApplication application;
9272 Dali::Actor instance;
9275 instance.GetParent();
9276 DALI_TEST_CHECK(false); // Should not get here
9280 DALI_TEST_CHECK(true); // We expect an assert
9285 int UtcDaliActorPropertyBlendEquation(void)
9287 TestApplication application;
9289 tet_infoline("Test SetProperty AdvancedBlendEquation");
9291 Geometry geometry = CreateQuadGeometry();
9292 Shader shader = CreateShader();
9293 Renderer renderer1 = Renderer::New(geometry, shader);
9295 Actor actor = Actor::New();
9296 actor.SetProperty(Actor::Property::OPACITY, 0.1f);
9298 actor.AddRenderer(renderer1);
9299 actor.SetProperty(Actor::Property::SIZE, Vector2(400, 400));
9300 application.GetScene().Add(actor);
9302 if(!Dali::Capabilities::IsBlendEquationSupported(DevelBlendEquation::SCREEN))
9304 actor.SetProperty(Dali::DevelActor::Property::BLEND_EQUATION, Dali::DevelBlendEquation::SCREEN);
9305 int equation = actor.GetProperty<int>(Dali::DevelActor::Property::BLEND_EQUATION);
9306 DALI_TEST_EQUALS((Dali::DevelBlendEquation::SCREEN == equation), false, TEST_LOCATION);
9309 if(Dali::Capabilities::IsBlendEquationSupported(DevelBlendEquation::SCREEN))
9311 actor.SetProperty(Dali::DevelActor::Property::BLEND_EQUATION, Dali::DevelBlendEquation::SCREEN);
9312 int equation = actor.GetProperty<int>(Dali::DevelActor::Property::BLEND_EQUATION);
9313 DALI_TEST_EQUALS((Dali::DevelBlendEquation::SCREEN == equation), true, TEST_LOCATION);
9316 Renderer renderer2 = Renderer::New(geometry, shader);
9317 actor.AddRenderer(renderer2);
9322 int UtcDaliActorRegisterProperty(void)
9324 tet_infoline("Test property registration and uniform map update\n");
9326 TestApplication application;
9328 Geometry geometry = CreateQuadGeometry();
9329 Shader shader = CreateShader();
9330 Renderer renderer1 = Renderer::New(geometry, shader);
9331 Renderer renderer2 = Renderer::New(geometry, shader);
9333 Actor actor1 = Actor::New();
9334 actor1.AddRenderer(renderer1);
9335 actor1.SetProperty(Actor::Property::SIZE, Vector2(100, 100));
9336 actor1.RegisterProperty("uCustom", 1);
9337 application.GetScene().Add(actor1);
9339 Actor actor2 = Actor::New();
9340 actor2.AddRenderer(renderer2);
9341 actor2.SetProperty(Actor::Property::SIZE, Vector2(100, 100));
9342 application.GetScene().Add(actor2);
9344 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
9345 TraceCallStack& callStack = glAbstraction.GetSetUniformTrace();
9346 glAbstraction.EnableSetUniformCallTrace(true);
9348 application.SendNotification();
9349 application.Render();
9351 std::stringstream out;
9355 // Test uniform value of the custom property
9356 DALI_TEST_CHECK(callStack.FindMethodAndGetParameters("uCustom", params));
9357 DALI_TEST_EQUALS(out.str(), params, TEST_LOCATION);
9360 actor1[Actor::Property::VISIBLE] = false;
9362 application.SendNotification();
9363 application.Render();
9365 // Make visible again
9366 actor1[Actor::Property::VISIBLE] = true;
9367 actor1["uCustom"] = 2;
9369 glAbstraction.ResetSetUniformCallStack();
9371 application.SendNotification();
9372 application.Render();
9376 // The uniform value should not be changed
9377 DALI_TEST_CHECK(callStack.FindMethodAndGetParameters("uCustom", params));
9378 DALI_TEST_EQUALS(out.str(), params, TEST_LOCATION);