Fix cascade menu bugs

selection
NaiJi ✨ 3 years ago
parent 592f1883aa
commit 76422b1e1f

@ -23,18 +23,28 @@ Editor::Editor(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique
_bpm_calculator->startListening(0); _bpm_calculator->startListening(0);
}); });
auto test_menu_2 = std::make_shared<MenuDrop>();
test_menu_2->setRect(sf::FloatRect{0, 0, 200, 27 * 5});
auto test_cascade_button = std::make_shared<CascadeMenuButton>("Show submenu", font_holder.get(Fonts::Id::GUI));
auto quit_button = std::make_shared<PushButton>("Quit", font_holder.get(Fonts::Id::GUI)); auto quit_button = std::make_shared<PushButton>("Quit", font_holder.get(Fonts::Id::GUI));
quit_button->setCallback(callbacks.onLeaveEditorState); quit_button->setCallback(callbacks.onLeaveEditorState);
auto test_menu = std::make_shared<MenuDrop>(); auto test_menu = std::make_shared<MenuDrop>();
test_menu->setRect(sf::FloatRect{0, 0, 200, 27}); test_menu->setRect(sf::FloatRect{0, 0, 200, 27 * 3});
_menu_bar->setRect(sf::FloatRect(0, 0, window_width, 27)); _menu_bar->setRect(sf::FloatRect(0, 0, window_width, 27));
_menu_bar->addSubMenu("test", test_menu); _menu_bar->addSubMenu("test", test_menu);
test_cascade_button->setSubmenu(test_menu_2);
test_menu->addPushButton(bpm_button); test_menu->addPushButton(bpm_button);
test_menu->addCascadeButton(test_cascade_button);
test_menu->addPushButton(quit_button); test_menu->addPushButton(quit_button);
test_cascade_button->resetRect(test_menu_2);
_music->openFromFile("Uta-test.flac"); _music->openFromFile("Uta-test.flac");
_music->setVolume(5); _music->setVolume(5);
} }

@ -1,5 +1,5 @@
#include "button.h" #include "button.h"
#include <iostream>
Button::Button(const std::string &text, const std::shared_ptr<sf::Font>& font, unsigned int font_size) : Button::Button(const std::string &text, const std::shared_ptr<sf::Font>& font, unsigned int font_size) :
_font(font) _font(font)
{ {

@ -16,10 +16,11 @@ void CascadeMenuButton::input(const sf::Event& event)
break; break;
case sf::Event::MouseMoved: case sf::Event::MouseMoved:
if (isUnderMouse(event.mouseButton.x, event.mouseButton.y)) if (isUnderMouse(event.mouseMove.x, event.mouseMove.y))
{ {
_button_content.setFillColor(sf::Color(84, 158, 253)); _button_content.setFillColor(sf::Color(84, 158, 253));
_submenu->lock(); _submenu->lock();
_submenu->setVisibility(true);
} }
else else
{ {

@ -13,10 +13,9 @@ public:
void setSubmenu(const std::shared_ptr<MenuDrop>& submenu); void setSubmenu(const std::shared_ptr<MenuDrop>& submenu);
const std::shared_ptr<MenuDrop> submenu() const; const std::shared_ptr<MenuDrop> submenu() const;
void resetRect(const std::shared_ptr<MenuDrop>& submenu);
private: private:
std::shared_ptr<MenuDrop> _submenu; std::shared_ptr<MenuDrop> _submenu;
void resetRect(const std::shared_ptr<MenuDrop>& submenu);
}; };

@ -24,7 +24,7 @@ void MenuDrop::input(const sf::Event& event)
case sf::Event::MouseButtonReleased: case sf::Event::MouseButtonReleased:
case sf::Event::MouseMoved: case sf::Event::MouseMoved:
if (!isUnderMouse(event.mouseButton.x, event.mouseButton.y)) if (!isUnderMouse(event.mouseMove.x, event.mouseMove.y))
{ {
if (!isLocked() && !hasActiveSubmenus()) if (!isLocked() && !hasActiveSubmenus())
setVisibility(false); setVisibility(false);
@ -88,7 +88,7 @@ void MenuDrop::addCascadeButton(const std::shared_ptr<CascadeMenuButton>& button
{ {
auto& submenu = button->submenu(); auto& submenu = button->submenu();
submenu->setParent(_parent); submenu->setParent(_parent);
_submenus.emplace_back(); _submenus.emplace_back(submenu);
add(button); add(button);
} }

Loading…
Cancel
Save