DeveloperConsole.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright (C) 2009-2023, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Ui.h>
  7. #include <AnKi/Core/Common.h>
  8. #include <AnKi/Util/List.h>
  9. #include <AnKi/Script/ScriptEnvironment.h>
  10. namespace anki {
  11. /// @addtogroup core
  12. /// @{
  13. /// Developer console UI.
  14. class DeveloperConsole : public UiImmediateModeBuilder
  15. {
  16. public:
  17. DeveloperConsole() = default;
  18. ~DeveloperConsole();
  19. Error init(ScriptManager* scriptManager);
  20. void build(CanvasPtr ctx) override;
  21. private:
  22. static constexpr U kMaxLogItems = 64;
  23. class LogItem : public IntrusiveListEnabled<LogItem>
  24. {
  25. public:
  26. const Char* m_file;
  27. const Char* m_func;
  28. const Char* m_subsystem;
  29. UiString m_threadName;
  30. UiString m_msg;
  31. I32 m_line;
  32. LoggerMessageType m_type;
  33. };
  34. FontPtr m_font;
  35. IntrusiveList<LogItem> m_logItems;
  36. U32 m_logItemCount = 0;
  37. Array<char, 256> m_inputText;
  38. Atomic<U32> m_logItemsTimestamp = {1};
  39. U32 m_logItemsTimestampConsumed = 0;
  40. ScriptEnvironment m_scriptEnv;
  41. void newLogItem(const LoggerMessageInfo& inf);
  42. static void loggerCallback(void* userData, const LoggerMessageInfo& info)
  43. {
  44. static_cast<DeveloperConsole*>(userData)->newLogItem(info);
  45. }
  46. };
  47. /// @}
  48. } // end namespace anki