NativeGUIWidget.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using System;
  4. using System.Runtime.CompilerServices;
  5. namespace BansheeEngine
  6. {
  7. /// <summary>
  8. /// Wrapper around the native GUIWidget class.
  9. /// <see cref="GUIWidget"/>
  10. /// </summary>
  11. internal class NativeGUIWidget : ScriptObject
  12. {
  13. private GUIPanel panel; // Populated by runtime
  14. /// <summary>
  15. /// Skin used for rendering all the GUI elements belonging to this widget.
  16. /// </summary>
  17. internal GUISkin Skin
  18. {
  19. set
  20. {
  21. IntPtr skinPtr = IntPtr.Zero;
  22. if (value != null)
  23. skinPtr = value.GetCachedPtr();
  24. Internal_SetSkin(mCachedPtr, skinPtr);
  25. }
  26. }
  27. /// <summary>
  28. /// Determines to which camera are the GUI elements belonong to this widget rendered. If null then they will be
  29. /// rendered on the main camera.
  30. /// </summary>
  31. internal Camera Camera
  32. {
  33. set
  34. {
  35. IntPtr cameraPtr = IntPtr.Zero;
  36. if (value != null)
  37. cameraPtr = value.Native.GetCachedPtr();
  38. Internal_SetCamera(mCachedPtr, cameraPtr);
  39. }
  40. }
  41. /// <summary>
  42. /// Depth that determines in which order are GUI widgets rendered. Widgets with lower depth are rendered in front
  43. /// of widgets with higher depth.
  44. /// </summary>
  45. internal short Depth
  46. {
  47. set { Internal_SetDepth(mCachedPtr, value); }
  48. get { return Internal_GetDepth(mCachedPtr); }
  49. }
  50. /// <summary>
  51. /// Container into which all GUI elements belonging to this widget should be placed.
  52. /// </summary>
  53. internal GUIPanel Panel
  54. {
  55. get { return panel; }
  56. }
  57. /// <summary>
  58. /// Creates a new native GUI widget and its wrapper.
  59. /// </summary>
  60. internal NativeGUIWidget()
  61. {
  62. Internal_Create(this);
  63. }
  64. /// <summary>
  65. /// Updates the transform of the GUI widget with the latest transform from the parent SceneObject.
  66. /// </summary>
  67. /// <param name="parentSO">Scene object the GUI widget component is attached to.</param>
  68. internal void UpdateTransform(SceneObject parentSO)
  69. {
  70. if (parentSO != null)
  71. Internal_UpdateTransform(mCachedPtr, parentSO.GetCachedPtr());
  72. }
  73. /// <summary>
  74. /// Updates the main camera, in case it changes. This is only relevant if the GUI widget is not rendering to a
  75. /// specific camera.
  76. /// </summary>
  77. /// <param name="camera">New main camera.</param>
  78. internal void UpdateMainCamera(Camera camera)
  79. {
  80. IntPtr cameraPtr = IntPtr.Zero;
  81. if (camera != null)
  82. cameraPtr = camera.Native.GetCachedPtr();
  83. Internal_UpdateMainCamera(mCachedPtr, cameraPtr);
  84. }
  85. /// <summary>
  86. /// Deletes the GUI widget and all child GUI elements.
  87. /// </summary>
  88. internal void Destroy()
  89. {
  90. Internal_Destroy(mCachedPtr);
  91. }
  92. [MethodImpl(MethodImplOptions.InternalCall)]
  93. private static extern void Internal_Create(NativeGUIWidget instance);
  94. [MethodImpl(MethodImplOptions.InternalCall)]
  95. private static extern void Internal_UpdateTransform(IntPtr instance, IntPtr parentSO);
  96. [MethodImpl(MethodImplOptions.InternalCall)]
  97. private static extern void Internal_UpdateMainCamera(IntPtr instance, IntPtr camera);
  98. [MethodImpl(MethodImplOptions.InternalCall)]
  99. private static extern void Internal_SetSkin(IntPtr instance, IntPtr skin);
  100. [MethodImpl(MethodImplOptions.InternalCall)]
  101. private static extern void Internal_SetCamera(IntPtr instance, IntPtr camera);
  102. [MethodImpl(MethodImplOptions.InternalCall)]
  103. private static extern void Internal_SetDepth(IntPtr instance, short value);
  104. [MethodImpl(MethodImplOptions.InternalCall)]
  105. private static extern short Internal_GetDepth(IntPtr instance);
  106. [MethodImpl(MethodImplOptions.InternalCall)]
  107. private static extern void Internal_Destroy(IntPtr instance);
  108. }
  109. }