private void OnEnable() { createList(); HierarchyDividerDrawing.LoadMaterials(); }
void subscribeListDrawing(ReorderableList list) { list.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (dividerPreset != null && dividerPreset.Dividers[index] != null) { setBaseValues(dividerPreset.Dividers[index]); } SerializedProperty element = list.serializedProperty.GetArrayElementAtIndex(index); float height = minHeight; float rightOffset = 33; rect.x += (EditorGUILayout.GetControlRect().width - contentWidth - rightOffset - 10f) / 2f; addHeight(ref height, ref rect, 5); bool foldoutButton = EditorGUI.DropdownButton(new Rect(rect.x - 2, rect.y - 2, contentWidth + rightOffset, EditorGUIUtility.singleLineHeight), new GUIContent(""), FocusType.Keyboard, EditorStyles.toolbar); bool foldout = dividerPreset.Dividers[index].foldOut; foldout = foldoutButton ? !foldout : foldout; dividerPreset.Dividers[index].foldOut = foldout; string _label = element.FindPropertyRelative("Label").stringValue; _label = element.FindPropertyRelative("Name").stringValue == "" ? "*new*" : _label; GUIStyle style = new GUIStyle(EditorStyles.label); style.alignment = TextAnchor.MiddleCenter; if (dividerPreset.Dividers[index].ColoredFont) { style.normal.textColor = dividerPreset.Dividers[index].FontColor; } if (!dividerPreset.Dividers[index].BoldFont && !dividerPreset.Dividers[index].ItalicFont) { style.fontStyle = FontStyle.Normal; } if (dividerPreset.Dividers[index].BoldFont && !dividerPreset.Dividers[index].ItalicFont) { style.fontStyle = FontStyle.Bold; } else if (!dividerPreset.Dividers[index].BoldFont && dividerPreset.Dividers[index].ItalicFont) { style.fontStyle = FontStyle.Italic; } else if (dividerPreset.Dividers[index].BoldFont && dividerPreset.Dividers[index].ItalicFont) { style.fontStyle = FontStyle.BoldAndItalic; } style.alignment = TextAnchor.MiddleCenter; float _headerSpriteSize = 13f; if (dividerPreset.Dividers[index].ColoredBG) { drawRect(new Rect(rect.x + rightOffset, rect.y, contentWidth - rightOffset, rect.height), dividerPreset.Dividers[index].BGColor, EditorGUIUtility.singleLineHeight - 2); } if (dividerPreset.Dividers[index].HasSprite_left && dividerPreset.Dividers[index].LeftSprite != null) { HierarchyDividerDrawing .DrawSprite(new Rect(rect.x + 14, rect.y - 1f, _headerSpriteSize, _headerSpriteSize), dividerPreset.Dividers[index].LeftSprite.texture, _headerSpriteSize); } if (dividerPreset.Dividers[index].HasSprite_right && dividerPreset.Dividers[index].RightSprite != null) { HierarchyDividerDrawing .DrawSprite(new Rect(rect.x + contentWidth + 7, rect.y - 1f, _headerSpriteSize, _headerSpriteSize), dividerPreset.Dividers[index].RightSprite.texture, _headerSpriteSize); } EditorGUI.LabelField(new Rect(rect.x + rightOffset, rect.y, contentWidth - rightOffset, EditorGUIUtility.singleLineHeight), _label, style); EditorGUI.Foldout(new Rect(rect.x + 1f, rect.y, contentWidth + rightOffset, EditorGUIUtility.singleLineHeight), foldout, "", EditorStyles.foldout); if (foldout) { addHeight(ref height, ref rect, EditorGUIUtility.singleLineHeight); EditorGUI.LabelField(new Rect(rect.x - 2, rect.y - 1, contentWidth + rightOffset, 175), "", EditorStyles.textArea); addHeight(ref height, ref rect, 4); SinglePropertyField(ref rect, ref height, element, "Name", "Text", 50); InlinePropertyField(rect, 0f, contentWidth - 90f, element, "PreSuffix", "Pre-/Suffix", 70); InlinePropertyField(rect, contentWidth - 85f, 85f, element, "PreSuffixCount", "amount", 50); addHeight(ref height, ref rect, minHeight); InlinePropertyField(rect, 0f, contentWidth - 120f, element, "BoldFont", "bold", 50); InlinePropertyField(rect, contentWidth - 115f, 115, element, "ItalicFont", "italic", 50); addHeight(ref height, ref rect, minHeight); InlinePropertyField(rect, 0f, contentWidth - 120f, element, "ColoredFont", "colored", 50); InlinePropertyField(rect, contentWidth - 115f, 115f, element, "FontColor", "font color", 60); addHeight(ref height, ref rect, minHeight); InlinePropertyField(rect, 0f, contentWidth - 110f, element, "ColoredBG", "colored bg", 65); InlinePropertyField(rect, contentWidth - 105f, 105f, element, "BGColor", "bg color", 50); addHeight(ref height, ref rect, minHeight); float _spriteSize = EditorGUIUtility.singleLineHeight * 1.25f; InlinePropertyField(rect, 0f, 15f, element, "HasSprite_left"); InlinePropertyField(rect, 20f, contentWidth - 20f, element, "LeftSprite", "left Sprite", 70); Sprite leftSprite = dividerPreset.Dividers[index].LeftSprite; if (leftSprite != null) { HierarchyDividerDrawing .DrawSprite(new Rect(rect.x + contentWidth + 5f, rect.y, _spriteSize, _spriteSize), leftSprite.texture, _spriteSize); } addHeight(ref height, ref rect, minHeight); InlinePropertyField(rect, 0f, 15f, element, "HasSprite_right"); InlinePropertyField(rect, 20f, contentWidth - 20f, element, "RightSprite", "right Sprite", 70); Sprite rightSprite = dividerPreset.Dividers[index].RightSprite; if (rightSprite != null) { HierarchyDividerDrawing .DrawSprite(new Rect(rect.x + contentWidth + 5f, rect.y, _spriteSize, _spriteSize), rightSprite.texture, _spriteSize); } addHeight(ref height, ref rect, 5f); } dividerPreset.Dividers[index].SetLabel(); SetListElementHeight(index, height, rect); }; }