//********************************** 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
{
/** @addtogroup GUI-Engine
* @{
*/
///
/// Various helper functionality that's useful when creating GUI elements.
///
public class GUIUtility
{
///
/// Calculates optimal size of a GUI element.
///
/// GUI element to calculate the optimal size for.
/// Size that allows the GUI element to properly display all of its content.
public static Vector2I CalculateOptimalSize(GUIElement element)
{
Vector2I output;
Internal_CalculateOptimalSize(element.GetCachedPtr(), out output);
return output;
}
///
/// Calculates the bounds of a GUI element. This is similar to but allows you to
/// returns bounds relative to a specific parent GUI panel.
///
/// Elements to calculate the bounds for.
/// GUI panel the bounds will be relative to. If this is null or the provided panel is not
/// a parent of the provided GUI element, the returned bounds will be relative to the
/// first GUI panel parent instead.
/// Bounds of a GUI element relative to the provided GUI panel.
public static Rect2I CalculateBounds(GUIElement element, GUIPanel relativeTo = null)
{
IntPtr relativeToNative = IntPtr.Zero;
if (relativeTo != null)
relativeToNative = relativeTo.GetCachedPtr();
Rect2I output;
Internal_CalculateBounds(element.GetCachedPtr(), relativeToNative, out output);
return output;
}
///
/// Calculates optimal content size for the provided text using the provided font and size. Size is calculated
/// without word wrap.
///
/// Text to calculate the bounds for.
/// Font that will be used for rendering the text.
/// Size of individual characters in the font, in points.
/// Width/height required to display the text, in pixels.
public static Vector2I CalculateTextBounds(string text, Font font, int fontSize)
{
Vector2I output;
if (font != null && text != null)
{
IntPtr fontPtr = font.GetCachedPtr();
Internal_CalculateTextBounds(text, fontPtr, fontSize, out output);
}
else
output = new Vector2I();
return output;
}
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_CalculateOptimalSize(IntPtr element, out Vector2I output);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_CalculateBounds(IntPtr element, IntPtr relativeTo, out Rect2I output);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_CalculateTextBounds(string text, IntPtr fontPtr, int fontSize, out Vector2I output);
}
/** @} */
}