diff --git a/Source/Editor/CustomEditors/CustomEditor.cs b/Source/Editor/CustomEditors/CustomEditor.cs
index 07cc1c08d..e681127fd 100644
--- a/Source/Editor/CustomEditors/CustomEditor.cs
+++ b/Source/Editor/CustomEditors/CustomEditor.cs
@@ -101,11 +101,6 @@ namespace FlaxEditor.CustomEditors
///
protected bool IsSetBlocked => _isSetBlocked;
- ///
- /// Gets a value indicating whether this editor needs value propagation up (value synchronization when one of the child editors changes value, used by the struct types).
- ///
- protected virtual bool NeedsValuePropagationUp => Values.HasValueType;
-
///
/// The linked label used to show this custom editor. Can be null if not used (eg. editor is inlined or is using a very customized UI layout).
///
@@ -281,7 +276,7 @@ namespace FlaxEditor.CustomEditors
// Propagate values up (eg. when member of structure gets modified, also structure should be updated as a part of the other object)
var obj = _parent;
- while (obj._parent != null && !(obj._parent is SyncPointEditor)) // && obj.NeedsValuePropagationUp)
+ while (obj._parent != null && !(obj._parent is SyncPointEditor))
{
obj.Values.Set(obj._parent.Values, obj.Values);
obj = obj._parent;
@@ -301,12 +296,15 @@ namespace FlaxEditor.CustomEditors
_isSetBlocked = false;
// Update children
+ if (_skipChildrenRefresh)
+ {
+ _skipChildrenRefresh = false;
+ return;
+ }
try
{
- var childrenCount = _skipChildrenRefresh ? 0 : _children.Count;
- for (int i = 0; i < childrenCount; i++)
+ for (int i = 0; i < _children.Count; i++)
_children[i].RefreshInternal();
- _skipChildrenRefresh = false;
}
catch (TargetException ex)
{
diff --git a/Source/Editor/CustomEditors/Editors/CollectionEditor.cs b/Source/Editor/CustomEditors/Editors/CollectionEditor.cs
index 6c3dda04e..9f660c328 100644
--- a/Source/Editor/CustomEditors/Editors/CollectionEditor.cs
+++ b/Source/Editor/CustomEditors/Editors/CollectionEditor.cs
@@ -154,6 +154,10 @@ namespace FlaxEditor.CustomEditors.Editors
var panel = layout.VerticalPanel();
panel.Panel.BackgroundColor = _background;
var elementType = ElementType;
+
+ // Use separate layout cells for each collection items to improve layout updates for them in separation
+ var useSharedLayout = elementType.IsPrimitive || elementType.IsEnum;
+
if (_canReorderItems)
{
for (int i = 0; i < size; i++)
@@ -178,7 +182,9 @@ namespace FlaxEditor.CustomEditors.Editors
}
var overrideEditor = overrideEditorType != null ? (CustomEditor)Activator.CreateInstance(overrideEditorType) : null;
- panel.Object(new CollectionItemLabel(this, i), new ListValueContainer(elementType, i, Values), overrideEditor);
+ var property = panel.AddPropertyItem(new CollectionItemLabel(this, i));
+ var itemLayout = useSharedLayout ? (LayoutElementsContainer)property : property.VerticalPanel();
+ itemLayout.Object(new ListValueContainer(elementType, i, Values), overrideEditor);
}
}
else
@@ -194,7 +200,9 @@ namespace FlaxEditor.CustomEditors.Editors
}
var overrideEditor = overrideEditorType != null ? (CustomEditor)Activator.CreateInstance(overrideEditorType) : null;
- panel.Object("Element " + i, new ListValueContainer(elementType, i, Values), overrideEditor);
+ var property = panel.AddPropertyItem("Element " + i);
+ var itemLayout = useSharedLayout ? (LayoutElementsContainer)property : property.VerticalPanel();
+ itemLayout.Object(new ListValueContainer(elementType, i, Values), overrideEditor);
}
}
}
diff --git a/Source/Editor/CustomEditors/Editors/DictionaryEditor.cs b/Source/Editor/CustomEditors/Editors/DictionaryEditor.cs
index 51309a2fa..53e539234 100644
--- a/Source/Editor/CustomEditors/Editors/DictionaryEditor.cs
+++ b/Source/Editor/CustomEditors/Editors/DictionaryEditor.cs
@@ -216,6 +216,11 @@ namespace FlaxEditor.CustomEditors.Editors
panel.Panel.BackgroundColor = _background;
var keysEnumerable = ((IDictionary)Values[0]).Keys.OfType