From 11054d55e5a58dd957c208104d9dc29af8dd05d9 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Mon, 24 Jun 2013 11:40:40 +0100 Subject: [PATCH] Update e_wayland to use our own E_Buffer structure Signed-off-by: Chris Michael --- src/bin/e_wayland/e_renderer.c | 14 ++++++++------ src/bin/e_wayland/e_renderer.h | 2 +- src/bin/e_wayland/e_surface.c | 17 ++++++++--------- src/bin/e_wayland/e_surface.h | 4 ++-- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/bin/e_wayland/e_renderer.c b/src/bin/e_wayland/e_renderer.c index 13904b36a..70e0f432c 100644 --- a/src/bin/e_wayland/e_renderer.c +++ b/src/bin/e_wayland/e_renderer.c @@ -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_repaint(E_Output *output, pixman_region32_t *damage); 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 void _e_renderer_cb_output_destroy(E_Output *output); 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 -_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; 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 (!(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); return; @@ -294,12 +294,14 @@ _e_renderer_cb_attach(E_Surface *surface, struct wl_buffer *buffer) break; } - w = wl_shm_buffer_get_width(shm_buffer); - h = wl_shm_buffer_get_height(shm_buffer); + buffer->shm_buffer = 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); 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 diff --git a/src/bin/e_wayland/e_renderer.h b/src/bin/e_wayland/e_renderer.h index 8a8cc996c..7979c3848 100644 --- a/src/bin/e_wayland/e_renderer.h +++ b/src/bin/e_wayland/e_renderer.h @@ -82,7 +82,7 @@ struct _E_Renderer void (*output_buffer_set)(E_Output *output, pixman_image_t *buffer); void (*output_repaint)(E_Output *output, pixman_region32_t *damage); 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); void (*output_destroy)(E_Output *output); Eina_Bool (*surface_create)(E_Surface *surface); diff --git a/src/bin/e_wayland/e_surface.c b/src/bin/e_wayland/e_surface.c index 56247b58f..bdaf17d9f 100644 --- a/src/bin/e_wayland/e_surface.c +++ b/src/bin/e_wayland/e_surface.c @@ -1,4 +1,4 @@ -#include "e.h" + #include "e.h" /* local function prototypes */ static void _e_surface_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource); @@ -65,7 +65,7 @@ e_surface_new(struct wl_client *client, unsigned int id) } 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 */ if (!es) return; @@ -191,7 +191,7 @@ e_surface_damage_calculate(E_Surface *es, pixman_region32_t *opaque) if (es->buffer.reference.buffer) { /* 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) _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 *es; - struct wl_buffer *buffer = NULL; + E_Buffer *buffer = NULL; /* try to cast the resource to our surface */ if (!(es = wl_resource_get_user_data(resource))) return; /* 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 * @@ -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 (buffer) - wl_signal_add(&buffer->resource.destroy_signal, - &es->pending.buffer_destroy); + wl_signal_add(&buffer->signals.destroy, &es->pending.buffer_destroy); } 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 (es->buffer.reference.buffer) { - bw = es->buffer.reference.buffer->width; - bh = es->buffer.reference.buffer->height; + bw = es->buffer.reference.buffer->w; + bh = es->buffer.reference.buffer->h; } /* if we attached a new buffer, call the surface configure function */ diff --git a/src/bin/e_wayland/e_surface.h b/src/bin/e_wayland/e_surface.h index 5b2911e8e..5b10b57d5 100644 --- a/src/bin/e_wayland/e_surface.h +++ b/src/bin/e_wayland/e_surface.h @@ -29,7 +29,7 @@ struct _E_Surface struct { - struct wl_buffer *buffer; + E_Buffer *buffer; struct wl_listener buffer_destroy; 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 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_damage(E_Surface *es); EAPI void e_surface_damage_below(E_Surface *es);