core: APIs for accessing surface's current buffer and etc.
authorTaekyun Kim <tkq.kim@samsung.com>
Tue, 19 May 2015 05:17:49 +0000 (14:17 +0900)
committerTaekyun Kim <tkq.kim@samsung.com>
Fri, 19 Jun 2015 09:06:40 +0000 (18:06 +0900)
Change-Id: Ic9508440c605c39fc09c825dfb391cc7ff02c527

src/pepper-internal.h
src/pepper.h
src/surface.c

index ae816ad..2f6a6c3 100644 (file)
@@ -8,7 +8,6 @@
 
 typedef struct pepper_region        pepper_region_t;
 typedef struct pepper_surface_state pepper_surface_state_t;
-typedef struct pepper_buffer        pepper_buffer_t;
 typedef struct pepper_data_source   pepper_data_source_t;
 typedef struct pepper_data_device   pepper_data_device_t;
 typedef struct pepper_data_offer    pepper_data_offer_t;
@@ -96,10 +95,12 @@ struct pepper_surface
     /* Surface states. wl_surface.commit will apply the pending state into current. */
     pepper_surface_state_t  pending;
 
-    pepper_buffer_t        *buffer;
-    int32_t                 offset_x, offset_y;
-    int32_t                 transform;
-    int32_t                 scale;
+    struct {
+        pepper_buffer_t    *buffer;
+        int32_t             x, y;
+        int32_t             transform;
+        int32_t             scale;
+    } buffer;
 
     int32_t                 w, h;
 
index 23ec358..e93666e 100644 (file)
@@ -40,6 +40,7 @@ typedef struct pepper_renderer          pepper_renderer_t;
 typedef struct pepper_surface           pepper_surface_t;
 typedef struct pepper_view              pepper_view_t;
 typedef struct pepper_layer             pepper_layer_t;
+typedef struct pepper_buffer            pepper_buffer_t;
 
 typedef struct pepper_matrix            pepper_matrix_t;
 
@@ -292,6 +293,24 @@ pepper_surface_get_role(pepper_surface_t *surface);
 PEPPER_API pepper_bool_t
 pepper_surface_set_role(pepper_surface_t *surface, const char *role);
 
+PEPPER_API void
+pepper_surface_set_user_data(pepper_surface_t *surface, uint32_t key, void *data);
+
+PEPPER_API void *
+pepper_surface_get_user_data(pepper_surface_t *surface, uint32_t key);
+
+PEPPER_API pepper_buffer_t *
+pepper_surface_get_buffer(pepper_surface_t *surface);
+
+PEPPER_API void
+pepper_surface_get_buffer_offset(pepper_surface_t *surface, int32_t *x, int32_t *y);
+
+PEPPER_API int32_t
+pepper_surface_get_buffer_scale(pepper_surface_t *surface);
+
+PEPPER_API int32_t
+pepper_surface_get_buffer_transform(pepper_surface_t *surface);
+
 /* View. */
 PEPPER_API pepper_view_t *
 pepper_view_create(pepper_compositor_t *compositor, pepper_surface_t *surface);
