discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=bff9ae5feb2709bc3d416f6b6e6a07b1e2f3c487

commit bff9ae5feb2709bc3d416f6b6e6a07b1e2f3c487
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Thu Sep 17 16:32:49 2015 -0400

    add pre-render callback list for compositor canvas
    
    someone doing fancy effects might want to add a callback to do various
    tasks only when a render is about to occur
---
 src/bin/e_comp.h        |  2 ++
 src/bin/e_comp_canvas.c | 11 +++++++++++
 2 files changed, 13 insertions(+)

diff --git a/src/bin/e_comp.h b/src/bin/e_comp.h
index 2c9c9d6..d343036 100644
--- a/src/bin/e_comp.h
+++ b/src/bin/e_comp.h
@@ -89,6 +89,8 @@ struct _E_Comp
    Eina_List *clients;
    unsigned int new_clients;
 
+   Eina_List *pre_render_cbs; /* E_Comp_Cb */
+
    E_Comp_X_Data *x_comp_data;
    E_Comp_Wl_Data *wl_comp_data;
 
diff --git a/src/bin/e_comp_canvas.c b/src/bin/e_comp_canvas.c
index 87fc003..5f90c8c 100644
--- a/src/bin/e_comp_canvas.c
+++ b/src/bin/e_comp_canvas.c
@@ -211,6 +211,16 @@ _e_comp_canvas_resize(Ecore_Evas *ee EINA_UNUSED)
    e_comp_canvas_update();
 }
 
+static void
+_e_comp_canvas_prerender(Ecore_Evas *ee EINA_UNUSED)
+{
+   E_Comp_Cb cb;
+   Eina_List *l;
+
+   EINA_LIST_FOREACH(e_comp->pre_render_cbs, l, cb)
+     cb();
+}
+
 E_API Eina_Bool
 e_comp_canvas_init(int w, int h)
 {
@@ -266,6 +276,7 @@ e_comp_canvas_init(int w, int h)
    E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_ON, 
_e_comp_cb_screensaver_on, NULL);
    E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_OFF, 
_e_comp_cb_screensaver_off, NULL);
 
+   ecore_evas_callback_pre_render_set(e_comp->ee, _e_comp_canvas_prerender);
    ecore_evas_callback_resize_set(e_comp->ee, _e_comp_canvas_resize);
    ecore_evas_resize(e_comp->ee, w, h);
 

-- 


Reply via email to