#include #include struct ColorWidget : public ui::Widget { public: ColorWidget(ui::Color first, ui::Color second) : m_color(first), m_first_color(first), m_second_color(second) { } Result handle_mouse_move(ui::Point) override { m_color = m_second_color; return ui::EventResult::DidHandle; } Result handle_mouse_leave() override { m_color = m_first_color; return ui::EventResult::DidHandle; } Result handle_mouse_down(ui::Point, int) override { return ui::EventResult::DidNotHandle; } Result handle_mouse_up(ui::Point, int) override { return ui::EventResult::DidNotHandle; } Result draw(ui::Canvas& canvas) override { canvas.fill(m_color); return {}; } private: ui::Color m_color; ui::Color m_first_color; ui::Color m_second_color; }; Result luna_main(int argc, char** argv) { ui::App app; TRY(app.init(argc, argv)); auto* window = TRY(ui::Window::create(ui::Rect { 200, 200, 400, 300 })); app.set_main_window(window); window->set_title("Main Window"); window->set_background(ui::CYAN); ui::HorizontalLayout layout; window->set_main_widget(layout); ColorWidget green(ui::GREEN, ui::WHITE); layout.add_widget(green); ColorWidget blue(ui::BLUE, ui::GRAY); layout.add_widget(blue); ui::VerticalLayout sublayout; layout.add_widget(sublayout); ColorWidget red(ui::RED, ui::CYAN); sublayout.add_widget(red); ColorWidget white(ui::WHITE, ui::GREEN); sublayout.add_widget(white); window->draw(); return app.run(); }