ecore_evas_cocoa: use the same render function as ecore_evas_x

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
Nicolas Aguirre 2015-08-06 19:05:14 +02:00 committed by Cedric BAIL
parent 86030d308c
commit e9c2d07696
1 changed files with 98 additions and 30 deletions

View File

@ -42,12 +42,70 @@ static int _ecore_evas_init_count = 0;
// like a rbtree or a dictionnary-based container
static Eina_List *ecore_evases = NULL;
static Ecore_Event_Handler *ecore_evas_event_handlers[5] = {
NULL, NULL, NULL, NULL
0
};
static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
//static const char *ecore_evas_cocoa_default = "EFL Cocoa";
static int
_render_updates_process(Ecore_Evas *ee, Eina_List *updates)
{
int rend = 0;
if (ee->prop.avoid_damage)
{
if (updates)
{
_ecore_evas_idle_timeout_update(ee);
rend = 1;
}
}
else if (((ee->visible) && (ee->draw_ok)) ||
((ee->should_be_visible) && (ee->prop.fullscreen)) ||
((ee->should_be_visible) && (ee->prop.override)))
{
if (updates)
{
if (ee->shaped)
{
//TODO
}
if (ee->alpha)
{
//TODO
}
_ecore_evas_idle_timeout_update(ee);
rend = 1;
}
}
else
evas_norender(ee->evas);
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
if (rend)
{
static int frames = 0;
static double t0 = 0.0;
double t, td;
t = ecore_time_get();
frames++;
if ((t - t0) > 1.0)
{
td = t - t0;
printf("FPS: %3.3f\n", (double)frames / td);
frames = 0;
t0 = t;
}
}
return rend;
}
static int
_ecore_evas_render(Ecore_Evas *ee)
{
@ -69,8 +127,16 @@ _ecore_evas_cocoa_render(Ecore_Evas *ee)
Eina_List *updates = NULL;
Eina_List *ll;
Ecore_Evas *ee2;
static int render2 = -1;
DBG("Render");
if ((!ee->no_comp_sync) && (_ecore_evas_app_comp_sync))
return 0;
if (ee->in_async_render)
{
//EDBG("ee=%p is rendering asynchronously, skip.", ee);
return 0;
}
EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
{
@ -81,40 +147,42 @@ _ecore_evas_cocoa_render(Ecore_Evas *ee)
}
if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
if (ee->prop.avoid_damage)
if (render2 == -1)
{
rend = _ecore_evas_render(ee);
if (getenv("RENDER2")) render2 = 1;
else render2 = 0;
}
else if ((ee->visible) ||
((ee->should_be_visible) && (ee->prop.fullscreen)) ||
((ee->should_be_visible) && (ee->prop.override)))
if (render2)
{
rend |= _ecore_evas_render(ee);
}
else
evas_norender(ee->evas);
if (updates) rend = 1;
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
if (rend)
{
static int frames = 0;
static double t0 = 0.0;
double t, td;
t = ecore_time_get();
frames++;
if ((t - t0) > 1.0)
if (!ee->can_async_render)
{
td = t - t0;
DBG("FPS: %3.3f\n", (double)frames / td);
frames = 0;
t0 = t;
Eina_List *updates = evas_render2_updates(ee->evas);
rend = _render_updates_process(ee, updates);
evas_render_updates_free(updates);
}
else
{
ee->in_async_render = EINA_TRUE;
if (evas_render2(ee->evas)) rend = 1;
else ee->in_async_render = EINA_FALSE;
}
}
else
{
if (!ee->can_async_render)
{
Eina_List *updates = evas_render_updates(ee->evas);
rend = _render_updates_process(ee, updates);
evas_render_updates_free(updates);
}
else if (evas_render_async(ee->evas))
{
//EDBG("ee=%p started asynchronous render.", ee);
ee->in_async_render = EINA_TRUE;
rend = 1;
}
else if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
}
return rend;
}