From 3e997a2765ea3a600ea2dbae4efc23b5dc645d27 Mon Sep 17 00:00:00 2001 From: pharan Date: Sun, 23 Sep 2018 23:59:45 +0800 Subject: [PATCH] [unity] Fix multi-edit bug on flipX/flipY inspectors. --- .../Editor/SkeletonRendererInspector.cs | 5 ++- .../Editor/SpineInspectorUtility.cs | 36 ++++++++++++++++++- .../Editor/SkeletonGraphicInspector.cs | 4 +-- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonRendererInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonRendererInspector.cs index 4b93eb6f7..79858f680 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonRendererInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonRendererInspector.cs @@ -253,8 +253,8 @@ namespace Spine.Unity.Editor { using (new SpineInspectorUtility.IndentScope()) { using (new EditorGUILayout.HorizontalScope()) { - initialFlipX.boolValue = EditorGUILayout.ToggleLeft(initialFlipX.displayName, initialFlipX.boolValue, GUILayout.Width(120f)); - initialFlipY.boolValue = EditorGUILayout.ToggleLeft(initialFlipY.displayName, initialFlipY.boolValue, GUILayout.Width(120f)); + SpineInspectorUtility.ToggleLeftLayout(initialFlipX); + SpineInspectorUtility.ToggleLeftLayout(initialFlipY); EditorGUILayout.Space(); } @@ -370,7 +370,6 @@ namespace Spine.Unity.Editor { } override public void OnInspectorGUI () { - //serializedObject.Update(); bool multi = serializedObject.isEditingMultipleObjects; DrawInspectorGUI(multi); if (serializedObject.ApplyModifiedProperties() || SpineInspectorUtility.UndoRedoPerformed(Event.current)) { diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineInspectorUtility.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineInspectorUtility.cs index 49a8b6c46..cf395daec 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineInspectorUtility.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineInspectorUtility.cs @@ -71,6 +71,40 @@ namespace Spine.Unity.Editor { PropertyFieldWideLabel(property, label, width); } + /// Multi-edit-compatible version of EditorGUILayout.ToggleLeft(SerializedProperty) + public static void ToggleLeftLayout (SerializedProperty property, GUIContent label = null, float width = 120f) { + if (label == null) label = SpineInspectorUtility.TempContent(property.displayName, tooltip: property.tooltip); + + if (property.hasMultipleDifferentValues) { + bool previousShowMixedValue = EditorGUI.showMixedValue; + EditorGUI.showMixedValue = true; + + bool clicked = EditorGUILayout.ToggleLeft(label, property.boolValue, GUILayout.Width(width)); + if (clicked) property.boolValue = true; // Set all values to true when clicked. + + EditorGUI.showMixedValue = previousShowMixedValue; + } else { + property.boolValue = EditorGUILayout.ToggleLeft(label, property.boolValue, GUILayout.Width(width)); + } + } + + /// Multi-edit-compatible version of EditorGUILayout.ToggleLeft(SerializedProperty) + public static void ToggleLeft (Rect rect, SerializedProperty property, GUIContent label = null) { + if (label == null) label = SpineInspectorUtility.TempContent(property.displayName, tooltip: property.tooltip); + + if (property.hasMultipleDifferentValues) { + bool previousShowMixedValue = EditorGUI.showMixedValue; + EditorGUI.showMixedValue = true; + + bool clicked = EditorGUI.ToggleLeft(rect, label, property.boolValue); + if (clicked) property.boolValue = true; // Set all values to true when clicked. + + EditorGUI.showMixedValue = previousShowMixedValue; + } else { + property.boolValue = EditorGUI.ToggleLeft(rect, label, property.boolValue); + } + } + public static bool UndoRedoPerformed (UnityEngine.Event current) { return current.type == EventType.ValidateCommand && current.commandName == "UndoRedoPerformed"; } @@ -342,7 +376,7 @@ namespace Spine.Unity.Editor { EditorGUILayout.PropertyField(prop.sortingOrder, OrderInLayerLabel); if (applyModifiedProperties && EditorGUI.EndChangeCheck()) - prop.ApplyModifiedProperties(); + prop.ApplyModifiedProperties(); } #endregion } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs index 12ab21d20..573051889 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs @@ -99,9 +99,9 @@ namespace Spine.Unity.Editor { EditorGUI.PrefixLabel(rect, SpineInspectorUtility.TempContent("Initial Flip")); rect.x += EditorGUIUtility.labelWidth; rect.width = 30f; - initialFlipX.boolValue = EditorGUI.ToggleLeft(rect, SpineInspectorUtility.TempContent("X", tooltip:"initialFlipX"), initialFlipX.boolValue); + SpineInspectorUtility.ToggleLeft(rect, initialFlipX, SpineInspectorUtility.TempContent("X", tooltip: "initialFlipX")); rect.x += 35f; - initialFlipY.boolValue = EditorGUI.ToggleLeft(rect, SpineInspectorUtility.TempContent("Y", tooltip:"initialFlipY"), initialFlipY.boolValue); + SpineInspectorUtility.ToggleLeft(rect, initialFlipY, SpineInspectorUtility.TempContent("Y", tooltip: "initialFlipY")); } EditorGUILayout.Space();