UI.h 3.2 KB

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