diff --git a/include/menu/menu.h b/include/menu/menu.h index 9edf8b76..980eaa7c 100644 --- a/include/menu/menu.h +++ b/include/menu/menu.h @@ -54,7 +54,6 @@ struct menuitem { struct menu { char *id; char *label; - int item_height; struct menu *parent; struct { diff --git a/include/theme.h b/include/theme.h index 9791f7e9..4ad3855c 100644 --- a/include/theme.h +++ b/include/theme.h @@ -61,6 +61,7 @@ struct theme { int menu_item_padding_x; int menu_item_padding_y; + int menu_item_height; float menu_items_bg_color[4]; float menu_items_text_color[4]; diff --git a/src/menu/menu.c b/src/menu/menu.c index 98b214ff..1abef56a 100644 --- a/src/menu/menu.c +++ b/src/menu/menu.c @@ -210,12 +210,7 @@ item_create(struct menu *menu, const char *text, bool show_arrow) const char *arrow = show_arrow ? "›" : NULL; - /* TODO: Consider setting this somewhere else */ - if (!menu->item_height) { - menu->item_height = font_height(&rc.font_menuitem) - + 2 * theme->menu_item_padding_y; - } - menuitem->height = menu->item_height; + menuitem->height = theme->menu_item_height; int x, y; menuitem->native_width = font_width(&rc.font_menuitem, text); @@ -235,11 +230,11 @@ item_create(struct menu *menu, const char *text, bool show_arrow) /* Item background nodes */ menuitem->normal.background = &wlr_scene_rect_create( menuitem->normal.tree, - menu->size.width, menu->item_height, + menu->size.width, theme->menu_item_height, theme->menu_items_bg_color)->node; menuitem->selected.background = &wlr_scene_rect_create( menuitem->selected.tree, - menu->size.width, menu->item_height, + menu->size.width, theme->menu_item_height, theme->menu_items_active_bg_color)->node; /* Font nodes */ @@ -268,9 +263,9 @@ item_create(struct menu *menu, const char *text, bool show_arrow) /* Center font nodes */ x = theme->menu_item_padding_x; - y = (menu->item_height - menuitem->normal.buffer->height) / 2; + y = (theme->menu_item_height - menuitem->normal.buffer->height) / 2; wlr_scene_node_set_position(menuitem->normal.text, x, y); - y = (menu->item_height - menuitem->selected.buffer->height) / 2; + y = (theme->menu_item_height - menuitem->selected.buffer->height) / 2; wlr_scene_node_set_position(menuitem->selected.text, x, y); /* Position the item in relation to its menu */ @@ -299,7 +294,7 @@ separator_create(struct menu *menu, const char *label) struct theme *theme = server->theme; if (menuitem->type == LAB_MENU_TITLE) { - menuitem->height = menu->item_height; + menuitem->height = theme->menu_item_height; menuitem->native_width = font_width(&rc.font_menuitem, label); } else if (menuitem->type == LAB_MENU_SEPARATOR_LINE) { menuitem->height = theme->menu_separator_line_thickness + @@ -338,7 +333,7 @@ separator_create(struct menu *menu, const char *label) /* Center font nodes */ int x, y; x = theme->menu_item_padding_x; - y = (menu->item_height - menuitem->normal.buffer->height) / 2; + y = (theme->menu_item_height - menuitem->normal.buffer->height) / 2; wlr_scene_node_set_position(menuitem->normal.text, x, y); } else { int nominal_width = theme->menu_min_width; @@ -849,7 +844,7 @@ menu_configure(struct menu *menu, int lx, int ly, enum menu_align align) ly -= menu->size.height; if (menu->parent) { /* For submenus adjust y to bottom left corner */ - ly += menu->item_height; + ly += theme->menu_item_height; } } wlr_scene_node_set_position(&menu->scene_tree->node, lx, ly); diff --git a/src/theme.c b/src/theme.c index fe8dc115..a22d0936 100644 --- a/src/theme.c +++ b/src/theme.c @@ -1305,6 +1305,9 @@ post_processing(struct theme *theme) theme->title_height = h + 2 * theme->padding_height; } + theme->menu_item_height = font_height(&rc.font_menuitem) + + 2 * theme->menu_item_padding_y; + theme->osd_window_switcher_item_height = font_height(&rc.font_osd) + 2 * theme->osd_window_switcher_item_padding_y + 2 * theme->osd_window_switcher_item_active_border_width;