Fix crash in UI prefab changes apply when reparenting controls

#2082
This commit is contained in:
Wojtek Figat
2023-12-17 12:41:51 +01:00
parent 7bcf78d0c0
commit e448692eb9
2 changed files with 9 additions and 5 deletions

View File

@@ -448,6 +448,8 @@ namespace FlaxEngine.GUI
internal virtual void AddChildInternal(Control child)
{
Assert.IsNotNull(child, "Invalid control.");
if (Parent == child)
throw new InvalidOperationException();
// Add child
_children.Add(child);
@@ -820,13 +822,14 @@ namespace FlaxEngine.GUI
protected virtual void DrawChildren()
{
// Draw all visible child controls
var children = _children;
if (_cullChildren)
{
Render2D.PeekClip(out var globalClipping);
Render2D.PeekTransform(out var globalTransform);
for (int i = 0; i < _children.Count; i++)
for (int i = 0; i < children.Count; i++)
{
var child = _children[i];
var child = children[i];
if (child.Visible)
{
Matrix3x3.Multiply(ref child._cachedTransform, ref globalTransform, out var globalChildTransform);
@@ -842,9 +845,9 @@ namespace FlaxEngine.GUI
}
else
{
for (int i = 0; i < _children.Count; i++)
for (int i = 0; i < children.Count; i++)
{
var child = _children[i];
var child = children[i];
if (child.Visible)
{
Render2D.PushTransform(ref child._cachedTransform);

View File

@@ -58,10 +58,11 @@ namespace FlaxEngine
if (containerControl != null && IsActiveInHierarchy)
{
var children = ChildrenCount;
var parent = Parent;
for (int i = 0; i < children; i++)
{
var child = GetChild(i) as UIControl;
if (child != null && child.IsActiveInHierarchy && child.HasControl)
if (child != null && child.IsActiveInHierarchy && child.HasControl && child != parent)
{
child.Control.Parent = containerControl;
}