BsScriptGUIArea.cpp 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "BsScriptGUIArea.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. #include "BsScriptGUIBase.h"
  10. using namespace CamelotFramework;
  11. namespace BansheeEngine
  12. {
  13. ScriptGUIArea::ScriptGUIArea(GUIArea* area, ScriptGUIBase* parentGUI)
  14. :mArea(area), mParentGUI(parentGUI)
  15. {
  16. }
  17. void ScriptGUIArea::initMetaData()
  18. {
  19. metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUIArea", &ScriptGUIArea::initRuntimeData);
  20. MonoManager::registerScriptType(&metaData);
  21. }
  22. void ScriptGUIArea::initRuntimeData()
  23. {
  24. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIArea::internal_createInstance);
  25. metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableX", &ScriptGUIArea::internal_createInstanceResizeableX);
  26. metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableY", &ScriptGUIArea::internal_createInstanceResizeableY);
  27. metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableXY", &ScriptGUIArea::internal_createInstanceResizeableXY);
  28. metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIArea::internal_destroyInstance);
  29. }
  30. GUIWidget& ScriptGUIArea::getParentWidget() const
  31. {
  32. return mParentGUI->getWidget();
  33. }
  34. void ScriptGUIArea::internal_createInstance(MonoObject* instance, MonoObject* parentGUI, CM::INT32 x, CM::INT32 y, CM::UINT32 width, CM::UINT32 height, CM::UINT16 depth)
  35. {
  36. ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
  37. GUIArea* nativeArea = GUIArea::create(scriptGUIBase->getWidget(), x, y, width, height, depth);
  38. ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
  39. nativeInstance->createInstance(instance);
  40. metaData.thisPtrField->setValue(instance, nativeInstance);
  41. }
  42. void ScriptGUIArea::internal_createInstanceResizeableX(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetLeft, CM::UINT32 offsetRight,
  43. CM::UINT32 offsetTop, CM::UINT32 height, CM::UINT16 depth)
  44. {
  45. ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
  46. GUIArea* nativeArea = GUIArea::createStretchedX(scriptGUIBase->getWidget(), offsetLeft, offsetRight, offsetTop, height, depth);
  47. ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
  48. nativeInstance->createInstance(instance);
  49. metaData.thisPtrField->setValue(instance, nativeInstance);
  50. }
  51. void ScriptGUIArea::internal_createInstanceResizeableY(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetTop,
  52. CM::UINT32 offsetBottom, CM::UINT32 offsetLeft, CM::UINT32 width, CM::UINT16 depth)
  53. {
  54. ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
  55. GUIArea* nativeArea = GUIArea::createStretchedY(scriptGUIBase->getWidget(), offsetTop, offsetBottom, offsetLeft, width, depth);
  56. ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
  57. nativeInstance->createInstance(instance);
  58. metaData.thisPtrField->setValue(instance, nativeInstance);
  59. }
  60. void ScriptGUIArea::internal_createInstanceResizeableXY(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetLeft,
  61. CM::UINT32 offsetRight, CM::UINT32 offsetTop, CM::UINT32 offsetBottom, CM::UINT16 depth)
  62. {
  63. ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
  64. GUIArea* nativeArea = GUIArea::createStretchedXY(scriptGUIBase->getWidget(), offsetLeft, offsetRight, offsetTop, offsetBottom, depth);
  65. ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
  66. nativeInstance->createInstance(instance);
  67. metaData.thisPtrField->setValue(instance, nativeInstance);
  68. }
  69. void ScriptGUIArea::internal_destroyInstance(ScriptGUIArea* nativeInstance)
  70. {
  71. nativeInstance->destroyInstance();
  72. cm_delete(nativeInstance);
  73. }
  74. }