diff options
author | emersion <contact@emersion.fr> | 2018-01-30 12:01:10 +0100 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2018-01-30 12:01:10 +0100 |
commit | 2a855e62824653f7634617a2c19d88ba1c650911 (patch) | |
tree | 4ca2aa91f44d8742c10ede61e000e8b57620f632 /util/region.c | |
parent | d498855b9d6f8d7f0ccde42a026fb0619d99b8a2 (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.c | 27 |
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); +} |