Add a weston_buffer structure to replace wl_buffer

This commit adds a weston_buffer structure to replace wl_buffer.  This way
we can hold onto buffers by just their resource.  In order to do this, the
every renderer.attach function has to fill in the weston_buffer.width and
weston_buffer.height fields.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
diff --git a/src/screenshooter.c b/src/screenshooter.c
index 1fdfc9a..be2e34f 100644
--- a/src/screenshooter.c
+++ b/src/screenshooter.c
@@ -46,7 +46,7 @@
 
 struct screenshooter_frame_listener {
 	struct wl_listener listener;
-	struct wl_buffer *buffer;
+	struct weston_buffer *buffer;
 	struct wl_resource *resource;
 };
 
@@ -140,9 +140,9 @@
 			     0, 0, output->current->width,
 			     output->current->height);
 
-	stride = wl_shm_buffer_get_stride(l->buffer);
+	stride = wl_shm_buffer_get_stride(l->buffer->shm_buffer);
 
-	d = wl_shm_buffer_get_data(l->buffer);
+	d = wl_shm_buffer_get_data(l->buffer->shm_buffer);
 	s = pixels + stride * (l->buffer->height - 1);
 
 	switch (compositor->read_format) {
@@ -178,10 +178,15 @@
 	struct weston_output *output =
 		wl_resource_get_user_data(output_resource);
 	struct screenshooter_frame_listener *l;
-	struct wl_buffer *buffer = buffer_resource->data;
+	struct weston_buffer *buffer =
+		weston_buffer_from_resource(buffer_resource);
 
-	if (!wl_buffer_is_shm(buffer))
+	if (!wl_shm_buffer_get(buffer->resource))
 		return;
+	
+	buffer->shm_buffer = wl_shm_buffer_get(buffer->resource);
+	buffer->width = wl_shm_buffer_get_width(buffer->shm_buffer);
+	buffer->height = wl_shm_buffer_get_height(buffer->shm_buffer);
 
 	if (buffer->width < output->current->width ||
 	    buffer->height < output->current->height)