BsScriptGUILayout.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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::internal_createInstanceXFromArea(MonoObject* instance, MonoObject* parentArea)
  39. {
  40. ScriptGUIArea* scriptArea = ScriptGUIArea::toNative(parentArea);
  41. GUIArea* nativeArea = scriptArea->getInternalValue();
  42. ScriptGUILayout* nativeInstance = new (bs_alloc<ScriptGUILayout>())
  43. ScriptGUILayout(instance, &nativeArea->getLayout(), nullptr);
  44. }
  45. void ScriptGUILayout::internal_createInstanceXFromLayout(MonoObject* instance, MonoObject* parentLayout)
  46. {
  47. ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
  48. GUILayout* nativeLayout = scriptLayout->getInternalValue();
  49. GUILayout& layout = nativeLayout->addLayoutX();
  50. ScriptGUILayout* nativeInstance = new (bs_alloc<ScriptGUILayout>())
  51. ScriptGUILayout(instance, &layout, nativeLayout);
  52. }
  53. void ScriptGUILayout::internal_createInstanceYFromLayout(MonoObject* instance, MonoObject* parentLayout)
  54. {
  55. ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
  56. GUILayout* nativeLayout = scriptLayout->getInternalValue();
  57. GUILayout& layout = nativeLayout->addLayoutY();
  58. ScriptGUILayout* nativeInstance = new (bs_alloc<ScriptGUILayout>())
  59. ScriptGUILayout(instance, &layout, nativeLayout);
  60. }
  61. void ScriptGUILayout::internal_createInstanceYFromScrollArea(MonoObject* instance, MonoObject* parentScrollArea)
  62. {
  63. ScriptGUIScrollArea* scriptScrollArea = ScriptGUIScrollArea::toNative(parentScrollArea);
  64. GUIScrollArea* scrollArea = (GUIScrollArea*)scriptScrollArea->getGUIElement();
  65. GUILayout* nativeLayout = &scrollArea->getLayout();
  66. ScriptGUILayout* nativeInstance = new (bs_alloc<ScriptGUILayout>())
  67. ScriptGUILayout(instance, nativeLayout, nativeLayout);
  68. }
  69. void ScriptGUILayout::internal_destroy(ScriptGUILayout* nativeInstance)
  70. {
  71. nativeInstance->destroy();
  72. }
  73. void ScriptGUILayout::internal_setVisible(ScriptGUILayout* nativeInstance, bool visible)
  74. {
  75. if(visible)
  76. nativeInstance->getInternalValue()->enableRecursively();
  77. else
  78. nativeInstance->getInternalValue()->disableRecursively();
  79. }
  80. void ScriptGUILayout::internal_setParent(ScriptGUILayout* nativeInstance, MonoObject* parentLayout)
  81. {
  82. // Layout parent is static, so do nothing
  83. }
  84. }