void DrawCategorySpriteListFooter(Rect rect, SerializedProperty category, SpriteCategoryGridState gridState, bool canRemove, Action <SerializedProperty, SpriteCategoryGridState> onRemove) { float num = rect.xMax - 10f; float x = num - 8f; x -= 25f; x -= 25f; rect = new Rect(x, rect.y, num - x, rect.height); Rect rect1 = new Rect(x + 4f, rect.y, 25f, 16f); Rect position = new Rect(num - 29f, rect.y, 25f, 16f); if (Event.current.type == UnityEngine.EventType.Repaint) { m_Style.footerBackground.Draw(rect, false, false, false, false); } if (GUI.Button(rect1, m_Style.iconToolbarPlus, m_Style.preButton)) { AddSpriteToCategory(category, null); } var spriteList = category.FindPropertyRelative(SpriteLibraryPropertyString.overrideEntries); using (new EditorGUI.DisabledScope(!canRemove || gridState.selectedIndex < 0 || spriteList.arraySize <= gridState.selectedIndex)) { if (GUI.Button(position, m_Style.iconToolbarMinus, m_Style.preButton)) { onRemove(spriteList, gridState); } } }
static void DeleteSpriteEntry(SerializedProperty spriteList, SpriteCategoryGridState gridState) { spriteList.DeleteArrayElementAtIndex(gridState.selectedIndex); var count = spriteList.arraySize; gridState.selectedIndex = (gridState.selectedIndex >= count) ? count - 1 : gridState.selectedIndex; }
static void DeleteSpriteEntryOverride(SerializedProperty spriteList, SpriteCategoryGridState gridState) { var sp = spriteList.GetArrayElementAtIndex(gridState.selectedIndex); sp.FindPropertyRelative(SpriteLibraryPropertyString.spriteOverride).objectReferenceValue = sp.FindPropertyRelative(SpriteLibraryPropertyString.sprite).objectReferenceValue; }
void DrawLabel(int index, SerializedProperty spriteListProp, SerializedProperty spriteOverrideProperty, SpriteCategoryGridState gridState, bool spriteOverride, bool entryFromMain, Rect backgroundSelectedRect, Rect spriteObjectFieldRect, Rect labelTextfieldRect, ref bool canRemoveSelectedEntry, ref bool selectedEntryIsOverwrite) { var element = spriteListProp.GetArrayElementAtIndex(index); if (gridState.selectedIndex == index) { canRemoveSelectedEntry = entryFromMain && spriteOverride || !entryFromMain; selectedEntryIsOverwrite = entryFromMain && spriteOverride; if (Event.current.type == EventType.Repaint) { m_Style.gridList.Draw(backgroundSelectedRect, true, true, true, false); } } spriteOverrideProperty.objectReferenceValue = EditorGUI.ObjectField(spriteObjectFieldRect, spriteOverrideProperty.objectReferenceValue, typeof(Sprite), false) as Sprite; if (Event.current.type == EventType.MouseUp && backgroundSelectedRect.Contains(Event.current.mousePosition)) { gridState.selectedIndex = index; } if (!entryFromMain || spriteOverride) { var overrideIconRect = spriteObjectFieldRect; overrideIconRect.x -= 12; overrideIconRect.y -= 12; overrideIconRect.width = 20; overrideIconRect.height = 20; GUI.Label(overrideIconRect, m_Style.overrideIcon); } //disable m_Name editing if the entry is from main using (new EditorGUI.DisabledScope(entryFromMain)) { EditorGUI.BeginChangeCheck(); var oldName = element.FindPropertyRelative(SpriteLibraryPropertyString.name).stringValue; if (string.IsNullOrEmpty(oldName) && spriteOverrideProperty.objectReferenceValue != null && entryFromMain) { oldName = spriteOverrideProperty.name; SetPropertyName(element, oldName); } var nameRect = labelTextfieldRect; bool nameDuplicate = IsEntryNameUsed(oldName, spriteListProp, 1); if (nameDuplicate) { nameRect.width -= 20; } var newName = EditorGUI.DelayedTextField( nameRect, GUIContent.none, oldName); if (nameDuplicate) { nameRect.x += nameRect.width; nameRect.width = 20; GUI.Label(nameRect, m_Style.duplicateWarning); } if (EditorGUI.EndChangeCheck() && !string.IsNullOrEmpty(newName)) { newName = newName.Trim(); SetPropertyName(element, newName); } } }