BsScriptGUIElement.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsScriptObject.h"
  4. namespace BansheeEngine
  5. {
  6. class BS_SCR_BE_EXPORT ScriptGUIElementBase : public ScriptObjectBase
  7. {
  8. public:
  9. ScriptGUIElementBase(MonoObject* instance);
  10. virtual ~ScriptGUIElementBase() {}
  11. GUIElement* getGUIElement() const { return (GUIElement*)mElement; }
  12. virtual void destroy();
  13. protected:
  14. void initialize(GUIElement* element);
  15. private:
  16. bool mIsDestroyed;
  17. GUIElement* mElement;
  18. };
  19. template <class Type>
  20. class TScriptGUIElement : public ScriptObject<Type, ScriptGUIElementBase>
  21. {
  22. public:
  23. virtual ~TScriptGUIElement() {}
  24. protected:
  25. TScriptGUIElement(MonoObject* instance, GUIElement* element)
  26. :ScriptObject(instance)
  27. {
  28. initialize(element);
  29. }
  30. void _onManagedInstanceDeleted()
  31. {
  32. // Elements with a GUIWidget parent are destroyed automatically when widget is destroyed, but those without one
  33. // we need to destroy manually.
  34. if (getGUIElement()->_getParentWidget() == nullptr)
  35. destroy();
  36. ScriptObject::_onManagedInstanceDeleted();
  37. }
  38. };
  39. class BS_SCR_BE_EXPORT ScriptGUIElement : public ScriptObject<ScriptGUIElement>
  40. {
  41. public:
  42. SCRIPT_OBJ(BansheeEngineAssemblyName, "BansheeEngine", "GUIElement")
  43. private:
  44. static void internal_destroy(ScriptGUIElementBase* nativeInstance);
  45. static void internal_setVisible(ScriptGUIElementBase* nativeInstance, bool visible);
  46. static void internal_setParent(ScriptGUIElementBase* nativeInstance, MonoObject* parentLayout);
  47. ScriptGUIElement(MonoObject* instance);
  48. };
  49. }