BsScriptGUIArea.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include "BsScriptGUIArea.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsScriptGUIArea.h"
  7. #include "BsGUIArea.h"
  8. #include "BsGUILayout.h"
  9. #include "BsScriptGUIBase.h"
  10. using namespace CamelotFramework;
  11. namespace BansheeEngine
  12. {
  13. ScriptGUIArea::ScriptGUIArea(GUIArea* area, ScriptGUIBase* parentGUI)
  14. :mArea(area), mParentGUI(parentGUI), mIsDestroyed(false)
  15. {
  16. }
  17. void ScriptGUIArea::initMetaData()
  18. {
  19. metaData = ScriptMeta(BansheeEngineAssemblyName, "BansheeEngine", "GUIArea", &ScriptGUIArea::initRuntimeData);
  20. MonoManager::registerScriptType(&metaData);
  21. }
  22. void ScriptGUIArea::initRuntimeData()
  23. {
  24. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIArea::internal_createInstance);
  25. metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableX", &ScriptGUIArea::internal_createInstanceResizeableX);
  26. metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableY", &ScriptGUIArea::internal_createInstanceResizeableY);
  27. metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableXY", &ScriptGUIArea::internal_createInstanceResizeableXY);
  28. metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIArea::internal_destroyInstance);
  29. metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUIArea::internal_destroy);
  30. metaData.scriptClass->addInternalCall("Internal_SetVisible", &ScriptGUIArea::internal_setVisible);
  31. }
  32. void ScriptGUIArea::destroy()
  33. {
  34. if(!mIsDestroyed)
  35. {
  36. GUIArea::destroy(mArea);
  37. mArea = nullptr;
  38. mIsDestroyed = true;
  39. }
  40. }
  41. void ScriptGUIArea::internal_createInstance(MonoObject* instance, MonoObject* parentGUI, CM::INT32 x, CM::INT32 y, CM::UINT32 width, CM::UINT32 height, CM::UINT16 depth)
  42. {
  43. ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
  44. GUIArea* nativeArea = GUIArea::create(scriptGUIBase->getWidget(), x, y, width, height, depth);
  45. ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
  46. nativeInstance->createInstance(instance);
  47. metaData.thisPtrField->setValue(instance, &nativeInstance);
  48. }
  49. void ScriptGUIArea::internal_createInstanceResizeableX(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetLeft, CM::UINT32 offsetRight,
  50. CM::UINT32 offsetTop, CM::UINT32 height, CM::UINT16 depth)
  51. {
  52. ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
  53. GUIArea* nativeArea = GUIArea::createStretchedX(scriptGUIBase->getWidget(), offsetLeft, offsetRight, offsetTop, height, depth);
  54. ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
  55. nativeInstance->createInstance(instance);
  56. metaData.thisPtrField->setValue(instance, &nativeInstance);
  57. }
  58. void ScriptGUIArea::internal_createInstanceResizeableY(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetTop,
  59. CM::UINT32 offsetBottom, CM::UINT32 offsetLeft, CM::UINT32 width, CM::UINT16 depth)
  60. {
  61. ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
  62. GUIArea* nativeArea = GUIArea::createStretchedY(scriptGUIBase->getWidget(), offsetTop, offsetBottom, offsetLeft, width, depth);
  63. ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
  64. nativeInstance->createInstance(instance);
  65. metaData.thisPtrField->setValue(instance, &nativeInstance);
  66. }
  67. void ScriptGUIArea::internal_createInstanceResizeableXY(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetLeft,
  68. CM::UINT32 offsetRight, CM::UINT32 offsetTop, CM::UINT32 offsetBottom, CM::UINT16 depth)
  69. {
  70. ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
  71. GUIArea* nativeArea = GUIArea::createStretchedXY(scriptGUIBase->getWidget(), offsetLeft, offsetRight, offsetTop, offsetBottom, depth);
  72. ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
  73. nativeInstance->createInstance(instance);
  74. metaData.thisPtrField->setValue(instance, &nativeInstance);
  75. }
  76. void ScriptGUIArea::internal_destroyInstance(ScriptGUIArea* nativeInstance)
  77. {
  78. nativeInstance->destroy();
  79. cm_delete(nativeInstance);
  80. }
  81. void ScriptGUIArea::internal_destroy(ScriptGUIArea* nativeInstance)
  82. {
  83. nativeInstance->destroy();
  84. }
  85. void ScriptGUIArea::internal_setVisible(ScriptGUIArea* nativeInstance, bool visible)
  86. {
  87. if(visible)
  88. nativeInstance->getInternalValue()->enable();
  89. else
  90. nativeInstance->getInternalValue()->disable();
  91. }
  92. }