/// <summary> /// Creates a material header scope to display the foldout in the material UI. /// </summary> /// <param name="title">Title of the header.</param> /// <param name="bitExpanded">Bit index which specifies the state of the header (whether it is open or collapsed) inside Editor Prefs.</param> /// <param name="materialEditor">The current material editor.</param> /// <param name="spaceAtEnd">Set this to true to make the block include space at the bottom of its UI. Set to false to not include any space.</param> /// <param name="colorDot">Specify a color to display a dot, like in the layered UI.</param> /// <param name="subHeader">Set to true to make this into a sub-header. This affects the style of the header. Set to false to make this use the standard style.</param> public MaterialHeaderScope(string title, uint bitExpanded, MaterialEditor materialEditor, bool spaceAtEnd = true, Color colorDot = default(Color), bool subHeader = false) { bool beforeExpended = materialEditor.GetExpandedAreas(bitExpanded); #if !UNITY_2020_1_OR_NEWER oldIndentLevel = EditorGUI.indentLevel; EditorGUI.indentLevel = subHeader ? 1 : 0; //fix for preset in 2019.3 (preset are one more indentation depth in material) #endif this.spaceAtEnd = spaceAtEnd; if (!subHeader) { CoreEditorUtils.DrawSplitter(); } GUILayout.BeginVertical(); bool saveChangeState = GUI.changed; if (colorDot != default(Color)) { title = " " + title; } expanded = subHeader ? CoreEditorUtils.DrawSubHeaderFoldout(title, beforeExpended) : CoreEditorUtils.DrawHeaderFoldout(title, beforeExpended); if (colorDot != default(Color)) { Rect dotRect = GUILayoutUtility.GetLastRect(); dotRect.width = 5; dotRect.height = 5; dotRect.y += 7; dotRect.x += 17; EditorGUI.DrawRect(dotRect, colorDot); } if (expanded ^ beforeExpended) { materialEditor.SetExpandedAreas((uint)bitExpanded, expanded); saveChangeState = true; } GUI.changed = saveChangeState; if (expanded) { ++EditorGUI.indentLevel; } }
public MaterialHeaderScope(string title, uint bitExpanded, MaterialEditor materialEditor, bool spaceAtEnd = true, Color colorDot = default(Color), bool subHeader = false) { bool beforeExpended = materialEditor.GetExpandedAreas(bitExpanded); this.spaceAtEnd = spaceAtEnd; if (!subHeader) { CoreEditorUtils.DrawSplitter(); } GUILayout.BeginVertical(); bool saveChangeState = GUI.changed; if (colorDot != default(Color)) { title = " " + title; } expanded = subHeader ? CoreEditorUtils.DrawSubHeaderFoldout(title, beforeExpended) : CoreEditorUtils.DrawHeaderFoldout(title, beforeExpended); if (colorDot != default(Color)) { Color previousColor = GUI.contentColor; GUI.contentColor = colorDot; Rect headerRect = GUILayoutUtility.GetLastRect(); headerRect.xMin += 16f; EditorGUI.LabelField(headerRect, "■"); GUI.contentColor = previousColor; } if (expanded ^ beforeExpended) { materialEditor.SetExpandedAreas((uint)bitExpanded, expanded); saveChangeState = true; } GUI.changed = saveChangeState; if (expanded) { ++EditorGUI.indentLevel; } }