pepper: Add an API for quering view opaqueness
authorTaekyun Kim <tkq.kim@samsung.com>
Thu, 10 Sep 2015 08:17:20 +0000 (17:17 +0900)
committerTaekyun Kim <tkq.kim@samsung.com>
Thu, 10 Sep 2015 08:17:20 +0000 (17:17 +0900)
Change-Id: Ib73bebaae4a28cb28d4a8c92bd8358a4bf8aaaea

src/lib/pepper/pepper.h
src/lib/pepper/view.c

index 5a3cc5c..8585067 100644 (file)
@@ -496,6 +496,9 @@ pepper_view_is_mapped(pepper_view_t *view);
 PEPPER_API pepper_bool_t
 pepper_view_is_visible(pepper_view_t *view);
 
+PEPPER_API pepper_bool_t
+pepper_view_is_opaque(pepper_view_t *view);
+
 #ifdef __cplusplus
 }
 #endif
index 08d48d4..2dfaec8 100644 (file)
@@ -553,3 +553,31 @@ pepper_view_is_visible(pepper_view_t *view)
 {
     return view->visible;
 }
+
+PEPPER_API pepper_bool_t
+pepper_view_is_opaque(pepper_view_t *view)
+{
+    pepper_surface_t       *surface = view->surface;
+    struct wl_shm_buffer   *shm_buffer = wl_shm_buffer_get(surface->buffer.buffer->resource);
+    pixman_box32_t          extent;
+
+    if (shm_buffer)
+    {
+        uint32_t shm_format = wl_shm_buffer_get_format(shm_buffer);
+
+        if (shm_format == WL_SHM_FORMAT_XRGB8888 || shm_format == WL_SHM_FORMAT_RGB565)
+            return PEPPER_TRUE;
+    }
+
+    /* TODO: format check for wl_drm or wl_tbm?? */
+
+    extent.x1 = 0;
+    extent.y1 = 0;
+    extent.x2 = view->surface->w;
+    extent.y2 = view->surface->h;
+
+    if (pixman_region32_contains_rectangle(&surface->opaque_region, &extent) == PIXMAN_REGION_IN)
+        return PEPPER_TRUE;
+
+    return PEPPER_FALSE;
+}