index c2bb376..c42f67d 100644 (file)
@@ -251,8 +251,8 @@ pepper_surface_create(pepper_compositor_t *compositor,
 
     pepper_surface_state_init(&surface->pending);
 
-    surface->transform = WL_OUTPUT_TRANSFORM_NORMAL;
-    surface->scale = 1;
+    surface->buffer.transform = WL_OUTPUT_TRANSFORM_NORMAL;
+    surface->buffer.scale = 1;
 
     pixman_region32_init(&surface->damage_region);
     pixman_region32_init(&surface->opaque_region);
@@ -273,8 +273,8 @@ pepper_surface_destroy(pepper_surface_t *surface)
 
     pepper_surface_state_fini(&surface->pending);
 
-    if (surface->buffer)
-        pepper_buffer_unreference(surface->buffer);
+    if (surface->buffer.buffer)
+        pepper_buffer_unreference(surface->buffer.buffer);
 
     pixman_region32_fini(&surface->damage_region);
     pixman_region32_fini(&surface->opaque_region);
@@ -292,15 +292,15 @@ pepper_surface_commit(pepper_surface_t *surface)
 {
     pepper_buffer_reference(surface->pending.buffer);
 
-    if (surface->buffer)
-        pepper_buffer_unreference(surface->buffer);
+    if (surface->buffer.buffer)
+        pepper_buffer_unreference(surface->buffer.buffer);
 
     /* Commit buffer attachment states. */
-    surface->buffer     = surface->pending.buffer;
-    surface->offset_x  += surface->pending.x;
-    surface->offset_y  += surface->pending.y;
-    surface->transform  = surface->pending.transform;
-    surface->scale      = surface->pending.scale;
+    surface->buffer.buffer     = surface->pending.buffer;
+    surface->buffer.x         += surface->pending.x;
+    surface->buffer.y         += surface->pending.y;
+    surface->buffer.transform  = surface->pending.transform;
+    surface->buffer.scale      = surface->pending.scale;
 
     /* Stop listening on buffer destruction signal of the pending state. */
     if (surface->pending.buffer)
@@ -314,28 +314,28 @@ pepper_surface_commit(pepper_surface_t *surface)
     surface->w = 0;
     surface->h = 0;
 
-    if (surface->buffer)
+    if (surface->buffer.buffer)
     {
-        switch (surface->transform)
+        switch (surface->buffer.transform)
         {
         case WL_OUTPUT_TRANSFORM_NORMAL:
         case WL_OUTPUT_TRANSFORM_180:
         case WL_OUTPUT_TRANSFORM_FLIPPED_180:
-            surface->w = surface->buffer->w;
-            surface->h = surface->buffer->h;
+            surface->w = surface->buffer.buffer->w;
+            surface->h = surface->buffer.buffer->h;
             break;
         case WL_OUTPUT_TRANSFORM_90:
         case WL_OUTPUT_TRANSFORM_270:
         case WL_OUTPUT_TRANSFORM_FLIPPED_90:
         case WL_OUTPUT_TRANSFORM_FLIPPED_270:
-            surface->w = surface->buffer->h;
-            surface->h = surface->buffer->w;
+            surface->w = surface->buffer.buffer->h;
+            surface->h = surface->buffer.buffer->w;
             break;
         }
     }
 
-    surface->w /= surface->scale;
-    surface->h /= surface->scale;
+    surface->w /= surface->buffer.scale;
+    surface->h /= surface->buffer.scale;
 
     /* Commit damage region. Pending state's damage is consumed by commit. */
     pixman_region32_union(&surface->damage_region,
@@ -373,3 +373,44 @@ pepper_surface_set_role(pepper_surface_t *surface, const char *role)
 
     return PEPPER_TRUE;
 }
+
+PEPPER_API void
+pepper_surface_set_user_data(pepper_surface_t *surface, uint32_t key, void *data)
+{
+    /* TODO: */
+}
+
+PEPPER_API void *
+pepper_surface_get_user_data(pepper_surface_t *surface, uint32_t key)
+{
+    /* TODO: */
+    return NULL;
+}
+
+PEPPER_API pepper_buffer_t *
+pepper_surface_get_buffer(pepper_surface_t *surface)
+{
+    return surface->buffer.buffer;
+}
+
+PEPPER_API void
+pepper_surface_get_buffer_offset(pepper_surface_t *surface, int32_t *x, int32_t *y)
+{
+    if (x)
+        *x = surface->buffer.x;
+
+    if (y)
+        *y = surface->buffer.y;
+}
+
+PEPPER_API int32_t
+pepper_surface_get_buffer_scale(pepper_surface_t *surface)
+{
+    return surface->buffer.scale;
+}
+
+PEPPER_API int32_t
+pepper_surface_get_buffer_transform(pepper_surface_t *surface)
+{
+    return surface->buffer.transform;
+}