BsScriptGUIPanel.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include "BsScriptGUIPanel.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 "BsMonoMethod.h"
  10. namespace BansheeEngine
  11. {
  12. MonoMethod* ScriptGUIPanel::mDestroyMethod = nullptr;
  13. ScriptGUIPanel::ScriptGUIPanel(MonoObject* instance)
  14. :ScriptObject(instance)
  15. {
  16. }
  17. void ScriptGUIPanel::initRuntimeData()
  18. {
  19. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIPanel::internal_createInstance);
  20. metaData.scriptClass->addInternalCall("Internal_SetArea", &ScriptGUIPanel::internal_setArea);
  21. mDestroyMethod = metaData.scriptClass->getMethod("Destroy", 0);
  22. }
  23. void ScriptGUIPanel::internal_createInstance(MonoObject* instance)
  24. {
  25. ScriptGUIPanel* nativeInstance = new (bs_alloc<ScriptGUIPanel>()) ScriptGUIPanel(instance);
  26. }
  27. void ScriptGUIPanel::internal_setArea(ScriptGUIPanel* thisPtr, INT32 x, INT32 y, UINT32 width, UINT32 height, UINT16 depth)
  28. {
  29. thisPtr->mMyArea.x = x;
  30. thisPtr->mMyArea.y = y;
  31. thisPtr->mMyArea.width = width;
  32. thisPtr->mMyArea.height = height;
  33. thisPtr->updateArea();
  34. }
  35. void ScriptGUIPanel::setParentArea(INT32 x, INT32 y, UINT32 width, UINT32 height)
  36. {
  37. mParentArea.x = x;
  38. mParentArea.y = y;
  39. mParentArea.width = width;
  40. mParentArea.height = height;
  41. updateArea();
  42. }
  43. void ScriptGUIPanel::setParentWidget(GUIWidget* widget)
  44. {
  45. mParentWidget = widget;
  46. for(auto& area : mAreas)
  47. {
  48. area->getInternalValue()->changeParentWidget(widget);
  49. }
  50. }
  51. void ScriptGUIPanel::registerArea(ScriptGUIArea* area)
  52. {
  53. mAreas.push_back(area);
  54. }
  55. void ScriptGUIPanel::unregisterArea(ScriptGUIArea* area)
  56. {
  57. auto iterFind = std::find(mAreas.begin(), mAreas.end(), area);
  58. if(iterFind != mAreas.end())
  59. mAreas.erase(iterFind);
  60. }
  61. void ScriptGUIPanel::destroy()
  62. {
  63. assert(mDestroyMethod != nullptr);
  64. mDestroyMethod->invoke(mManagedInstance, nullptr);
  65. }
  66. void ScriptGUIPanel::updateArea()
  67. {
  68. mClippedArea = mMyArea;
  69. mClippedArea.x += mParentArea.x;
  70. mClippedArea.y += mParentArea.y;
  71. mClippedArea.clip(mParentArea);
  72. for(auto& area : mAreas)
  73. {
  74. area->updateArea();
  75. }
  76. }
  77. }