// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
namespace Animancer.Editor
{
/// [Editor-Only] s for a group of connected buttons.
/// https://kybernetik.com.au/animancer/api/Animancer.Editor/ButtonGroupStyles
public struct ButtonGroupStyles
{
/************************************************************************************************************************/
/// The style for the button on the far left.
public GUIStyle left;
/// The style for any buttons in the middle.
public GUIStyle middle;
/// The style for the button on the far right.
public GUIStyle right;
/************************************************************************************************************************/
/// Creates a new .
public ButtonGroupStyles(
GUIStyle left,
GUIStyle middle,
GUIStyle right)
{
this.left = left;
this.middle = middle;
this.right = right;
}
/************************************************************************************************************************/
/// Copies any null values from another group.
public void CopyMissingStyles(ButtonGroupStyles copyFrom)
{
left ??= copyFrom.left;
middle ??= copyFrom.middle;
right ??= copyFrom.right;
}
/************************************************************************************************************************/
/// The default styles for a mini button.
public static ButtonGroupStyles MiniButton => new(
EditorStyles.miniButtonLeft,
EditorStyles.miniButtonMid,
EditorStyles.miniButtonRight);
/************************************************************************************************************************/
private static ButtonGroupStyles _Button;
/// The default styles for a button.
public static ButtonGroupStyles Button
{
get
{
_Button.left ??= MiniToRegularButtonStyle(EditorStyles.miniButtonLeft);
_Button.middle ??= MiniToRegularButtonStyle(EditorStyles.miniButtonMid);
_Button.right ??= MiniToRegularButtonStyle(EditorStyles.miniButtonRight);
return _Button;
}
}
/************************************************************************************************************************/
/// Creates a copy of the `style` with the size of a regular button.
public static GUIStyle MiniToRegularButtonStyle(GUIStyle style)
=> new(style)
{
fixedHeight = 0,
padding = GUI.skin.button.padding,
stretchWidth = false,
};
/************************************************************************************************************************/
}
}
#endif