//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
//**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************//
using System;
using System.Runtime.CompilerServices;
namespace BansheeEngine
{
/** @cond INTEROP */
///
/// Wrapper around the native GUIWidget class.
///
///
internal class NativeGUIWidget : ScriptObject
{
#pragma warning disable 649
private GUIPanel panel; // Populated by runtime
#pragma warning restore 649
///
/// Skin used for rendering all the GUI elements belonging to this widget.
///
internal GUISkin Skin
{
set
{
IntPtr skinPtr = IntPtr.Zero;
if (value != null)
skinPtr = value.GetCachedPtr();
Internal_SetSkin(mCachedPtr, skinPtr);
}
}
///
/// Determines to which camera are the GUI elements belonong to this widget rendered. If null then they will be
/// rendered on the main camera.
///
internal Camera Camera
{
set
{
IntPtr cameraPtr = IntPtr.Zero;
if (value != null)
cameraPtr = value.GetCachedPtr();
Internal_SetCamera(mCachedPtr, cameraPtr);
}
}
///
/// Depth that determines in which order are GUI widgets rendered. Widgets with lower depth are rendered in front
/// of widgets with higher depth.
///
internal short Depth
{
set { Internal_SetDepth(mCachedPtr, value); }
get { return Internal_GetDepth(mCachedPtr); }
}
///
/// Container into which all GUI elements belonging to this widget should be placed.
///
internal GUIPanel Panel
{
get { return panel; }
}
///
/// Creates a new native GUI widget and its wrapper.
///
internal NativeGUIWidget()
{
Internal_Create(this);
}
///
/// Updates the transform of the GUI widget with the latest transform from the parent SceneObject.
///
/// Scene object the GUI widget component is attached to.
internal void UpdateTransform(SceneObject parentSO)
{
if (parentSO != null)
Internal_UpdateTransform(mCachedPtr, parentSO.GetCachedPtr());
}
///
/// Updates the main camera, in case it changes. This is only relevant if the GUI widget is not rendering to a
/// specific camera.
///
/// New main camera.
internal void UpdateMainCamera(Camera camera)
{
IntPtr cameraPtr = IntPtr.Zero;
if (camera != null)
cameraPtr = camera.GetCachedPtr();
Internal_UpdateMainCamera(mCachedPtr, cameraPtr);
}
///
/// Deletes the GUI widget and all child GUI elements.
///
internal void Destroy()
{
Internal_Destroy(mCachedPtr);
}
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_Create(NativeGUIWidget instance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_UpdateTransform(IntPtr instance, IntPtr parentSO);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_UpdateMainCamera(IntPtr instance, IntPtr camera);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetSkin(IntPtr instance, IntPtr skin);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetCamera(IntPtr instance, IntPtr camera);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetDepth(IntPtr instance, short value);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern short Internal_GetDepth(IntPtr instance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_Destroy(IntPtr instance);
}
/** @endcond */
}