From b260d5beb9fab0c39f18be677e70b35e988d3c1d Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Sun, 24 Nov 2024 12:57:05 +0100 Subject: Scale surfaces properly --- src/window.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/window.c') 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) -- cgit v1.2.3