DeveloperConsole.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright (C) 2009-2021, 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. {
  12. /// @addtogroup core
  13. /// @{
  14. /// Developer console UI.
  15. class DeveloperConsole : public UiImmediateModeBuilder
  16. {
  17. public:
  18. DeveloperConsole(UiManager* ui)
  19. : UiImmediateModeBuilder(ui)
  20. {
  21. }
  22. ~DeveloperConsole();
  23. ANKI_USE_RESULT Error init(AllocAlignedCallback allocCb, void* allocCbUserData, ScriptManager* scriptManager);
  24. void build(CanvasPtr ctx) override;
  25. private:
  26. static constexpr U MAX_LOG_ITEMS = 64;
  27. class LogItem : public IntrusiveListEnabled<LogItem>
  28. {
  29. public:
  30. const char* m_file;
  31. const char* m_func;
  32. const char* m_subsystem;
  33. String m_msg;
  34. I32 m_line;
  35. LoggerMessageType m_type;
  36. };
  37. HeapAllocator<U8> m_alloc;
  38. FontPtr m_font;
  39. IntrusiveList<LogItem> m_logItems;
  40. U32 m_logItemCount = 0;
  41. Array<char, 256> m_inputText;
  42. Atomic<U32> m_logItemsTimestamp = {1};
  43. U32 m_logItemsTimestampConsumed = 0;
  44. ScriptEnvironment m_scriptEnv;
  45. void newLogItem(const LoggerMessageInfo& inf);
  46. static void loggerCallback(void* userData, const LoggerMessageInfo& info)
  47. {
  48. static_cast<DeveloperConsole*>(userData)->newLogItem(info);
  49. }
  50. };
  51. /// @}
  52. } // end namespace anki