//********************************** 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); } /** @} */ }