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

5
menu.c
View file

@ -34,6 +34,8 @@ struct menu *menu_create(menu_callback callback) {
menu->selectionbg = 0x005577ff;
menu->selectionfg = 0xeeeeeeff;
menu->callback = callback;
menu->test_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1);
menu->test_cairo = cairo_create(menu->test_surface);
return menu;
}
@ -58,6 +60,8 @@ static void free_items(struct menu *menu) {
void menu_destroy(struct menu *menu) {
free_pages(menu);
free_items(menu);
cairo_destroy(menu->test_cairo);
cairo_surface_destroy(menu->test_surface);
free(menu);
}
@ -374,7 +378,6 @@ static void match_items(struct menu *menu) {
// Render menu items.
void menu_render_items(struct menu *menu) {
render_menu(menu);
calc_widths(menu);
match_items(menu);
render_menu(menu);