#pragma once namespace lt { class Event; class SharedContext; class UserInterface { public: static auto create(Ref sharedContext) -> Scope; static void dockspace_begin(); static void dockspace_end(); UserInterface(const UserInterface &) = delete; auto operator=(const UserInterface &) -> UserInterface & = delete; virtual ~UserInterface() = default; void init(Ref sharedContext); virtual void platform_implementation(Ref sharedContext) = 0; virtual void begin() = 0; virtual void end() = 0; virtual void log_debug_data() = 0; protected: UserInterface(); private: static UserInterface *s_context; void set_dark_theme_colors(); }; } // namespace lt