Update e_wayland to use our own E_Buffer structure

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2013-06-24 11:40:40 +01:00
parent ba0b2a339b
commit 11054d55e5
4 changed files with 19 additions and 18 deletions

View File

@ -43,7 +43,7 @@ static Eina_Bool _e_renderer_cb_pixels_read(E_Output *output, int format, void *
static void _e_renderer_cb_output_buffer_set(E_Output *output, pixman_image_t *buffer); static void _e_renderer_cb_output_buffer_set(E_Output *output, pixman_image_t *buffer);
static void _e_renderer_cb_output_repaint(E_Output *output, pixman_region32_t *damage); static void _e_renderer_cb_output_repaint(E_Output *output, pixman_region32_t *damage);
static void _e_renderer_cb_damage_flush(E_Surface *surface); static void _e_renderer_cb_damage_flush(E_Surface *surface);
static void _e_renderer_cb_attach(E_Surface *surface, struct wl_buffer *buffer); static void _e_renderer_cb_attach(E_Surface *surface, E_Buffer *buffer);
static Eina_Bool _e_renderer_cb_output_create(E_Output *output, unsigned int window); static Eina_Bool _e_renderer_cb_output_create(E_Output *output, unsigned int window);
static void _e_renderer_cb_output_destroy(E_Output *output); static void _e_renderer_cb_output_destroy(E_Output *output);
static Eina_Bool _e_renderer_cb_surface_create(E_Surface *surface); static Eina_Bool _e_renderer_cb_surface_create(E_Surface *surface);
@ -260,7 +260,7 @@ _e_renderer_cb_damage_flush(E_Surface *surface)
} }
static void static void
_e_renderer_cb_attach(E_Surface *surface, struct wl_buffer *buffer) _e_renderer_cb_attach(E_Surface *surface, E_Buffer *buffer)
{ {
E_Renderer_Surface_State *state; E_Renderer_Surface_State *state;
pixman_format_code_t format = 0; pixman_format_code_t format = 0;
@ -278,7 +278,7 @@ _e_renderer_cb_attach(E_Surface *surface, struct wl_buffer *buffer)
if (!buffer) return; if (!buffer) return;
if (!(shm_buffer = wl_shm_buffer_get(&buffer->resource))) if (!(shm_buffer = wl_shm_buffer_get(buffer->wl.resource)))
{ {
e_buffer_reference(&state->buffer_reference, NULL); e_buffer_reference(&state->buffer_reference, NULL);
return; return;
@ -294,12 +294,14 @@ _e_renderer_cb_attach(E_Surface *surface, struct wl_buffer *buffer)
break; break;
} }
w = wl_shm_buffer_get_width(shm_buffer); buffer->shm_buffer = shm_buffer;
h = wl_shm_buffer_get_height(shm_buffer); buffer->w = wl_shm_buffer_get_width(shm_buffer);
buffer->h = wl_shm_buffer_get_height(shm_buffer);
data = wl_shm_buffer_get_data(shm_buffer); data = wl_shm_buffer_get_data(shm_buffer);
stride = wl_shm_buffer_get_stride(shm_buffer); stride = wl_shm_buffer_get_stride(shm_buffer);
state->image = pixman_image_create_bits(format, w, h, data, stride); state->image =
pixman_image_create_bits(format, buffer->w, buffer->h, data, stride);
} }
static Eina_Bool static Eina_Bool

View File

@ -82,7 +82,7 @@ struct _E_Renderer
void (*output_buffer_set)(E_Output *output, pixman_image_t *buffer); void (*output_buffer_set)(E_Output *output, pixman_image_t *buffer);
void (*output_repaint)(E_Output *output, pixman_region32_t *damage); void (*output_repaint)(E_Output *output, pixman_region32_t *damage);
void (*damage_flush)(E_Surface *surface); void (*damage_flush)(E_Surface *surface);
void (*attach)(E_Surface *surface, struct wl_buffer *buffer); void (*attach)(E_Surface *surface, E_Buffer *buffer);
Eina_Bool (*output_create)(E_Output *output, unsigned int window); Eina_Bool (*output_create)(E_Output *output, unsigned int window);
void (*output_destroy)(E_Output *output); void (*output_destroy)(E_Output *output);
Eina_Bool (*surface_create)(E_Surface *surface); Eina_Bool (*surface_create)(E_Surface *surface);

