NativeGUIWidget.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. /// Container into which all GUI elements belonging to this widget should be placed.
  41. /// </summary>
  42. internal GUIPanel Panel
  43. {
  44. get { return panel; }
  45. }
  46. /// <summary>
  47. /// Creates a new native GUI widget and its wrapper.
  48. /// </summary>
  49. internal NativeGUIWidget()
  50. {
  51. Internal_Create(this);
  52. }
  53. /// <summary>
  54. /// Updates the transform of the GUI widget with the latest transform from the parent SceneObject.
  55. /// </summary>
  56. /// <param name="parentSO">Scene object the GUI widget component is attached to.</param>
  57. internal void UpdateTransform(SceneObject parentSO)
  58. {
  59. if (parentSO != null)
  60. Internal_UpdateTransform(mCachedPtr, parentSO.GetCachedPtr());
  61. }
  62. /// <summary>
  63. /// Updates the main camera, in case it changes. This is only relevant if the GUI widget is not rendering to a
  64. /// specific camera.
  65. /// </summary>
  66. /// <param name="camera">New main camera.</param>
  67. internal void UpdateMainCamera(Camera camera)
  68. {
  69. IntPtr cameraPtr = IntPtr.Zero;
  70. if (camera != null)
  71. cameraPtr = camera.Native.GetCachedPtr();
  72. Internal_UpdateMainCamera(mCachedPtr, cameraPtr);
  73. }
  74. /// <summary>
  75. /// Deletes the GUI widget and all child GUI elements.
  76. /// </summary>
  77. internal void Destroy()
  78. {
  79. Internal_Destroy(mCachedPtr);
  80. }
  81. [MethodImpl(MethodImplOptions.InternalCall)]
  82. private static extern void Internal_Create(NativeGUIWidget instance);
  83. [MethodImpl(MethodImplOptions.InternalCall)]
  84. private static extern void Internal_UpdateTransform(IntPtr instance, IntPtr parentSO);
  85. [MethodImpl(MethodImplOptions.InternalCall)]
  86. private static extern void Internal_UpdateMainCamera(IntPtr instance, IntPtr camera);
  87. [MethodImpl(MethodImplOptions.InternalCall)]
  88. private static extern void Internal_SetSkin(IntPtr instance, IntPtr skin);
  89. [MethodImpl(MethodImplOptions.InternalCall)]
  90. private static extern void Internal_SetCamera(IntPtr instance, IntPtr camera);
  91. [MethodImpl(MethodImplOptions.InternalCall)]
  92. private static extern void Internal_Destroy(IntPtr instance);
  93. }
  94. }