/** * @file Button.h * @author apio (cloudapio.eu) * @brief A clickable component that triggers an action when pressed. * * @copyright Copyright (c) 2023, the Luna authors. * */ #pragma once #include <os/Action.h> #include <ui/Widget.h> namespace ui { class Button : public Widget { public: Button(Rect rect); void set_widget(Widget& widget); void set_action(os::Action&& action); Result<EventResult> handle_mouse_move(Point position) override; Result<EventResult> handle_mouse_leave() override; Result<EventResult> handle_mouse_down(Point position, int buttons) override; Result<EventResult> handle_mouse_up(Point position, int buttons) override; Result<EventResult> handle_key_event(const ui::KeyEventRequest& request) override; Result<void> draw(Canvas& canvas) override; private: bool m_hovered { false }; bool m_clicked { false }; Widget* m_child; os::Action m_action; }; }