2
0

BsScriptGUIElementStyle.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "BsScriptGUIElementStyle.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsScriptFont.h"
  7. #include "BsException.h"
  8. #include "BsGUIElementStyle.h"
  9. #include "BsScriptGUIElementStateStyle.h"
  10. #include "BsMonoUtil.h"
  11. namespace BansheeEngine
  12. {
  13. ScriptGUIElementStyle::ScriptGUIElementStyle(MonoObject* instance, const String& name)
  14. :ScriptObject(instance), mName(name), mElementStyle(bs_new<GUIElementStyle>()), mFont(nullptr), mOwnsStyle(true), mNormal(nullptr), mHover(nullptr),
  15. mActive(nullptr), mFocused(nullptr), mNormalOn(nullptr), mHoverOn(nullptr), mActiveOn(nullptr), mFocusedOn(nullptr)
  16. {
  17. }
  18. ScriptGUIElementStyle::ScriptGUIElementStyle(MonoObject* instance, const String& name, GUIElementStyle* externalStyle)
  19. :ScriptObject(instance), mName(name), mElementStyle(externalStyle), mFont(nullptr), mOwnsStyle(false), mNormal(nullptr), mHover(nullptr),
  20. mActive(nullptr), mFocused(nullptr), mNormalOn(nullptr), mHoverOn(nullptr), mActiveOn(nullptr), mFocusedOn(nullptr)
  21. {
  22. }
  23. ScriptGUIElementStyle::~ScriptGUIElementStyle()
  24. {
  25. if(mOwnsStyle)
  26. bs_delete(mElementStyle);
  27. }
  28. void ScriptGUIElementStyle::initRuntimeData()
  29. {
  30. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIElementStyle::internal_createInstance);
  31. metaData.scriptClass->addInternalCall("Internal_AddSubStyle", &ScriptGUIElementStyle::internal_addSubStyle);
  32. metaData.scriptClass->addInternalCall("Internal_GetFont", &ScriptGUIElementStyle::internal_GetFont);
  33. metaData.scriptClass->addInternalCall("Internal_SetFont", &ScriptGUIElementStyle::internal_SetFont);
  34. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, FontSize);
  35. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, TextHorzAlign);
  36. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, TextVertAlign);
  37. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, ImagePosition);
  38. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, WordWrap);
  39. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, Normal);
  40. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, Hover);
  41. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, Active);
  42. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, Focused);
  43. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, NormalOn);
  44. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, HoverOn);
  45. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, ActiveOn);
  46. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, FocusedOn);
  47. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, Border);
  48. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, Margins);
  49. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, ContentOffset);
  50. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, Width);
  51. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, Height);
  52. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, MinWidth);
  53. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, MaxWidth);
  54. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, MinHeight);
  55. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, MaxHeight);
  56. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, FixedWidth);
  57. BS_SCRIPT_SETGET_META(ScriptGUIElementStyle, FixedHeight);
  58. }
  59. void ScriptGUIElementStyle::internal_createInstance(MonoObject* instance, MonoString* name)
  60. {
  61. char* nativeName = mono_string_to_utf8(name);
  62. String styleName(nativeName);
  63. free(nativeName);
  64. ScriptGUIElementStyle* nativeInstance = new (bs_alloc<ScriptGUIElementStyle>()) ScriptGUIElementStyle(instance, styleName);
  65. }
  66. void ScriptGUIElementStyle::internal_createInstanceExternal(MonoObject* instance, MonoString* name, GUIElementStyle* externalStyle)
  67. {
  68. char* nativeName = mono_string_to_utf8(name);
  69. String styleName(nativeName);
  70. free(nativeName);
  71. ScriptGUIElementStyle* nativeInstance = new (bs_alloc<ScriptGUIElementStyle>()) ScriptGUIElementStyle(instance, styleName, externalStyle);
  72. }
  73. void ScriptGUIElementStyle::internal_addSubStyle(ScriptGUIElementStyle* nativeInstance, MonoString* guiType, MonoString* styleName)
  74. {
  75. String guiTypeStr = MonoUtil::monoToString(guiType);
  76. String styleNameStr = MonoUtil::monoToString(styleName);
  77. nativeInstance->getInternalValue()->subStyles[guiTypeStr] = styleNameStr;
  78. }
  79. void ScriptGUIElementStyle::internal_GetFont(ScriptGUIElementStyle* nativeInstance, MonoObject** value)
  80. {
  81. throwIfInstancesDontMatch(nativeInstance->mFont, nativeInstance->mElementStyle->font.get());
  82. if (nativeInstance->mFont != nullptr)
  83. {
  84. *value = nativeInstance->mFont->getManagedInstance();
  85. return;
  86. }
  87. *value = nullptr;
  88. }
  89. void ScriptGUIElementStyle::internal_SetFont(ScriptGUIElementStyle* nativeInstance, MonoObject* value)
  90. {
  91. ScriptFont* nativeValue = ScriptFont::toNative(value);
  92. nativeInstance->mElementStyle->font = static_resource_cast<Font>(nativeValue->getNativeHandle());
  93. nativeInstance->mFont = nativeValue;
  94. }
  95. }