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); } } }