From b7df820ff246e4202b1233ffe74e7decfb2653e4 Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Thu, 13 Jan 2022 11:31:31 +0000 Subject: [PATCH] backend: add new property: BORDER_WIDTH Signed-off-by: Yuxuan Shui --- src/backend/backend.c | 11 +++++++++++ src/backend/backend.h | 3 +++ src/backend/backend_common.c | 1 + src/backend/backend_common.h | 1 + src/utils.h | 1 + 5 files changed, 17 insertions(+) diff --git a/src/backend/backend.c b/src/backend/backend.c index 36c5fec1..842a233c 100644 --- a/src/backend/backend.c +++ b/src/backend/backend.c @@ -350,6 +350,17 @@ void paint_all_new(session_t *ps, struct managed_win *t, bool ignore_damage) { ps->backend_data->ops->set_image_property( ps->backend_data, IMAGE_PROPERTY_BORDER_COLOR, w->win_image, &border_color); + + int border_width = w->g.border_width; + if (border_width == 0) { + // Some WM has borders implemented as WM frames + border_width = min3(w->frame_extents.left, + w->frame_extents.right, + w->frame_extents.bottom); + } + ps->backend_data->ops->set_image_property( + ps->backend_data, IMAGE_PROPERTY_BORDER_WIDTH, + w->win_image, &border_width); } } diff --git a/src/backend/backend.h b/src/backend/backend.h index 721b1974..607752d7 100644 --- a/src/backend/backend.h +++ b/src/backend/backend.h @@ -61,6 +61,9 @@ enum image_properties { // Border color // 1 struct color, default: black IMAGE_PROPERTY_BORDER_COLOR, + // Border width + // 1 int, default: 0 + IMAGE_PROPERTY_BORDER_WIDTH, }; enum image_operations { diff --git a/src/backend/backend_common.c b/src/backend/backend_common.c index d5dd7057..30a56920 100644 --- a/src/backend/backend_common.c +++ b/src/backend/backend_common.c @@ -452,6 +452,7 @@ bool default_set_image_property(backend_t *base attr_unused, enum image_properti case IMAGE_PROPERTY_CORNER_RADIUS: tex->corner_radius = dargs[0]; break; case IMAGE_PROPERTY_MAX_BRIGHTNESS: tex->max_brightness = dargs[0]; break; case IMAGE_PROPERTY_BORDER_COLOR: tex->border_color = *(struct color *)arg; break; + case IMAGE_PROPERTY_BORDER_WIDTH: tex->border_width = *(int *)arg; break; } return true; diff --git a/src/backend/backend_common.h b/src/backend/backend_common.h index 6d967b56..335eace2 100644 --- a/src/backend/backend_common.h +++ b/src/backend/backend_common.h @@ -42,6 +42,7 @@ struct backend_image { int ewidth, eheight; bool color_inverted; struct color border_color; + int border_width; }; bool build_shadow(xcb_connection_t *, xcb_drawable_t, double opacity, int width, diff --git a/src/utils.h b/src/utils.h index c5098936..23a5abb1 100644 --- a/src/utils.h +++ b/src/utils.h @@ -134,6 +134,7 @@ static inline int attr_const normalize_i_range(int i, int min, int max) { #define min2(a, b) ((a) > (b) ? (b) : (a)) #define max2(a, b) ((a) > (b) ? (a) : (b)) +#define min3(a, b, c) min2(a, min2(b, c)) /// clamp `val` into interval [min, max] #define clamp(val, min, max) max2(min2(val, max), min)