#ifndef __RECOMP_UI__ #define __RECOMP_UI__ #include #include #include "SDL.h" namespace Rml { class ElementDocument; class EventListenerInstancer; class Context; class Event; } namespace recomp { class UiEventListenerInstancer; class MenuController { public: virtual ~MenuController() {} virtual Rml::ElementDocument* load_document(Rml::Context* context) = 0; virtual void register_events(UiEventListenerInstancer& listener) = 0; virtual void make_bindings(Rml::Context* context) = 0; }; std::unique_ptr create_launcher_menu(); std::unique_ptr create_config_menu(); using event_handler_t = void(const std::string& param, Rml::Event&); void queue_event(const SDL_Event& event); bool try_deque_event(SDL_Event& out); std::unique_ptr make_event_listener_instancer(); void register_event(UiEventListenerInstancer& listener, const std::string& name, event_handler_t* handler); enum class Menu { Launcher, Config, None }; void set_current_menu(Menu menu); Menu get_current_menu(); enum class ConfigSubmenu { Graphics, Controls, Audio, Count }; void set_config_submenu(ConfigSubmenu submenu); void destroy_ui(); void apply_color_hack(); void get_window_size(int& width, int& height); void set_cursor_visible(bool visible); } #endif