#pragma once #include "Framebuffer.h" #include "Window.h" #include #include #include #include #include #include class WindowServer { public: WindowServer(Framebuffer& framebuffer) : m_framebuffer(framebuffer) , m_cursor({ framebuffer.width / 2, framebuffer.height / 2 }) { invalidate(m_framebuffer.area()); } void add_window(int fd, BAN::RefPtr window); void for_each_window(const BAN::Function& callback); void on_key_event(LibInput::KeyEvent event); void on_mouse_button(LibInput::MouseButtonEvent event); void on_mouse_move(LibInput::MouseMoveEvent event); void on_mouse_scroll(LibInput::MouseScrollEvent event); void set_focused_window(BAN::RefPtr window); void invalidate(Rectangle area); private: Framebuffer& m_framebuffer; BAN::Vector> m_windows_ordered; BAN::HashMap> m_windows; bool m_is_mod_key_held { false }; bool m_is_moving_window { false }; BAN::RefPtr m_focused_window; Position m_cursor; };