// Copyright (C) 2009-2023, Panagiotis Christopoulos Charitos and contributors. // All rights reserved. // Code licensed under the BSD License. // http://www.anki3d.org/LICENSE #pragma once #include #include #include #include namespace anki { /// @addtogroup core /// @{ /// Developer console UI. class DeveloperConsole : public UiImmediateModeBuilder { public: DeveloperConsole() = default; ~DeveloperConsole(); Error init(ScriptManager* scriptManager); void build(CanvasPtr ctx) override; private: static constexpr U kMaxLogItems = 64; class LogItem : public IntrusiveListEnabled { public: const Char* m_file; const Char* m_func; const Char* m_subsystem; UiString m_threadName; UiString m_msg; I32 m_line; LoggerMessageType m_type; }; FontPtr m_font; IntrusiveList m_logItems; U32 m_logItemCount = 0; Array m_inputText; Atomic m_logItemsTimestamp = {1}; U32 m_logItemsTimestampConsumed = 0; ScriptEnvironment m_scriptEnv; void newLogItem(const LoggerMessageInfo& inf); static void loggerCallback(void* userData, const LoggerMessageInfo& info) { static_cast(userData)->newLogItem(info); } }; /// @} } // end namespace anki