summaryrefslogtreecommitdiff
path: root/swaybg
diff options
context:
space:
mode:
authorFurkan Sahin <furkan-dev@proton.me>2018-09-23 15:17:36 -0400
committerFurkan Sahin <furkan-dev@proton.me>2018-09-23 15:17:36 -0400
commitdf048973732fc856c9aa6ca2ca1de016b1386289 (patch)
treedcea2c0275a68f8eef6d94bfabcbec7c1f4ad46e /swaybg
parent36a58caf5e1a34c242fa2cfd989c29c3b883a9f6 (diff)
swaybg: fix increasingly smaller bg on hotplug
render_background_image alters the scale that cairo uses. Depending on the image mode, resolution, and image size, this may cause the surface to be rendered increasingly smaller. By calling cairo_save and cairo_restore, any changes to the cairo settings by the function are not kept as a side effect. The surface that swaybg uses is also now cleared before rendering a frame. This is needed to avoid artifacts on resolution or scale changes with certain combinations of image modes, resolutions, and image sizes. This was also part of the increasingly smaller background visual since it made it so it was not obvious the region being rendered to was smaller and caused an increasing number of smaller images to be appear for each hotplug.
Diffstat (limited to 'swaybg')
-rw-r--r--swaybg/main.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/swaybg/main.c b/swaybg/main.c
index 5b0d0458..742669ef 100644
--- a/swaybg/main.c
+++ b/swaybg/main.c
@@ -73,6 +73,10 @@ static void render_frame(struct swaybg_state *state) {
return;
}
cairo_t *cairo = state->current_buffer->cairo;
+ cairo_save(cairo);
+ cairo_set_operator(cairo, CAIRO_OPERATOR_CLEAR);
+ cairo_paint(cairo);
+ cairo_restore(cairo);
if (state->args->mode == BACKGROUND_MODE_SOLID_COLOR) {
cairo_set_source_u32(cairo, state->context.color);
cairo_paint(cairo);