NativeGUIWidget.cs 4.3 KB

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