BsScriptGUILayout.cpp 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 "BsGUIArea.h"
  8. #include "BsGUILayout.h"
  9. using namespace CamelotFramework;
  10. namespace BansheeEngine
  11. {
  12. ScriptGUILayout::ScriptGUILayout(GUILayout* layout, ScriptGUIArea* parentArea)
  13. :mLayout(layout), mParentArea(parentArea)
  14. {
  15. }
  16. void ScriptGUILayout::initMetaData()
  17. {
  18. metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUILayout", &ScriptGUILayout::initRuntimeData);
  19. MonoManager::registerScriptType(&metaData);
  20. }
  21. void ScriptGUILayout::initRuntimeData()
  22. {
  23. metaData.scriptClass->addInternalCall("Internal_CreateInstanceXFromArea", &ScriptGUILayout::internal_createInstanceXFromArea);
  24. metaData.scriptClass->addInternalCall("Internal_CreateInstanceXFromLayout", &ScriptGUILayout::internal_createInstanceXFromLayout);
  25. metaData.scriptClass->addInternalCall("Internal_CreateInstanceYFromLayout", &ScriptGUILayout::internal_createInstanceYFromLayout);
  26. metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUILayout::internal_destroyInstance);
  27. }
  28. void ScriptGUILayout::internal_createInstanceXFromArea(MonoObject* instance, MonoObject* parentArea)
  29. {
  30. ScriptGUIArea* scriptArea = ScriptGUIArea::toNative(parentArea);
  31. GUIArea* nativeArea = scriptArea->getInternalValue();
  32. ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&nativeArea->getLayout(), scriptArea);
  33. nativeInstance->createInstance(instance);
  34. metaData.thisPtrField->setValue(instance, nativeInstance);
  35. }
  36. void ScriptGUILayout::internal_createInstanceXFromLayout(MonoObject* instance, MonoObject* parentLayout)
  37. {
  38. ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
  39. GUILayout* nativeLayout = scriptLayout->getInternalValue();
  40. GUILayout& layout = nativeLayout->addLayoutX();
  41. ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentArea());
  42. nativeInstance->createInstance(instance);
  43. metaData.thisPtrField->setValue(instance, nativeInstance);
  44. }
  45. void ScriptGUILayout::internal_createInstanceYFromLayout(MonoObject* instance, MonoObject* parentLayout)
  46. {
  47. ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
  48. GUILayout* nativeLayout = scriptLayout->getInternalValue();
  49. GUILayout& layout = nativeLayout->addLayoutY();
  50. ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentArea());
  51. nativeInstance->createInstance(instance);
  52. metaData.thisPtrField->setValue(instance, nativeInstance);
  53. }
  54. void ScriptGUILayout::internal_destroyInstance(ScriptGUILayout* nativeInstance)
  55. {
  56. nativeInstance->destroyInstance();
  57. cm_delete(nativeInstance);
  58. }
  59. }