derekf pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=7e0beea3f599c56dd2a99d4eaec820723cf6bda2

commit 7e0beea3f599c56dd2a99d4eaec820723cf6bda2
Author: Derek Foreman <[email protected]>
Date:   Tue Jul 11 16:13:46 2017 -0500

    ecore_evas: Refactor event catchers to call custom_tick_begin/end
    
    Make the event catcher functions call the custom_tick_begin/end helpers
    instead of directly calling the engine functions.
---
 src/lib/ecore_evas/ecore_evas.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index a9657add9c..ffc4e6f75d 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -3158,19 +3158,22 @@ _check_animator_event_catcher_add(void *data, const 
Efl_Event *event)
      {
         if (array[i].desc == EFL_EVENT_ANIMATOR_TICK)
           {
-             if (ee->anim_count++ > 0) return;
-             INF("Setting up animator for %p from '%s' with title '%s'.", 
ee->evas, ee->driver, ee->prop.title);
+             if (!ee->anim_count)
+               INF("Setting up animator for %p from '%s' with title '%s'.", 
ee->evas, ee->driver, ee->prop.title);
 
              if (ee->engine.func->fn_animator_register &&
                  ee->engine.func->fn_animator_unregister)
                {
                   // Backend support per window vsync
-                  ee->engine.func->fn_animator_register(ee);
+                  _ecore_evas_custom_tick_begin(ee);
+
+                  if (ee->anim_count > 0) return;
                   if (!_general_tick) _general_tick = ee;
                }
              else
                {
                   // Backend doesn't support per window vsync, fallback to 
generic support
+                  if (ee->anim_count++ > 0) return;
                   ee->anim = ecore_animator_add(_ecore_evas_animator_fallback, 
ee);
                }
 
@@ -3192,19 +3195,21 @@ _check_animator_event_catcher_del(void *data, const 
Efl_Event *event)
      {
         if (array[i].desc == EFL_EVENT_ANIMATOR_TICK)
           {
-             if ((--ee->anim_count) > 0) return;
+             if (ee->anim_count == 1)
+               INF("Unsetting up animator for %p from '%s' titled '%s'.", 
ee->evas, ee->driver, ee->prop.title);
 
-             INF("Unsetting up animator for %p from '%s' titled '%s'.", 
ee->evas, ee->driver, ee->prop.title);
              if (ee->engine.func->fn_animator_register &&
                  ee->engine.func->fn_animator_unregister)
                {
                   // Backend support per window vsync
-                  ee->engine.func->fn_animator_unregister(ee);
+                  _ecore_evas_custom_tick_end(ee);
+                  if (ee->anim_count > 0) return;
                   if (_general_tick == ee) _ecore_evas_tick_source_find();
                }
              else
                {
                   // Backend doesn't support per window vsync, fallback to 
generic support
+                  if (--ee->anim_count > 0) return;
                   ecore_animator_del(ee->anim);
                   ee->anim = NULL;
                }

-- 


Reply via email to