BsScriptGUISkin.cpp 3.3 KB

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