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.
This commit is contained in:
M Stoeckl 2024-10-31 10:27:47 -04:00 committed by adnano
parent 260eaba88e
commit 0947765fc9
3 changed files with 16 additions and 3 deletions

View file

@ -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) {