BsScriptGUISkin.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. :ScriptObject(instance), mSkin(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_RemoveStyle", &ScriptGUISkin::internal_RemoveStyle);
  21. metaData.scriptClass->addInternalCall("Internal_GetStyleNames", &ScriptGUISkin::internal_GetStyleNames);
  22. }
  23. void ScriptGUISkin::internal_CreateInstance(MonoObject* instance)
  24. {
  25. HGUISkin skin = GUISkin::create();
  26. ScriptGUISkin* scriptInstance;
  27. ScriptResourceManager::instance().createScriptResource(instance, skin, &scriptInstance);
  28. }
  29. MonoObject* ScriptGUISkin::internal_GetStyle(ScriptGUISkin* thisPtr, MonoString* name)
  30. {
  31. String nativeName = MonoUtil::monoToString(name);
  32. const GUIElementStyle* style = thisPtr->mSkin->getStyle(nativeName);
  33. if (style == nullptr)
  34. return nullptr;
  35. return ScriptGUIElementStyle::create(nativeName, *style);
  36. }
  37. void ScriptGUISkin::internal_SetStyle(ScriptGUISkin* thisPtr, MonoString* name, ScriptGUIElementStyle* style)
  38. {
  39. String nativeName = MonoUtil::monoToString(name);
  40. if (style != nullptr)
  41. thisPtr->mSkin->setStyle(nativeName, style->getInternalValue());
  42. }
  43. void ScriptGUISkin::internal_RemoveStyle(ScriptGUISkin* thisPtr, MonoString* name)
  44. {
  45. String nativeName = MonoUtil::monoToString(name);
  46. thisPtr->mSkin->removeStyle(nativeName);
  47. }
  48. MonoArray* ScriptGUISkin::internal_GetStyleNames(ScriptGUISkin* thisPtr)
  49. {
  50. Vector<String> styleNames = thisPtr->mSkin->getStyleNames();
  51. UINT32 numNames = (UINT32)styleNames.size();
  52. ScriptArray output = ScriptArray::create<String>(numNames);
  53. for (UINT32 i = 0; i < numNames; i++)
  54. output.set(i, styleNames[i]);
  55. return output.getInternal();
  56. }
  57. void ScriptGUISkin::setNativeHandle(const HResource& resource)
  58. {
  59. mSkin = static_resource_cast<GUISkin>(resource);
  60. }
  61. void ScriptGUISkin::_onManagedInstanceDeleted()
  62. {
  63. mManagedInstance = nullptr;
  64. if (!mRefreshInProgress)
  65. ScriptResourceManager::instance().destroyScriptResource(this);
  66. }
  67. }