BsScriptGUILayout.cpp 4.6 KB

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