BsScriptGUILayout.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #include "BsScriptGUILayout.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsScriptGUIArea.h"
  7. #include "BsScriptGUIScrollArea.h"
  8. #include "BsGUIArea.h"
  9. #include "BsGUILayout.h"
  10. #include "BsGUIScrollArea.h"
  11. namespace BansheeEngine
  12. {
  13. ScriptGUILayout::ScriptGUILayout(GUILayout* layout, GUILayout* parentLayout)
  14. :mLayout(layout), mParentLayout(parentLayout), mIsDestroyed(false)
  15. {
  16. }
  17. void ScriptGUILayout::initMetaData()
  18. {
  19. metaData = ScriptMeta(BansheeEngineAssemblyName, "BansheeEngine", "GUILayout", &ScriptGUILayout::initRuntimeData);
  20. MonoManager::registerScriptType(&metaData);
  21. }
  22. void ScriptGUILayout::initRuntimeData()
  23. {
  24. metaData.scriptClass->addInternalCall("Internal_CreateInstanceXFromArea", &ScriptGUILayout::internal_createInstanceXFromArea);
  25. metaData.scriptClass->addInternalCall("Internal_CreateInstanceXFromLayout", &ScriptGUILayout::internal_createInstanceXFromLayout);
  26. metaData.scriptClass->addInternalCall("Internal_CreateInstanceYFromLayout", &ScriptGUILayout::internal_createInstanceYFromLayout);
  27. metaData.scriptClass->addInternalCall("Internal_CreateInstanceYFromScrollArea", &ScriptGUILayout::internal_createInstanceYFromScrollArea);
  28. metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUILayout::internal_destroyInstance);
  29. metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUILayout::internal_destroy);
  30. metaData.scriptClass->addInternalCall("Internal_SetVisible", &ScriptGUILayout::internal_setVisible);
  31. metaData.scriptClass->addInternalCall("Internal_SetParent", &ScriptGUILayout::internal_setParent);
  32. }
  33. void ScriptGUILayout::destroy()
  34. {
  35. if(!mIsDestroyed)
  36. {
  37. if(mParentLayout != nullptr)
  38. mParentLayout->removeLayout(*mLayout);
  39. mLayout = nullptr;
  40. mParentLayout = nullptr;
  41. mIsDestroyed = true;
  42. }
  43. }
  44. void ScriptGUILayout::internal_createInstanceXFromArea(MonoObject* instance, MonoObject* parentArea)
  45. {
  46. ScriptGUIArea* scriptArea = ScriptGUIArea::toNative(parentArea);
  47. GUIArea* nativeArea = scriptArea->getInternalValue();
  48. ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>())
  49. ScriptGUILayout(&nativeArea->getLayout(), nullptr);
  50. nativeInstance->createInstance(instance);
  51. metaData.thisPtrField->setValue(instance, &nativeInstance);
  52. }
  53. void ScriptGUILayout::internal_createInstanceXFromLayout(MonoObject* instance, MonoObject* parentLayout)
  54. {
  55. ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
  56. GUILayout* nativeLayout = scriptLayout->getInternalValue();
  57. GUILayout& layout = nativeLayout->addLayoutX();
  58. ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>())
  59. ScriptGUILayout(&layout, nativeLayout);
  60. nativeInstance->createInstance(instance);
  61. metaData.thisPtrField->setValue(instance, &nativeInstance);
  62. }
  63. void ScriptGUILayout::internal_createInstanceYFromLayout(MonoObject* instance, MonoObject* parentLayout)
  64. {
  65. ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
  66. GUILayout* nativeLayout = scriptLayout->getInternalValue();
  67. GUILayout& layout = nativeLayout->addLayoutY();
  68. ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>())
  69. ScriptGUILayout(&layout, nativeLayout);
  70. nativeInstance->createInstance(instance);
  71. metaData.thisPtrField->setValue(instance, &nativeInstance);
  72. }
  73. void ScriptGUILayout::internal_createInstanceYFromScrollArea(MonoObject* instance, MonoObject* parentScrollArea)
  74. {
  75. ScriptGUIScrollArea* scriptScrollArea = ScriptGUIScrollArea::toNative(parentScrollArea);
  76. GUILayout* nativeLayout = &scriptScrollArea->getInternalValue()->getLayout();
  77. ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>())
  78. ScriptGUILayout(nativeLayout, nativeLayout);
  79. nativeInstance->createInstance(instance);
  80. metaData.thisPtrField->setValue(instance, &nativeInstance);
  81. }
  82. void ScriptGUILayout::internal_destroyInstance(ScriptGUILayout* nativeInstance)
  83. {
  84. nativeInstance->destroy();
  85. cm_delete(nativeInstance);
  86. }
  87. void ScriptGUILayout::internal_destroy(ScriptGUILayout* nativeInstance)
  88. {
  89. nativeInstance->destroy();
  90. }
  91. void ScriptGUILayout::internal_setVisible(ScriptGUILayout* nativeInstance, bool visible)
  92. {
  93. if(visible)
  94. nativeInstance->getInternalValue()->enableRecursively();
  95. else
  96. nativeInstance->getInternalValue()->disableRecursively();
  97. }
  98. void ScriptGUILayout::internal_setParent(ScriptGUILayout* nativeInstance, MonoObject* parentLayout)
  99. {
  100. // Layout parent is static, so do nothing
  101. }
  102. }