BsScriptGUISkin.cpp 3.3 KB

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