88 std::vector<MenuItem> items;
93 std::unique_ptr<ml::List> dropdown;
96 std::vector<ml::ListItem*> listItems;
97 std::vector<std::unique_ptr<ml::Text>> checkmarkTexts;
98 std::vector<std::unique_ptr<ml::Text>> endTexts;
101 std::vector<std::unique_ptr<ml::Core>> separatorRects;
104 std::vector<MenuEntry> _entries;
106 int _hoveredItem = -1;
107 int _openSubmenu = -1;
117 std::unique_ptr<ml::List> dropdown;
118 std::vector<std::unique_ptr<ml::Text>> checkmarkTexts;
119 std::vector<std::unique_ptr<ml::Text>> endTexts;
120 std::vector<std::unique_ptr<ml::Core>> separatorRects;
122 std::vector<OldDropdown> _pendingDelete;
125 void computeLayout();
127 void buildDropdown(
int entryIdx);
130 float dropdownWidth(
int entryIdx)
const;
131 float dropdownHeight(
int entryIdx)
const;
132 float dropdownX(
int entryIdx)
const;
133 float dropdownY()
const;
134 void drawSubmenu(sf::RenderTarget& target,
135 const sf::RenderStates& states,
136 int entryIdx,
int itemIdx)
const;
137 void activateItem(
int entryIdx,
int itemIdx);
154 static_assert(std::is_base_of_v<MenuBarSettings, S>,
155 "applySettings() requires MenuBarSettings");
163 static_assert(std::is_base_of_v<MenuBarTheme, T>,
164 "applyTheme() requires MenuBarTheme");
168 template<
typename St>
171 static_assert(std::is_base_of_v<MenuBarSettings, St> &&
172 std::is_base_of_v<MenuBarTheme, St>,
173 "applyStyle() requires MenuBarSettings and MenuBarTheme");
182 void addMenu(
const std::string& label, std::vector<MenuItem> items);
197 [[nodiscard]] std::size_t
menuCount()
const {
return _entries.size(); }