View File

@ -65,7 +65,7 @@ e_surface_new(struct wl_client *client, unsigned int id)
} }
EAPI void EAPI void
e_surface_attach(E_Surface *es, struct wl_buffer *buffer) e_surface_attach(E_Surface *es, E_Buffer *buffer)
{ {
/* check for valid surface */ /* check for valid surface */
if (!es) return; if (!es) return;
@ -191,7 +191,7 @@ e_surface_damage_calculate(E_Surface *es, pixman_region32_t *opaque)
if (es->buffer.reference.buffer) if (es->buffer.reference.buffer)
{ {
/* if this is an shm buffer, flush any pending damage */ /* if this is an shm buffer, flush any pending damage */
if (wl_shm_buffer_get(&es->buffer.reference.buffer->resource)) if (wl_shm_buffer_get(es->buffer.reference.buffer->wl.resource))
{ {
if (_e_comp->renderer->damage_flush) if (_e_comp->renderer->damage_flush)
_e_comp->renderer->damage_flush(es); _e_comp->renderer->damage_flush(es);
@ -300,13 +300,13 @@ static void
_e_surface_cb_attach(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *buffer_resource, int x, int y) _e_surface_cb_attach(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *buffer_resource, int x, int y)
{ {
E_Surface *es; E_Surface *es;
struct wl_buffer *buffer = NULL; E_Buffer *buffer = NULL;
/* try to cast the resource to our surface */ /* try to cast the resource to our surface */
if (!(es = wl_resource_get_user_data(resource))) return; if (!(es = wl_resource_get_user_data(resource))) return;
/* if we have a buffer resource, get a wl_buffer from it */ /* if we have a buffer resource, get a wl_buffer from it */
if (buffer_resource) buffer = buffer_resource->data; if (buffer_resource) buffer = e_buffer_resource_get(buffer_resource);
/* if we have a previous pending buffer, remove it /* if we have a previous pending buffer, remove it
* *
@ -323,8 +323,7 @@ _e_surface_cb_attach(struct wl_client *client EINA_UNUSED, struct wl_resource *r
/* if we have a valid pending buffer, setup a destroy listener */ /* if we have a valid pending buffer, setup a destroy listener */
if (buffer) if (buffer)
wl_signal_add(&buffer->resource.destroy_signal, wl_signal_add(&buffer->signals.destroy, &es->pending.buffer_destroy);
&es->pending.buffer_destroy);
} }
static void static void
@ -357,8 +356,8 @@ _e_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_resource *r
/* if we have a referenced buffer, get it's size */ /* if we have a referenced buffer, get it's size */
if (es->buffer.reference.buffer) if (es->buffer.reference.buffer)
{ {
bw = es->buffer.reference.buffer->width; bw = es->buffer.reference.buffer->w;
bh = es->buffer.reference.buffer->height; bh = es->buffer.reference.buffer->h;
} }
/* if we attached a new buffer, call the surface configure function */ /* if we attached a new buffer, call the surface configure function */

View File

@ -29,7 +29,7 @@ struct _E_Surface
struct struct
{ {
struct wl_buffer *buffer; E_Buffer *buffer;
struct wl_listener buffer_destroy; struct wl_listener buffer_destroy;
struct wl_list frames; struct wl_list frames;
@ -76,7 +76,7 @@ struct _E_Surface_Frame
}; };
EAPI E_Surface *e_surface_new(struct wl_client *client, unsigned int id); EAPI E_Surface *e_surface_new(struct wl_client *client, unsigned int id);
EAPI void e_surface_attach(E_Surface *es, struct wl_buffer *buffer); EAPI void e_surface_attach(E_Surface *es, E_Buffer *buffer);
EAPI void e_surface_unmap(E_Surface *es); EAPI void e_surface_unmap(E_Surface *es);
EAPI void e_surface_damage(E_Surface *es); EAPI void e_surface_damage(E_Surface *es);
EAPI void e_surface_damage_below(E_Surface *es); EAPI void e_surface_damage_below(E_Surface *es);