Unify surface_destroy with compositor surface destroy
authorChris Michael <devilhorns@comcast.net>
Sun, 9 Jun 2013 17:35:53 +0000 (18:35 +0100)
committerChris Michael <devilhorns@comcast.net>
Sun, 9 Jun 2013 17:35:53 +0000 (18:35 +0100)
Start on surface buffer set

Signed-off-by: Chris Michael <devilhorns@comcast.net>
src/bin/e_wayland/e_surface.c

index c1f15895993d9bb309411ea653041c9ad2e5afc7..3e0954d2413b19e14f7844b0109666f218c16ca1 100644 (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);
-
-   /* 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);
+   wl_signal_emit(&es->wl.resource.destroy_signal, &es->wl.resource);
 
-   /* 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)