Эх сурвалжийг харах

[unity] Fix multi-edit bug on flipX/flipY inspectors.

pharan 7 жил өмнө
parent
commit
8a2972b5bb

+ 2 - 2
spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs

@@ -268,8 +268,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();
 						}
 

+ 34 - 0
spine-unity/Assets/spine-unity/Editor/SpineInspectorUtility.cs

@@ -71,6 +71,40 @@ namespace Spine.Unity.Editor {
 			PropertyFieldWideLabel(property, label, width);
 		}
 
+		/// <summary>Multi-edit-compatible version of EditorGUILayout.ToggleLeft(SerializedProperty)</summary>
+		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));
+			}
+		}
+
+		/// <summary>Multi-edit-compatible version of EditorGUILayout.ToggleLeft(SerializedProperty)</summary>
+		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";
 		}

+ 2 - 2
spine-unity/Assets/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();