From 50672afaea2e21e853c70d9a658c8f4ea26d698e Mon Sep 17 00:00:00 2001 From: Taekyun Kim Date: Thu, 10 Sep 2015 17:17:20 +0900 Subject: [PATCH] pepper: Add an API for quering view opaqueness Change-Id: Ib73bebaae4a28cb28d4a8c92bd8358a4bf8aaaea --- src/lib/pepper/pepper.h | 3 +++ src/lib/pepper/view.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/lib/pepper/pepper.h b/src/lib/pepper/pepper.h index 5a3cc5c..8585067 100644 --- a/src/lib/pepper/pepper.h +++ b/src/lib/pepper/pepper.h @@ -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 diff --git a/src/lib/pepper/view.c b/src/lib/pepper/view.c index 08d48d4..2dfaec8 100644 --- a/src/lib/pepper/view.c +++ b/src/lib/pepper/view.c @@ -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; +} -- 2.7.4