Unify surface_destroy with compositor surface destroy

Start on surface buffer set

Signed-off-by: Chris Michael <devilhorns@comcast.net>
This commit is contained in:
Chris Michael 2013-06-09 18:35:53 +01:00
parent a30faf6e71
commit 526f60e5b9
1 changed files with 54 additions and 33 deletions

View File

@ -109,44 +109,13 @@ e_surface_damage(E_Surface *es)
EAPI void
e_surface_destroy(E_Surface *es)
{
E_Surface_Frame *cb;
/* check for valid surface */
if (!es) return;
/* emit the destroy signal */
wl_signal_emit(&es->wl.resource.destroy_signal,
&es->wl.resource);
wl_signal_emit(&es->wl.resource.destroy_signal, &es->wl.resource);
/* if this surface is mapped, unmap it */
if (es->mapped) e_surface_unmap(es);
/* remove any pending frame callbacks */
EINA_LIST_FREE(es->pending.frames, cb)
wl_resource_destroy(&cb->resource);
pixman_region32_fini(&es->pending.damage);
pixman_region32_fini(&es->pending.opaque);
pixman_region32_fini(&es->pending.input);
/* destroy pending buffer */
if (es->pending.buffer)
wl_list_remove(&es->pending.buffer_destroy.link);
/* remove any buffer references */
e_buffer_reference(&es->buffer.reference, NULL);
/* free regions */
pixman_region32_fini(&es->damage);
pixman_region32_fini(&es->opaque);
pixman_region32_fini(&es->input);
/* remove any active frame callbacks */
EINA_LIST_FREE(es->frames, cb)
wl_resource_destroy(&cb->resource);
/* free the surface structure */
E_FREE(es);
wl_resource_destroy(&es->wl.resource);
}
EAPI void
@ -178,6 +147,58 @@ e_surface_damage_calculate(E_Surface *es, pixman_region32_t *opaque)
pixman_region32_copy(&es->clip, opaque);
}
EAPI void
e_surface_buffer_set(E_Surface *es, struct wl_buffer *buffer)
{
pixman_format_code_t format;
Evas_Coord w = 0, h = 0;
int stride = 0;
void *pixels;
/* check for valid surface */
if (!es) return;
/* destory any existing image */
/* if (es->image) pixman_image_unref(es->image); */
/* es->image = NULL; */
/* check for valid buffer */
if (!buffer) return;
/* get buffer format */
switch (wl_shm_buffer_get_format(buffer))
{
case WL_SHM_FORMAT_XRGB8888:
format = PIXMAN_x8r8g8b8;
break;
case WL_SHM_FORMAT_ARGB8888:
format = PIXMAN_a8r8g8b8;
break;
default:
e_buffer_reference(&es->buffer.reference, NULL);
return;
break;
}
/* get buffer information */
w = wl_shm_buffer_get_width(buffer);
h = wl_shm_buffer_get_height(buffer);
pixels = wl_shm_buffer_get_data(buffer);
stride = wl_shm_buffer_get_stride(buffer);
/* create surface image */
/* es->image = pixman_image_create_bits(format, w, h, pixels, stride); */
}
EAPI void
e_surface_show(E_Surface *es)
{
/* check for valid surface */
if (!es) return;
/* ecore_evas_show(es->ee); */
}
/* local functions */
static void
_e_surface_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)