BsScriptGUISlider.cpp 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/GUI/BsScriptGUISlider.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoField.h"
  6. #include "BsMonoClass.h"
  7. #include "BsMonoManager.h"
  8. #include "BsMonoMethod.h"
  9. #include "Image/BsSpriteTexture.h"
  10. #include "BsMonoUtil.h"
  11. #include "GUI/BsGUILayout.h"
  12. #include "GUI/BsGUISlider.h"
  13. #include "GUI/BsGUIOptions.h"
  14. #include "Wrappers/GUI/BsScriptGUIElementStyle.h"
  15. #include "Wrappers/GUI/BsScriptGUILayout.h"
  16. #include "Wrappers/BsScriptHString.h"
  17. #include "Wrappers/GUI/BsScriptGUIContent.h"
  18. using namespace std::placeholders;
  19. namespace bs
  20. {
  21. ScriptGUISliderH::OnChangedThunkDef ScriptGUISliderH::onChangedThunk;
  22. ScriptGUISliderH::ScriptGUISliderH(MonoObject* instance, GUISliderHorz* slider)
  23. :TScriptGUIElement(instance, slider)
  24. {
  25. }
  26. void ScriptGUISliderH::initRuntimeData()
  27. {
  28. metaData.scriptClass->addInternalCall("Internal_CreateInstance", (void*)&ScriptGUISliderH::internal_createInstance);
  29. metaData.scriptClass->addInternalCall("Internal_SetPercent", (void*)&ScriptGUISliderH::internal_setPercent);
  30. metaData.scriptClass->addInternalCall("Internal_GetPercent", (void*)&ScriptGUISliderH::internal_getPercent);
  31. metaData.scriptClass->addInternalCall("Internal_SetTint", (void*)&ScriptGUISliderH::internal_setTint);
  32. metaData.scriptClass->addInternalCall("Internal_GetValue", (void*)&ScriptGUISliderH::internal_getValue);
  33. metaData.scriptClass->addInternalCall("Internal_SetValue", (void*)&ScriptGUISliderH::internal_setValue);
  34. metaData.scriptClass->addInternalCall("Internal_SetRange", (void*)&ScriptGUISliderH::internal_setRange);
  35. metaData.scriptClass->addInternalCall("Internal_GetRangeMaximum", (void*)&ScriptGUISliderH::internal_getRangeMaximum);
  36. metaData.scriptClass->addInternalCall("Internal_GetRangeMinimum", (void*)&ScriptGUISliderH::internal_getRangeMinimum);
  37. metaData.scriptClass->addInternalCall("Internal_SetStep", (void*)&ScriptGUISliderH::internal_setStep);
  38. metaData.scriptClass->addInternalCall("Internal_GetStep", (void*)&ScriptGUISliderH::internal_getStep);
  39. onChangedThunk = (OnChangedThunkDef)metaData.scriptClass->getMethod("DoOnChanged", 1)->getThunk();
  40. }
  41. void ScriptGUISliderH::internal_createInstance(MonoObject* instance, MonoString* style, MonoArray* guiOptions)
  42. {
  43. GUIOptions options;
  44. ScriptArray scriptArray(guiOptions);
  45. UINT32 arrayLen = scriptArray.size();
  46. for (UINT32 i = 0; i < arrayLen; i++)
  47. options.addOption(scriptArray.get<GUIOption>(i));
  48. GUISliderHorz* guiSlider = GUISliderHorz::create(options, MonoUtil::monoToString(style));
  49. auto nativeInstance = new (bs_alloc<ScriptGUISliderH>()) ScriptGUISliderH(instance, guiSlider);
  50. guiSlider->onChanged.connect(std::bind(&ScriptGUISliderH::onChanged, nativeInstance, _1));
  51. }
  52. void ScriptGUISliderH::internal_setPercent(ScriptGUISliderH* nativeInstance, float percent)
  53. {
  54. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  55. slider->setPercent(percent);
  56. }
  57. float ScriptGUISliderH::internal_getPercent(ScriptGUISliderH* nativeInstance)
  58. {
  59. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  60. return slider->getPercent();
  61. }
  62. float ScriptGUISliderH::internal_getValue(ScriptGUISliderH* nativeInstance)
  63. {
  64. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  65. return slider->getValue();
  66. }
  67. void ScriptGUISliderH::internal_setValue(ScriptGUISliderH* nativeInstance, float percent)
  68. {
  69. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  70. return slider->setValue(percent);
  71. }
  72. void ScriptGUISliderH::internal_setRange(ScriptGUISliderH* nativeInstance, float min, float max)
  73. {
  74. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  75. return slider->setRange(min, max);
  76. }
  77. float ScriptGUISliderH::internal_getRangeMaximum(ScriptGUISliderH* nativeInstance)
  78. {
  79. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  80. return slider->getRangeMaximum();
  81. }
  82. float ScriptGUISliderH::internal_getRangeMinimum(ScriptGUISliderH* nativeInstance)
  83. {
  84. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  85. return slider->getRangeMinimum();
  86. }
  87. void ScriptGUISliderH::internal_setStep(ScriptGUISliderH* nativeInstance, float step)
  88. {
  89. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  90. return slider->setStep(step);
  91. }
  92. float ScriptGUISliderH::internal_getStep(ScriptGUISliderH* nativeInstance)
  93. {
  94. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  95. return slider->getStep();
  96. }
  97. void ScriptGUISliderH::internal_setTint(ScriptGUISliderH* nativeInstance, Color* color)
  98. {
  99. GUISliderHorz* slider = (GUISliderHorz*)nativeInstance->getGUIElement();
  100. slider->setTint(*color);
  101. }
  102. void ScriptGUISliderH::onChanged(float percent)
  103. {
  104. MonoUtil::invokeThunk(onChangedThunk, getManagedInstance(), percent);
  105. }
  106. ScriptGUISliderV::OnChangedThunkDef ScriptGUISliderV::onChangedThunk;
  107. ScriptGUISliderV::ScriptGUISliderV(MonoObject* instance, GUISliderVert* slider)
  108. :TScriptGUIElement(instance, slider)
  109. {
  110. }
  111. void ScriptGUISliderV::initRuntimeData()
  112. {
  113. metaData.scriptClass->addInternalCall("Internal_CreateInstance", (void*)&ScriptGUISliderV::internal_createInstance);
  114. metaData.scriptClass->addInternalCall("Internal_SetPercent", (void*)&ScriptGUISliderV::internal_setPercent);
  115. metaData.scriptClass->addInternalCall("Internal_GetPercent", (void*)&ScriptGUISliderV::internal_getPercent);
  116. metaData.scriptClass->addInternalCall("Internal_SetTint", (void*)&ScriptGUISliderV::internal_setTint);
  117. metaData.scriptClass->addInternalCall("Internal_GetValue", (void*)&ScriptGUISliderV::internal_getValue);
  118. metaData.scriptClass->addInternalCall("Internal_SetValue", (void*)&ScriptGUISliderV::internal_setValue);
  119. metaData.scriptClass->addInternalCall("Internal_SetRange", (void*)&ScriptGUISliderV::internal_setRange);
  120. metaData.scriptClass->addInternalCall("Internal_GetRangeMaximum", (void*)&ScriptGUISliderV::internal_getRangeMaximum);
  121. metaData.scriptClass->addInternalCall("Internal_GetRangeMinimum", (void*)ScriptGUISliderV::internal_getRangeMinimum);
  122. metaData.scriptClass->addInternalCall("Internal_SetStep", (void*)&ScriptGUISliderV::internal_setStep);
  123. metaData.scriptClass->addInternalCall("Internal_GetStep", (void*)&ScriptGUISliderV::internal_getStep);
  124. onChangedThunk = (OnChangedThunkDef)metaData.scriptClass->getMethod("DoOnChanged", 1)->getThunk();
  125. }
  126. void ScriptGUISliderV::internal_createInstance(MonoObject* instance, MonoString* style, MonoArray* guiOptions)
  127. {
  128. GUIOptions options;
  129. ScriptArray scriptArray(guiOptions);
  130. UINT32 arrayLen = scriptArray.size();
  131. for (UINT32 i = 0; i < arrayLen; i++)
  132. options.addOption(scriptArray.get<GUIOption>(i));
  133. GUISliderVert* guiSlider = GUISliderVert::create(options, MonoUtil::monoToString(style));
  134. auto nativeInstance = new (bs_alloc<ScriptGUISliderV>()) ScriptGUISliderV(instance, guiSlider);
  135. guiSlider->onChanged.connect(std::bind(&ScriptGUISliderV::onChanged, nativeInstance, _1));
  136. }
  137. void ScriptGUISliderV::internal_setPercent(ScriptGUISliderV* nativeInstance, float percent)
  138. {
  139. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  140. slider->setPercent(percent);
  141. }
  142. float ScriptGUISliderV::internal_getPercent(ScriptGUISliderV* nativeInstance)
  143. {
  144. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  145. return slider->getPercent();
  146. }
  147. float ScriptGUISliderV::internal_getValue(ScriptGUISliderV* nativeInstance)
  148. {
  149. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  150. return slider->getValue();
  151. }
  152. void ScriptGUISliderV::internal_setValue(ScriptGUISliderV* nativeInstance, float percent)
  153. {
  154. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  155. return slider->setValue(percent);
  156. }
  157. void ScriptGUISliderV::internal_setRange(ScriptGUISliderV* nativeInstance, float min, float max)
  158. {
  159. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  160. return slider->setRange(min, max);
  161. }
  162. float ScriptGUISliderV::internal_getRangeMaximum(ScriptGUISliderV* nativeInstance)
  163. {
  164. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  165. return slider->getRangeMaximum();
  166. }
  167. float ScriptGUISliderV::internal_getRangeMinimum(ScriptGUISliderV* nativeInstance)
  168. {
  169. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  170. return slider->getRangeMinimum();
  171. }
  172. void ScriptGUISliderV::internal_setStep(ScriptGUISliderV* nativeInstance, float step)
  173. {
  174. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  175. return slider->setStep(step);
  176. }
  177. float ScriptGUISliderV::internal_getStep(ScriptGUISliderV* nativeInstance)
  178. {
  179. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  180. return slider->getStep();
  181. }
  182. void ScriptGUISliderV::internal_setTint(ScriptGUISliderV* nativeInstance, Color* color)
  183. {
  184. GUISliderVert* slider = (GUISliderVert*)nativeInstance->getGUIElement();
  185. slider->setTint(*color);
  186. }
  187. void ScriptGUISliderV::onChanged(float percent)
  188. {
  189. MonoUtil::invokeThunk(onChangedThunk, getManagedInstance(), percent);
  190. }
  191. }