BsScriptGUIScrollBar.cpp 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/GUI/BsScriptGUIScrollBar.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoUtil.h"
  8. #include "Wrappers/GUI/BsScriptGUIElement.h"
  9. #include "GUI/BsGUIScrollBar.h"
  10. #include "GUI/BsGUIScrollBarHorz.h"
  11. #include "GUI/BsGUIScrollBarVert.h"
  12. using namespace std::placeholders;
  13. namespace bs
  14. {
  15. ScriptGUIScrollBar::ScriptGUIScrollBar(MonoObject* instance)
  16. :TScriptGUIElement(instance, nullptr)
  17. {
  18. }
  19. void ScriptGUIScrollBar::initRuntimeData()
  20. {
  21. metaData.scriptClass->addInternalCall("Internal_SetTint", (void*)&ScriptGUIScrollBar::internal_SetTint);
  22. metaData.scriptClass->addInternalCall("Internal_GetPosition", (void*)&ScriptGUIScrollBar::internal_GetPosition);
  23. metaData.scriptClass->addInternalCall("Internal_SetPosition", (void*)&ScriptGUIScrollBar::internal_SetPosition);
  24. metaData.scriptClass->addInternalCall("Internal_GetHandleSize", (void*)&ScriptGUIScrollBar::internal_GetHandleSize);
  25. metaData.scriptClass->addInternalCall("Internal_SetHandleSize", (void*)&ScriptGUIScrollBar::internal_SetHandleSize);
  26. }
  27. float ScriptGUIScrollBar::internal_GetPosition(ScriptGUIElementBaseTBase* nativeInstance)
  28. {
  29. GUIScrollBar* scrollBar = (GUIScrollBar*)nativeInstance->getGUIElement();
  30. return scrollBar->getScrollPos();
  31. }
  32. void ScriptGUIScrollBar::internal_SetPosition(ScriptGUIElementBaseTBase* nativeInstance, float percent)
  33. {
  34. GUIScrollBar* scrollBar = (GUIScrollBar*)nativeInstance->getGUIElement();
  35. scrollBar->_setScrollPos(percent);
  36. }
  37. float ScriptGUIScrollBar::internal_GetHandleSize(ScriptGUIElementBaseTBase* nativeInstance)
  38. {
  39. GUIScrollBar* scrollBar = (GUIScrollBar*)nativeInstance->getGUIElement();
  40. return scrollBar->getHandleSize();
  41. }
  42. void ScriptGUIScrollBar::internal_SetHandleSize(ScriptGUIElementBaseTBase* nativeInstance, float percent)
  43. {
  44. GUIScrollBar* scrollBar = (GUIScrollBar*)nativeInstance->getGUIElement();
  45. scrollBar->setHandleSize(percent);
  46. }
  47. void ScriptGUIScrollBar::internal_SetTint(ScriptGUIElementBaseTBase* nativeInstance, Color* color)
  48. {
  49. GUIScrollBar* scrollBar = (GUIScrollBar*)nativeInstance->getGUIElement();
  50. scrollBar->setTint(*color);
  51. }
  52. ScriptGUIScrollBarH::OnScrolledThunkDef ScriptGUIScrollBarH::onScrolledThunk;
  53. ScriptGUIScrollBarH::ScriptGUIScrollBarH(MonoObject* instance, GUIScrollBarHorz* scrollBar)
  54. :TScriptGUIElement(instance, scrollBar)
  55. {
  56. }
  57. void ScriptGUIScrollBarH::initRuntimeData()
  58. {
  59. metaData.scriptClass->addInternalCall("Internal_CreateInstance", (void*)&ScriptGUIScrollBarH::internal_CreateInstance);
  60. onScrolledThunk = (OnScrolledThunkDef)metaData.scriptClass->getMethod("Internal_DoOnScroll", 1)->getThunk();
  61. }
  62. void ScriptGUIScrollBarH::internal_CreateInstance(MonoObject* instance, MonoString* style, MonoArray* guiOptions)
  63. {
  64. GUIOptions options;
  65. ScriptArray scriptArray(guiOptions);
  66. UINT32 arrayLen = scriptArray.size();
  67. for (UINT32 i = 0; i < arrayLen; i++)
  68. options.addOption(scriptArray.get<GUIOption>(i));
  69. GUIScrollBarHorz* guiScrollBar = GUIScrollBarHorz::create(options, MonoUtil::monoToString(style));
  70. ScriptGUIScrollBarH* scriptScrollBar = new (bs_alloc<ScriptGUIScrollBarH>()) ScriptGUIScrollBarH(instance, guiScrollBar);
  71. guiScrollBar->onScrollOrResize.connect(std::bind(&ScriptGUIScrollBarH::onScroll, scriptScrollBar, _1, _2));
  72. }
  73. void ScriptGUIScrollBarH::onScroll(float position, float size)
  74. {
  75. MonoUtil::invokeThunk(onScrolledThunk, getManagedInstance(), position);
  76. }
  77. ScriptGUIScrollBarV::OnScrolledThunkDef ScriptGUIScrollBarV::onScrolledThunk;
  78. ScriptGUIScrollBarV::ScriptGUIScrollBarV(MonoObject* instance, GUIScrollBarVert* scrollBar)
  79. :TScriptGUIElement(instance, scrollBar)
  80. {
  81. }
  82. void ScriptGUIScrollBarV::initRuntimeData()
  83. {
  84. metaData.scriptClass->addInternalCall("Internal_CreateInstance", (void*)&ScriptGUIScrollBarV::internal_CreateInstance);
  85. onScrolledThunk = (OnScrolledThunkDef)metaData.scriptClass->getMethod("Internal_DoOnScroll", 1)->getThunk();
  86. }
  87. void ScriptGUIScrollBarV::internal_CreateInstance(MonoObject* instance, MonoString* style, MonoArray* guiOptions)
  88. {
  89. GUIOptions options;
  90. ScriptArray scriptArray(guiOptions);
  91. UINT32 arrayLen = scriptArray.size();
  92. for (UINT32 i = 0; i < arrayLen; i++)
  93. options.addOption(scriptArray.get<GUIOption>(i));
  94. GUIScrollBarVert* guiScrollBar = GUIScrollBarVert::create(options, MonoUtil::monoToString(style));
  95. ScriptGUIScrollBarV* scriptScrollBar = new (bs_alloc<ScriptGUIScrollBarV>()) ScriptGUIScrollBarV(instance, guiScrollBar);
  96. guiScrollBar->onScrollOrResize.connect(std::bind(&ScriptGUIScrollBarV::onScroll, scriptScrollBar, _1, _2));
  97. }
  98. void ScriptGUIScrollBarV::onScroll(float position, float size)
  99. {
  100. MonoUtil::invokeThunk(onScrolledThunk, getManagedInstance(), position);
  101. }
  102. ScriptGUIResizeableScrollBarH::OnScrollOrResizeThunkDef ScriptGUIResizeableScrollBarH::onScrollOrResizeThunk;
  103. ScriptGUIResizeableScrollBarH::ScriptGUIResizeableScrollBarH(MonoObject* instance, GUIScrollBarHorz* scrollBar)
  104. :TScriptGUIElement(instance, scrollBar)
  105. {
  106. }
  107. void ScriptGUIResizeableScrollBarH::initRuntimeData()
  108. {
  109. metaData.scriptClass->addInternalCall("Internal_CreateInstance", (void*)&ScriptGUIResizeableScrollBarH::internal_CreateInstance);
  110. onScrollOrResizeThunk = (OnScrollOrResizeThunkDef)metaData.scriptClass->getMethod("Internal_DoOnScrollOrResize", 2)->getThunk();
  111. }
  112. void ScriptGUIResizeableScrollBarH::internal_CreateInstance(MonoObject* instance, MonoString* style, MonoArray* guiOptions)
  113. {
  114. GUIOptions options;
  115. ScriptArray scriptArray(guiOptions);
  116. UINT32 arrayLen = scriptArray.size();
  117. for (UINT32 i = 0; i < arrayLen; i++)
  118. options.addOption(scriptArray.get<GUIOption>(i));
  119. GUIScrollBarHorz* guiScrollBar = GUIScrollBarHorz::create(true, options, MonoUtil::monoToString(style));
  120. ScriptGUIResizeableScrollBarH* scriptScrollBar = new (bs_alloc<ScriptGUIResizeableScrollBarH>()) ScriptGUIResizeableScrollBarH(instance, guiScrollBar);
  121. guiScrollBar->onScrollOrResize.connect(std::bind(&ScriptGUIResizeableScrollBarH::onScroll, scriptScrollBar, _1, _2));
  122. }
  123. void ScriptGUIResizeableScrollBarH::onScroll(float position, float size)
  124. {
  125. MonoUtil::invokeThunk(onScrollOrResizeThunk, getManagedInstance(), position, size);
  126. }
  127. ScriptGUIResizeableScrollBarV::OnScrollOrResizeThunkDef ScriptGUIResizeableScrollBarV::onScrollOrResizeThunk;
  128. ScriptGUIResizeableScrollBarV::ScriptGUIResizeableScrollBarV(MonoObject* instance, GUIScrollBarVert* scrollBar)
  129. :TScriptGUIElement(instance, scrollBar)
  130. {
  131. }
  132. void ScriptGUIResizeableScrollBarV::initRuntimeData()
  133. {
  134. metaData.scriptClass->addInternalCall("Internal_CreateInstance", (void*)&ScriptGUIResizeableScrollBarV::internal_CreateInstance);
  135. onScrollOrResizeThunk = (OnScrollOrResizeThunkDef)metaData.scriptClass->getMethod("Internal_DoOnScrollOrResize", 2)->getThunk();
  136. }
  137. void ScriptGUIResizeableScrollBarV::internal_CreateInstance(MonoObject* instance, MonoString* style, MonoArray* guiOptions)
  138. {
  139. GUIOptions options;
  140. ScriptArray scriptArray(guiOptions);
  141. UINT32 arrayLen = scriptArray.size();
  142. for (UINT32 i = 0; i < arrayLen; i++)
  143. options.addOption(scriptArray.get<GUIOption>(i));
  144. GUIScrollBarVert* guiScrollBar = GUIScrollBarVert::create(true, options, MonoUtil::monoToString(style));
  145. ScriptGUIResizeableScrollBarV* scriptScrollBar = new (bs_alloc<ScriptGUIResizeableScrollBarV>()) ScriptGUIResizeableScrollBarV(instance, guiScrollBar);
  146. guiScrollBar->onScrollOrResize.connect(std::bind(&ScriptGUIResizeableScrollBarV::onScroll, scriptScrollBar, _1, _2));
  147. }
  148. void ScriptGUIResizeableScrollBarV::onScroll(float position, float size)
  149. {
  150. MonoUtil::invokeThunk(onScrollOrResizeThunk, getManagedInstance(), position, size);
  151. }
  152. }