ecore_evas: refactor extn backend to use generic rendering infrastructure.
This commit is contained in:
parent
3fd01561ae
commit
727b61218b
|
@ -1504,57 +1504,62 @@ _ecore_evas_socket_switch(void *data, void *dest_buf EINA_UNUSED)
|
||||||
return bdata->pixels;
|
return bdata->pixels;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static Eina_Bool
|
||||||
_ecore_evas_extn_socket_render(Ecore_Evas *ee)
|
_ecore_evas_extn_socket_prepare(Ecore_Evas *ee)
|
||||||
{
|
{
|
||||||
Eina_List *updates = NULL, *l;
|
|
||||||
int rend = 0;
|
|
||||||
Eina_Rectangle *r;
|
|
||||||
Extn *extn;
|
Extn *extn;
|
||||||
Ecore_Ipc_Client *client;
|
|
||||||
Ecore_Evas_Engine_Buffer_Data *bdata = ee->engine.data;
|
Ecore_Evas_Engine_Buffer_Data *bdata = ee->engine.data;
|
||||||
int cur_b;
|
int cur_b;
|
||||||
|
|
||||||
extn = bdata->data;
|
extn = bdata->data;
|
||||||
if (!extn) return rend;
|
if (!extn) return EINA_FALSE;
|
||||||
rend = ecore_evas_render_prepare(ee);
|
|
||||||
|
|
||||||
cur_b = extn->cur_b;
|
|
||||||
if (bdata->pixels)
|
if (bdata->pixels)
|
||||||
{
|
{
|
||||||
|
cur_b = extn->cur_b;
|
||||||
bdata->pixels = _extnbuf_lock(extn->b[cur_b].buf, NULL, NULL, NULL);
|
bdata->pixels = _extnbuf_lock(extn->b[cur_b].buf, NULL, NULL, NULL);
|
||||||
updates = evas_render_updates(ee->evas);
|
return EINA_TRUE;
|
||||||
_extnbuf_unlock(extn->b[cur_b].buf);
|
|
||||||
}
|
}
|
||||||
if (updates)
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ecore_evas_ews_update_image(void *data, Evas *e EINA_UNUSED, void *event_info)
|
||||||
|
{
|
||||||
|
Evas_Event_Render_Post *post = event_info;
|
||||||
|
Ecore_Evas *ee = data;
|
||||||
|
Ecore_Evas_Engine_Buffer_Data *bdata = ee->engine.data;
|
||||||
|
Extn *extn = bdata->data;
|
||||||
|
Ecore_Ipc_Client *client;
|
||||||
|
Eina_Rectangle *r;
|
||||||
|
Eina_List *l;
|
||||||
|
int cur_b;
|
||||||
|
|
||||||
|
cur_b = extn->cur_b;
|
||||||
|
_extnbuf_unlock(extn->b[cur_b].buf);
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(post->updated_area, l, r)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(updates, l, r)
|
Ipc_Data_Update ipc;
|
||||||
{
|
Eina_List *ll;
|
||||||
Ipc_Data_Update ipc;
|
|
||||||
Eina_List *ll;
|
|
||||||
|
|
||||||
ipc.x = r->x;
|
ipc.x = r->x;
|
||||||
ipc.y = r->y;
|
ipc.y = r->y;
|
||||||
ipc.w = r->w;
|
ipc.w = r->w;
|
||||||
ipc.h = r->h;
|
ipc.h = r->h;
|
||||||
EINA_LIST_FOREACH(extn->ipc.clients, ll, client)
|
EINA_LIST_FOREACH(extn->ipc.clients, ll, client)
|
||||||
ecore_ipc_client_send(client, MAJOR, OP_UPDATE, 0, 0, 0, &ipc,
|
ecore_ipc_client_send(client, MAJOR, OP_UPDATE, 0, 0, 0, &ipc,
|
||||||
sizeof(ipc));
|
sizeof(ipc));
|
||||||
}
|
|
||||||
evas_render_updates_free(updates);
|
|
||||||
_ecore_evas_idle_timeout_update(ee);
|
|
||||||
EINA_LIST_FOREACH(extn->ipc.clients, l, client)
|
|
||||||
ecore_ipc_client_send(client, MAJOR, OP_UPDATE_DONE, 0, 0,
|
|
||||||
cur_b, NULL, 0);
|
|
||||||
if (extn->profile.done)
|
|
||||||
{
|
|
||||||
_ecore_evas_extn_socket_window_profile_change_done_send(ee);
|
|
||||||
extn->profile.done = EINA_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
|
EINA_LIST_FOREACH(extn->ipc.clients, l, client)
|
||||||
return updates ? 1 : rend;
|
ecore_ipc_client_send(client, MAJOR, OP_UPDATE_DONE, 0, 0,
|
||||||
|
cur_b, NULL, 0);
|
||||||
|
if (extn->profile.done)
|
||||||
|
{
|
||||||
|
_ecore_evas_extn_socket_window_profile_change_done_send(ee);
|
||||||
|
extn->profile.done = EINA_FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -2068,7 +2073,7 @@ static const Ecore_Evas_Engine_Func _ecore_extn_socket_engine_func =
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
_ecore_evas_extn_socket_render, // render
|
NULL, // render
|
||||||
NULL, // screen_geometry_get
|
NULL, // screen_geometry_get
|
||||||
NULL, // screen_dpi_get
|
NULL, // screen_dpi_get
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -2089,6 +2094,13 @@ static const Ecore_Evas_Engine_Func _ecore_extn_socket_engine_func =
|
||||||
NULL, // fn_animator_unregister
|
NULL, // fn_animator_unregister
|
||||||
|
|
||||||
NULL, // fn_evas_changed
|
NULL, // fn_evas_changed
|
||||||
|
NULL, //fn_focus_device_set
|
||||||
|
NULL, //fn_callback_focus_device_in_set
|
||||||
|
NULL, //fn_callback_focus_device_out_set
|
||||||
|
NULL, //fn_callback_device_mouse_in_set
|
||||||
|
NULL, //fn_callback_device_mouse_out_set
|
||||||
|
NULL, //fn_pointer_device_xy_get
|
||||||
|
_ecore_evas_extn_socket_prepare,
|
||||||
};
|
};
|
||||||
|
|
||||||
EAPI Ecore_Evas *
|
EAPI Ecore_Evas *
|
||||||
|
@ -2138,7 +2150,6 @@ ecore_evas_extn_socket_new_internal(int w, int h)
|
||||||
ee->prop.fullscreen = EINA_FALSE;
|
ee->prop.fullscreen = EINA_FALSE;
|
||||||
ee->prop.withdrawn = EINA_FALSE;
|
ee->prop.withdrawn = EINA_FALSE;
|
||||||
ee->prop.sticky = EINA_FALSE;
|
ee->prop.sticky = EINA_FALSE;
|
||||||
ee->can_async_render = EINA_FALSE;
|
|
||||||
|
|
||||||
/* init evas here */
|
/* init evas here */
|
||||||
ee->evas = evas_new();
|
ee->evas = evas_new();
|
||||||
|
@ -2146,6 +2157,7 @@ ecore_evas_extn_socket_new_internal(int w, int h)
|
||||||
evas_output_method_set(ee->evas, rmethod);
|
evas_output_method_set(ee->evas, rmethod);
|
||||||
evas_output_size_set(ee->evas, w, h);
|
evas_output_size_set(ee->evas, w, h);
|
||||||
evas_output_viewport_set(ee->evas, 0, 0, w, h);
|
evas_output_viewport_set(ee->evas, 0, 0, w, h);
|
||||||
|
evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_POST, _ecore_evas_ews_update_image, ee);
|
||||||
|
|
||||||
einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
|
einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
|
||||||
if (einfo)
|
if (einfo)
|
||||||
|
|
Loading…
Reference in New Issue