From c6a3d4cfca954f1c1e0895494b129068ff1fae9e Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Tue, 10 Jun 2014 16:42:16 -0400 Subject: [PATCH] Add structures for a buffer and reference to a buffer. Switch client_data structure to use eina_tiler for input, opaque, damage regions. Signed-off-by: Chris Michael --- src/bin/e_comp_wl.h | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h index bc6baf4bf..f61149cf3 100644 --- a/src/bin/e_comp_wl.h +++ b/src/bin/e_comp_wl.h @@ -23,6 +23,15 @@ # define BTN_BACK 0x116 # endif +# define container_of(ptr, type, member) \ + ({ \ + const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) ); \ + }) + +typedef struct _E_Comp_Wl_Buffer E_Comp_Wl_Buffer; +typedef struct _E_Comp_Wl_Buffer_Ref E_Comp_Wl_Buffer_Ref; + struct _E_Comp_Wl_Data { struct @@ -120,13 +129,28 @@ struct _E_Comp_Wl_Data Eina_Bool restack : 1; }; +struct _E_Comp_Wl_Buffer +{ + struct wl_resource *resource; + struct wl_signal destroy_signal; + struct wl_listener destroy_listener; + union + { + struct wl_shm_buffer *shm_buffer; + void *legacy_buffer; + }; + int32_t w, h; + uint32_t busy; +}; + +struct _E_Comp_Wl_Buffer_Ref +{ + E_Comp_Wl_Buffer *buffer; + struct wl_listener destroy_listener; +}; + struct _E_Comp_Wl_Client_Data { - Eina_Rectangle *input; - Eina_Rectangle *opaque; - Eina_Rectangle *shape; - Eina_Rectangle *damage; - Ecore_Timer *first_draw_tmr; /* regular surface resource (wl_compositor_create_surface) */ @@ -146,11 +170,17 @@ struct _E_Comp_Wl_Client_Data void (*unmap)(struct wl_resource *resource); } shell; + E_Comp_Wl_Buffer_Ref buffer_ref; + struct { int32_t x, y, w, h; - struct wl_resource *buffer; + E_Comp_Wl_Buffer *buffer; + struct wl_listener buffer_destroy; Eina_Bool new_attach : 1; + Eina_Tiler *damage; + Eina_Tiler *input; + Eina_Tiler *opaque; } pending; struct