From 5182864be41c2e559d1ae30a479927382e01550b Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 27 Jan 2010 15:29:51 +0000 Subject: [PATCH] fix animator usage - now silky smooth! SVN revision: 45629 --- src/modules/comp/e_mod_comp.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/modules/comp/e_mod_comp.c b/src/modules/comp/e_mod_comp.c index a5ae0714f..91d17eb31 100644 --- a/src/modules/comp/e_mod_comp.c +++ b/src/modules/comp/e_mod_comp.c @@ -34,6 +34,7 @@ struct _E_Comp Eina_Inlist *wins; Eina_List *updates; Ecore_Animator *render_animator; + int render_overflow; Eina_Bool gl : 1; Eina_Bool grabbed : 1; @@ -322,7 +323,6 @@ _e_mod_comp_cb_animator(void *data) E_Comp_Win *cw; Eina_List *new_updates = NULL; // for failed pixmap fetches - get them next frame - c->render_animator = NULL; // ecore_x_grab(); // ecore_x_sync(); c->grabbed = 1; @@ -340,13 +340,23 @@ _e_mod_comp_cb_animator(void *data) } if (new_updates) _e_mod_comp_render_queue(c); c->updates = new_updates; - return 0; + c->render_overflow--; + if (c->render_overflow == 0) + { + c->render_animator = NULL; + return 0; + } + return 1; } static void _e_mod_comp_render_queue(E_Comp *c) { - if (c->render_animator) return; + if (c->render_animator) + { + c->render_overflow = 10; + return; + } c->render_animator = ecore_animator_add(_e_mod_comp_cb_animator, c); }