#include "cascademenubutton.h" #include "menudrop.h" CascadeMenuButton::CascadeMenuButton(const std::string& text, const std::shared_ptr &font, unsigned int font_size) : Button(text, font, font_size) { _color_idle = sf::Color(230, 230, 230); _color_hover = sf::Color(84, 158, 253); _button_content.setFillColor(_color_idle); } void CascadeMenuButton::input(const sf::Event& event) { if (!_submenu) return; switch (event.type) { default: break; case sf::Event::MouseMoved: if (isUnderMouse(event.mouseMove.x, event.mouseMove.y)) { _button_content.setFillColor(_color_hover); _submenu->lock(); _submenu->setVisibility(true); } else { _submenu->unlock(); if (!_submenu->isVisible()) { _button_content.setFillColor(sf::Color(_color_idle)); } } break; } } void CascadeMenuButton::setRect(const sf::FloatRect& rect) { Button::setRect(rect); resetRect(); } void CascadeMenuButton::setSubmenu(const std::shared_ptr& submenu) { _submenu = submenu; resetRect(); } const std::shared_ptr CascadeMenuButton::submenu() const { return _submenu; } void CascadeMenuButton::resetRect() { if (_submenu) { _submenu->setPosition({_button_content.getPosition().x + _button_content.getSize().x, _button_content.getPosition().y}); } } void CascadeMenuButton::setFillColors(sf::Color&& idle_color, sf::Color&& hover_color) { _color_idle = idle_color; _color_hover = hover_color; }