aboutsummaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-11-24 12:57:05 +0100
committerFederico Angelilli <code@fedang.net>2024-11-24 12:57:05 +0100
commitb260d5beb9fab0c39f18be677e70b35e988d3c1d (patch)
tree1654463c878f17130d52ea6c99c725d0fbacc754 /src/window.c
parent57f91ef34cb8a8a1db2c18b468165a4273f13fa8 (diff)
Scale surfaces properly
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/window.c b/src/window.c
index be922a1..b71bc07 100644
--- a/src/window.c
+++ b/src/window.c
@@ -151,6 +151,13 @@ void window_init(window_t *window, display_t *display, config_t *config)
window->cr = cairo_create(window->surface);
assert(cairo_status(window->cr) == CAIRO_STATUS_SUCCESS);
log_trace("Created cairo window context");
+
+ window->scale = config->scale > 0
+ ? config->scale
+ : steps(window->display->screen_dpi / 96.0, 4);
+
+ if (window->scale < 1) window->scale = 1;
+ log_debug("Set window scale to '%lf'", window->scale);
}
void window_move(window_t *window, int x, int y)
@@ -203,6 +210,7 @@ static void window_reshape(window_t *window)
cairo_arc(cr, window->width - radius, radius, radius, 270 * degree, 450 * degree);
cairo_fill(cr);
+ cairo_surface_set_device_scale(surface, window->scale, window->scale);
cairo_show_page(cr);
cairo_destroy(cr);
@@ -243,6 +251,7 @@ void window_resize(window_t *window, int width, int height)
// Update cairo surface
cairo_xcb_surface_set_size(window->surface, width, height);
+ cairo_surface_set_device_scale(window->surface, window->scale, window->scale);
}
void window_present(window_t *window, cairo_surface_t *surface)