aboutsummaryrefslogtreecommitdiff
path: root/util/region.c
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-01-30 12:01:10 +0100
committeremersion <contact@emersion.fr>2018-01-30 12:01:10 +0100
commit2a855e62824653f7634617a2c19d88ba1c650911 (patch)
tree4ca2aa91f44d8742c10ede61e000e8b57620f632 /util/region.c
parentd498855b9d6f8d7f0ccde42a026fb0619d99b8a2 (diff)
rootston: fix urxvt damage on HiDPI outputs
util/region: add wlr_region_expand
Diffstat (limited to 'util/region.c')
-rw-r--r--util/region.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/util/region.c b/util/region.c
index 9c4712f9..1bde0cb8 100644
--- a/util/region.c
+++ b/util/region.c
@@ -101,3 +101,30 @@ void wlr_region_transform(pixman_region32_t *dst, pixman_region32_t *src,
pixman_region32_init_rects(dst, dst_rects, nrects);
free(dst_rects);
}
+
+void wlr_region_expand(pixman_region32_t *dst, pixman_region32_t *src,
+ int distance) {
+ if (distance == 0) {
+ pixman_region32_copy(dst, src);
+ return;
+ }
+
+ int nrects;
+ pixman_box32_t *src_rects = pixman_region32_rectangles(src, &nrects);
+
+ pixman_box32_t *dst_rects = malloc(nrects * sizeof(pixman_box32_t));
+ if (dst_rects == NULL) {
+ return;
+ }
+
+ for (int i = 0; i < nrects; ++i) {
+ dst_rects[i].x1 = src_rects[i].x1 - distance;
+ dst_rects[i].x2 = src_rects[i].x2 + distance;
+ dst_rects[i].y1 = src_rects[i].y1 - distance;
+ dst_rects[i].y2 = src_rects[i].y2 + distance;
+ }
+
+ pixman_region32_fini(dst);
+ pixman_region32_init_rects(dst, dst_rects, nrects);
+ free(dst_rects);
+}