From 82d733f06637e8feecb9cd514a52ee87f9b1dcbe Mon Sep 17 00:00:00 2001 From: Thomas Lopez Date: Thu, 28 May 2026 09:45:18 -0400 Subject: [PATCH 1/2] fixing overlay behavior on action start --- Editor/MenuActions/Geometry/BevelEdges.cs | 5 +++++ Editor/MenuActions/Geometry/ExtrudeEdges.cs | 4 ++++ Editor/MenuActions/Geometry/ExtrudeFaces.cs | 5 +++++ Editor/MenuActions/Geometry/OffsetElements.cs | 8 ++++++-- Editor/MenuActions/Geometry/SubdivideEdges.cs | 4 ++++ Editor/MenuActions/Geometry/WeldVertices.cs | 4 ++++ Editor/Overlays/ActionSettings.cs | 12 +++++------- 7 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Editor/MenuActions/Geometry/BevelEdges.cs b/Editor/MenuActions/Geometry/BevelEdges.cs index f098814f4..97a17be33 100644 --- a/Editor/MenuActions/Geometry/BevelEdges.cs +++ b/Editor/MenuActions/Geometry/BevelEdges.cs @@ -61,6 +61,11 @@ public override VisualElement CreateSettingsContent() PreviewActionManager.UpdatePreview(); } }); + + PreviewActionManager.delayedPreviewChanged += () => + { + floatField.isDelayed = PreviewActionManager.delayedPreview; + }; root.Add(floatField); return root; diff --git a/Editor/MenuActions/Geometry/ExtrudeEdges.cs b/Editor/MenuActions/Geometry/ExtrudeEdges.cs index cc297f6f2..5a45c3807 100644 --- a/Editor/MenuActions/Geometry/ExtrudeEdges.cs +++ b/Editor/MenuActions/Geometry/ExtrudeEdges.cs @@ -53,6 +53,10 @@ public override VisualElement CreateSettingsContent() floatField.tooltip = "Extrude Amount determines how far an edge will be moved along it's normal when extruding. This value can be negative."; floatField.SetValueWithoutNotify(m_ExtrudeEdgeDistance); floatField.RegisterCallback>(OnExtrudeChanged); + PreviewActionManager.delayedPreviewChanged += () => + { + floatField.isDelayed = PreviewActionManager.delayedPreview; + }; root.Add(floatField); return root; diff --git a/Editor/MenuActions/Geometry/ExtrudeFaces.cs b/Editor/MenuActions/Geometry/ExtrudeFaces.cs index 47ad77030..e2f9ba4f0 100644 --- a/Editor/MenuActions/Geometry/ExtrudeFaces.cs +++ b/Editor/MenuActions/Geometry/ExtrudeFaces.cs @@ -106,6 +106,11 @@ public override VisualElement CreateSettingsContent() }); root.Add(distanceField); + PreviewActionManager.delayedPreviewChanged += () => + { + distanceField.isDelayed = PreviewActionManager.delayedPreview; + }; + return root; } diff --git a/Editor/MenuActions/Geometry/OffsetElements.cs b/Editor/MenuActions/Geometry/OffsetElements.cs index fbcb3e6d7..8c03a40fe 100644 --- a/Editor/MenuActions/Geometry/OffsetElements.cs +++ b/Editor/MenuActions/Geometry/OffsetElements.cs @@ -62,8 +62,7 @@ public override VisualElement CreateSettingsContent() var distField = new Vector3Field("Translate"); distField.SetValueWithoutNotify(dist); - if(PreviewActionManager.delayedPreview) - distField.Query().ForEach(ff => ff.isDelayed = true); + distField.Query().ForEach(ff => ff.isDelayed = PreviewActionManager.delayedPreview); root.Add(distField); distField.RegisterCallback>(evt => { @@ -71,6 +70,11 @@ public override VisualElement CreateSettingsContent() PreviewActionManager.UpdatePreview(); }); + PreviewActionManager.delayedPreviewChanged += () => + { + distField.Query().ForEach(ff => ff.isDelayed = PreviewActionManager.delayedPreview); + }; + return root; } diff --git a/Editor/MenuActions/Geometry/SubdivideEdges.cs b/Editor/MenuActions/Geometry/SubdivideEdges.cs index 52a5b218c..d2f952d24 100644 --- a/Editor/MenuActions/Geometry/SubdivideEdges.cs +++ b/Editor/MenuActions/Geometry/SubdivideEdges.cs @@ -83,6 +83,10 @@ public override VisualElement CreateSettingsContent() m_SubdivCount.tooltip = tooltip; m_SubdivCount.RegisterCallback>(OnCountChanged); m_SubdivCount.style.width = 40; + PreviewActionManager.delayedPreviewChanged += () => + { + m_SubdivCount.isDelayed = PreviewActionManager.delayedPreview; + }; line.Add(foldout); line.Add(m_Slider); line.Add(m_SubdivCount); diff --git a/Editor/MenuActions/Geometry/WeldVertices.cs b/Editor/MenuActions/Geometry/WeldVertices.cs index 0e5b7a8ff..2098d40b8 100644 --- a/Editor/MenuActions/Geometry/WeldVertices.cs +++ b/Editor/MenuActions/Geometry/WeldVertices.cs @@ -69,6 +69,10 @@ public override VisualElement CreateSettingsContent() m_WeldDistance.SetValue(evt.newValue); PreviewActionManager.UpdatePreview(); }); + PreviewActionManager.delayedPreviewChanged += () => + { + floatField.isDelayed = PreviewActionManager.delayedPreview; + }; root.Add(floatField); return root; } diff --git a/Editor/Overlays/ActionSettings.cs b/Editor/Overlays/ActionSettings.cs index 14e3153cc..dadb3ca65 100644 --- a/Editor/Overlays/ActionSettings.cs +++ b/Editor/Overlays/ActionSettings.cs @@ -18,6 +18,7 @@ class PreviewActionManager : IDisposable [UserSetting("Mesh Editing", "Auto Update Action Preview", "Automatically update the action preview, without delay. This operation is costly and can cause lag when working with large selections.")] static Pref s_AutoUpdatePreview = new Pref("editor.autoUpdatePreview", false, SettingsScope.Project); internal static bool delayedPreview => !s_AutoUpdatePreview.value; + public static event Action delayedPreviewChanged; MenuAction m_CurrentAction; @@ -59,8 +60,10 @@ void Init(MenuAction action, bool preview) ProBuilderEditor.selectModeChanged += SelectModeChanged; SceneView.AddOverlayToActiveView(m_Overlay = new MenuActionSettingsOverlay()); + // Hack to ensure that the overlay is displayed in the sceneview even when the overlay was already displayed before + // Doing only displayed = true is not adding the overlay as it should in the view, only changing the display status is + m_Overlay.displayed = false; m_Overlay.displayed = true; - SceneView.RepaintAll(); } public void Dispose() @@ -104,12 +107,7 @@ internal static void SetPreviewUpdate(bool value) s_AutoUpdatePreview.value = value; - if (s_Instance == null) - return; - - SceneView.RemoveOverlayFromActiveView(s_Instance.m_Overlay); - SceneView.AddOverlayToActiveView(s_Instance.m_Overlay = new MenuActionSettingsOverlay()); - s_Instance.m_Overlay.displayed = true; + delayedPreviewChanged?.Invoke(); } internal static void EndPreview() From 309b65a681e59b01437e412cbb1ec3164d4690cf Mon Sep 17 00:00:00 2001 From: Thomas Lopez Date: Thu, 28 May 2026 09:49:17 -0400 Subject: [PATCH 2/2] last action with live preview --- Editor/MenuActions/Selection/GrowSelection.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Editor/MenuActions/Selection/GrowSelection.cs b/Editor/MenuActions/Selection/GrowSelection.cs index ceda26f6f..95951ebde 100644 --- a/Editor/MenuActions/Selection/GrowSelection.cs +++ b/Editor/MenuActions/Selection/GrowSelection.cs @@ -85,7 +85,10 @@ public override VisualElement CreateSettingsContent() m_GrowSelectionAngleIterative.SetValue(evt.newValue); PreviewActionManager.UpdatePreview(); }); - + PreviewActionManager.delayedPreviewChanged += () => + { + floatField.isDelayed = PreviewActionManager.delayedPreview; + }; return root; }