#include "cascademenubutton.h" #include "menudrop.h" CascadeMenuButton::CascadeMenuButton(const std::string& text, const std::shared_ptr& factory, unsigned int font_size) : Button(text, factory, font_size) { _color_idle = kku::Color{230, 230, 230, 255}; _color_hover = kku::Color{84, 158, 253, 255}; _button_content = factory->getRectangle(); _button_content->setColor(_color_idle); } void CascadeMenuButton::input(const kku::SystemEvent& event) { if (!_submenu) return; switch (event.type) { default: break; case kku::SystemEvent::Type::MouseMove: { const auto position = std::get(event.data).position; if (isUnderMouse(position)) { _button_content->setColor(_color_hover); _submenu->lock(); _submenu->setVisibility(true); } else { _submenu->unlock(); if (!_submenu->isVisible()) { _button_content->setColor(_color_idle); } } break; } } } void CascadeMenuButton::setRect(const kku::Area& 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(kku::Point{_button_content->getPosition().x + _button_content->getRect().width, _button_content->getPosition().y}); } } void CascadeMenuButton::setFillColors(kku::Color&& idle_color, kku::Color&& hover_color) { _color_idle = idle_color; _color_hover = hover_color; }