From 0947765fc9a4f6fc4287acfcd2efcaf4fef1ffb8 Mon Sep 17 00:00:00 2001 From: M Stoeckl Date: Thu, 31 Oct 2024 10:27:47 -0400 Subject: Only call render_menu once per frame An actual surface is not needed to estimate font sizes; a 1x1 image will do, as long as the cairo context has the same options. --- render.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'render.c') diff --git a/render.c b/render.c index 070fad9..63dc4ab 100644 --- a/render.c +++ b/render.c @@ -13,8 +13,13 @@ // Calculate text widths. void calc_widths(struct menu *menu) { struct wl_context *context = menu->context; - struct pool_buffer *current = context_get_current_buffer(context); - cairo_t *cairo = current->cairo; + int scale = context_get_scale(context); + cairo_surface_set_device_scale(menu->test_surface, scale, scale); + cairo_set_antialias(menu->test_cairo, CAIRO_ANTIALIAS_BEST); + cairo_font_options_t *fo = cairo_font_options_create(); + cairo_set_font_options(menu->test_cairo, fo); + cairo_font_options_destroy(fo); + cairo_t *cairo = menu->test_cairo; // Calculate prompt width if (menu->prompt) { -- cgit v1.2.3