BsScriptGUIContentImages.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include "BsScriptGUIContentImages.h"
  2. #include "BsScriptSpriteTexture.h"
  3. #include "BsScriptResourceManager.h"
  4. namespace BansheeEngine
  5. {
  6. MonoField* ScriptGUIContentImages::mNormalField;
  7. MonoField* ScriptGUIContentImages::mHoverField;
  8. MonoField* ScriptGUIContentImages::mActiveField;
  9. MonoField* ScriptGUIContentImages::mFocusedField;
  10. MonoField* ScriptGUIContentImages::mNormalOnField;
  11. MonoField* ScriptGUIContentImages::mHoverOnField;
  12. MonoField* ScriptGUIContentImages::mActiveOnField;
  13. MonoField* ScriptGUIContentImages::mFocusedOnField;
  14. ScriptGUIContentImages::ScriptGUIContentImages(MonoObject* instance)
  15. :ScriptObject(instance)
  16. { }
  17. void ScriptGUIContentImages::initRuntimeData()
  18. {
  19. mNormalField = metaData.scriptClass->getField("normal");
  20. mHoverField = metaData.scriptClass->getField("hover");
  21. mActiveField = metaData.scriptClass->getField("active");
  22. mFocusedField = metaData.scriptClass->getField("focused");
  23. mNormalOnField = metaData.scriptClass->getField("normalOn");
  24. mHoverOnField = metaData.scriptClass->getField("hoverOn");
  25. mActiveOnField = metaData.scriptClass->getField("activeOn");
  26. mFocusedOnField = metaData.scriptClass->getField("focusedOn");
  27. }
  28. GUIContentImages ScriptGUIContentImages::getNative(MonoObject* instance)
  29. {
  30. GUIContentImages output;
  31. struct Entry
  32. {
  33. Entry(MonoField* field, HSpriteTexture& outputImage)
  34. :field(field), outputImage(outputImage)
  35. { }
  36. MonoField* field;
  37. HSpriteTexture& outputImage;
  38. };
  39. Entry entries[8] =
  40. {
  41. { mNormalField, output.normal },
  42. { mHoverField, output.hover },
  43. { mActiveField, output.active },
  44. { mFocusedField, output.focused },
  45. { mNormalOnField, output.normalOn },
  46. { mHoverOnField, output.hoverOn },
  47. { mActiveOnField, output.activeOn },
  48. { mFocusedOnField, output.focusedOn },
  49. };
  50. for (auto& entry : entries)
  51. {
  52. MonoObject* managedImage;
  53. entry.field->getValue(instance, &managedImage);
  54. if (managedImage != nullptr)
  55. entry.outputImage = ScriptSpriteTexture::toNative(managedImage)->getHandle();
  56. }
  57. return output;
  58. }
  59. MonoObject* ScriptGUIContentImages::getManaged(const GUIContentImages& images)
  60. {
  61. struct Entry
  62. {
  63. Entry(MonoField* field, const HSpriteTexture& outputImage)
  64. :field(field), image(outputImage)
  65. { }
  66. MonoField* field;
  67. const HSpriteTexture& image;
  68. };
  69. Entry entries[8] =
  70. {
  71. { mNormalField, images.normal },
  72. { mHoverField, images.hover },
  73. { mActiveField, images.active },
  74. { mFocusedField, images.focused },
  75. { mNormalOnField, images.normalOn },
  76. { mHoverOnField, images.hoverOn },
  77. { mActiveOnField, images.activeOn },
  78. { mFocusedOnField, images.focusedOn },
  79. };
  80. MonoObject* output = metaData.scriptClass->createInstance();
  81. for (auto& entry : entries)
  82. {
  83. MonoObject* managedImage = nullptr;
  84. if (entry.image != nullptr)
  85. {
  86. ScriptSpriteTexture* scriptImage;
  87. ScriptResourceManager::instance().getScriptResource(entry.image, &scriptImage, true);
  88. managedImage = scriptImage->getManagedInstance();
  89. }
  90. entry.field->setValue(output, managedImage);
  91. }
  92. return output;
  93. }
  94. }