/** * @file Widget.h * @author apio (cloudapio.eu) * @brief Abstract widget class. * * @copyright Copyright (c) 2023, the Luna authors. * */ #pragma once #include #include #include #include #include #include namespace ui { class Window; enum class EventResult { DidHandle, DidNotHandle, }; class Widget { public: virtual Result handle_mouse_move(Point position) { ignore(position); return EventResult::DidNotHandle; } virtual Result handle_mouse_down(Point position, int buttons) { ignore(position, buttons); return EventResult::DidNotHandle; } virtual Result handle_mouse_up(Point position, int buttons) { ignore(position, buttons); return EventResult::DidNotHandle; } virtual Result handle_mouse_leave() { return EventResult::DidNotHandle; } virtual Result handle_key_event(const ui::KeyEventRequest& request) { ignore(request); return EventResult::DidNotHandle; } virtual Result draw(Canvas& canvas); void set_window(Window* window, Rect rect, Badge) { m_window = window; m_rect = rect; } void set_parent(Widget* parent) { m_parent = parent; m_window = parent->m_window; } Widget* parent() { return m_parent; } Window* window() { return m_window; } Rect& rect() { return m_rect; } protected: Widget* m_parent { nullptr }; Window* m_window; Rect m_rect { 0, 0, 50, 50 }; }; }