From 4c9ded837fd3e8cca341c637d9f248473252be57 Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Sat, 13 Jul 2019 16:55:26 +0100 Subject: [PATCH] new backend: add interface for query blur size Signed-off-by: Yuxuan Shui --- src/backend/backend.h | 1 + src/backend/gl/gl_common.c | 6 ++++++ src/backend/gl/gl_common.h | 1 + src/backend/gl/glx.c | 1 + src/backend/xrender/xrender.c | 7 +++++++ 5 files changed, 16 insertions(+) diff --git a/src/backend/backend.h b/src/backend/backend.h index f69ae85..4e4a8e6 100644 --- a/src/backend/backend.h +++ b/src/backend/backend.h @@ -213,6 +213,7 @@ struct backend_operations { /// Create a blur context that can be used to call `blur` void *(*create_blur_context)(backend_t *base, enum blur_method, void *args); void (*destroy_blur_context)(backend_t *base, void *ctx); + void (*get_blur_size)(void *blur_context, int *width, int *height); // =========== Hooks ============ /// Let the backend hook into the event handling queue diff --git a/src/backend/gl/gl_common.c b/src/backend/gl/gl_common.c index 101f6b1..ad57c7b 100644 --- a/src/backend/gl/gl_common.c +++ b/src/backend/gl/gl_common.c @@ -907,6 +907,12 @@ out: return ctx; } +void gl_get_blur_size(void *blur_context, int *width, int *height) { + struct gl_blur_context *ctx = blur_context; + *width = ctx->resize_width; + *height = ctx->resize_height; +} + // clang-format off const char *win_shader_glsl = GLSL(330, uniform float opacity; diff --git a/src/backend/gl/gl_common.h b/src/backend/gl/gl_common.h index 1bafea2..566850a 100644 --- a/src/backend/gl/gl_common.h +++ b/src/backend/gl/gl_common.h @@ -105,6 +105,7 @@ bool gl_blur(backend_t *base, double opacity, void *, const region_t *reg_blur, const region_t *reg_visible); void *gl_create_blur_context(backend_t *base, enum blur_method, void *args); void gl_destroy_blur_context(backend_t *base, void *ctx); +void gl_get_blur_size(void *blur_context, int *width, int *height); bool gl_is_image_transparent(backend_t *base, void *image_data); void gl_fill(backend_t *base, struct color, const region_t *clip); diff --git a/src/backend/gl/glx.c b/src/backend/gl/glx.c index 036243f..d98c4be 100644 --- a/src/backend/gl/glx.c +++ b/src/backend/gl/glx.c @@ -472,6 +472,7 @@ struct backend_operations glx_ops = { .fill = gl_fill, .create_blur_context = gl_create_blur_context, .destroy_blur_context = gl_destroy_blur_context, + .get_blur_size = gl_get_blur_size, .max_buffer_age = 5, // Why? }; diff --git a/src/backend/xrender/xrender.c b/src/backend/xrender/xrender.c index 829e20c..97108ef 100644 --- a/src/backend/xrender/xrender.c +++ b/src/backend/xrender/xrender.c @@ -530,6 +530,12 @@ void destroy_blur_context(backend_t *base, void *ctx_) { free(ctx); } +void get_blur_size(void *blur_context, int *width, int *height) { + struct _xrender_blur_context *ctx = blur_context; + *width = ctx->resize_width; + *height = ctx->resize_height; +} + backend_t *backend_xrender_init(session_t *ps) { auto xd = ccalloc(1, struct _xrender_data); init_backend_base(&xd->base, ps); @@ -632,6 +638,7 @@ struct backend_operations xrender_ops = { .copy = copy, .create_blur_context = create_blur_context, .destroy_blur_context = destroy_blur_context, + .get_blur_size = get_blur_size, }; // vim: set noet sw=8 ts=8: