aboutsummaryrefslogtreecommitdiff
path: root/menu.c
diff options
context:
space:
mode:
authorM Stoeckl <code@mstoeckl.com>2024-10-31 10:27:47 -0400
committeradnano <adnano@noreply.codeberg.org>2024-11-01 23:33:53 +0000
commit0947765fc9a4f6fc4287acfcd2efcaf4fef1ffb8 (patch)
treee123c7fe7ded1913957731c5a91d3d6eba4fd431 /menu.c
parent260eaba88ec8f54fe2bdbe391b18fcd2db70836f (diff)
downloadwmenu-0947765fc9a4f6fc4287acfcd2efcaf4fef1ffb8.tar.gz
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.
Diffstat (limited to 'menu.c')
-rw-r--r--menu.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/menu.c b/menu.c
index 52f0810..9bda76c 100644
--- a/menu.c
+++ b/menu.c
@@ -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);