NativeGUIWidget.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. /// <summary>
  12. /// Skin used for rendering all the GUI elements belonging to this widget.
  13. /// </summary>
  14. internal GUISkin Skin
  15. {
  16. set
  17. {
  18. IntPtr skinPtr = IntPtr.Zero;
  19. if (value != null)
  20. skinPtr = value.GetCachedPtr();
  21. Internal_SetSkin(mCachedPtr, skinPtr);
  22. }
  23. }
  24. /// <summary>
  25. /// Determines to which camera are the GUI elements belonong to this widget rendered. If null then they will be
  26. /// rendered on the main camera.
  27. /// </summary>
  28. internal Camera Camera
  29. {
  30. set
  31. {
  32. IntPtr cameraPtr = IntPtr.Zero;
  33. if (value != null)
  34. cameraPtr = value.Native.GetCachedPtr();
  35. Internal_SetCamera(mCachedPtr, cameraPtr);
  36. }
  37. }
  38. /// <summary>
  39. /// Container into which all GUI elements belonging to this widget should be placed.
  40. /// </summary>
  41. internal GUIPanel Panel
  42. {
  43. get { return Internal_GetPanel(mCachedPtr); }
  44. }
  45. /// <summary>
  46. /// Creates a new native GUI widget and its wrapper.
  47. /// </summary>
  48. internal NativeGUIWidget()
  49. {
  50. Internal_Create(this);
  51. }
  52. /// <summary>
  53. /// Updates the transform of the GUI widget with the latest transform from the parent SceneObject.
  54. /// </summary>
  55. /// <param name="parentSO">Scene object the GUI widget component is attached to.</param>
  56. internal void UpdateTransform(SceneObject parentSO)
  57. {
  58. if (parentSO != null)
  59. Internal_UpdateTransform(mCachedPtr, parentSO.GetCachedPtr());
  60. }
  61. /// <summary>
  62. /// Updates the main camera, in case it changes. This is only relevant if the GUI widget is not rendering to a
  63. /// specific camera.
  64. /// </summary>
  65. /// <param name="camera">New main camera.</param>
  66. internal void UpdateMainCamera(Camera camera)
  67. {
  68. IntPtr cameraPtr = IntPtr.Zero;
  69. if (camera != null)
  70. cameraPtr = camera.Native.GetCachedPtr();
  71. Internal_UpdateMainCamera(mCachedPtr, cameraPtr);
  72. }
  73. /// <summary>
  74. /// Deletes the GUI widget and all child GUI elements.
  75. /// </summary>
  76. internal void Destroy()
  77. {
  78. Internal_Destroy(mCachedPtr);
  79. }
  80. [MethodImpl(MethodImplOptions.InternalCall)]
  81. private static extern void Internal_Create(NativeGUIWidget instance);
  82. [MethodImpl(MethodImplOptions.InternalCall)]
  83. private static extern void Internal_UpdateTransform(IntPtr instance, IntPtr parentSO);
  84. [MethodImpl(MethodImplOptions.InternalCall)]
  85. private static extern void Internal_UpdateMainCamera(IntPtr instance, IntPtr camera);
  86. [MethodImpl(MethodImplOptions.InternalCall)]
  87. private static extern void Internal_SetSkin(IntPtr instance, IntPtr skin);
  88. [MethodImpl(MethodImplOptions.InternalCall)]
  89. private static extern void Internal_SetCamera(IntPtr instance, IntPtr camera);
  90. [MethodImpl(MethodImplOptions.InternalCall)]
  91. private static extern GUIPanel Internal_GetPanel(IntPtr instance);
  92. [MethodImpl(MethodImplOptions.InternalCall)]
  93. private static extern void Internal_Destroy(IntPtr instance);
  94. }
  95. }