BsScriptGUILayout.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "BsScriptGUILayout.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsScriptGUIScrollArea.h"
  7. #include "BsGUILayout.h"
  8. #include "BsGUILayoutX.h"
  9. #include "BsGUILayoutY.h"
  10. #include "BsGUIPanel.h"
  11. #include "BsGUIScrollArea.h"
  12. namespace BansheeEngine
  13. {
  14. ScriptGUILayout::ScriptGUILayout(MonoObject* instance, GUILayout* layout)
  15. :TScriptGUIElementBase(instance, layout), mLayout(layout), mIsDestroyed(false)
  16. {
  17. }
  18. void ScriptGUILayout::initRuntimeData()
  19. {
  20. metaData.scriptClass->addInternalCall("Internal_CreateInstanceX", &ScriptGUILayout::internal_createInstanceX);
  21. metaData.scriptClass->addInternalCall("Internal_CreateInstanceY", &ScriptGUILayout::internal_createInstanceY);
  22. metaData.scriptClass->addInternalCall("Internal_CreateInstancePanel", &ScriptGUILayout::internal_createInstancePanel);
  23. metaData.scriptClass->addInternalCall("Internal_CreateInstanceYFromScrollArea", &ScriptGUILayout::internal_createInstanceYFromScrollArea);
  24. metaData.scriptClass->addInternalCall("Internal_AddElement", &ScriptGUILayout::internal_addElement);
  25. metaData.scriptClass->addInternalCall("Internal_InsertElement", &ScriptGUILayout::internal_insertElement);
  26. }
  27. void ScriptGUILayout::destroy()
  28. {
  29. if(!mIsDestroyed)
  30. {
  31. GUILayout::destroy(mLayout);
  32. mLayout = nullptr;
  33. mIsDestroyed = true;
  34. }
  35. }
  36. void ScriptGUILayout::internal_createInstanceX(MonoObject* instance, MonoArray* guiOptions)
  37. {
  38. GUIOptions options;
  39. UINT32 arrayLen = (UINT32)mono_array_length(guiOptions);
  40. for (UINT32 i = 0; i < arrayLen; i++)
  41. options.addOption(mono_array_get(guiOptions, GUIOption, i));
  42. GUILayout* layout = GUILayoutX::create(options);
  43. ScriptGUILayout* nativeInstance = new (bs_alloc<ScriptGUILayout>()) ScriptGUILayout(instance, layout);
  44. }
  45. void ScriptGUILayout::internal_createInstanceY(MonoObject* instance, MonoArray* guiOptions)
  46. {
  47. GUIOptions options;
  48. UINT32 arrayLen = (UINT32)mono_array_length(guiOptions);
  49. for (UINT32 i = 0; i < arrayLen; i++)
  50. options.addOption(mono_array_get(guiOptions, GUIOption, i));
  51. GUILayout* layout = GUILayoutY::create(options);
  52. ScriptGUILayout* nativeInstance = new (bs_alloc<ScriptGUILayout>()) ScriptGUILayout(instance, layout);
  53. }
  54. void ScriptGUILayout::internal_createInstancePanel(MonoObject* instance, INT16 depth, UINT16 depthRangeMin, UINT32 depthRangeMax, MonoArray* guiOptions)
  55. {
  56. GUIOptions options;
  57. UINT32 arrayLen = (UINT32)mono_array_length(guiOptions);
  58. for (UINT32 i = 0; i < arrayLen; i++)
  59. options.addOption(mono_array_get(guiOptions, GUIOption, i));
  60. GUILayout* layout = GUIPanel::create(depth, depthRangeMin, depthRangeMax, options);
  61. ScriptGUILayout* nativeInstance = new (bs_alloc<ScriptGUILayout>()) ScriptGUILayout(instance, layout);
  62. }
  63. void ScriptGUILayout::internal_createInstanceYFromScrollArea(MonoObject* instance, MonoObject* parentScrollArea)
  64. {
  65. ScriptGUIScrollArea* scriptScrollArea = ScriptGUIScrollArea::toNative(parentScrollArea);
  66. GUIScrollArea* scrollArea = (GUIScrollArea*)scriptScrollArea->getGUIElement();
  67. GUILayout* nativeLayout = &scrollArea->getLayout();
  68. ScriptGUILayout* nativeInstance = new (bs_alloc<ScriptGUILayout>())
  69. ScriptGUILayout(instance, nativeLayout);
  70. }
  71. void ScriptGUILayout::internal_addElement(ScriptGUILayout* instance, ScriptGUIElementTBase* element)
  72. {
  73. instance->getInternalValue()->addElement(element->getGUIElement());
  74. }
  75. void ScriptGUILayout::internal_insertElement(ScriptGUILayout* instance, UINT32 index, ScriptGUIElementTBase* element)
  76. {
  77. instance->getInternalValue()->insertElement(index, element->getGUIElement());
  78. }
  79. ScriptGUIPanel::ScriptGUIPanel(MonoObject* instance)
  80. :ScriptObject(instance)
  81. { }
  82. void ScriptGUIPanel::initRuntimeData()
  83. { }
  84. MonoObject* ScriptGUIPanel::createFromExisting(GUIPanel* panel)
  85. {
  86. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  87. ScriptGUILayout* nativeInstance = new (bs_alloc<ScriptGUILayout>()) ScriptGUILayout(managedInstance, panel);
  88. return managedInstance;
  89. }
  90. }