elm_transit: Convert to new animators
authorDerek Foreman <derek.foreman.samsung@gmail.com>
Tue, 18 Sep 2018 14:43:05 +0000 (09:43 -0500)
committerYeongjong Lee <yj34.lee@samsung.com>
Fri, 28 Sep 2018 01:18:51 +0000 (10:18 +0900)
Summary:
Use more efficient animator mechanism.
Depends on D7047

Reviewers: devilhorns

Reviewed By: devilhorns

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7048

src/lib/elementary/elm_transit.c

index 7791452..28a48a4 100644 (file)
@@ -834,14 +834,25 @@ elm_transit_go(Elm_Transit *transit)
 
    ELM_SAFE_FREE(transit->go_in_timer, ecore_timer_del);
 
+   Ecore_Evas *ee, *first_ee = NULL;
    Eina_List *elist;
-   Evas_Object *obj;
+   Evas_Object *obj, *first = NULL;
+   Eina_Bool same = EINA_TRUE;
 
    ELM_SAFE_FREE(transit->animator, ecore_animator_del);
 
+   if (transit->objs)
+     {
+        first = eina_list_data_get(transit->objs);
+        first_ee = ecore_evas_ecore_evas_get(evas_object_evas_get(first));
+     }
    EINA_LIST_FOREACH(transit->objs, elist, obj)
-     _transit_obj_data_save(obj);
-
+     {
+        _transit_obj_data_save(obj);
+        ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
+        if (ee != first_ee)
+          same = EINA_FALSE;
+     }
    if (!transit->event_enabled)
      {
         EINA_LIST_FOREACH(transit->objs, elist, obj)
@@ -853,8 +864,13 @@ elm_transit_go(Elm_Transit *transit)
    transit->total_revert_time = 0;
    transit->revert_mode = EINA_FALSE;
    transit->time.begin = ecore_loop_time_get();
-   transit->animator = ecore_animator_add(_transit_animate_cb, transit);
 
+   if (!same || !first)
+     transit->animator = ecore_animator_add(_transit_animate_cb, transit);
+   else
+     transit->animator = ecore_evas_animator_add(first,
+                                                 _transit_animate_cb,
+                                                 transit);
    _transit_animate_cb(transit);
 }