UI.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #pragma once
  2. #include <ThirdParty/TurboBadger/tb_widgets_listener.h>
  3. #include "../Core/Object.h"
  4. #include "../UI/UIBatch.h"
  5. namespace Atomic
  6. {
  7. class VertexBuffer;
  8. class UIRenderer;
  9. class UIWidget;
  10. class UI : public Object, private tb::TBWidgetListener
  11. {
  12. OBJECT(UI)
  13. public:
  14. /// Construct.
  15. UI(Context* context);
  16. /// Destruct.
  17. virtual ~UI();
  18. tb::TBWidget* GetRootWidget() { return rootWidget_; }
  19. bool LoadResourceFile(tb::TBWidget* widget, const String& filename);
  20. void SetKeyboardDisabled(bool disabled) {keyboardDisabled_ = disabled; }
  21. void SetInputDisabled(bool disabled) { inputDisabled_ = disabled; }
  22. void Render(bool resetRenderTargets = true);
  23. void GetBatches(PODVector<UIBatch>& batches, PODVector<float>& vertexData, const IntRect& currentScissor);
  24. void SubmitBatchVertexData(Texture* texture, const PODVector<float>& vertexData);
  25. void Initialize(const String& languageFile);
  26. void Shutdown();
  27. void LoadSkin(const String& skin, const String& overrideSkin = String::EMPTY);
  28. bool GetSkinLoaded() { return skinLoaded_; }
  29. /// Load the default skin, will also look in resoures for UI/Skin/skin.ui.txt and
  30. /// UI/Skin/Override/skin.ui.txt for base skin and possible override (TODO: baked in UI setting for load from project)
  31. void LoadDefaultPlayerSkin();
  32. void AddFont(const String& fontFile, const String &name);
  33. void SetDefaultFont(const String& name, int size);
  34. bool IsWidgetWrapped(tb::TBWidget* widget);
  35. // wrap an existing widget we new'd from script
  36. void WrapWidget(UIWidget* widget, tb::TBWidget* tbwidget);
  37. // given a TB widget, creating a UIWidget
  38. UIWidget* WrapWidget(tb::TBWidget* widget);
  39. bool UnwrapWidget(tb::TBWidget* widget);
  40. unsigned DebugGetWrappedWidgetCount() { return widgetWrap_.Size(); }
  41. void PruneUnreachableWidgets();
  42. void GetTBIDString(unsigned id, String& value);
  43. void ShowDebugHud(bool value);
  44. void ToggleDebugHud();
  45. void ShowConsole(bool value);
  46. void ToggleConsole();
  47. UIRenderer* GetRenderer() { return renderer_; }
  48. private:
  49. static WeakPtr<Context> uiContext_;
  50. static void TBFileReader(const char* filename, void** data, unsigned* length);
  51. static void TBIDRegisterStringCallback(unsigned id, const char* value);
  52. void HandleRenderUpdate(StringHash eventType, VariantMap& eventData);
  53. void Render(VertexBuffer* buffer, const PODVector<UIBatch>& batches, unsigned batchStart, unsigned batchEnd);
  54. void SetVertexData(VertexBuffer* dest, const PODVector<float>& vertexData);
  55. // TBWidgetListener
  56. void OnWidgetDelete(tb::TBWidget *widget);
  57. bool OnWidgetDying(tb::TBWidget *widget);
  58. tb::TBWidget* rootWidget_;
  59. UIRenderer* renderer_;
  60. /// UI rendering batches.
  61. PODVector<UIBatch> batches_;
  62. /// UI rendering vertex data.
  63. PODVector<float> vertexData_;
  64. SharedPtr<VertexBuffer> vertexBuffer_;
  65. WeakPtr<Graphics> graphics_;
  66. HashMap<tb::TBWidget*, SharedPtr<UIWidget> > widgetWrap_;
  67. HashMap<unsigned, String> tbidToString_;
  68. bool inputDisabled_;
  69. bool keyboardDisabled_;
  70. bool initialized_;
  71. bool skinLoaded_;
  72. bool consoleVisible_;
  73. // Events
  74. void HandleScreenMode(StringHash eventType, VariantMap& eventData);
  75. void HandleMouseButtonDown(StringHash eventType, VariantMap& eventData);
  76. void HandleMouseButtonUp(StringHash eventType, VariantMap& eventData);
  77. void HandleMouseMove(StringHash eventType, VariantMap& eventData);
  78. void HandleMouseWheel(StringHash eventType, VariantMap& eventData);
  79. void HandleKeyDown(StringHash eventType, VariantMap& eventData);
  80. void HandleKeyUp(StringHash eventType, VariantMap& eventData);
  81. void HandleKey(bool keydown, int keycode, int scancode);
  82. void HandleTextInput(StringHash eventType, VariantMap& eventData);
  83. void HandleUpdate(StringHash eventType, VariantMap& eventData);
  84. void HandleConsoleClosed(StringHash eventType, VariantMap& eventData);
  85. };
  86. }