using System.Collections.Generic;
using UnityEngine;
namespace UnityEditor.ProBuilder
{
///
/// Defines what area of the ProBuilder toolbar a MenuAction should be grouped into.
///
public enum ToolbarGroup
{
///
/// A tool that opens it's own window. Example, UV Editor, Smoothing Groups, Vertex Color Painter, etc.
///
Tool = 0,
///
/// This is an interface toggle or an element selection action.
///
Selection = 1,
///
/// This action affects objects (as opposed to mesh attributes like vertex or face).
///
Object = 2,
///
/// This action affects geometry elements (vertices, edges, faces).
///
Geometry = 3,
///
/// An action for creating or modifying @"UnityEngine.ProBuilder.EntityBehaviour" types.
///
Entity = 4,
///
/// This action exports meshes.
///
Export = 5
}
static class ToolbarGroupUtility
{
static readonly Color ToolColor = new Color(0.6666f, 0.4f, 0.2f, 1f);
static readonly Color SelectionColor = new Color(0.1411f, 0.4941f, 0.6392f, 1f);
static readonly Color ObjectColor = new Color(0.4f, 0.6f, 0.1333f, 1f);
static readonly Color GeometryColor = new Color(0.7333f, 0.1333f, 0.2f, 1f);
public static Color GetColor(ToolbarGroup group)
{
if (group == ToolbarGroup.Tool)
return ToolColor;
else if (group == ToolbarGroup.Selection)
return SelectionColor;
else if (group == ToolbarGroup.Object || group == ToolbarGroup.Entity)
return ObjectColor;
else if (group == ToolbarGroup.Geometry)
return GeometryColor;
return Color.white;
}
private static GUIStyle CreateBackgroundStyleTemplate()
{
GUIStyle style = new GUIStyle();
style.normal.textColor = EditorGUIUtility.isProSkin ? MenuActionStyles.TEXT_COLOR_WHITE_NORMAL : Color.black;
style.hover.textColor = EditorGUIUtility.isProSkin ? MenuActionStyles.TEXT_COLOR_WHITE_HOVER : Color.black;
style.active.textColor = EditorGUIUtility.isProSkin ? MenuActionStyles.TEXT_COLOR_WHITE_ACTIVE : Color.black;
style.alignment = TextAnchor.MiddleCenter;
style.border = new RectOffset(3, 3, 3, 3);
style.stretchWidth = true;
style.stretchHeight = false;
return style;
}
private static Dictionary s_IconBackgroundStyles = new Dictionary();
/**
* Where @group corresponds to:
* - Geo
* - Object
* - Selection
* - Tool
*/
private static GUIStyle GetBackgroundStyle(string group, bool isHorizontal)
{
GUIStyle style;
string groupKey = string.Format("{0}_{1}", group, isHorizontal ? "_horizontal" : "_vertical");
if (s_IconBackgroundStyles.TryGetValue(groupKey, out style))
return style;
style = CreateBackgroundStyleTemplate();
style.normal.background = IconUtility.GetIcon(
string.Format("Toolbar/Background/{0}_Normal_{1}", group, isHorizontal ? "Horizontal" : "Vertical"));
style.hover.background = IconUtility.GetIcon(
string.Format("Toolbar/Background/{0}_Hover_{1}", group, isHorizontal ? "Horizontal" : "Vertical"));
style.active.background = IconUtility.GetIcon(
string.Format("Toolbar/Background/{0}_Pressed_{1}", group, isHorizontal ? "Horizontal" : "Vertical"));
s_IconBackgroundStyles.Add(groupKey, style);
style.margin = isHorizontal ? new RectOffset(4, 4, 4, 5) : new RectOffset(4, 3, 4, 4);
style.padding = isHorizontal ? new RectOffset(3, 3, 6, 3) : new RectOffset(6, 3, 3, 3);
return style;
}
/**
* Get the background button style for a toolbar group.
*/
public static GUIStyle GetStyle(ToolbarGroup group, bool isHorizontal)
{
if (group == ToolbarGroup.Tool)
return GetBackgroundStyle("Tool", isHorizontal);
else if (group == ToolbarGroup.Selection)
return GetBackgroundStyle("Selection", isHorizontal);
else if (group == ToolbarGroup.Object || group == ToolbarGroup.Entity)
return GetBackgroundStyle("Object", isHorizontal);
else // if( group == pb_ToolbarGroup.Geometry )
return GetBackgroundStyle("Geo", isHorizontal);
}
}
}