BsScriptGUISkin.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "BsScriptGUISkin.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsMonoUtil.h"
  7. #include "BsGUISkin.h"
  8. #include "BsScriptResourceManager.h"
  9. #include "BsScriptGUIElementStyle.h"
  10. namespace BansheeEngine
  11. {
  12. ScriptGUISkin::ScriptGUISkin(MonoObject* instance, const HGUISkin& skin)
  13. :TScriptResource(instance, skin)
  14. { }
  15. void ScriptGUISkin::initRuntimeData()
  16. {
  17. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUISkin::internal_CreateInstance);
  18. metaData.scriptClass->addInternalCall("Internal_GetStyle", &ScriptGUISkin::internal_GetStyle);
  19. metaData.scriptClass->addInternalCall("Internal_SetStyle", &ScriptGUISkin::internal_SetStyle);
  20. metaData.scriptClass->addInternalCall("Internal_HasStyle", &ScriptGUISkin::internal_HasStyle);
  21. metaData.scriptClass->addInternalCall("Internal_RemoveStyle", &ScriptGUISkin::internal_RemoveStyle);
  22. metaData.scriptClass->addInternalCall("Internal_GetStyleNames", &ScriptGUISkin::internal_GetStyleNames);
  23. }
  24. void ScriptGUISkin::internal_CreateInstance(MonoObject* instance)
  25. {
  26. HGUISkin skin = GUISkin::create();
  27. ScriptGUISkin* scriptInstance;
  28. ScriptResourceManager::instance().createScriptResource(instance, skin, &scriptInstance);
  29. }
  30. bool ScriptGUISkin::internal_HasStyle(ScriptGUISkin* thisPtr, MonoString* name)
  31. {
  32. String nativeName = MonoUtil::monoToString(name);
  33. return thisPtr->getHandle()->hasStyle(nativeName);
  34. }
  35. MonoObject* ScriptGUISkin::internal_GetStyle(ScriptGUISkin* thisPtr, MonoString* name)
  36. {
  37. HGUISkin skin = thisPtr->getHandle();
  38. String nativeName = MonoUtil::monoToString(name);
  39. const GUIElementStyle* style = skin->getStyle(nativeName);
  40. if (style == nullptr)
  41. return nullptr;
  42. return ScriptGUIElementStyle::create(*style);
  43. }
  44. void ScriptGUISkin::internal_SetStyle(ScriptGUISkin* thisPtr, MonoString* name, ScriptGUIElementStyle* style)
  45. {
  46. HGUISkin skin = thisPtr->getHandle();
  47. String nativeName = MonoUtil::monoToString(name);
  48. if (style != nullptr)
  49. skin->setStyle(nativeName, style->getInternalValue());
  50. }
  51. void ScriptGUISkin::internal_RemoveStyle(ScriptGUISkin* thisPtr, MonoString* name)
  52. {
  53. HGUISkin skin = thisPtr->getHandle();
  54. String nativeName = MonoUtil::monoToString(name);
  55. skin->removeStyle(nativeName);
  56. }
  57. MonoArray* ScriptGUISkin::internal_GetStyleNames(ScriptGUISkin* thisPtr)
  58. {
  59. HGUISkin skin = thisPtr->getHandle();
  60. Vector<String> styleNames = skin->getStyleNames();
  61. UINT32 numNames = (UINT32)styleNames.size();
  62. ScriptArray output = ScriptArray::create<String>(numNames);
  63. for (UINT32 i = 0; i < numNames; i++)
  64. output.set(i, styleNames[i]);
  65. return output.getInternal();
  66. }
  67. MonoObject* ScriptGUISkin::createInstance()
  68. {
  69. bool dummy = false;
  70. void* params[1];
  71. params[0] = &dummy;
  72. return metaData.scriptClass->createInstance("bool", params);
  73. }
  74. MonoObject* ScriptGUISkin::_createManagedInstance(bool construct)
  75. {
  76. if (construct)
  77. return createInstance();
  78. return metaData.scriptClass->createInstance(false);
  79. }
  80. }