BsScriptGUILayout.cpp 3.9 KB

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