aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2020-07-28 10:46:46 +0200
committerSimon Ser <contact@emersion.fr>2020-11-15 22:48:42 +0100
commit0b40d09a21eb79896a7e60509a7ff8c69b25b37c (patch)
treee7a55d5253718146bf1f7baac6f8479a7eab3b59
parentb0a663d39d2de1dcfd9a0381cc822c4713da508e (diff)
buffer: add wlr_client_buffer_get
-rw-r--r--include/wlr/types/wlr_buffer.h5
-rw-r--r--types/wlr_buffer.c12
2 files changed, 15 insertions, 2 deletions
diff --git a/include/wlr/types/wlr_buffer.h b/include/wlr/types/wlr_buffer.h
index 14bb2a8d..84555899 100644
--- a/include/wlr/types/wlr_buffer.h
+++ b/include/wlr/types/wlr_buffer.h
@@ -104,6 +104,11 @@ struct wlr_client_buffer {
struct wlr_renderer;
/**
+ * Get a client buffer from a generic buffer. If the buffer isn't a client
+ * buffer, returns NULL.
+ */
+struct wlr_client_buffer *wlr_client_buffer_get(struct wlr_buffer *buffer);
+/**
* Check if a resource is a wl_buffer resource.
*/
bool wlr_resource_is_buffer(struct wl_resource *resource);
diff --git a/types/wlr_buffer.c b/types/wlr_buffer.c
index 2f914c12..29b26412 100644
--- a/types/wlr_buffer.c
+++ b/types/wlr_buffer.c
@@ -96,10 +96,18 @@ bool wlr_resource_get_buffer_size(struct wl_resource *resource,
static const struct wlr_buffer_impl client_buffer_impl;
+struct wlr_client_buffer *wlr_client_buffer_get(struct wlr_buffer *buffer) {
+ if (buffer->impl != &client_buffer_impl) {
+ return NULL;
+ }
+ return (struct wlr_client_buffer *)buffer;
+}
+
static struct wlr_client_buffer *client_buffer_from_buffer(
struct wlr_buffer *buffer) {
- assert(buffer->impl == &client_buffer_impl);
- return (struct wlr_client_buffer *) buffer;
+ struct wlr_client_buffer *client_buffer = wlr_client_buffer_get(buffer);
+ assert(client_buffer != NULL);
+ return client_buffer;
}
static void client_buffer_destroy(struct wlr_buffer *_buffer) {